Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
固定<;右箭头>;在bash vi输入模式下。键入的字符不能超过最后一个字符_Bash_Macos_Vi_Readline_Arrow Keys - Fatal编程技术网

固定<;右箭头>;在bash vi输入模式下。键入的字符不能超过最后一个字符

固定<;右箭头>;在bash vi输入模式下。键入的字符不能超过最后一个字符,bash,macos,vi,readline,arrow-keys,Bash,Macos,Vi,Readline,Arrow Keys,我正在尝试在bash中使用vi模式。通过.inputrc(在OSX上): 在vi-insert模式下,右箭头键将光标向右移动,但在行中的最后一个字符处停止。如果光标超过行的末尾,则会将光标向左移动。总之,你能走的最右边是行中最后一个字符 $ 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 b

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

在vi-insert模式下,右箭头键将光标向右移动,但在行中的最后一个字符处停止。如果光标超过行的末尾,则会将光标向左移动。总之,你能走的最右边是行中最后一个字符

$ 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的版本。然而,我使用brew升级了bash(GNU bash,版本4.3.42),甚至尝试按照该网站的建议安装和链接readline(6.3.8)。但是没有运气。可能是升级操作不正确

这意味着我正在寻找以下之一:
  • OSX终端中bash和readline升级的正确方法
  • 检查OSX实际使用的bash/readline版本的一种方法
  • 此错误的另一个修复程序(以某种方式在inputrc中传入virtualdit=onemore选项)
  • 显示最新版本的readline可能重新引入该缺陷的迹象,以及解决方案
  • 另外:如果editrc有类似的事情

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

您不能编辑.bashrc本身以使用vi模式吗?命令
set-ovi
在我的情况下执行此操作(您最初处于编辑模式)。同时删除.inputrc编辑,因为这两个编辑之后可能会进行恶意交互。

回答如下:

显然,这是OSX(3.2)附带的bash版本中的一个bug,根据这个答案,它在4.3中得到了修复。使用
bash--version
检查bash版本

要修复,请更新bash,例如

macports:
sudo端口安装bash

brew:
brew安装bash

安装后,
bash--version
将显示它已更新(假设$PATH开头有标准brew/macports路径)

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

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

(默认)brew:
/usr/local/bin/bash

即使
哪个bash
显示macports/brew,也需要更改默认登录shell步骤


以上链接的答案都值得称赞。

Shell脚本问题在这里的主题上非常完美,但Shell使用问题更好,或者我应该把它移过去吗?如果是,怎么做?(我对UI有点陌生)我正在使用Vi模式。问题发生在VI插入模式下。我要求更改提供VI模式的内容(即,提供VI模式的应该是Bash,而不是终端本身),尽管我想要求澄清区别。Bash使用不同的readline程序?或者是终端(OSX)总是使用内置的读线,它有这个错误,并且没有办法改变它?其次,这不会影响使用readline的其他程序,例如交互式口译员?如果是这样的话,有没有办法改变终端的默认设置呢?正如你已经注意到的那样,终端本身有缺陷(如果没有,你甚至不会发布这个问题),我可以确认OS X 10.9.5没有这个缺陷(Hackintosh,无法升级)
$ 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