有时似乎无法使用Backspace键在插入模式下删除字符。有时我可以退格,但在其他时候它什么也没做。光标没有移到左侧,而且似乎什么也没发生。

我在Windows中使用gVim注意到了这一点。但是在大多数Linux系统中。


为什么会发生?
如何像往常一样使退格键删除字符?
此行为是否旨在作为功能? ?换句话说:在插入模式下删除空格是否有更好的替代方法?


评论

尽管下面的答案可以正确解决您的问题,但我发现禁用箭头键或退格键等键有助于您习惯于更正确地进行操作。 vim中的退格键是用X(然后用x删除)完成的,但是通常您真正想做的就是db,例如删除直到单词开头,或者daw删除整个单词,等等。如果您有可用的退格键,您可能会在不必要的情况下使用此次优密钥。

@Shahbaz我不同意:在插入模式下,可以使用退格键进行较小的更正。我同意应该学习如何使用普通模式命令,但是在插入模式下进行细微校正并不适合使用退格键。

@KarlYngveLervåg,在退格的情况下,我同意(实际上我没有让自己禁用)。但是,OP似乎具有退格键的默认行为,例如,它在行首时不起作用,但在行中起作用。尽管如此,OP还提供了比退格更好的选择。例如,除了退格到上一行之外,还可以使用J来处理空白。简而言之,退格键可以在编写过程中快速修正拼写错误,但除此之外,还有其他更好的选择。

许多人的问题并不是对功能本身的意见分歧,但不是他们使用的唯一编辑器。由于他们使用多个编辑器,因此切换与退格有关的范例是违反直觉的,因此他们更喜欢vim功能的子集。

如果您已安装vim-faq,则可以在此处获得脱机答案::h vim-faq并搜索/ backspace。难记的标签是:h faq-12.26。

#1 楼

tl; dr:将其添加到您的vimrc中可使退格键像大多数其他程序一样工作:
set backspace=indent,eol,start


更长的答案不能正常工作”可以视为一项功能;它可以防止您意外删除缩进,以及通过将其限制在当前行和/或插入的开头来防止删除过多的文本。
:help 'backspace'告诉我们:这些值是什么意思吗?默认情况下,不允许您对此退格;例如,如果我们键入此字符(其中█是光标),则被认为是“自动缩进”的规则有些微妙:
Influences the working of `<BS>`, `<Del>`, `CTRL-W` and `CTRL-U` in Insert
mode.  This is a list of items, separated by commas.  Each item allows
a way to backspace over something:

value     effect
indent    allow backspacing over autoindent
eol       allow backspacing over line breaks (join lines)
start     allow backspacing over the start of insert; CTRL-W and CTRL-U
          stop once at the start of insert.

退格将不起作用。
但是,如果我们随后添加命令和}并返回上一步,则可以删除缩进:按下Enter时的缩进;但是在第二个示例中,Vim没有自动缩进任何内容,只是Tab字符或几个空格。标记(:help 'autoindent'\n);如果禁用此选项,则退格键将在您尝试删除EOL标记时不起作用。
那么默认设置是什么?

我在Windows中使用GVIM注意到了这一点。但是,在大多数Linux系统中,当从终端使用VIM时,退格似乎可以按预期工作。例如,在我的Arch Linux系统上,我有\r\n,其中包括:
if (true) {
    █

如果在Windows上安装Vim,则默认值为使用Vim随附的默认vimrc和gvimrc。
Vim默认值为/usr/share/vim/vimfiles/archlinux.vim的空值。 Arch Linux,Debian,CentOS或backspace的默认默认设置可能会有所不同。 />在正常模式下,退格键充当$other_distro,它只是向左移动。
默认情况下,如果退行在行首,退格键将移至上一行(就像heol中一样);您可以通过backspace标志(默认启用)通过'whichwrap'选项控制此行为。
还可以通过将退格字符映射到b命令来使退格删除字符:

评论


我认为的“ _X将是“更自然的”行为。

– Hauleth
18年1月1日在16:29

值得注意的是,几乎没有发行版附带默认行为。我注意到的唯一一个是msys2,这可能不是一个决定,而是其开发不足的性质。

– riv
18年6月17日在8:02

@krehwell,关于您的编辑,vimrc并不总是.vimrc,因为在Windows平台上它实际上称为_vimrc。 Vim的最新版本在Windows上也接受〜/ .vim / vimrc或vimfiles \ vimrc。因此,我实际上更喜欢Martin最初的通用措辞。

–filbranden♦
20年8月8日在18:58

我现在将其链接到:help vimrc,尽管这可能不是最温和的介绍,因为它包含了很多无关紧要的内容。

–马丁·图尔诺伊(Martin Tournoij)
20年8月10日在6:47

#2 楼

万一任何人都无法在Windows上使用ConEmu体验到无法解释的<BS>行为,则可能必须将<BS>密钥重新映射到:

#3 楼

set backspace=2


与v5.4及更早版本一起使用。在Mac上为我工作。

在Mac上看起来像我有v3.2:

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.


3.2以后的所有版本都使用GNU General Public许可证v3(GPLv3),Apple不支持该许可证。关于reddit的讨论在这里。

您可以使用以下软件升级到最新的Bash:

brew install bash


这可以利用可编程的优势完成此处突出显示。

#4 楼

如果set backspace=indent,eol,startvimrc的最后一行,则所有解决方案均不起作用。

此后再添加一条规则,例如:

set ruler


评论


这对我来说似乎很奇怪,您能解释一下为什么在vimrc中添加另一个命令才能使前一个命令起作用吗?

–statox♦
17年8月30日在16:20

我把它放在我的.vimrc的最后一行,它工作得很好! ✌️

–亨里克·阿尔布雷希森(Henrik Albrechtsson)
19年11月8日在9:20