【问题标题】:Fixing <right arrow> in bash vi input mode. Cannot type beyond last character在 bash vi 输入模式下修复 <右箭头>。无法输入超过最后一个字符
【发布时间】:2016-10-26 06:10:10
【问题描述】:

我正在尝试在 bash 中使用 vi 模式。通过 .inputrc(在 OSX 上):

set editing-mode vi

在 vi 插入模式下,右箭头键将光标向右移动,但它停在该行的最后一个字符上。如果光标超过了行尾,它会将光标移到left。所以,总而言之,你能走的最右边就是行中的最后一个字符。

$ cd /usr/locl/bin
# Move the cursor to the middle of the line, and fix something there
$ cd /usr/local/bin
# Now move the cursor back to the end, and write a character (/)
$ cd /usr/local/bi/n

如上所示,这意味着您不能在不进入命令模式(并使用“a”)的情况下编辑行尾。

我发现一篇文章似乎指出了 readline/bash might be the problem 的版本。但是,我使用 brew 来升级 bash(GNU bash,版本 4.3.42),甚至按照该站点的建议尝试安装和链接 readline(6.3.8)。但没有运气。可能是升级不正确。

这意味着我正在寻找以下内容之一:

  • OSX终端升级bash和readline的正确方法
  • 一种检查 OSX 实际使用的 bash/readline 版本的方法
  • 此错误的另一个修复(以某种方式在 inputrc 中传递了 virtualedit=onemore 选项)
  • 表明最新版本的 readline 可能重新引入了错误和解决方案。
  • 另外:如果editrc有类似的东西

注意:我希望 bash 中的 readline 行为与默认值几乎相同(对于定期使用我的终端的其他人),但允许我使用 vim 模式。这意味着我不需要解决方法,而是需要修复。

【问题讨论】:

  • Shell 脚本问题在这里完全是主题,但是 unix.stackexchange.comsuperuser.com 上的 shell usage 问题更好
  • 那我应该把它移过来吗?如果是这样怎么办? (我对 UI 有点陌生)

标签: bash macos vi readline arrow-keys


【解决方案1】:

你不能编辑 .bashrc 本身来使用 vi 模式吗?命令set -o vi 在我的情况下执行此操作(您最初处于编辑模式)。还要删除 .inputrc 编辑,因为之后两者实际上可能会发生恶意交互。

【讨论】:

  • 我正在使用 Vi 模式。在 VI 插入模式下会出现问题。
  • 我要求更改提供 vi 模式的内容(即,提供 vi 模式的应该是 Bash,而不是终端本身)
  • 确实有效,但我想要求澄清差异。 Bash 使用不同的 readline 程序?还是终端(OSX)将始终使用具有此错误且无法更改的内置 readline?其次,这不会影响使用 readline 的其他程序,例如交互式口译员?如果是这样,有没有办法改变终端默认值?
  • 终端本身有问题,你已经注意到了(如果不是,你甚至不会发布这个问题)
  • 我可以确认 OS X 10.9.5 没有这个错误(Hackintosh,无法升级)
【解决方案2】:

在这里回答:https://unix.stackexchange.com/a/222506/198846

显然,这是 OSX (3.2) 附带的 bash 版本中的一个错误,根据该答案,它已在 4.3 中修复。使用 bash --version 检查您的 bash 版本。

要修复,更新 bash,例如

macports:sudo port install bash

酿造:brew install bash

一旦安装 bash --version 将显示它已更新(假设标准 brew/macports 路径位于您的 $PATH 开头)

然后您必须将默认登录 shell(在系统偏好设置->用户和组->右键单击您的用户->高级选项->登录 shell)更改为新 bash 的路径:

(默认)macports:/opt/local/bin/bash

(默认)酿造:/usr/local/bin/bash

即使which bash 显示的是 macports/brew ,也需要更改默认登录 shell 步骤。

所有功劳归功于上面链接的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    相关资源
    最近更新 更多