Vim/vi中退格键无法使用

148

我刚刚对.vimrc文件和.bash_aliases文件进行了一些更改,从那时起我就无法使用退格键删除单词。

我的.vimrc文件包含:

set nocompatible

set number
set incsearch
set autoindent
set ruler
set autowrite
set smarttab
set linebreak
set spell
set et
set title

set mouse=v
set history=50
set tabstop=4
set matchtime=2
set matchpairs+=<:>

syntax enable
filetype plugin indent on
filetype indent on
set sw=4

map <f2> :w\|!python %

hi SpellBad ctermfg=000 guifg=#000

我的.bash_aliases文件中有两行关于Vim的命令:

alias vim="vim -c 'startinsert' -u ~/.vim/.vimrc"
alias vi="vi -c 'startinsert' -u ~/.vim/.vimrc"

我的~/.vim目录里没有任何插件或脚本,因此没有插件会引起这种情况。

~/.vim/.vimrc是一个符号链接。实际的.vimrc文件位于~/vimrc/目录中,该目录是一个Git仓库。


这解决了我的问题:https://askubuntu.com/a/899059/525661 - Hem
我正要建议使用 stty erase ^H。 - BigMike
9个回答

260

为了允许在插入模式下可以回退所有内容(包括自动插入的缩进、换行和插入的开头),您可以设置 backspace 选项:

:set backspace=indent,eol,start
或。
:set backspace=2  "compatible with version 5.4 and earlier

默认情况下,此选项为空,不允许您删除上述内容。这是标准的Vi行为。

您可以将此行放入您的vimrc文件中,以便在Vim启动时自动设置:

set backspace=indent,eol,start  " more powerful backspacing

另外,从Vim 8.0开始,如果找不到用户vimrc文件,Vim将通过加载defaults.vim脚本将backspace设置为此值。


它对我仍然不起作用 =/ 我有以下代码: set backspace=2 set backspace=indent,eol,start fixdel - holms
2
@holms 尝试单独使用 set backspace=2 - Hoang Huynh
为什么默认情况下退格键只是将插入符号向左移动? - Vitaly Zdanevich
2
如果您使用的是vim80以上版本,请参考以下链接:https://dev59.com/_q7la4cB1Zd3GeqPe40N - Lewis Chan

39

像一个 Linux 新手一样,我使用的是全新的 Ubuntu 18.04 系统,并且我的 vim 编辑器的行为与我之前用过的其他计算机不同(包括你所描述的退格符行为)。我没有意识到我实际上使用的是 vi 而不是 vim(两者都是通过 vi 执行的)。

安装 vim 后,编辑文件恢复了我习惯的行为,包括退格键按照我预期的工作。

sudo apt install vim

运行这个程序后,我正在编辑的文本也变成了彩色而不是完全灰色(我正在编辑一个BASH文件),它开始告诉我何时进入INSERT模式。 - Gerry
这解决了我的问题(与OP的奇怪退格相同)。有时候,最简单的解决方案就是正确的。谢谢! - cjaro

14

我的~/.vimrc文件中有内容set nocompatible。在同一文件中添加了另一行来使退格键起作用-

set backspace=indent,eol,start

只需要运行即可。

source ~/.vimrc

在同一个终端中更改以使更改立即在同一 shell 中生效。无需打开 vi 并运行命令。

:set backspace=indent,eol,start

12

我尝试了以上所有方法都没有用。 试过 CTRL+backspace 它救了我。


6

我已经从源代码编译了vim8.2。然后我遇到了这个问题。在.vimrc文件中插入source $VIMRUNTIME/defaults.vim后,BackSpace可以正常工作。


4

对于我来说,我将以下设置加入到配置中,但是退格键仍然无法正常工作。

set backspace=indent,eol,start

最后,我发现下面这行代码导致了这个问题。

inoremap <expr><C-h> neocomplete#smart_close_popup()

当删除这个设置时,在插入模式下退格键就能正常工作了。

原因: 这是因为Vim把CTRL-H看作退格键,而这一行代码将其重新映射为在插入模式下调用neocomplete#smart_close_popup()。


2

我在使用urxvt + tmux的Debian 7.8上通过SSH也遇到了同样的问题。

我已经安装了vim和vim-tiny。

卸载vim-tiny解决了这个问题。


这是一个有点老的帖子,但对我来说,在vimtutor中,退格键在插入模式下无法工作,但在vim中它可以在插入模式下工作。 - user5849816

1
很多时候,这也取决于所选的getty类型,如果使用像Putty这样的SSH客户端。最好使用vt100+,因为它是最标准的仿真模拟。
我已经有了“:fixdel”,但它没有起作用。我不得不将其删除并替换为第一个建议才能使其工作。

我将空格转换为删除。 - ashish

1

对于我来说(连接到其他Linux的Debian服务器,使用“Konsole”),卸载vim-tiny软件包并安装vim软件包后,退格键和箭头键的问题得到了解决。


1
也许这些软件包会安装不同的vimrc文件。 - Eugene Yarmash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接