I want to use vi
when running adb shell
. Starting "vi" is easy. However, I found that the ESC key doesn't seem to get through to it, so I can't exit insert mode.
更广泛地说,我似乎无法发送ESC
adb shell 的字符根本不存在。我已经彻底扫描了网络,但找不到任何有类似问题的人(更不用说答案)。
我在 Samsung S4 上运行 VRUFNK1。在 PC 端,我在 Windows 下从 Cygwin 运行“adb shell”命令。
Ideas???
更新:这里有一些可能的线索。
- adb shell 似乎不是问题。我可以在运行的文件中捕获 ESC
od -cb > file
,所以 ESC 似乎正在访问 adb shell 下运行的程序。
- 所有命令都会在我的“adb shell”中得到回显(就好像 set -v 已打开,但事实并非如此)。
- 我注意到输入似乎没有以“原始模式”从我的 cygwin shell 发送到 adb shell - 即,我输入的任何文本都会在本地缓冲,直到我按回车键 - 然后整行都会被发送。我不确定为什么这会使 ESC 无效,但 vi 肯定不希望以这种方式接收输入,也许这表明我的环境中存在一些不寻常的情况。
与 #1 类似,bash (Bash X) 似乎收到了它,尽管 bash 的回显很奇怪。我可以使用 ESC 在 bash shell (Bash X) 中进入“编辑模式”来滚动浏览我的历史记录(我已经运行set -o vi
),但是体验很奇怪。当我按下 ESC,k 时,屏幕上没有任何变化,但我在命令历史记录中的位置上升了一级(正如它应该的那样);随后按“k”会导致“k”回显到屏幕(而不是我的历史列表中的相关命令)。当我最终按下回车键时,历史列表中的正确命令将被执行(!)。
更新 2:进展...
我尝试将“adb shell”中的 stty 值设置为与 cygwin bash shell 中的值相同,但这没有任何效果。
我也尝试过这个:避免 vim 中的转义超时问题 https://code.google.com/p/mintty/wiki/Tips#Avoiding_escape_timeout_issues_in_vim但这没有帮助。
- 我尝试了这个(通过使用从文件中读取
:so <filename>
).
- 不幸的是,“vi”无法识别这些命令(它们实际上是“vim”命令)。
Partial Solution:
Typing a <cr>
immediately after the ESC when in "vi" works -- the ESC is accepted and I can exit the editor. It's awkward, and the editing window is still unusable (as if TERM was set to the wrong value), but this is progress.
另外,当我 ssh 登录时一切正常。该 shell 由 telnet 服务器启动;与直接在设备上使用终端仿真器的情况类似。 ssh 有自己的服务器,然后分叉出 shell。对于“adb shell”,该 shell 是由以下命令分叉出来的:/sbin/adbd
——据我所知,那个环境有些不寻常。这对我来说是一个巨大的进步——至少现在我可以使用我的 PC 在设备上进行全屏编辑(而不是直接在 S4 的小屏幕上进行编辑)。感谢杰克·帕列维奇的建议。
我现在只能想到两件事可以尝试:
- 尝试对某人的设备运行 adb shell(但该设备必须运行 root,以便我可以运行 Busybox 的“vi”)(顺便说一句,“vi”的版本不是问题 - 它可以从 ssh 运行良好。)
- 作为其他人在我的设备上的“adb shell”中运行“vi”,从他们的主机(最好是之前在某处成功运行“adb shell”和 vi 的人)。
我开始认为这根本行不通。
更新 3:来自 XDA 开发者的信息
我在 XDA 开发者论坛上找到了一些相关帖子。似乎人们长期以来一直面临这个问题(至少从 2010 年开始)。我没有找到任何解决方案。
XDA链接1 http://forum.xda-developers.com/showthread.php?t=816159
XDA链接2 http://forum.xda-developers.com/showthread.php?t=789238
XDA链接3 http://forum.xda-developers.com/showthread.php?t=2133211
还有一段列出了与我的经验相符的各种感知/建议的 adb shell 错误,此处: