SSH 远程服务器上的 vim/nano 中出现乱码

SSH 远程服务器上的 vim/nano 中出现乱码

......这让我发疯了。

基本上(这在过去几个月一直发生),我使用终端从运行 OS X Lion 的 Mac 登录到几个不同的 CentOS 服务器(一个 Linode,另一个 VPS 和一个我有 shell 访问权限的共享主机),运行 5.5、5.7 和 6。

基本上:

$ ssh [email protected]

[remote-host] $ nano somefile.txt

一旦我开始编辑文件,如果我使用箭头键移动光标,或者开始删除,然后再次输入,光标就会跳动一点,如果我保存文件并重新打开它,很明显光标曾是,事实上,毫无明显原因地在一条线上跳来跳去。

我最终得到了诸如“这是一个 neof 文本”之类的内容。当我(在光标疯狂的编辑器中)输入“这是一行文本”时。

在编辑配置文件时这是一个大问题,因为我经常必须编辑一行,保存并关闭,然后重新打开以确保该行正确......然后编辑另一行......这变得非常烦人。

我发现Linode Lish Shell Vim 和 Nano 渲染问题:线条不出现/光标位置错误,但我不知道这是否有太大关系,因为这是专门指 lish 的。

答案1

[更新:从 Mac OS X Mountain Lion 10.8 开始,终端支持 Backtab 转义序列,从而消除了这个问题。]

这些服务器上的 nano 版本有时会在将光标向左移动一个字符时发送一个 Backtab(ESC [ Z)序列,但终端不支持此序列,因此 nano 认为光标已移动但实际上并未移动,并且它对光标当前位置的想法与终端不同步。

由于我无法理解的原因,当 nano 向左移动并且光标位于制表位右侧一个字符时,它会发送 Backtab。同样,如果我没记错的话,当它向右移动并且光标位于制表位左侧一个字符时,它会发送 Tab (Control-I)。我不知道为什么它会在制表位周围这样做,而不是始终使用相同的字符序列向左/向右移动。Mac OS X Lion 10.7 附带的 nano 版本不会这样做。

Nano 仅在 terminfo 表示cbt支持该功能时才执行此操作。终端的默认 terminfo 是xterm-256color,它声明了此功能并将其映射到 Backtab 序列。一种解决方法是将TERM环境变量设置为不声明此功能的内容。您可以在调用之前在本地计算机上ssh或在远程主机上的 shell 启动文件中执行此操作。将其设置为xterm-color在紧急情况下可以做到,但不建议这样做,因为它会禁用其他重要行为(例如 256 色、BCE、备用屏幕内容保存)。(更重量级的方法是自定义远程主机上的xterm-256color(或xterm)terminfo 文件以删除cbt。)

建议自定义远程主机(不管怎样),因此自定义不会在本地应用或其他远程主机,但最简单的解决方法是更改​​终端首选项设置以xterm-color使用xterm-256color

终端 > 首选项 > 设置 > [配置文件] > 高级 > 将终端声明为:

我建议复制现有的设置配置文件,对其进行自定义,并且仅在连接到那些远程主机时使用它。

答案2

我也遇到了同样的问题。我发现此主题除其他解决方案外,还建议在远程服务器上使用环境变量:

export TERM=xterm-color

将它添加到 ~/.bash_profile 对我来说解决了这个问题。此解决方案很简单,并且只影响特定主机上的特定用户。

答案3

我在 MobaXTerm 程序中遇到了同样的问题。问题的原因是我在使用 PuTTY 时使用 -K 键来启用 Nano 中的数字键盘。我发现在 MobaXTerm 中 -K 是不必要的(数字键盘默认工作),没有它,箭头键也可以正常工作,不会随机插入垃圾。

答案4

对于 MobaXterm 用户。如果您未使用 -K 并且仍然遇到问题。请确保在 /etc/nanorc 文件中注释掉以下几行。

# 设置重新绑定删除

# 设置重新绑定键盘

相关内容