gpt4 book ai didi

vim - Vim 中的 Tab Vs Space 首选项

转载 作者:行者123 更新时间:2023-12-03 05:06:08 31 4
gpt4 key购买 nike

Vim 在 Tab Vs 方面非常随和。空间偏好。据我了解,tabstop设置表示制表符的宽度。 shiftwidth设置指定在使用 << 和 >> 命令时增加/减少多少列,而 softtabstop设置会影响在插入模式下按 Tab 键时要插入的空格量。如 expandtab已打开,tab 键插入 softtabstop空格字符数。而与 expandtab关闭时,按 Tab 键会插入尽可能少的与 softtabstop 匹配的制表符+空格字符。 . (如果我错了,请纠正我。)

最后一点让我想知道:是否存在您不想要的实际案例 shiftwidth == tabstop && tabstop == softtabstop ?我想不出一个。就我而言,如果我可以在一次分配中将所有 3 个设置为相同的值,那将是最方便的。例如调用:

:set stab=4

这相当于运行:
:set tabstop=4 softtabstop=4 shiftwidth=4 

谁能建议如何做到这一点?

更新

感谢到目前为止来自太多 php、hobbs 和 kaiser.se 的回复。我没有单独回复每个人,而是在这里更新问题。

关闭扩展选项卡的 Softtabstop

我在上面说过,在 expandtab 关闭的情况下,按下 Tab 键会插入尽可能少的与 softtabstop 匹配的制表符+空格字符。 .我支持这一点,但我想我需要解释一下我的意思。我将尝试通过几个例子来做到这一点。要继续,请运行 :set list以便您可以看到制表符。
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
在插入模式下,按 Tab 键会插入 2 个空格字符。再次按 Tab 键,而不是再插入两个空格字符(总共 4 个空格字符),而是用一个制表符替换前面的 2 个空格。 Tabstop 设置为 4,因此单个制表符的宽度与 4 个空格相同。
tabstop=4 softtabstop=6 shiftwidth=4 noexpandtab
在插入模式下,按 Tab 键会插入 1 个制表符和 2 个空格。制表符的宽度为 4,因此总宽度为 6,这是使用 3 个字符实现的。再次按下 Tab 键会插入两个制表符,并删除之前插入的两个空格。总宽度为 12,这是使用 3 个字符实现的。

在这两个例子中,Vim 插入了与 softtabstop 匹配的最小可能数量的制表符+空格字符。

如果我在关闭 expandtab 的情况下工作,我看不到自己想要通过将 softtabstop 设置为与 tabstop 不同的值来实现的额外粒度控制。能够设置 tabstop 对我来说仍然很有用, softtabstopshiftwidth使用单个命令设置为相同的值。

expandtab 是否使 softtabstop 变得多余?
tabstop=4 softtabstop=0 shiftwidth=4 expandtab
在插入模式下,按 tab 键插入 4 个空格。按删除键会删除一个空格 - 因此,如果您不小心按了 Tab 键,则必须退格 4 次。
tabstop=4 softtabstop=4 shiftwidth=4 expandtab
在插入模式下,按 tab 键插入 4 个空格。按退格键删除 4 个空格。

如果我正在使用 expandtab打开后,我更喜欢删除键删除与 Tab 键插入相同数量的空格。所以在这种情况下,我也觉得能够为 tabstop 分配相同的值会很有用。 , softtabstopshiftwidth同时。

捷径仍然有用

Vim 提供了如此多的灵活性真是太好了,但我看不出自己需要它。我只想能够选择选项卡的宽度,以及它是“硬”选项卡(使用制表符)还是“软”选项卡(由空格组成)。在硬标签和软标签之间切换很容易( :set expandtab! ),但我希望设置标签的宽度更直接,而不必摆弄 3 个不同的参数。

所以我对类似 :set stab=4 的建议提出了建议对我来说仍然听起来不错。

最佳答案

创建 stab Vim 本身的选项并不容易,但我已经创建了这个命令/函数,您可以将其放入 .vimrc (或者一个插件文件,如果你是 super 组织的)。使用 :Stab并且会提示您输入缩进级别以及是否使用 expandtab .如果你在没有给它一个新的缩进级别的情况下按回车,它只会打印当前设置。

"把所有这些放在你的 .vimrc 或插件文件中
命令! -nargs=* 刺调用刺()
功能!刺()
让 l:tabstop = 1 * input('set shiftwidth=')

如果 l:tabstop > 0
“我们也想要 expandtab 吗?
let l:expandtab = confirm('设置 expandtab?', "&Yes\n&No\n&Cancel")
如果 l:expandtab == 3
“中产?
返回
尾端

让 &l:sts = l:tabstop
让 &l:ts = l:tabstop
让 &l:sw = l:tabstop

如果 l:expandtab == 1
设置本地扩展选项卡
别的
setlocal noexpandtab
尾端
尾端

"显示选中的选项
试试
echohl 模式消息
回声“设置制表位=”
echohl 问题
回声 &l:ts
echohl 模式消息
回声'移位宽度='
echohl 问题
回声 &l:sw
echohl 模式消息
回声'sts='
echohl 问题
回声 &l:sts 。 ' ' 。 (&l:et ? ' ' : 'no')
echohl 模式消息
echon '扩展表'
终于
echohl 无
尾端
端功能

关于vim - Vim 中的 Tab Vs Space 首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562336/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com