我在 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 按钮。我个人认为,像这样一个与位置相关的键在语义上非常令人困惑。