【问题标题】:Can vim be made to only expand tabs to the left of text?可以使 vim 仅扩展文本左侧的选项卡吗?
【发布时间】:2010-11-12 04:41:04
【问题描述】:

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

这个可以吗?

【问题讨论】:

  • 我坚信可以做到。不过,我只是认为这并不容易。

标签: vim alignment indentation options


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这样的:

    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 个空格。
    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 2010-12-19
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多