无论用于连接的终端如何,如何重新映射换行符和回车符?

无论用于连接的终端如何,如何重新映射换行符和回车符?

我的所有配置都存储在我的 github 帐户中(https://github.com/mnebuerquo/dotfiles)这样我就可以克隆我的存储库并运行我的安装脚本,并且我的家被配置为使用我的所有工具。我将 dotfiles 存储库安装到我设置的任何服务器中的家中,因此很方便,而且我不必切换回普通 vim 和 tmux 控件。

我刚刚开始从 Nexus 6 使用 JuiceSSH,并且希望能够从手机附加到我的 tmux 会话。

当我使用 tmux 时,问题就出现了。 JuiceSSH 上的终端行为与 Ubuntu 上的 Gnome 终端等终端行为不同。 Juice 似乎是发送 ctrl+j,而其他术语则发送 ctrl+m。

到目前为止,除了 tmux 之外,这不是问题。我正在使用 vim+tmux 导航器(https://github.com/christoomey/vim-tmux-navigator) 绑定 ctrl+h、ctrl+j、ctrl+k、ctrl+l 在 vi​​m 和 tmux 的窗格之间导航。当我按下手机键盘上的 Enter 键时,它会导航到 tmux (Cj) 中的下一个较低窗格。当我从任何设备上执行 ctrl+m 操作时,我都会得到我正在寻找的回车符。当我不使用自己的 tmux.conf 时,其中 Cj 未绑定,则 Enter 键可以在我的手机上使用 JuiceSSH 工作。

我想要做的是更改 .bashrc 中的终端配置或修复此问题,以便无论我的终端为输入键发送什么内容,它都可以与 tmux 一起使用。

答案1

如果手机确实发出 cj,那么不行,唯一的解决方案是更改 tmux-navigator 中的绑定。我认为 ssh纯粹基于字节。 (你也可以发送unix信号,例如ctrl+c /中断,但仅此而已)。它之所以能够工作,是因为您的手机在会话打开时告诉 ssh 服务器它正在使用 cj 作为换行符。

RFC 4254 - 安全外壳 (SSH) 连接协议

答案2

我想你想要:

stty -icrnl

...虽然这对我来说似乎有点奇怪。据我了解,苹果系统默认使用\return 行结束符,但在我的所有 Linux 系统上都有默认值stty sane终端将执行完全相反的操作并进行翻译输入C联姻r回报n伊内斯。你的 Android 设备和我的 Linux 系统共享一个系统内核 - 这是处理终端的线路纪律stty设置会影响。不过,要\r在按下 eturn 时发送一个return \r,你可以告诉它停止它。

答案3

谢谢你们的回答,伙计们!

看来我的问题已经解决了,即使我在问这个问题。 JuiceSSH 刚刚发布了一个更新,修复了 Enter 键问题。

https://juicessh.com/changelog

7 月 25 日的 JuiceSSH 更新“使用最新版本的 Google 键盘时修复 Nano 中的输入键”似乎是我的问题的解决方案。我在今天早上提出问题后但在今天下午阅读回复之前发现了更新。

所以,@mikeserv,你是对的,这看起来有点奇怪。我试图通过以奇怪的方式绑定按键来解决手机应用程序中的错误。但这不再是必要的,因为手机现在发送正确的字符。

相关内容