【发布时间】:2010-11-12 04:41:04
【问题描述】:
使用 vim,如果我在该行的任何文本的左侧,我想有效地关闭 expandtabs,如果我在任何非空白字符的右侧,我想打开。 (我想使用制表符进行缩进,使用空格进行对齐。)
这个可以吗?
【问题讨论】:
-
我坚信可以做到。不过,我只是认为这并不容易。
标签: vim alignment indentation options
使用 vim,如果我在该行的任何文本的左侧,我想有效地关闭 expandtabs,如果我在任何非空白字符的右侧,我想打开。 (我想使用制表符进行缩进,使用空格进行对齐。)
这个可以吗?
【问题讨论】:
标签: vim alignment indentation options
是的。使用Smart Tabs 插件。
此脚本允许您在行首使用正常的制表符设置,并在其他任何地方将制表符扩展为空格。这有效地区分了“缩进”和“对齐”。
<tab>使用编辑器制表符设置在行首(第一个非空格字符之前)插入制表符,否则插入空格。
<BS>使用编辑器选项卡设置来删除选项卡或“扩展”选项卡 ala smarttab
要使 Vim 排列函数参数,请添加
set cindent
set cinoptions=(0,u0,U0
到.vimrc。该插件将这样编码空格:
int f(int x,
......int y) {
--->return g(x,
--->.........y);
}
这使得“x”和“y”的对齐方式独立于标签大小 (tabstop)。
【讨论】:
试试这样的:
function! TabMaybeIndent()
if strpart(getline('.'), 0, col('.') - 1) =~ '^\s*$'
return "\<Tab>"
else
return " "
endif
endfunction
set noexpandtab
imap <Tab> <C-r>=TabMaybeIndent()<CR>
【讨论】:
softtabstop 设置,而不是盲目地插入 4 个空格。