我有以下文件类型设置
au BufNewFile,BufRead *.py
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set textwidth=79 |
\ set expandtab |
\ set autoindent |
\ set fileformat=unix |
au BufNewFile,BufRead *.js, *.html, *.css
\ set tabstop=2 |
\ set softtabstop=2 |
\ set shiftwidth=2 |
au BufNewFile,BufRead *.go
\ set tabstop=4 |
\ set softtabstop=4 |
\ set shiftwidth=4 |
\ set noexpandtab |
\ set smarttab
这通常发生在
.go
个文件中,因为我猜我有noexpandtab
。但光标在正常模式下不会进入-0列,这让我感到非常震惊。
答案 0 :(得分:2)
你看到的是正常的Vim行为。在以<Tab>
字符开头的行上,光标在上显示字符;当一个标签占据(默认8个)屏幕单元时,Vim将光标放在字符的末尾(对于双宽字符,Vim也是字符的两倍,但是8字符宽的光标可能看起来很糟糕,可能不会在正常模式中技术上可以在终端中)。在插入模式中,光标位于字符之间,因此您可以将光标定位在(例如gI
)之前和(I
)标签之前。
最好接受这种行为;如果你真的不能忍受,这里有一些改变行为的选择。不幸的是,每个都有警告和缺点:
:set list
,Vim可以根据需要将光标放在前面。但是你也会看到突出显示的空白。您可以使用'listchars'
选项来减少视觉噪音,但之后您将失去这个有用的功能。:set virtualedit=all
,您可以将光标定位在选项卡内的任何位置。在它的中间开始编辑会将标签字符分解为前后空格。此外,您可以将光标放在物理文本后面的任何位置。:autocmd
s,您可以在读取缓冲区时将制表符转换为空格,然后再写入。 (见:help retab-example
)