android - adb shell : can't use the ESCAPE key

标签 android shell cygwin adb vi

我想在运行 vi 时使用 adb shell 。启动“vi”很容易。但是,我发现 ESC 键似乎无法通过它,因此我无法退出插入模式。

更广泛地说,我似乎根本无法将 ESC 字符发送到 adb shell。我已经非常彻底地浏览了网络,但找不到任何有类似问题的人(更不用说答案了)。

我在三星 S4 上运行 VRUFNK1。在 PC 端,我在 Windows 下从 Cygwin 运行“adb shell”命令。

想法???

更新:这里有一些可能的线索。

  • adb shell 似乎不是问题。我可以在运行的文件中捕获 ESCod -cb > file ,所以 ESC 似乎正在进入在 adb shell 下运行的程序。
  • 所有命令都在我的“adb shell”中得到回显(好像 set -v 已打开,但事实并非如此)。
  • 我注意到输入似乎没有以“原始模式”从我的 cygwin shell 发送到 adb shell——即,我输入的任何文本都会在本地缓冲,直到我点击回车——然后整行都被发送。我不确定为什么这会使 ESC 无效,但肯定 vi 不希望以这种方式接收输入,这可能表明我的环境中出现了一些不寻常的情况。

  • 与#1 类似,bash (Bash X) 似乎收到了它,尽管从 bash 回显很奇怪。我可以在我的 bash shell (Bash X) 中使用 ESC 进入“编辑模式”来滚动我的历史记录(我已经运行 set -o vi ),但是体验很奇怪。当我按下 ESC,k 时,屏幕上没有任何变化,但我在命令历史记录中的位置上升了一级(应该如此);随后按下“k”会导致“k”回显到屏幕上(而不是我的历史列表中的相关命令)。当我终于按回车时,我的历史列表中的正确命令被执行(!)。

    更新 2:进展……
    我尝试将“adb shell”中的 stty 值设置为与我的 cygwin bash shell 中的值相同,但没有任何效果。

    我也试过这个:Avoiding escape timeout issues in vim 但它没有帮助。
  • 我试过这个(通过使用 :so <filename> 从文件中读入)。
  • 不幸的是,“vi”无法识别这些命令(它们实际上是“vim”命令)。

  • 部分解决方案:
    在“vi”中工作时,在 ESC 后立即输入 <cr> —— ESC 被接受,我可以退出编辑器。尴尬了,编辑窗口还是不能用(好像TERM设置错了),不过这算是进步了。

    此外,当我通过 ssh 登录时一切正常。该 shell 由 telnet 服务器启动;与直接在设备上的终端仿真器类似的情况。 ssh 有自己的服务器,然后从 shell 中分离出来。在“adb shell”的情况下,shell 是由 /sbin/adbd fork 出来的——据我所知,那个环境有一些不寻常的地方。这对我来说是一个巨大的进步——至少现在我有办法使用我的 PC 在设备上进行全屏编辑(而不是直接在 S4 的小屏幕上进行编辑)。感谢 Jack Palevich 的建议。

    在这一点上,我只能想到两件事要尝试:
  • 尝试对某人的设备运行 adb shell(但设备必须运行 root,以便我可以运行 Busybox 的“vi”)(顺便说一句,“vi”的版本不是问题——它从 ssh 运行良好。)
  • 作为其他人在我的设备上的“adb shell”中运行“vi”,从他们的主机(最好是以前成功运行过“adb shell”和 vi 的人。

  • 我开始认为它根本行不通。

    更新 3:来自 XDA 开发人员的信息
    我在 XDA 开发者论坛上找到了一些相关的帖子。似乎人们已经在很长一段时间内(至少从 2010 年开始)遇到了这个问题。我没有找到任何解决方案。

    XDA Link 1
    XDA Link 2
    XDA Link 3

    还有一段列出了与我的经验相匹配的各种感知/建议的 adb shell 错误,这里是:

    Proposed ADB Shell Bugs

    最佳答案

    你是对的 - 它根本不能在 Windows 或 Cygwin shell 下工作。我发现让它工作的最简单方法是使用 PuTTYTray

    检查链接线程中的 my answer 以获取说明和其他详细信息。

    关于android - adb shell : can't use the ESCAPE key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27786214/

    相关文章:

    linux - Cygwin GCC 交叉编译二进制文件?

    shell - KornShell (ksh) 环绕

    linux - 转换时区并减去 x 时间量

    windows - 如何打开 cygwin 终端?

    Android TabLayout 使用 android.support.v7.app.ActionBar 和 android.support.v4.app.Fragment fragment 叠加

    python - 如何在不设置shell路径的情况下将Anaconda与系统python隔离

    cygwin - 从linux到windows的rsync,无需安装smb

    android - 如何从结束的 AAR 访问 Activity 到另一个 AAR?

    android - Livedata无法正确更新 fragment 中的数据

    android - 如何在onResume中使用Intent?