Vim中的Tab VS空间首选项
Vim是非常宽松的,当谈到标签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。我不是单独回复每个人,我在这里更新问题。 带有expandtab的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,softtabstop和shiftwidth设置为相同的值。 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,softtabstop和shiftwidth分配相同的值也是有用的。 快捷方式仍然有用 伟大的Vim提供了这么多的灵活性,但我不能看到自己需要它。我只想要能够选择标签的宽度,以及它是一个“硬”标签(使用标签字符)还是一个“软”标签(由空格组成)。在硬标签和软标签之间切换是很容易的(:set expandtab!),但我希望这是更直接的设置标签的宽度,而不必干扰3个不同的参数。 所以我提出的建议类似:set stab = 4仍然听起来不错。
在Vim本身创建一个stab选项不是很容易,但我已经鞭打了这个命令/函数,你可以放在你的.vimrc(或者一个插件文件,如果你超级有序)。使用:Stab,将提示您缩进缩进级别以及是否使用expandtab。如果你输入,而不给它一个新的缩进级别,它只会打印当前的设置。
" put all this in your .vimrc or a plugin file command! -nargs=* Stab call Stab() function! Stab() let l:tabstop = 1 * input('set shiftwidth=') if l:tabstop > 0 " do we want expandtab as well? let l:expandtab = confirm('set expandtab?',"&Yesn&Non&Cancel") if l:expandtab == 3 " abort? return endif let &l:sts = l:tabstop let &l:ts = l:tabstop let &l:sw = l:tabstop if l:expandtab == 1 setlocal expandtab else setlocal noexpandtab endif endif " show the selected options try echohl ModeMsg echon 'set tabstop=' echohl Question echon &l:ts echohl ModeMsg echon ' shiftwidth=' echohl Question echon &l:sw echohl ModeMsg echon ' sts=' echohl Question echon &l:sts . ' ' . (&l:et ? ' ' : 'no') echohl ModeMsg echon 'expandtab' finally echohl None endtry endfunction (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |