如何在通过ssh连接的VIM中修复我的删除键?(Mac OS X)

23

当我在本地机器的终端上使用VIM(Mac OS X Snow Leopard版本),删除键实际上是退格键(即破坏性退格)。

当我SSH到特定的服务器时,由于某种原因它变成了常规的删除键(即删除光标下的字符)。

我该如何使它保持一致呢?我尝试了十几种解决方案,但没有任何效果。

在终端首选项->高级中勾选“删除发送Ctrl-H”框不起作用--这是非破坏性退格。

我尝试了大约100个不同的VIM键映射,但都无济于事。

有趣的是,在输入VIM命令(例如:<something>)时,该键可以按预期工作--只有在编辑实际文本时才会出现问题。 有什么建议吗?

4个回答

18

这对我有效:

:set backspace=indent,eol,start

我不确定它确切地是做什么的,但它被列为可能的解决方案这里这里。我在一个Ubuntu分发的vimrc文件中找到了这行代码,在那里mac的“删除”键(也称为“退格”键)的行为符合预期,无需其他配置。

我遇到的问题是在插入模式下按下mac的“删除”键(也称为“退格”键)时会听到一声提示音(没有删除任何字符)。我正在使用从mac通过ssh连接到“amazon linux”上编译的vim 7.3版本。在插入模式下按下<ctrl-v><delete>会得到^?。


8

以下是几个尝试的想法:

  • In your .vimrc file on the remote server, add this line:

    set term=linux
    
  • In your .bash_profile file (or whatever corresponds to your shell of choice) on the remote server:

    stty erase ^H
    

    Note: to make this work correctly, you must type ctrl-v, then ctrl-h to type the ^H character.

    Also, make sure "Delete sends Ctrl-H" is checked in your Terminal prefs.


5
尝试一下这个:http://www.alecjacobson.com/weblog/?p=295 引用: 我通过更改我的Terminal.app设置来解决了这个问题。在“终端”>“首选项”下选择“高级”。勾选“删除发送Ctrl-H”。现在,vi和vim应该更直观地理解删除键。
注意:在我的vimrc文件中映射“删除”键似乎是正确的做法,但那太麻烦了。有没有不这样做的原因?

4

尝试将以下内容添加到目标机器的vimrc文件中:

set <Del>=<C-v><Del>

在目标机器上登录时,您必须键入<C-v><Del>。如果无法正常工作,请检查verbose imap <Del>:这应该告诉您某个插件是否已在插入模式下重新映射了<Del>


嗨ZyX,我试过了但不行。当我按下<Ctrl-v><Del>时,我得到一个看起来像":set <Del>=^?"的命令。我在VIM的命令行和我的.vimrc文件中都输入了它;还尝试以同样的方式设置<BS>,但是没有任何区别。verbose imap <Del>和verbose imap <BS>都显示"no mapping found."。非常令人沮丧,因为正如我提到的,当我实际在:prompt中键入VIIM命令时,该键的功能是正确的(作为破坏性退格键);只是在实际文档中出现问题。 - Aeonaut
@Aeonaut 非常奇怪,因为我可以使用 set <Del>=<C-v><F1> <F1>=<C-v><F2><F1><Del> 一样工作。在我所有的终端上,<Del> 发送 "^[[3~",但我看到有些终端会发送 ^?。你所说的“破坏性退格”是什么意思?也许你应该尝试 inoremap <Del> <Esc>cl(我在转写插件中使用此序列来删除前一个字符,它不受 backspacedelcombine 选项的影响)。还可以尝试 :fixdel 命令。 - ZyX

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