VIM:标签为全能,但不在行首

dot*_*hen 6 vim autocomplete

我在 VIM 7.3 中将 Tab 配置为 Omnicompetion:

inoremap <Tab> <C-n>
Run Code Online (Sandbox Code Playgroud)

这很方便,但我真的很想在一行的开头放回常规选项卡!有什么方法可以检查前面的字符是空格还是行开头,如果是,则插入制表符而不是全能字符?

谢谢!

Hep*_*ite 12

我已经使用了一段时间了:

function! InsertTabWrapper()
    let col = col('.') - 1
    if !col || getline('.')[col - 1] !~ '\k'
        return "\<tab>"
    else
        return "\<c-p>"
    endif
endfunction

inoremap <tab> <c-r>=InsertTabWrapper()<cr>
Run Code Online (Sandbox Code Playgroud)

这使您可以在光标位于行首或不在单词上时正常使用 tab 键,否则它会执行 control-p 完成键——您可以将其更改为 <cn> 以供您使用,尽管我发现 < cp> 更有用。

[虽然我已经修改过,但最初的想法可能来自 Vim 用户的邮件列表,但我没有记录我从哪里得到它。]