【问题标题】:vim backspace leaves ^?vim 退格离开 ^?
【发布时间】:2012-03-14 11:48:04
【问题描述】:

在 Vim 中,当我在 insert 模式下按 backspace 键时,它会留下 ^? 字符并且不会删除它应该删除的字符。

我的.vimrc中有以下内容

syntax on
set number
set expandtab
set incsearch
set nocompatible
set backspace=indent,eol,start
fixdel

这也发生在命令模式下。当我错误地输入W 而不是w 进行保存时,我按下backspace 键,它给了我以下信息:

:W^?

关于什么是错的以及如何解决它的任何想法?!

更新:在向 SO 发布这个问题之前,我已经进行了基本的谷歌搜索,并尝试了搜索结果第一页中的所有建议,但没有成功。

@strcat 我使用的是 vim 版本 7.0.237,KDE 控制台 1.6.4,Linux 2.6.18 x86_64 机器。

@graywh w.r.t cat -v,对于删除,我得到^[[3~,对于退格,我得到^?

stty -a的输出如下

speed 38400 baud; rows 38; columns 194; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

【问题讨论】:

  • 请检查下面的链接以帮助调试您的问题:> vim.wikia.com/wiki/Backspace_and_delete_problems 编辑:我发现与您描述的问题类似:> lj4newbies.blogspot.com/2007/05/…
  • 对不起,我试过了,但没用!
  • 我已经用一些新的提示更新了我的帖子,请修改它们
  • 您使用哪个终端/操作系统?
  • cat -v 中,当您按下Delete 和Backspaces 键时会打印什么? stty -a 的输出是什么?

标签: vim vi backspace keymapping


【解决方案1】:

^? 是删除字符;退格字符是^H。您的终端仅将其中一个识别为“擦除”,这取决于终端设置stty。 (bash 和其他 shell 将此理解为一个问题,并做一些特殊的事情来识别两者)

如果您的终端仿真器(ssh、putty、xterm 等)与您的终端设置不一致,那么您会看到这种行为。通常默认情况下它是正确的,但很多时候人们会将stty 命令放在他们的 .bashrc 中,这会破坏事情。

您的 bashrc 中可能有类似 stty erase ^H 的内容。如果你这样做了,摆脱它,或者改变你的终端设置让退格发送^H而不是DEL(^?

您也可以使用 vim 映射来解决此问题,但这忽略了基本问题。

【讨论】:

  • 你是对的。是我的 bashrc 文件中的 stty 搞砸了。感谢您的澄清。
  • 这里有几个人在 putty 中使用 unix(不是 linux)上的 putty,这是一个简单的修复 pref->terminal->keyboard->backspace 更改为 ^H
  • 我的 vim 中没有任何 stty。
  • 我想补充一点,如果你的 .bashrc 文件中没有 'stty' 并且你看到了这个问题......然后将 'stty' 添加到你的 .bashrc 文件和这个问题会消失。 stty erase '^?'
  • 似乎是相互矛盾的建议。有人说在你的 .bashrc 中添加一个 stty 命令,其他人说把它拿出来。
【解决方案2】:

尝试添加:

noremap! <C-?> <C-h>

致您的~/.vimrc

这映射了 C-?退格,为我工作。

【讨论】:

    【解决方案3】:

    vim wiki Backspace_and_delete_problems,我继续阅读:help :fixdel,它表明:

    if &term == "termname"
      set t_kb=^V<BS>
      fixdel
    endif
    

    其中“^V”是 CTRL-V,“”是退格键
    (不要输入四个字符!)。替换“术语名”
    使用您的终端名称。

    对我来说,fixdel 使退格像删除一样工作。我的第一个错误也是在 gvim 中执行 CTRL-V 退格键,在系统上执行您无法使密钥正常工作的操作,因此它会粘贴有问题的会话看到的退格键。

    我现在有我的.vimrc:

    if &term == "xterm-256color"
      set t_kb=^?
    endif
    

    【讨论】:

      【解决方案4】:

      解决这个问题的一个好方法是设置“终端>键盘”设置,将退格键映射到 PuTTY 中的“Control-H”;这是如果您正在使用 PuTTY 并遇到“^?”按退格键时出现问题。

      我在这里创建了一篇关于此的文章:

      https://alvinbunk.wordpress.com/2017/08/23/vi-or-vim-using-backspace-inserts/

      感谢@j03m 的建议!

      【讨论】:

      • 我花了无数个小时试图解决这个问题,这为我解决了问题,谢谢
      【解决方案5】:

      试试 ctrl+del/ctrl+退格alt+del/alt+backspace,我不记得是哪个,但我认为它会为你解决问题。

      如果这不起作用,请尝试 shift+backspace/del。我以前遇到过这个问题,有一个组合键,你可以按下它来发送正确的字符代码来进行删除。

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题,vim 退格离开 ^?,而在命令行中它可以正常工作。

        这对我有用,使用 vim 映射:

        In .vimrc, type:      imap ^? ^H
        

        这会将 CTRL-H(这是 vim 中的默认退格键)映射到退格键。 希望对您有所帮助。

        【讨论】:

        • 我不知道如何让 ^H 字符起作用,所以我做了:imap ^? 在 .vimrc 文件中,现在可以正常工作了。命令和搜索也需要 cmap。
        • horta 的修改对我有用,而 ^H 没有:imap ^?
        【解决方案7】:

        在 Mac 上,如果您使用的是终端,请转到首选项 -> 配置文件 -> 高级,然后选择“删除发送 Control-H”

        【讨论】:

        • 让我一直在尝试其他解决方案,但这在 Mac 上为我做到了,干杯!
        • 为我工作。所以我猜Mac终端默认发送^?
        • @wisbucky 不同系统发送退格的方式有所不同superuser.com/a/129986/430236
        【解决方案8】:

        遇到了完全相同的问题,只是 Ctrl+H 对我不起作用。 stty 设置也很好。只想提一下我的环境,如果有人会遇到同样的问题:

        • 在 X 下使用 cygwin 和 xterm :)
        • SSH 到 RHEL6.4->bash->tmux->vim

        fixdel 添加到.vimrc 后,它就可以工作了!上面的所有修复都对我不起作用。

        【讨论】:

        • 我也是...使用超过 ---> SSH ---> RHEL > ksh > tmux > vim
        【解决方案9】:

        stty erase ^? 放到你的 .bashrc 中

        运行你的 .bashrc

        运行命令:stty -a

        speed 38400 baud; rows 48; columns 157; line = 0;
        intr = ^C; quit = ^\; ***erase = ^?***; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
        werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
        -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
        -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
        opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
        isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
        

        现在 Erase 将被更改为新值 ^? 并且您的退格现在可以工作了。

        【讨论】:

          【解决方案10】:

          这个答案对我有用:http://vim.wikia.com/wiki/Backspace_and_delete_problems

          基本上,将set backspace=2 放在 .vimrc 中是可行的。

          【讨论】:

          • 这对我也有用。简单明了。唯一的事情是,我将我的更改放在 /etc/vimrc 下的全局 vim 配置中(用 sudo 编辑)
          【解决方案11】:

          对我来说,这是一个 stty 问题,我的 stty -a 输出与您的类似。
          通过运行 stty sane 为我解决了这个问题。

          这不仅解决了退格/删除问题,还修复了箭头键。

          【讨论】:

            【解决方案12】:

            如果您使用的是 KDE,我知道那种痛苦。 这是迄今为止我找到的最全面的解决方案 http://www.yalla.nu/blog/post/86

            【讨论】:

              【解决方案13】:

              我遇到了这个问题,在我的 .vimrc 中找到了以下设置:

              :set t_kb=^H
              

              删除该行解决了问题。

              【讨论】:

                【解决方案14】:

                在带有 CSH 的 FreeBSD 下,您应该在 .cshrc 中替换它:

                bindkey "^W" backward-delete-word
                

                有了这个:

                bindkey "^?" backward-delete-word
                

                【讨论】:

                  【解决方案15】:

                  对于 mac OS Big Sur fn+backspace 为我工作

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-11-02
                    • 1970-01-01
                    • 1970-01-01
                    • 2020-06-17
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多