0

在此处输入图像描述 这是我的光标在正常模式下的最左边。

在此处输入图像描述 这就是它在插入模式下的样子。

我有以下文件类型设置

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 列,这让我很害怕。

4

1 回答 1

2

你看到的是正常的 Vim 行为。在以字符开头的行上<Tab>,光标显示字符上;由于选项卡占用多个(默认 8 个)屏幕单元格,Vim 将光标放在字符的末尾(对于双宽字符,Vim 也会将字符加倍,但 8 字符宽的光标可能看起来很糟糕,并且可能不会技术上可以在终端中)在正常模式下。在插入模式下,光标位于字符之间,因此您可以将光标定位在制表符之前(例如gI)和之后( )。I

补救措施

最好接受这种行为;如果你真的无法忍受,这里有一些改变行为的选项。不幸的是,每个都有警告和缺点:

  • 使用:set list,Vim 将光标放在前面,如你所愿。但是您也会看到突出显示的空格。您可以摆弄'listchars'减少视觉噪音的选项,但是您将失去该有用的功能。
  • 使用:set virtualedit=all,您可以将光标定位在选项卡内的任何位置。在它的中间开始编辑会将制表符分解为前后的空格。此外,您可以将光标定位在物理文本后面的任何位置。
  • 使用:autocmds,您可以在读取缓冲区时将制表符转换为空格,然后在写入时返回。(见:help retab-example
于 2017-10-09T09:30:54.843 回答