Mac OS X终端:将option+delete键映射为“向后删除单词”

330

尝试从 "首选项->设置->键盘" 进行映射,但 "key" 组合框仅有 "前向删除" 而没有 "删除"。然而,我的键盘上只有 "删除" 没有 "前向删除"!

除了首选项之外,还有其他方法可以完成映射吗?


“向后删除单词”是指退格键吗?我不知道最近的苹果键盘有删除键。 - Sören Kuklau
1
通过“向后删除单词”,我指的是从光标开始向后删除整个单词。 :) 最新款的Macbook有一个标有“delete”的键,但它实际上是退格键。 - ibz
我遇到了同样的问题。键盘有后退删除键,但无法在Terminal.app中用作绑定。 - knoopx
对我来说,你的问题值得数百万个赞。它帮助了我很多。以前,我使用Ubuntu。现在,在Mac OS上也变得更加容易了。谢谢。 - doptimusprime
9个回答

617

启用选项键作为元键

  1. 进入 终端 > 偏好设置 > 配置文件 > 键盘
  2. 勾选 使用选项键作为元键

图片

在 macOS High Sierra 10.13.6 上捕获于2018年10月23日。

切换选项键作为元键的窗口示意图

备注

许多应用程序(包括 bash 和 tcsh)将 Meta-Delete 视为“向后删除单词”。


