nel*_*rom 86 vim whitespace preferences
Vim非常适应标签Vs. 空间偏好.据我了解,该tabstop设置表示制表符的宽度.该shiftwidth设置指定使用<<和>>命令时递增/递减的列数,而softtabstop设置会影响Tab在插入模式下按键时要插入的空白量.如果expandtab启用,则Tab键会插入softtabstop空格字符数.而用expandtab切断时,按下Tab键会插入的最小可能数目的匹配标签+空格字符softtabstop.(如果我错了,请纠正我.)
最后一点让我想知道:有一个你不想要的实际案例shiftwidth == tabstop && tabstop == softtabstop吗?我想不出一个.就我而言,如果我可以在一个单独的任务中将所有这三个设置为相同的值,那将是最方便的.例如:
:set stab=4
Run Code Online (Sandbox Code Playgroud)
这相当于运行:
:set tabstop=4 softtabstop=4 shiftwidth=4
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议如何做到这一点?
感谢迄今为止对php,hobbs和kaiser.se的回复.我不是单独回复每个人,而是在这里更新问题.
我在上面说过,关闭expandtab后,按Tab键会插入尽可能少的匹配的tab +空格字符softtabstop.我支持这一点,但我认为我需要解释我的意思.我将通过几个例子尝试这样做.要继续,请运行:set list以便您可以看到制表符.
tabstop=4 softtabstop=2 shiftwidth=4 noexpandtab
在插入模式下,按Tab键可插入2个空格字符.按tab键的第二时间,并且代替插入2个更多的空间字符(总共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用一个命令相同的值.
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仍然听起来不错.
too*_*php 55
stab在Vim中创建一个选项本身并不容易,但是我已经掀起了这个命令/功能,你可以放入你的.vimrc(或者如果你是超级组织的插件文件).使用:Stab,系统将提示您输入缩进级别以及是否使用缩进级别expandtab.如果按Enter键而不给它一个新的缩进级别,它将只打印当前设置.
" 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?', "&Yes\n&No\n&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
这是我第一次尝试编写VimScript,但是这里是:
function! Stab(value)
let &shiftwidth = a:value
let &softtabstop = a:value
let &tabstop = a:value
endfunc
Run Code Online (Sandbox Code Playgroud)
如果我将它放在我的.vimrc文件中,我可以通过运行来调用它:call Stab(X),其中X是所需的标签宽度.这对于现在来说是一个充分的解决方案,但是如果有人能提出一种让我更容易打电话的方式,我将不胜感激.
我还创建了一个快速汇总当前设置的函数,我已将其映射到ctrl-Tab:
nmap <C-Tab> :call TabParams()<CR>
function! TabParams()
echo "tabstop: ".&tabstop
echo "shiftwidth: ".&shiftwidth
echo "softtabstop: ".&softtabstop
endfunc
Run Code Online (Sandbox Code Playgroud)
好吧,我为这个答案提出了100分的赏金,现在我已经自己解决了一半.不确定我是否可以接受我自己的答案......
您可以在编辑模式下也可以使用Ctrl-T缩进和Ctrl-D集科,以deindent到下一个缩进级别shiftwidth,不管tabstop,softtabstop或expandtab设置.Vim会自动添加/删除空格或制表符,以便您进入正确的列.
如果您使用这些命令来控制缩进而不是Tab/ Backspace您不必担心所有这些选项卡设置适合在一起并始终达到正确的缩进级别.