在 vim 中使用 Backspace 键删除字符遇到异常,网上都说要在 .vimrc 文件中配置 backspace 选项值。但是我之前在 Debian 系统和 Ubuntu 系统上使用系统自带的 vim 时,并没有在 .vimrc 文件中配置 backspace 选项值,也能正常使用 Backspace 键删除字符。
后来自己编译最新版的 vim,使用这个vim,确实发现 Backspace 键删除字符遇到异常。经过排查,终于发现了 Debian 系统、Ubuntu 系统自带的 vim 版本和自己编译的 vim 版本之间的差异。具体说明如下。
配置 backspace 选项
在 vim 中要正常使用 Backspace 键删除字符,确实需要正确设置 backspace 选项的值。
:set nocompatible :set backspace=indent,eol,start
在 compatible 模式下,设置 backspace=indent,eol,start 也能工作,但是被删除的字符不会立刻显示为空白,显示效果不好。
为了兼容 vim 5.4 版本和之前版本,:set backspace=2 相当于 :set backspace=indent,eol,start。
对 backspace=indent,eol,start 设置项的参数说明如下:
-
indent
允许删除自动缩进的内容。如果没有这一项,自动缩进添加的空白字符无法用 Backspace 键来删除,可以删除手动添加的缩进空格。 -
eol
允许删除换行符。如果没有这一项,当已经删除到行首时,不能用 Backspace 键删除换行符,也就是不能自动往上删除到上一行。 -
start
允许删除进入插入模式前已有的内容。如果没有这一项,不能删除进入插入模式前已有的内容,只能删除当前插入模式下输入的字符。例如,输入 abc 三个字符,按 Esc 键退出插入模式,再按 a,进入插入模式,输入 efg。此时 Backspace 键可以删除 efg,不能删除 abc。
可以用 :help 'backspace' 命令查看该选项的帮助说明。
Debian和Ubuntu的vim版本配置backspace选项的地方
在Debian或Ubuntu发行版本上,不需要在 ~/.vimrc 中自行配置 backspace 选项,Backspace 键就能正常使用。原因是系统自带的vim版本会加载一个 debian.vim 文件,默认已经设置这一项。
可以用 :verbose set backspace? 命令来查看 backspace 选项的值、以及它被哪个地方设置。
自己编译的 vim 版本
如果使用自己源码编译的 vim 版本,且没有配置 ~/.vimrc 文件,会加载源码默认的 vim 配置文件,会正确配置 backspace 选项。
如果自行了配置 ~/.vimrc 文件,不会加载源码默认的 vim 配置文件,可能就就没有配置 backspace 选项,导致 Backspace 键用不了,或者时灵时不灵。此时需要在 ~/.vimrc 文件中主动配置 backspace 选项的值为indent,eol,start。