【发布时间】:2011-09-06 12:05:09
【问题描述】:
我可以看到 Ctrl+left/right 跳转到行首/行尾。如何将其更改为 Cmd+left/right arrow?
【问题讨论】:
-
如果您希望这些快捷方式也可以在 VIM 中使用,请参阅此答案:stackoverflow.com/a/9611698/991068
我可以看到 Ctrl+left/right 跳转到行首/行尾。如何将其更改为 Cmd+left/right arrow?
【问题讨论】:
按照上面列出的教程在 iterm2 中设置您的关键偏好。
【讨论】:
在 iTerm2 中添加以下配置文件快捷键
| FOR | ACTION | SEND |
|---|---|---|
| ⌘ ← | "SEND HEX CODE" | 0x01 |
| ⌘ → | "SEND HEX CODE" | 0x05 |
| ⌥ ← | "SEND ESC SEQ" | b |
| ⌥ → | "SEND ESC SEQ" | f |
这是给需要的人的视觉效果
【讨论】:
⌘← "SEND ESC SEQ" OH 用于 Home 和 ⌘→ "SEND ESC SEQ" OF 用于 End (这些是大写的 'o' 不是零)。这模拟了实际按下 Home 和 End 键,因此可以在 bash、vim 等中工作。
只是为了帮助遇到同样问题但专门将 Zsh shell 与 iTerm 2 一起使用的任何人。事实证明,Zsh doesn't read /etc/inputrc properly,因此无法理解您通过首选项设置的任何键绑定!
要解决此问题,您需要在.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 可以进入行首,但找不到行尾。这需要标记为答案。
要在 iTerm2 中的单词和行首/行尾之间跳转,请选择以下两种解决方案中的一个。
注意:如果您有多个配置文件(例如默认和热键窗口)并希望对所有配置文件应用相同的修改,请改用以下步骤:
如果你不想使用上面提到的“自然文本编辑”预设,你可以手动映射你需要的键:
[+]图标| SHORTCUT | DESCRIPTION | ACTION | SEND |
|---|---|---|---|
| ⌘ ← | Jump to beginning of line | "SEND HEX CODE" | 0x01 |
| ⌘ → | Jump to end of line | "SEND HEX CODE" | 0x05 |
| ⌘ ← Delete | Delete line | "SEND HEX CODE" | 0x15 |
| ⌥ ← | Jump to beginning of word | "SEND HEX CODE" | 0x1b 0x62 |
| ⌥ → | Jump to beginning end of word | "SEND HEX CODE" | 0x1b 0x66 |
| ⌥ ← DELETE | Delete word | "SEND HEX CODE" | 0x1b 0x08 |
| ⌘ z | Undo | "SEND HEX CODE" | 0x1f |
注意
如果上述快捷键已经存在键盘绑定,则必须删除它们才能使新快捷键生效。
【讨论】:
Says send Hex Codes: 0x1b 0x1b 0x5b 0x44。如果人们不想删除它,最好知道。
对我来说,以下组合有效:
| Key Action Esc+ End result |
|-----------------------------------------------------|
| ⌘← Send Escape Sequence a Send ^[ a |
| ⌘→ Send Escape Sequence e Send ^[ e |
【讨论】:
bind -p 将在您的 shell 中显示绑定转义键的列表,这可能有助于为您提供更多想法/搜索词。
【讨论】:
bind -p 仅适用于 zsh、csh tcsh 的 Bourne shell(bash、sh),请使用 bindkey。
我看到已经有很多很好的答案,但这应该提供最接近本机 OSX 功能的不仅仅是你的 shell。我验证了这适用于 ZSH、Bash、node、python -i、iex 和 irb/pry 会话(使用 rb-readline gem 进行 readline,但应该适用于所有人)。
打开 iTerm 首选项 ⌘+, 并导航到 Profiles 选项卡(可以使用 Keys 选项卡,但在您的配置文件中添加键绑定可以让您到save your profile 并将其同步到多台计算机)和keys 子选项卡并输入以下内容:
删除光标左侧的所有字符
⌘+←删除发送十六进制代码:
0x15更兼容,但有时功能是删除整行而不是光标左侧的字符。我个人使用它,然后为^U覆盖我的zsh bindkey 以仅删除光标左侧的内容(见下文)。或
0x18 0x7f兼容性较差,在 node 中不起作用,默认情况下在 zsh 中不起作用,请参阅下面修复 zsh(bash/irb/pry 应该没问题),执行所需工作时的功能。
删除光标右侧的所有字符
⌘+fn+←删除或⌘+删除→发送十六进制代码:
0x0b
删除光标左侧的一个单词
⌥+←删除发送十六进制代码:
0x1b 0x08Elixir 的 IEX 中断,似乎在其他任何地方都可以正常工作或
0x17可以在任何地方使用,但不会在 IRB 中的正常分词处停止,而是会删除,直到看到文字空间。
删除光标右侧的一个单词
⌥+fn←删除或⌥+删除→发送十六进制代码:
0x1b 0x64
将光标移至行首
⌘+← 发送十六进制代码:
0x01
将光标移至行尾
⌘+→ 发送十六进制代码:
0x05
光标左移一个字
⌥+← 发送十六进制代码:
0x1b 0x62
光标右移一个字
⌥+→ 发送十六进制代码:
0x1b 0x66
撤消
⌘+z 发送十六进制代码:
0x1f
Redo 通常不绑定在 bash、zsh 或 readline 中,因此我们可以将其设置为未使用的 hexcode,然后我们可以在 zsh 中修复它
⇧+⌘+Z 或 ⌘+y 发送十六进制代码:
0x18 0x1f
现在如何解决任何不起作用的问题
对于 zsh,您可以为尚未功能的设置绑定 ⌘+←删除和⇧+⌘+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 中添加重做的解决方案,所以如果有人知道其中任何一个的解决方案,请在下面发表评论,我会尝试添加它们。
对于正在寻找有关如何将键序列转换为十六进制的查找表的任何人,我发现 this table 非常有帮助。
【讨论】:
echo 前面的$ 感到困惑(只需将其删除?)。除此之外,它是完美的。谢谢。
bindkey | grep "\^\[b",它会告诉你设置后是否有其他东西覆盖它。它应该只返回#=> "^[b" backward-word。如果它被覆盖,您必须找到它被覆盖的位置并将其删除。如果这不可行,您可以运行echo 'bindkey "^[b" backward-word' >> ~/.zshrc,它会将其添加到您的.zshrc 的最后一行,然后重新启动 iTerm,它应该可以工作了
keys 选项卡,看看它是否也将 ⌥+← 映射到某个东西。如果是这样删除它。您可以通过快速按下esc 释放,然后按下b 来测试您的b 是否正常工作。那应该向左跳一个字。或者,您可以将⌥+← 映射到十六进制0x1b 0x42 或 0x1b 0x5b 0x31 0x3b 0x35 0x44。我证实这两个都对我有用。我真的认为你有 ⌥+← 在 iTerm 中被覆盖,无论是在你的 profile keys 选项卡或 keys 选项卡中。
老式的 emacs 绑定仍然可以在 iterm2 和 os x 终端中工作:
首选项 -> 配置文件 -> 键(配置文件中的子选项卡)
Left/Right option <kbd>⌥</kbd> key acts as +Esc(在os x终端中类似)这应该启用 alt-f 和 alt-b 来逐字移动。 (仍然 ctrl-a 和 ctrl-e 总是照常工作)
如果设置为meta,这些旧绑定将起作用,而某些 iterm2 绑定不可用。
【讨论】:
【讨论】:
warning
正如here 中所述,您可以通过简单的步骤完成:
默认情况下,单词跳转(选项+→或←)和单词删除(选项+ 退格)不起作用。要启用这些,请转到“iTerm → 首选项 → 配置文件 → 按键 → 加载预设... → 自然文本编辑 → 繁荣!头 爆炸”
【讨论】:
解释于https://aaronaddleman.com/articles/hexcodes-and-iterm/
您可以使用xxd -psd 获取密钥十六进制代码。
【讨论】:
唯一适用于移动到行首和行尾的是
⌘← "SEND ESC SEQ" OH - 移到行首⌘→ "SEND ESC SEQ" OF - 移到行尾
【讨论】:
我使用了Travis answer,并创建了一个动态配置文件,您可以根据其说明导入。
GabLeRoux/iterm2-macos-dynamic-profile
说明在自述文件中,导入它比手动添加要快得多。我根据@gooli 的要求做了这个回答,因为这被隐藏在评论中。希望你喜欢这个 ?
【讨论】: