5

expandtabs使用vim,如果我在该行的任何文本的左侧,如果我在任何非空白字符的右侧,我想有效地关闭。(我想使用制表符进行缩进,使用空格进行对齐。)

这可以做到吗?

4

2 回答 2

5

是的。使用智能标签插件。

此脚本允许您在行的开头使用正常的制表符设置,并将制表符扩展为其他任何地方的空格。这有效地将“缩进”与“对齐”区分开来。

<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) 无关。

于 2009-07-20T07:00:41.990 回答
4

尝试这样的事情:

function! TabMaybeIndent()
    if strpart(getline('.'), 0, col('.') - 1) =~ '^\s*$'
        return "\<Tab>"
    else
        return "    "
    endif
endfunction

set noexpandtab
imap <Tab> <C-r>=TabMaybeIndent()<CR>
于 2009-07-20T02:31:14.403 回答