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

chr*_*ris 357 macos bash iterm iterm2

我可以看到Ctrl+ left/ right跳到行的开头/结尾.如何将此更改为Cmd+ left/ right arrow

为了获得Alt+ left/ right arrow正确的单词跳跃,请按照本文进行操作.

Mat*_*ias 673

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

FOR  ACTION         SEND
??  "SEND HEX CODE"      0x01 
??  "SEND HEX CODE"      0x05
??  "SEND ESC SEQ"  b
??  "SEND ESC SEQ"  f
Run Code Online (Sandbox Code Playgroud)

这是一个需要它的人的视觉

iTerm添加关键视觉效果

  • 正确的绑定是`⌘←"发送ESC SEQ"OH`用于Home和`⌘→"SEND ESC SEQ"OF`用于End(那些是大写的'o'不是零).这模拟实际按下Home和End键,因此可以在bash,vim等中工作. (19认同)
  • 我在别处回答了我的第一条评论,基本上十六进制代码0x15给出了Ctrl + U,它清除了这一行.但是我发现0x01 Ctrl + A会干扰Tmux的使用.因此,我打算将其映射到Home键(与Mac键盘上的Fn + Left功能相同). (9认同)
  • Home的转义序列为[1~,End的转义序列为[4~ (6认同)
  • 你知道Command + Delete的代码/序列是什么吗?(清除提示) (3认同)
  • 像魅力,真棒! (3认同)
  • @Cyber​​wiz,这让我的一周:) (2认同)

sqr*_*ren 367

要在iTerm2中的单词和行的开始/结束之间跳转,请按照下列步骤操作:

  • iTerm2 - >偏好(+ ,)
  • 打开"密钥"选项卡
  • 添加以下全局快捷键

向左移动光标一个字

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

将光标向右移动一个字

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

将光标移动到行首

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

将光标移动到行尾

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

删除单词

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

删除行

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

解开

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

不要忘记删除以前的绑定:

  • 打开"配置文件"选项卡
  • 单击子选项卡"键"
  • 删除组合键+ + 的映射

  • 跳转到开头和结尾对我使用zsh不起作用.使用"十六进制代码""0x01"/"0x05",正如最佳答案所建议的那样. (5认同)
  • 这在 iTerm2 中对我来说效果很好,而且很容易理解,谢谢! (3认同)
  • 只是澄清⌥←的原始绑定是做什么的?我看到它说`发送十六进制代码:0x1b 0x1b 0x5b 0x44`.如果人们不想删除这个,那将是很好的. (3认同)
  • iTerm是否有办法将这些捆绑到我们可以加载的预设中?似乎很烦人手动输入,但这对我有用,真棒.谢谢你! (3认同)
  • 跳到开头和结尾对我来说也不起作用.最佳答案有效. (2认同)
  • 我认为这应该是问题的正确答案 (2认同)

Tra*_*vis 235

我已经看到了很多很好的答案,但是这应该提供最接近本机OSX功能的功能,而不仅仅是你的shell.我确认这适用于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
Run Code Online (Sandbox Code Playgroud)

我无法找到在bash或readline中添加重做的解决方案,所以如果有人知道其中任何一个的解决方案,请在下面评论,我会尝试添加它们.

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

  • 惊人!刚刚从这里了解了Undo plus Redo绑定. (3认同)
  • 我是手动执行此操作的,所以我想为什么不能导入配置文件来执行此操作?然后我根据这些说明创建了[GabLeRoux / iterm2-macos-dynamic-profile](https://github.com/GabLeRoux/iterm2-macos-dynamic-profile)。完美运行,谢谢 (3认同)
  • 这真的很有用,会产生很大的不同!我想指出一些人可能会对`echo`前面的`$`感到困惑(只是删除它?).除此之外,它是完美的.谢谢. (2认同)
  • @Christophe检查iTerm首选项中的“ keys”选项卡,查看它是否还将`⌥`+`←`映射到某些东西。如果是这样,将其删除。您可以通过快速按`esc`释放,然后按`b`来测试您的`b`是否工作正常。那应该向左跳一个字。或者,您可以将`⌥`+`←`映射到十六进制的'0x1b 0x42` **或**'0x1b 0x5b 0x31 0x3b 0x35 0x44`。我验证了这两种方法对我都有效。我确实认为您在iTerm中会覆盖`⌥`+`←`,无论是在您的“个人资料”“关键字”标签还是“关键字”标签中。 (2认同)
  • 这应该是公认的答案,非常感谢. (2认同)

Jai*_*yer 47

按照上面列出的教程在iterm2中设置密钥首选项.

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


Nik*_*Kov 37

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

在此输入图像描述

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

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

  • 你能详细说明你的答案吗?如何,该预设包括并可能覆盖? (2认同)

Ioa*_*dis 18

如需快速参考任何想要在iTerm2中走到行尾或行首的人,可以上面链接 http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html在iTerm2中 注意到:

  • Ctrl+ A,跳到线的开头,而
  • Ctrl+ E,跳到行尾.

  • 为什么这个答案不在顶部? (2认同)
  • @GangadharJannu:完全同意。它直接进入 ans。应该在顶部。 (2认同)

Gab*_*oux 9

我使用了Travis答案,并创建了可根据其说明导入的动态配置文件

GabLeRoux / iterm2-macos-dynamic-profile

说明在自述文件中,与手动添加它们相比,导入它要快得多。我已按照@gooli的要求将此答案设为了答案,因为这已隐藏在评论中。希望你喜欢

  • 一年后回到这里,很高兴找到这个! (2认同)

Ner*_*ood 8

只是为了帮助任何有相同问题的人,但特别是在iTerm 2中使用Zsh shell.事实证明,Zsh 无法/etc/inputrc正确读取,因此无法理解您通过首选项设置的任何键绑定!

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

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
Run Code Online (Sandbox Code Playgroud)

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


add*_*787 5

移动到行首和行尾的唯一方法是

?? "SEND ESC SEQ" OH- 移动到行首
?? "SEND ESC SEQ" OF- 移动到行尾