我是用一个函数做到的。我对其进行了测试,但也许在某些特定情况下您将不得不修复一些错误。尝试将其添加到您的 vimrc 中:
set et
function! Inserttab()
let insert = ""
let line = getline('.')
let pos = getpos('.')[2]
let before = ""
let after = line
if pos != 1
let before = line[ 0: pos - 1]
let after = line[pos : strlen(line) ]
endif
if pos != 1 && substitute(before, "[ \t]", "", "g") != ""
let insert = "\t"
else
let insert = " "
endif
let line = before . insert . after
call setline('.', line)
call cursor(line('.'), strlen(before . insert))
endfunction
inoremap <tab> <esc>:call Inserttab()<CR>a
基本上,它确实将您在可视模式下的键重新映射到函数 Inserttab()。另请注意,如果您将 ts 更改为 4 以外的值,它仍将输出 4 个空格而不是 2 个空格,因为该值是硬编码的。
我对 vim 脚本也不是很熟悉,但我认为所有使用的变量都是全局的,这是一件坏事。
我忘了提到“看到”你可以使用的空白set list
。你用 禁用它set nolist
。同样在正常模式下,您可以使用ga
查看有关光标所在字符的信息。
编辑
我意识到您可能想在行首插入制表符。我的脚本在开头插入空格并在其他任何地方插入标签。
如果您每次按 Tab 键时都确实想要一个选项卡,则可以简单地使用以下命令:
set et
function! Inserttab()
let insert = ""
let line = getline('.')
let pos = getpos('.')[2]
let before = ""
let after = line
if pos != 1
let before = line[ 0: pos - 1]
let after = line[pos : strlen(line) ]
endif
let insert = "\t"
let line = before . insert . after
call setline('.', line)
call cursor(line('.'), strlen(before . insert))
endfunction
inoremap <tab> <esc>:call Inserttab()<CR>a
但我不明白这一点,使用此版本,您将永远无法从插入模式手动缩进。