基本上(这是过去几个月发生的),我登录了几个不同的CentOS服务器(一个Linode,另一个VPS,以及我有shell访问的共享主机),运行5.5,5.7和6,来自我的Mac运行OS X Lion,使用终端.
基本上:
$ssh username@example.com [remote-host] $nano somefile.txt
一旦我开始编辑文件,如果我使用箭头键移动光标,或开始删除,然后再次键入,光标会跳转一点,如果我保存文件并重新打开它,很明显光标是事实上,无缘无故地跳到一条线上.
我最终得到的结论是“这是一个新文本”.当我输入(对光标疯狂的编辑器)“这是一行文字.”
在编辑配置文件时,这是一个很大的问题,因为我经常需要编辑一行,保存并关闭,然后重新打开以确保该行正确…然后编辑另一行…而且它变得非常烦人.
我发现Linode Lish Shell Vim and Nano rendering troubles: lines not appearing / cursor positions wrong,但我不知道这是否有多大关系,因为那是特别指的是lish.
这些服务器上的nano版本(s?)有时会在将光标向左移动一个字符时发送Backtab(ESC [Z]序列,但终端不支持此序列,因此nano认为光标已经移动了t及其关于光标当前位置的想法与终端不同步.
由于我无法理解的原因,nano在向左移动时发送Backtab,光标是制表位右侧的一个字符.类似地,IIRC,当向右移动时它发送一个Tab(Control-I),并且光标是制表位左侧的一个字符.我不知道为什么它会在制表位周围这样做,而不是总是使用相同的字符序列左/右移动. Mac OS X Lion 10.7附带的nano版本没有这样做.
当terminfo表示支持cbt功能时,Nano仅执行此操作.终端的默认terminfo是xterm-256color,它声明了此功能并将其映射到Backtab序列.解决方法是将TERM环境变量设置为不声明此功能的内容.您可以在调用ssh之前在本地计算机上执行此操作,也可以在远程主机上的shell启动文件中执行此操作.虽然不建议将其设置为xterm-color,但它会禁用其他重要行为(例如256色,BCE,备用屏幕内容保留). (更重要的方法是在远程主机上自定义xterm-256color(或xterm)terminfo文件以删除cbt.)
建议自定义远程主机(以这种或那种方式),因此自定义不适用于本地或其他远程主机,但最简单的解决方法是将终端首选项设置更改为使用xterm-color而不是xterm-256color:
Terminal > Preferences > Settings > [profile] > Advanced > Declare terminal as: