Bash CTRL在单词/字符串之间移动光标

Bry*_*uiz 73 bash

我习惯使用CTRL键在使用左右箭头键时移动得更快(转到单词的末尾,而不是一次只有一个字符).

我能以某种方式在bash中这样做吗?

我可以编码,但我想知道是否有更容易/已经完成的事情.

Tho*_*mas 85

使用默认的readline键绑定,ALT+ B返回一个单词,ALT+ F前进一个单词.

默认的Ubuntu设置还提供了CTRL你习惯的+箭头.这些/etc/inputrc内容如下:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
Run Code Online (Sandbox Code Playgroud)

不知道为什么我们需要三个......

  • @bryan_ruiz:不同的键盘(终端仿真器等)输出不同的序列.要查看序列,请按Ctrl-v然后按键.对我来说,在PuTTY中,Ctrl-v Ctrl-RightArrow给我`^ [OC`与你的相同.在`xterm`中,我得到`^ [[1; 5`与Thomas'相同. (19认同)
  • 最好通过编辑``〜/ .inputrc```来做到这一点 (6认同)
  • 编辑〜/ .inputrc可能会停止加载'system'(/ etc/inputrc).另请注意,'set -o'设置 - "set -o emacs"应该在命令行上为您提供emacs样式键绑定,而不是例如"set -o vi"(执行此操作后您需要按在尝试使用w或b之前的ESC. (3认同)
  • @Viet:查看您上方的评论:) (2认同)
  • 我不敢相信没有这个我还能活多久。 (2认同)
  • @DavidGoodwin经过一些搜索,添加`$ include/etc/inputrc`也会加载系统inputrc文件. (2认同)

Bry*_*uiz 39

正如托马斯解释的那样,你可以添加绑定/etc/inputrc.

每次登录时加载的另一种替代方法是将它们放入~/.bashrc :

#use ctl keys to move forward and back in words
bind '"\eOC":forward-word'
bind '"\eOD":backward-word'
Run Code Online (Sandbox Code Playgroud)

我了解到您可以cat > /dev/null 用来查看键盘发送的字符,例如,CTRL +向右箭头显示:

^[OC
Run Code Online (Sandbox Code Playgroud)

where ^[是相同\e 的,这是代码来自bind命令的地方.

你也可以查找这样的绑定:

bind -p | grep forward-word
Run Code Online (Sandbox Code Playgroud)

所有这一切都非常棒,我很高兴我发现了更多的bash力量.

  • 我认为*这只会影响bash,而`inputrc`解决方案也适用于其他使用readline的程序,例如Python解释器,大多数其他shell.请注意,如果您没有root,或者不希望它们应用于所有用户,您也可以将命令放在`〜/ .inputrc`中. (6认同)
  • 您也可以直接输入`read`并按Enter键以达到与`cat>/dev/null`相同的效果.我很懒,所以我喜欢打字少的解决方案.:) (3认同)
  • +1尤其是"我知道你可以使用cat>/dev/null查看键盘发送的字符".#TIL (2认同)

Con*_*che 5

主目录中的 .inputrc 将导致 ctrl+left 停止在 Ubuntu 上工作(例如)。

要使一切正常,请将以下内容添加到 ~/.inputrc:

# Include system-wide inputrc, which is ignored by default when
# a user has their own .inputrc file.
$include /etc/inputrc
Run Code Online (Sandbox Code Playgroud)

归功于f.kowal