44
它位于终端偏好设置 > 设置 > 键盘,正好在最底部。 - Jon
9
在Yosemite系统中,这个设置现在位于“偏好设置 -> 档案 -> 键盘”下。看起来你需要为每个档案单独更改/设置此项。 - palimpsestor
12
在非美国键盘上,需要使用选项键才能获得某些字符(例如,在Shell中,管道符“|”非常重要)。在这种情况下,其他答案提到的<Esc> b和<Esc> f可能是最好的解决方案。 - Touko
13
不幸的是,对于使用外语键盘需要使用 Option 键获取特殊符号(如 {)的程序员来说,这种设置方法并不实用,因为当 Option 键被用作元键时,它将无法正常工作。 - Magne
5
为什么我以前没有谷歌过这个。我想这些年来我浪费了数天的生产力。 - sandre89
显示剩余4条评论

100

删除上一个单词:

Ctrl-w。


4
阅读后,我发现“delete word forward”的快捷键是Ctrl+K(通过试错得知)。现在我想知道为什么这方面的文档如此之少。 - victor n.
17
Ctrl-K 不仅可以删除一个单词,还可以删除光标前的所有内容,对吧? - Shai
这在我的Mac上可以运行。它在Ubuntu Linux上也能运行吗? - user391339
4
Ctrl+w 删除一个由空格分隔的单词,而不是由标点符号和空格分隔的单词。将光标置于“cat .git/refs/heads”的末尾,按下Ctrl-w会导致“cat”被删除。Meta+delete则会导致“cat .git/refs/”被删除。 - idbrii

85

OS X的终端运行bash,其中包括readline支持。按照Glomek的建议,告诉终端使用选项作为元键(或者使用Esc),然后你就有了一堆方便的选项: Ctrl+w删除上一个单词(如前面提到的Meta+delete一样),但你还可以使用Meta+f和Meta+b向前和向后遍历单词,Ctrl+aCtrl+e到达行首和行尾,Ctrl+k从光标处删除(kill)到行尾,还有很多其他的选项。

请参阅http://www.bigsmoke.us/readline/shortcuts获取一个不错的简短快捷键表。


4
这个 "handy" 是什么意思?其余部分使用带有限定符的 delete 删除单词。 - idrougge
是否可以添加“删除行”功能呢? - wenbert
3
Readline非常好用,但这并不能帮助OP。Ctrl+w 可以删除一个由空格分隔的单词,而不是一个由标点符号和空格分隔的单词。将光标放在cat .git/refs/heads的末尾时,按下Ctrl-w会导致删除cat。Meta+delete可以删除cat .git/refs/ - idbrii
@nadafigment,“a”和“e”代表什么? - Pacerier

65

命令编辑快捷键

Ctrl + a – 移动到命令行的开头

Ctrl + e – 移动到命令行的结尾

Ctrl + k – 从光标处删除到命令行的结尾

Ctrl + u – 从光标处删除到命令行的开头

Ctrl + w – 从光标处删除到单词的开头(即向后删除一个单词)

Ctrl + y – 在光标后粘贴被剪切的单词或文本(例如上面提到的那个删除快捷键)

Ctrl + xx – 在命令行开头和当前光标位置之间移动(并返回)

Alt + b – 向后移动一个单词(或者到光标当前所在单词的开头)

Alt + f – 向前移动一个单词(或者到光标当前所在单词的结尾)

Alt + d – 从光标开始删除到单词结尾(如果光标在单词开头,则删除整个单词)

Alt + c – 从光标开始将单词转换为大写(如果光标在单词开头,则将整个单词转换为大写)

Alt + u – 将光标到单词结尾的单词转换为大写

Alt + l – 将光标到单词结尾的单词转换为小写

Alt + t – 将当前单词与前一个单词交换位置

Ctrl + f – 向前移动一个字符

Ctrl + b – 向后移动一个字符

Ctrl + d – 删除光标下的字符

Ctrl + h – 删除光标前面的字符

Ctrl + t – 将光标下的字符与前一个字符交换位置

命令召回快捷键

Ctrl + r – 向后搜索历史记录

Ctrl + g – 退出历史记录搜索模式

Ctrl + p – 历史记录中的上一个命令(即向后浏览命令历史记录)

Ctrl + n – 历史记录中的下一个命令(即向前浏览命令历史记录)

Alt + . – 使用上一个命令的最后一个单词

命令控制快捷键

Ctrl + l – 清屏

Ctrl + s – 停止输出到屏幕(用于长时间运行的详细命令)

Ctrl + q – 允许将输出发送到屏幕(如果先前使用了上面的命令停止输出)

Ctrl + c – 终止命令

Ctrl + z – 暂停/停止命令

Bash Bang (!) 命令

Bash 还有一些方便的功能,使用 !(bang)允许您在 bash 命令中执行某些有趣的操作。

!! – 运行最近一次命令 !blah – 运行以“blah”开头的最近一条命令(例如:!ls)

!blah:p – 打印出 !blah 将运行的命令(同时将其添加为最新的命令历史记录)

!$ – 上一个命令的最后一个单词(与 Alt + . 相同)

!$:p – 打印出 !$ 将替换的单词

!* – 上一个命令,但不包括最后一个单词(例如:如果您键入 _find somefile.txt /,那么 !* 将给您 _find somefile.txt

!*:p – 打印出 !* 将替换的内容


4
太棒了,伙计!这是一个超级有用的清单!我已经复制并添加到我的常识书中了!Ctrl+xx 真是太棒了! - Gregordy
那个列表真是太棒了!只是我尝试使用带有alt +字母的快捷键,在当前版本的Mac(如Catalina / Big Sur / ...)中会打印出那些希腊字母之一,例如:alt + d会打印出“∂”(我认为是delta)。所以这有点让人失望,不知道如何绕过它。 - 40detectives
这个回答应该在顶部并获得最多的投票 (y) :+1 - undefined

29

默认情况下,大多数shell中的meta+backspace将执行向后单词复制。如果您按escape键然后再按backspace键,那么这种方式基本上在任何地方都有效。


3
太好了,这不需要额外的设置。我注意到 <Esc> b<Esc> f 也可以用于跳转到前一个或后一个单词。 - joeytwiddle
2
我更喜欢使用<ALT>+箭头。ESC键不允许在b或f上连续点击。 - Vitali Pom
2
我一直在使用<ALT>+箭头进行移动,但我发现没有类似的方法可以删除。上面提到的CTRL+W方法不能像<ALT>+箭头那样停止在非单词字符处,因此它会删除所有空格之前的内容。如果有任何使用与<ALT>+箭头类似的边界检测来删除的方法,将不胜感激。 - Rene Wooller

28
⌃W(控制键+W)与meta + delete不是相同的东西(如果你没有勾选使用选项作为元键,则为ESC+delete) meta+delete将把/ _视为单词分隔符,而^W将把空格视为分隔符。

例如,当光标在末尾时,使用ESC+Bakcspace

rm /dira/dirb/file1

提供

rm /dira/dirb/

同时在同一地方使用^W将会产生

rm

在定义和修改终端配置文件时,最好使用\033\177而不是^W。这样,您实际上将⌥⌫映射到esc⌫正在执行的操作,并且您仍然可以使用^W基于空格分隔符来擦除单词。

我很想能够发布如何执行此操作的图片,但作为新手,我不能。

请参考bouke的评论以了解如何修改终端配置文件。


8
如果您想在 iterm2 中这样做,您可以打开“偏好设置”> “键盘”> 添加按键映射 “⌥⌫” 并将其发送为十六进制代码 0x1B 0x7F - qix
1
你是怎么发现\033\177可以用于“删除一个单词中的一部分”的呢? - adiabatic
2
实际上,您只需在终端首选项对话框中按下所需的键序列即可。 首选项→配置文件→键盘选项卡→+按钮,然后选择修改器“option”和键“⌫ delete”,然后选择文本字段,按下escape键,然后按下⌫键即可完成操作。 Esc + ⌫与⌥⌫执行相同的操作。 - Stephane Gasparini

21

您可以在终端的配置文件中将 ⌥⌫(option+delete)绑定到 ⌃W(control+W),这样它就和其他应用程序类似了。

终端配置文件键盘设置


stty 必须将 ^w 映射到 werase(默认行为)才能正常工作。在命令行上使用 stty -a 查看映射设置。 - natersoz

4
如果您正在使用 Iterm2(类似于OSX的常规终端,但更好:),您可以使用以下方法来更改此行为:
您需要将左 ⌥ 键设置为充当转义字符。这可以通过进入iTerm2 > 首选项 > 配置文件 > 按键来完成。

enter image description here


这对我来说是唯一正确的答案,“左选项”应该映射到+Esc,而不是Meta作为最佳答案。 - Jianwu Chen

3

在个人资料-> 键 中启用“自然文本编辑”预设后,您可以简单地删除该单词。

  • 使用alt+delete向后删除
  • 使用fn+alt+delete向前删除

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接