SSH在远程服务器上使用vim / nano中的字符

……这让我疯了.

基本上(这是过去几个月发生的),我登录了几个不同的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.

[更新:自Mac OS X Mountain Lion 10.8起,终端支持Backtab转义序列,消除了此问题.]

这些服务器上的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:

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

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...