我可以看到Ctrl+左/右跳转到行首/行尾。如何将此更改为Cmd+左/右箭头?
按照上面列出的教程在iterm2中设置关键首选项。
创建一个新的快捷键 选择“发送转义序列”作为动作 然后,设置cmd-left,在下面的文本中: 输入[H为line start 或 输入[F为行结束
在iTerm2中添加以下配置文件快捷键
FOR | ACTION | SEND |
---|---|---|
⌘ ← | "SEND HEX CODE" | 0x01 |
⌘ → | "SEND HEX CODE" | 0x05 |
⌥ ← | "SEND ESC SEQ" | b |
⌥ → | "SEND ESC SEQ" | f |
这里有一个视觉给那些需要它的人
只是为了帮助那些有同样问题的人,特别是使用Zsh shell和iTerm 2。原来Zsh不能正确地读取/etc/inputrc,因此无法理解您通过首选项设置的任何键绑定!
为了解决这个问题,你需要在你的.zshrc文件中添加一些键绑定,比如:
# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
注意上面例子中“e”前面的反斜杠,链接的文章没有显示它们,所以在添加绑定时将它们添加到.zshrc文件中。
为了方便任何想要在iTerm2中转到行末或行首的人快速参考,请参阅上面的链接 http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word-in-iterm.html 注意到在iTerm2中:
Ctrl+A,跳转到行开始,而 Ctrl+E,跳转到行尾。
要在iTerm2中的单词和行首/行尾之间跳转,请从下面两个解决方案中选择一个。
1. 简单解决方案(推荐)
开放的偏好 点击“个人资料”页签 在左侧列表中选择一个配置文件(如“默认”) 点击“按键”页签 点击“Key Mappings”选项卡(如果存在的话) 点击“预设”下拉菜单,选择“自然文本编辑”
注意:如果你有几个配置文件(例如默认和热键窗口),并希望对所有配置文件应用相同的修改,请使用以下步骤:
点击“按键”页签 选择“按键绑定”
2. 手动映射键(高级)
如果你不想使用上面提到的“自然文本编辑”预设,你可以手动映射你需要的键:
开放的偏好 点击“个人资料”页签 在左侧列表中选择一个配置文件(如“默认”) 点击“按键”页签 点击“Key Mappings”选项卡(如果存在的话) 点击[+]图标 从下面的表格中添加快捷方式
SHORTCUT | DESCRIPTION | ACTION | SEND |
---|---|---|---|
⌘ ← | Jump left to beginning of line | "SEND HEX CODE" | 0x01 |
⌘ → | Jump right to end of line | "SEND HEX CODE" | 0x05 |
⌘ ← Delete | Delete line | "SEND HEX CODE" | 0x15 |
⌥ ← | Jump left to beginning of word | "SEND HEX CODE" | 0x1b 0x62 |
⌥ → | Jump right to end of word | "SEND HEX CODE" | 0x1b 0x66 |
⌥ ← DELETE | Delete word | "SEND HEX CODE" | 0x1b 0x08 |
⌘ z | Undo | "SEND HEX CODE" | 0x1f |
Note
如果上述快捷键的键盘绑定已经存在,则必须将其删除,以便新的快捷键生效。
对我来说,以下组合是有效的:
Key | Action | Esc+ | End result |
---|---|---|---|
⌘← | Send Escape Sequence | a | Send ^[ a |
⌘→ | Send Escape Sequence | e | Send ^[ e |
我已经看到了很多好的答案,但这应该提供最接近本机OSX的功能,而不仅仅是在您的shell中。我验证了这在ZSH, Bash, node, python -i, iex和irb/pry会话中工作(使用rb-readline gem for readline,但应该适用于所有)。
打开iTerm首选项⌘+,并导航到Profiles选项卡(可以使用Keys选项卡,但将密钥绑定添加到配置文件中可以保存配置文件并将其同步到多台计算机)和Keys子选项卡,并输入以下内容:
删除光标左侧的所有字符
⌘+←删除发送Hex code: 0x15更加兼容,但功能有时是删除整行,而不仅仅是光标左侧的字符。我个人使用这个,然后覆盖^U的zsh bindkey,只删除光标左侧的东西(见下文)。 或 0x18 0x7f不太兼容,在节点中不工作,默认情况下也不会在zsh中工作,请参见下面来修复zsh (bash/irb/pry应该没问题),当它工作时执行所需的功能。
删除光标右侧的所有字符
⌘+fn+←Delete或⌘+Delete→发送十六进制代码:0x0b
删除光标左边的一个字
发送十六进制编码: 0x1b 0x08 Elixir的IEX中断,似乎在其他地方工作正常 或 0x17在任何地方都可以工作,但不会在IRB中的正常换行符处停止,而是会删除,直到看到文字空格。
删除光标右边的一个字
“发送十六进制代码”:0x1b 0x64
移动光标到行前
⌘+←发送十六进制代码:0x01
将光标移动到行尾
⌘+→发送十六进制代码:0x05
将光标向左移动一个字
←发送十六进制代码:0x1b 0x62
向右移动光标一个字
发送十六进制代码:0x1b 0x66
Undo
⌘+z发送十六进制代码:0x1f
重做通常不绑定在bash, zsh或readline中,所以我们可以将它设置为一个未使用的hexcode,然后在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中添加重做的解决方案,所以如果有人知道其中任何一个解决方案,请在下面评论,我将尝试添加它们。
对于任何寻找如何将键序列转换为十六进制的查找表的人,我发现这个表非常有用。
老式的emacs绑定仍然可以在iterm2和os x终端中工作:
首选项->配置文件->键(配置文件中的子选项卡)
设置左/右选项<kbd> </kbd>键作为+Esc(类似于os x终端)
这应该启用alt-f和alt-b逐字移动单词。(ctrl-a和ctrl-e仍然正常工作)
如果设置为元,这些旧的绑定将工作,而一些iterm2绑定不可用。
在iTerm 3.0.12中,您可以切换到自然文本编辑预设:
iTerm→首选项→配置文件→键
警告因为它是一个预设,它可以覆盖你之前绑定的键。因此,最好在应用预设之前保存当前的键绑定。
正如这里所解释的,你可以通过简单的步骤来做到:
默认情况下,单词跳转(option +→或←)和单词删除(option + 退格键)不工作。要启用这些,请转到“iTerm→Preferences→” 配置文件→按键→加载预设…→自然文本编辑→Boom!头 爆炸”
详见https://aaronaddleman.com/articles/hexcodes-and-iterm/
您可以使用XXD -psd来获取密钥十六进制代码。
推荐文章
- 检查bash变量是否等于0
- 只使用md5sum获取哈希值(没有文件名)
- 如何生成一个核心转储在Linux上的分段错误?
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 如何删除超过X小时的文件
- (Mac) -bash: __git_ps1:命令未找到
- 如何创建Bash别名?
- Java/JDK的苹果硅芯片
- 将所有变量从一个shell脚本传递到另一个?
- Virtualenvs中的破引用
- 如何删除shell脚本中文件名的扩展名?
- 使用xargs调用shell函数
- 如何限制从grep返回的结果的数量?
- 'find -exec'是Linux中的shell函数
- 将值从管道读入shell变量