我知道组合 Ctrl+A 跳到当前命令的开头, Ctrl+E 跳到结尾。
但是有什么方法可以逐字跳转,就像 Cocoa 应用程序中的 Alt+←/→ 一样?
ALT
快捷方式已添加到最新 OS X 版本的终端中。
开箱即用,您可以使用非常奇怪的 Esc+F 移动到下一个单词的开头,并使用 Esc+B 移动到当前单词的开头。
在 macOS(所有版本)上,默认情况下以下键盘快捷键有效。
ALT+F 向前跳一个字。
ALT+B 向后跳一个字。
请注意,您必须将 Option 键设置为类似于 Meta 键。您可以通过访问首选项 (CMD+,) 并选择配置文件 -> 键盘在终端中执行此操作。在 iTerm2 Pselect rofiles -> Keys -> General 并选择“Option key as Esc+”。
https://i.stack.imgur.com/b22Mm.jpg
此外,一些用于简单文本导航的 Emacs 样式的键绑定似乎可以在 bash shell 上运行。您可以使用:
CTRL+F 向前移动一个字符
CTRL+B 向后移动一个字符
CTRL+A 跳转到行首
CTRL+E 跳转到行尾
CTRL+K 终止从光标位置开始的行
ALT+D 删除从当前光标位置开始的单词
CTRL+W 从光标位置向后删除单词
CTRL+Y 从终止缓冲区粘贴文本
CTRL+R 从历史记录中反向搜索您过去键入的命令。
CTRL+S 转发搜索(对我来说在 ZSH 中有效,但在 bash 中无效)
+ESC
,然后您可以使用 OPTION f/b 相应地向前和向后移动单词。 More
/
个字符,这很痛苦。知道如何将 /
包含为单词分隔符吗?
默认情况下,终端有这些快捷键来逐字移动(左右):
ESC+B(左)
ESC+F(右)
您可以配置 alt+← 和 → 为您生成这些序列:
打开终端首选项(cmd+,);
在“设置”选项卡上,选择“键盘”并双击 ⌥ ← 如果它在那里,或者如果它不存在则添加它。
根据需要设置修饰符,在框中键入快捷键:esc+B,生成文本\033b(不能手动键入此文本)。
对 word-right 重复(esc+F 变为 \033f)
或者,您可以在 textmate 上参考此博客文章:
http://blog.macromates.com/2006/word-movement-in-terminal/
Esc+
字段中输入 B
代表 back 或 F
代表 forward
alt left
和 alt right
来生成这些序列
切换到 iTerm2。它是免费的,而且比普通的旧终端好得多。它还具有更多自定义选项,例如键盘快捷键。
我也喜欢您可以使用 cmd 和 1-9 在选项卡之间切换。尝试一下,您将永远不会回到常规终端:)
如何在 iterm2 中设置自定义键盘首选项
安装 iTerm2
启动然后转到首选项窗格。
选择键盘配置文件选项卡
您需要将配置文件复制到新的内容,然后删除箭头键快捷键,例如 ^+ 右/左,或者如果您不关心备份,只需从默认配置文件中删除它们。
接下来确保选择了您修改过的个人资料(已加星标)
https://i.stack.imgur.com/cqLnO.png
现在选择键盘选项卡(最上面一行)
https://i.stack.imgur.com/i2o2y.png
单击加号按钮以添加新的键盘快捷键
在第一个框中键入 CMD+向左箭头
在第二个框中选择“发送转义码”
在第三个框中输入字母 B
https://i.stack.imgur.com/xFBlY.png
重复所需的组合键。 escape+B 向左移动一个单词,escape+f 向右移动一个单词。
您可能还希望设置 cmd+d 以使用 escape+d 删除光标前面的单词
我经常用箭头键按错按钮(cmd / control / alt),所以我的箭头键组合与这些按钮都设置为向前和向后跳转单词,但请做最适合你的。
Ctrl + Arrow Left
或 Right
- Up
和 Down
有效:/ 尝试使用和不使用新配置文件设置为默认值
实际上有一个更好的方法。按住选项(某些键盘上的 alt)并按左或右箭头键按单词移动。就那么简单。
选项← 选项→
此外, ctrle 将带您到行尾,而 ctrla 将带您到开始。
[D
和 [C
。要解决此问题,请将 bind '"[D": backward-word'
和 bind '"[C": forward-word'
添加到我的 .bashrc
。
.bashrc
中添加了绑定东西,但它没有用,对我有什么问题吗? (我使用 RubyMine)
.bashrc
。尝试 echo "here"
并查看在您打开新终端时是否显示该消息。此外,您必须关闭并重新打开终端或运行 source ~/.bashrc
以使其读取新文件。
我有 Alt+←/→ 工作:打开首选项»设置»键盘,设置选项光标左侧的条目以将字符串发送到外壳:\033b,并将选项光标右侧设置为将字符串发送到外壳:\033f。您也可以将其用于其他 Control 组合键。
Enable option as meta key
时才有效。顺便说一句,这很酷。与 Esc+B 或 Esc+F 相比,按键肯定更方便
实际上,这取决于您使用的 shell,但是大多数 shell 都有类似的绑定。您所指的绑定(例如 Ctrl+A 和 Ctrl+E)是您可以在许多其他程序中找到的绑定,并且它们已经使用了很长时间,顺便说一句,它也适用于大多数 UI 应用程序。
下面是 Bash 的默认绑定:
Most Important Bash Keyboard Shortcuts
另请注意,您可以自定义它们。您需要创建一个文件,根据需要命名,我将我的命名为 .bash_key_bindings 并将其放入我的主目录。在那里你可以设置一些通用的 bash 选项,你也可以设置键绑定。为了确保它们被应用,您需要修改 bash 在启动时读取的名为“.bashrc”的文件(如果它不存在,则必须创建它)并在那里进行以下调用:
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
这些确保字符本身什么都不做,只是确保字符是“键入的”(它们将自己插入到 shell 中)。
"\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
正如你所看到的,你可以创建一个快捷方式,立即导致一个动作,或者你可以创建一个快捷方式,它只是初始化一个字符序列,然后你必须输入一个(或多个)字符才能导致动作发生在上面的示例中显示。
因此,如果您对默认绑定不满意,请随意自定义它们。此处是 link to the bash manual 以了解更多信息。
command
键码如何?在您的示例中,control
是 \C
,但 command
是什么?
\M
) 中的 Meta
,cmd+left 将是 \M-\e[D
。但是,您不能将 cmd+... 映射到任何东西,所有命令快捷方式都由终端应用程序本身处理(并因此被吞没)(那些永远不会转发到 shell),如果您有多个,则 cmd+left 映射到“上一个窗口”终端窗口打开。抱歉,终端应用程序无法做到这一点。
使用自然文本编辑预设!
https://i.stack.imgur.com/EUuAA.png
本质上,它将 Option + LeftArrow 绑定到 ^[b
序列和 Option + RightArrow 到 ^[f
以及其他键序列
这适用于 fish 和 bash,以及 psql 终端。
按住 Option 键并单击您希望光标移动的位置
如果你碰巧是 Vim 用户,你可以试试 bash 的 vim 模式。运行此程序或将其放入您的 ~/.bashrc
文件中:
set -o vi
默认情况下,您处于插入模式;点击escape,你可以像在普通模式下一样移动,所以按单词移动是w
或b
,还有usual movement keys also work。
如果您在首选项的键盘选项卡中选中 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
的输出以了解它们是什么。
在 iterm2
的 Preferences >简介 > Keys,您点击Key Mappings下方的+
并记录一个新的快捷方式。对于 Action,选择 Send Escape Sequence
并分别输入 b
或 f
用于向后和向前。
当我尝试为 (Ctrl+←) 录制一个时,我注意到在键盘快捷键字段中箭头从未出现过。事实证明,我必须首先禁用默认 mac 的系统偏好设置 > 键盘 > 快捷方式 > 任务控制快捷方式才能让事情正常工作,因为它们会覆盖 iterm2 的默认快捷方式。标准终端应用程序也应该如此。
https://i.stack.imgur.com/mitIx.png
出于某种原因,我的终端的选项+箭头不起作用。为了在 macOS 10.15.6 上解决这个问题,我打开了终端应用程序的首选项,并且必须设置绑定。
Option-left = \033b
Option-right = \033e
https://i.stack.imgur.com/fFjC8.png
出于某种原因,我的 option-right
被设置为 \033f
。现在它已经修复了,我可以再次自由地跳过 termianl 中的单词。
iTerm2 Build 3.3.4 用户的新答案:
第 1 步:(macOS X)系统偏好设置 > 键盘 > 快捷方式选项卡 > 选择任务控制(左侧面板)> 取消选中标记为“向左移动空格”和“向右移动空格”的快捷方式
第2步:(iTerm2 Build 3.3.4)首选项>配置文件>选择*默认(左面板)>键选项卡>删除“⌥->”和“⌥<-”条目>设置“左选项(⌥)键: " 和 "右选项 (⌥) 键:" 到 Esc+
不要乱用 shell 配置文件,不要乱用劣质 masOS(默认)终端,不要尴尬 Esc+F/B,冲洗并重复废话。
木已成舟!!!
享受这个技巧,我的程序员伙伴们!
如前所述,您可以在 ~/.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
或启动新的终端会话。
只需检查终端 > 首选项 > 设置 > [配置文件] > 键盘中的“使用选项作为元键”选项,正如@cris-page 已经提到的那样。
但是请注意,在 macOS Catalina (10.15) 和更高版本中,zsh 成为新添加用户的默认 shell:其默认配置仅将空格视为单词边界,而旧的 bash strong> 使元左/右跳转到最近的 非字母数字 字符(类似于 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
不定期副业成功案例分享
Esc
+F
,它只会插入字母。恼人的!~/.inputrc
完全自定义它们。