远程服务器上vim / nano中的SSH garbling字符


18

...这让我发疯。

基本上(过去几个月来一直在发生这种情况),我登录了几台不同的CentOS服务器(一台Linode,另一台VPS以及我可以通过shell访问的共享主机),并分别从5.5、5.7和6运行使用终端运行Mac OS X Lion的Mac。

基本上:

$ ssh username@example.com

[remote-host] $ nano somefile.txt

一旦我开始编辑文件,如果我使用箭头键在光标周围移动,或开始删除,然后再次键入,则光标会跳一点,如果我保存文件并重新打开它,很明显光标,实际上,没有明显的原因就可以跳到一条线上。

我最终得到诸如“这是一个新手文本”之类的东西。当我输入(向疯狂的光标编辑器输入)“这是一行文本”。

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

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


1
嘿@geerlingguy,几年前,当您的名字对我毫无意义时,我发布了此问题的答案,但现在我经常使用您的作品。感谢您所做的所有宝贵贡献!
dbenton

1
@dbenton-我帮助您,您帮助我,我们是一个快乐的社区:)
geerlingguy

Answers:


14

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

这些服务器上的nano版本有时会在将光标向左移动一个字符时发送Backtab(ESC [Z])序列,但是Terminal不支持此序列,因此nano认为光标在没有移动时已经移动了t并且其关于光标当前位置的想法与终端不同步。

由于我无法理解的原因,nano在向左移动时会发送Backtab,并且光标是制表位右侧的一个字符。同样,IIRC在向右移动时会发送一个制表符(Control-I),并且光标在制表位的左侧是一个字符。我不知道为什么它会在制表位附近停止,而不是总是使用相同的字符序列向左/向右移动。Mac OS X Lion 10.7随附的nano版本无法执行此操作。

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

建议自定义远程主机(一种或另一种方式),这样自定义不适用于本地或其他远程主机,但是最简单的解决方法是更改​​要使用的Terminal首选项设置,xterm-color而不是xterm-256color

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

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


设置xterm-color绝对可行-您能否详细说明如何在远程主机上自定义我的terminfo文件?一个链接可以,但是我可能会
不时

1
@geerlingguy 修改现有的terminfo定义。删除源文件中的cbt=\E[Z条目.ti
TachyonVortex

这对我有帮助,我将选项从xterm-256color设置为xterm,现在可以选择,复制等了。就像以前一样。(我不知道如何或由谁更改了此选项)。谢谢!
spacebiker

8

我遇到了同样的问题。我发现此线程在其他解决方案中推荐了远程服务器上的环境变量:

export TERM=xterm-color

将此添加到〜/ .bash_profile为我解决了这个问题。该解决方案很简单,其好处是仅影响特定主机上的特定用户。


2

MobaXTerm程序中存在相同的问题。问题的原因是-K键,当我使用PuTTY时,该键用于在Nano中启用小键盘。正如我在MobaXTerm中发现的那样,不需要-K(数字键盘默认情况下可用),并且没有它,箭头键可以正常工作,并且不会随机插入垃圾。


1

Centos作为来宾OS运行的OSX 10.7.4

在OSX终端首选项,设置中,高级

Declare terminal as:xterm-color
Strict VT-100 keypad behaviour - TICKED!

没有更多的问题:)


请注意,“ VT-100键盘行为”首选项与该问答完全无关,并且对结果没有影响。
克里斯·佩奇

1

对于MobaXterm的用户。如果您没有使用-K,但仍然遇到问题。确保/ etc / nanorc文件中的以下行已被注释掉。

#设置rebinddelete

#设置rebindkeypad


0

是的,可能的问题是,是的,您的本地计算机和服务器都在具有nano的Unix系统上,但是这些nano版本可能有所不同。

export TERM=xterm-color

-1

如果您得到的是“这是一个Neof文本”,而您键入的是“这是一行文本”(我必须假定您的报告是正确的),那么无论Mac上是什么,您都有一个不稳定的“ control”键(命令? 苹果?)。因为nano使用的是Control +键来“跳来跳去”,并且您的字符少于键入的字符,所以我们有a)消失的字符b)从无到有的控制序列出现,从而推断出a)成为b)是合乎逻辑的。

您可能还会有一些令人讨厌的热键/宏/诸如此类的程序。我怀疑这属于超级用户,而不属于serverfault,但我会举报也许有人有一个现实的,受SSH约束的答案。


当我使用箭头键在一行中来回移动时,这种情况会发生,这比我简单打字时要多。但这似乎是随机的。我将快速尝试Chris的建议,看看是否可行,但感谢您的回答!
geerlingguy 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.