[英]How to move the cursor word by word in the OS X Terminal
我知道组合Ctrl + A跳到当前命令的开头, Ctrl + E跳到结尾。
但是有什么方法可以逐字跳转,就像 Cocoa 应用程序中的Alt + ← / →一样?
开箱即用,您可以使用非常奇怪的Esc + F移动到下一个单词的开头,使用Esc + B移动到当前单词的开头。
在 Mac OS X 上 - 以下键盘快捷键默认有效。 请注意,您必须使Option键像终端首选项中的Meta一样(在键盘选项卡下)
我观察到用于简单文本导航的默认 emacs 键绑定似乎适用于 bash shell。 您可以使用
默认情况下,终端有这些快捷键可以逐字移动(向左和向右):
您可以配置alt + ←和→为您生成这些序列:
⌥ ←
如果它在那里,或者如果它不存在则添加它。\\033b
(您不能手动键入此文本)。\\033f
)或者,您可以在 textmate 上参考这篇博文:
切换到iTerm2 。 它是免费的,而且比普通的旧终端好得多。 此外,它还有更多自定义选项,例如键盘快捷键。
我也喜欢你可以使用cmd和 1-9 在选项卡之间切换。 尝试一下,您将永远不会回到常规终端:)
如何在 iterm2 中设置自定义键盘首选项
我经常用箭头键按错按钮( cmd / control / alt ),所以我的箭头键组合与这些按钮都设置为向前和向后跳转单词,但请做最适合你的。
其实还有更好的办法。 按住option (某些键盘上的alt )并按向左或向右箭头键按单词移动。 就那么简单。
选项←
选项→
同样ctrl e将带您到行尾, ctrl a将带您到开头。
我有Alt + ← / →工作:打开Preferences » Settings » Keyboard ,设置选项光标向左的条目以将字符串发送到外壳: \\033b ,并将选项光标向右设置以将字符串发送到外壳: \\033f 。 您也可以将其用于其他 Control 键组合。
实际上这取决于您使用的外壳,但是大多数外壳具有类似的绑定。 您所指的绑定(例如Ctrl + A和Ctrl + E )是您可以在许多其他程序中找到的绑定,并且它们已经使用了很长时间,顺便说一句,也适用于大多数 UI 应用程序。
下面是 Bash 的默认绑定:
另请注意,您可以自定义它们。 您需要创建一个文件,名称随心所欲,我将我的文件命名为 .bash_key_bindings 并将其放入我的主目录中。 您可以在那里设置一些常规的 bash 选项,也可以设置键绑定。 为了确保它们被应用,您需要修改一个名为“.bashrc”的文件,bash 在启动时读取该文件(您必须创建它,如果它不存在)并在那里进行以下调用:
bind -f ~/.bash_key_bindings
~ 表示 bash 中的主目录,如上所述,您可以随意命名文件,也可以将其放置在您喜欢的位置,只要您输入正确的路径+名称即可绑定。
让我向您展示我的 .bash_key_bindings 文件的一些摘录:
set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off
这些只是设置了几个选项(例如禁用铃铛;这些都可以在 bash 网页上查找)。
"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert
这些确保字符本身只是确保“键入”字符(它们将自己插入到外壳中)之外什么都不做。
"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line
这很有趣。 如果我单独按 Ctrl + D (我选择 d 进行删除),则什么也不会发生。 但是如果我再输入一个小写的 w,光标左边的单词就会被删除。 但是,如果我输入大写字母,光标右侧的单词就会被杀死。 对于从光标开始的整行,l 和 L 也是如此。 如果我输入“a”,实际上整行都被删除了(光标前后的所有内容)。
我在Ctrl + F上向前跳跃一个词,在Ctrl + B上向后跳跃一个词
"\C-f": forward-word
"\C-b": backward-word
如您所见,您可以创建一个快捷方式,它会立即导致一个操作,或者您可以创建一个,它只是启动一个字符序列,然后您必须键入一个(或多个)字符以导致一个操作发生在上面的示例中进一步显示。
按住 Option 键并单击您希望光标移动的位置
如果你碰巧是 Vim 用户,你可以尝试 bash 的 vim 模式。 运行这个或把它放在你的~/.bashrc
文件中:
set -o vi
默认情况下,您处于插入模式; 点击转义,你可以像在正常模式 Vim 中一样四处移动,所以按单词移动是w
或b
,并且通常的移动键也可以使用。
如果您在首选项的键盘选项卡中选中Use option as meta key
,则默认 emacs 样式命令分别用于向前和向后单词以及⌥F
( Alt + F ) 和⌥B
( Alt + B )。
我建议阅读From Bash to Z-Shell 。 如果你想提高你的 bash/zsh 实力!
从 Mac OS X Lion 10.7 开始,默认情况下终端将Option - Left/Right Arrow映射到Esc - b/f ,因此它现在内置于 bash 和其他使用这些 emacs 兼容键绑定的程序中。
在 Bash 中,这些绑定到Esc - B和Esc - F 。 Bash 有很多很多的键盘快捷键; 看看bind -p
的输出,看看它们是什么。
如前所述,您可以在~/.bashrc
添加set -o vi
以使用vi
/ vim
键绑定,或者您可以在.bashrc
添加以下部分以使用Ctrl
和箭头键移动:
# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'
要启动这些代码行的效果,请使用source ~/.bashrc
或启动一个新的终端会话。
iTerm2 Build 3.3.4 用户的新答案:
步骤 1:(macOS X) 系统偏好设置 > 键盘 > 快捷方式选项卡 > 选择任务控制(左面板)> 取消选中标记为“向左移动一个空格”和“向右移动一个空格”的快捷方式
第 2 步:(iTerm2 Build 3.3.4) Preferences > Profiles > Select * Default (left panel) > Keys tab > 删除 "⌥->" 和 "⌥<-" 条目 > 设置两个 "Left Option (⌥) Key: " 和 "Right Option (⌥) Key:" 到 Esc+
不要乱用外壳配置文件,不要乱用劣质的 masOS(默认)终端,没有尴尬的 Esc+F/B,冲洗和重复无意义。
木已成舟!!!
享受这个技巧吧,我的程序员伙伴们!
只需在Terminal > Preferences > Settings > [profile] > Keyboard 中检查“ Use Option as meta key ”选项,正如@cris-page 在这里已经提到的。
但是请注意,在 macOS Catalina (10.15) 及更新版本中, zsh成为新添加用户的默认 shell:其默认配置仅将空格视为单词边界,而旧的bash使 meta-left/right 跳转到最近的非字母数字字符(类似于B
/ W
而不是b
/ w
对于那些熟悉vim 的人):
v----v- bash jumps here
$ vim some-folder/what.txt_<- jump left twice from here
^---^- zsh jumps here by default
(类似的动作也适用于元退格键)
有不止一种方法可以使 zsh 命令行编辑器导航与 bash 类似 - 这是一种这样的方法:
# Place in your profile init script, e.g. `~/.zshrc`
autoload -U select-word-style
select-word-style bash
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.