2009-07-20 31 views
6

使用vim,我想在expandtabs之前关闭,如果我在行上的任何文本的左侧,以及我是否在任何非空白字符的右侧。 (我想使用制表符缩进和空格进行对齐。)可以使vim只扩展到文本左侧的标签?

可以这样做吗?

+0

我坚信可以做到。不过,我不认为这会很容易。 – 2009-07-20 02:17:03

回答

5

是。使用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)的。

4

尝试这样:

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

set noexpandtab 
imap <Tab> <C-r>=TabMaybeIndent()<CR> 
+0

这看起来像一个合理的方法。经过微小的调整,您甚至可以按照当前的`softtabstop`设置,而不是盲目地插入4个空格。 – ephemient 2009-07-20 02:37:09

相关问题