iTerm 2:如何设置键盘快捷键以跳转到行首/行尾?


394

我可以看到Ctrl+ left/ right跳到行首/行尾。如何将其更改为Cmd+ left/ right arrow

为了使Alt+ left/ right arrow正确地工作于跳字,请遵循本文



1
如果您也希望这些快捷方式也可以在VIM中使用,请参见以下答案:stackoverflow.com/a/9611698/991068
Razvan Grigore

Answers:


735

在iTerm2中添加以下配置文件快捷键

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

这是那些需要它的人的视觉

iTerm添加关键视觉


3
您知道Command + Delete的代码/序列是什么吗?(清除提示)
Steven Lu

10
我在其他地方回答了我的第一条评论,基本上,十六进制代码0x15提供了Ctrl + U的功能,可以清除该行。但是我发现0x01 Ctrl + A会干扰Tmux的使用。因此,我打算将其映射到Home键(与Mac键盘上的Fn + Left相同的功能)。
史蒂文·卢

7
对于家庭,转义序列为[1〜和结束,转义序列为[4〜
史蒂芬路

3
像魅力一样,超赞!
Juto

25
正确的绑定适用⌘← "SEND ESC SEQ" OH于Home和⌘→ "SEND ESC SEQ" OFEnd(这些都是大写的'o'而不是零)。这是模拟实际按下Home和End键,并且在bash这种意愿工作,VIM等
蒂莫西·佐恩

432

到单词之间跳跃和开始/在iTerm2线端挑一个下面的两种溶液。

1.简单的解决方案(推荐)

  1. 开启偏好设定
  2. 点击“个人资料”标签
  3. 在左侧列表中选择一个配置文件(例如“默认”),然后单击“密钥”选项卡
  4. 单击“预设”下拉菜单,然后选择“自然文本编辑”

在此处输入图片说明


2.手动映射键(高级)

如果您不想使用上面提到的“自然文本编辑”预设,则可以手动映射所需的键:

  1. 开启偏好设定
  2. 点击“键”标签
  3. 点击[+]图标

现在,您可以添加以下键盘快捷键:

向左移动光标一个字

  • 键盘快捷键:+
  • 行动:发送十六进制代码
  • 码: 0x1b 0x62

在此处输入图片说明

向右移动光标一个字

  • 键盘组合:+
  • 行动:发送十六进制代码
  • 码: 0x1b 0x66

将光标移到行首

  • 键盘组合:+
  • 行动:发送十六进制代码
  • 码: 0x01

将光标移到行尾

  • 键盘组合:+
  • 行动:发送十六进制代码
  • 码: 0x05

删除单词

  • 键盘组合:+←Delete
  • 行动:发送十六进制代码
  • 码: 0x1b 0x08

删除行

  • 键盘组合:+←Delete
  • 行动:发送十六进制代码
  • 码: 0x15

撤消

  • 键盘组合:+z
  • 行动:发送十六进制代码
  • 码: 0x1f

不要忘记删除以前的绑定

  • 打开“个人资料”标签
  • 点击子标签“键”
  • 删除键组合+ + 的映射

2
在iTerm2中,这对我来说效果很好,并且非常容易理解,谢谢!
Natetronn 2015年

3
只是澄清⌥←的原始绑定是做什么的?我知道了Says send Hex Codes: 0x1b 0x1b 0x5b 0x44。如果人们不想删除它,将很高兴知道。
2015年

5
使用zsh跳转到行首和行尾对我不起作用。按照最佳答案的建议,使用“十六进制代码”“ 0x01” /“ 0x05”对我有用。
翻转

2
跳转到行首和行尾对我也不起作用。最佳答案有效。
hisabimbola

3
iTerm是否可以将它们捆绑到我们可以加载的预设中?手动输入似乎很烦,但这对我有用,而且很棒。谢谢你!
八月

259

我看到已经有了很多好的答案,但是这不仅应该在您的shell中提供尽可能最接近本机OSX的功能。我验证了它在ZSH,Bash,node,python -i,iex和irb / pry会话中都可以工作(使用rb-readline gem作为readline,但应该对所有人有效)。

打开iTerm首选项+ ,并导航至Profiles选项卡(Keys可以使用该选项卡,但是向个人资料中添加快捷键允许您保存个人资料并将其同步到多台计算机)和keys子选项卡并输入以下内容:

删除光标左侧的所有字符

+ ←Delete发送十六进制代码:

0x15兼容性更高,但有时功能是删除整行而不是仅删除光标左侧的字符。我个人使用它,然后覆盖我的zsh bindkey以便^U仅删除光标左侧的内容(请参见下文)。

要么

0x18 0x7f兼容性较差,默认情况下在节点中不起作用,并且在zsh中不起作用,请参见下文以修复zsh(bash / irb / pry应该可以),并在工作时执行所需的功能。

删除光标右边的所有字符

+ fn+ ←Delete+ Delete→发送十六进制代码:0x0b

删除光标左侧的一个字

+ ←Delete发送十六进制代码:

0x1b 0x08 Elixir的IEX破裂,似乎在其他任何地方都可以正常工作

要么

0x17 可以在任何地方使用,但不会在IRB中以正常的断字功能停止,而是会删除,直到看到文字空间为止。

删除光标右边的一个字

+ fn←Delete+ Delete→发送十六进制代码:0x1b 0x64

将光标移到行首

+ 发送十六进制代码:0x01

将光标移到行尾

+ 发送十六进制代码:0x05

向左移动光标一个字

+ 发送十六进制代码:0x1b 0x62

向右移动光标一个字

+ 发送十六进制代码:0x1b 0x66

撤消

+ z发送十六进制代码:0x1f

重做通常不绑定在bash,zsh或readline中,因此我们可以将其设置为未使用的十六进制代码,然后可以在zsh中修复

+ + Z+ y发送十六进制代码:0x18 0x1f

现在如何修复任何无效的

对于zsh,可以通过运行以下命令来设置尚不起作用的+ ←Delete+ + Z/ + y的绑定 :

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

我找不到在bash或readline中添加重做的解决方案,因此,如果有人知道任何一种解决方案,请在下面发表评论,我将尝试在其中添加。

对于寻找有关如何将键序列转换为十六进制的查找表的任何人,我发现此表非常有用。


2
这真的很有用,有很大的不同!我想指出的是,有些人可能对$前面的内容感到困惑echo(只需删除它?)。除此之外,它是完美的。谢谢。
edmundo 2015年

1
@Christophe因此,看起来像是应该存在键绑定。您在添加十六进制值时犯了一个错误,或者向后单词的键绑定被覆盖。运行bindkey | grep "\^\[b",它将告诉您设置后是否有其他内容将其覆盖。它应该只返回#=> "^[b" backward-word。如果要覆盖它,则必须找到要覆盖的位置并将其删除。如果那不可能,您可以运行echo 'bindkey "^[b" backward-word' >> ~/.zshrc它将其添加到您的最后一行.zshrc,然后重新启动iTerm,它应该可以工作
Travis

2
@Christophe检查keysiTerm首选项中的选项卡,查看它是否也将+ 映射到某些东西。如果是这样,将其删除。您可以b通过快速按esc释放,然后按来测试您的工作是否正常b。那应该向左跳一个字。或者,您可以将+ 映射到十六进制0x1b 0x42 0x1b 0x5b 0x31 0x3b 0x35 0x44。我验证了这两种方法对我都有效。我确实认为您的标签或标签中的iTerm 有+ 被覆盖。profile keyskeys
特拉维斯

3
惊人!从这里刚刚了解了撤销和重做绑定。
ecbrodie

3
我是手动执行此操作的,所以我想为什么不能导入配置文件来执行此操作?然后,我根据这些说明创建了GabLeRoux / iterm2-macos-dynamic-profile。它完美的作品,感谢🍻
GabLeRoux

48

按照上面列出的教程在iterm2中设置关键首选项。

  1. 创建一个新的快捷键
  2. 选择“发送转义序列”作为操作
  3. 然后,在下面的文本中设置cmd-left
    • 输入[H行开始
      OR
    • 输入[F行结束

1
˚Fjumpes我iterm2内只有一个字
马蒂亚斯

1
ITerm =>首选项=>键
pfrank 2013年

喜欢这个!其他解决方案对我不起作用。我花了几个小时感到沮丧,因为我无法在iterm2中使用ctrl + a和ctrl + e。但是我不想为此放弃鱼。这完全有效,谢谢!
FLY

其他解决方案也对我不起作用,但是这个对我有用。
Braham Snyder

42

在iTerm 3.0.12中,您可以切换到Natural Text Editing预设:

在此处输入图片说明

iTerm→首选项→配置文件→键

警告由于是预设,它可以覆盖您之前绑定的键。因此,最好在应用预设之前保存当前的键绑定。


2
您能否详细说明您的答案?例如,该预设包含哪些内容并可能会覆盖?
卡尔斯·阿尔科里亚

感谢您的回答。此外,在这钟声可能是最好的做法将其应用到自己的自定义配置文件,你是不是用缺省值拧方式可以切换编辑“模式”配置文件作为一个自然的文本
八月



9

只是为了帮助遇到同样问题的人,特别是将Zsh Shell与iTerm 2一起使用。事实证明Zsh 不能/etc/inputrc正确读取,因此无法理解您通过首选项设置的任何键绑定!

要解决此问题,您需要向.zshrc文件中添加一些键绑定,例如:

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

注意上面示例中的反斜杠“ e”之前,链接的文章没有显示它们,因此.zshrc在添加绑定时将它们添加到文件中。


4

旧的emacs绑定仍然可以在iterm2和os x terminal中使用:

首选项->配置文件->键(配置文件中的子标签)

  • 设置Left/Right option <kbd>⌥</kbd> key acts as +Esc(在os x终端中类似)

这应该使alt- falt- b逐字移动。(仍然ctrl- a并且ctrl- e始终照常工作)

如果设置为meta这些旧绑定,则在某些iterm2绑定不可用时将起作用。


2

正如此处的解释所示,您可以通过一个简单的步骤完成它:

默认情况下,单词跳转(选项+→或←)和单词删除(选项+退格)不起作用。要启用这些功能,请转到“ iTerm→首选项→配置文件→键→加载预设...→自然文本编辑→Boom!Head爆炸”


2

移至行首和行尾的唯一方法是

⌘← "SEND ESC SEQ" OH-移至行首
⌘→ "SEND ESC SEQ" OF-移至行尾


1

bind -p 会在您的外壳中显示绑定的转义键列表,这可能有助于为您提供更多提示/搜索字词。


5
bind -p仅在Bourne shell(bash,sh)中对zsh,csh tcsh,use有效bindkey
特拉维斯


0

对我而言,以下组合有效:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.