VIM:Tab 键为全功能完成,但不位于行首

VIM:Tab 键为全功能完成,但不位于行首

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

inoremap <Tab> <C-n>

这很方便,但我真的很想在行首使用常规制表符!有没有办法检查前面的字符是空格还是行首,如果是,插入制表符而不是全写制表符?

谢谢!

答案1

我已经使用这个有一段时间了:

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>

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

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

答案2

我可以想到一些有点复杂的函数,可以后退一步,比较字符并采取相应的行动,但我更愿意解决老问题“你是什么真的尝试做什么?”问题:

我建议你使用Ctrl+T在插入模式下缩进一行,如果全部您想要 Tab 按钮。我个人认为,像这样一个与位置相关的键在语义上非常令人困惑。

相关内容