如何设置键盘快捷键以跳转到行首/行尾? [关闭]
Posted
技术标签:
【中文标题】如何设置键盘快捷键以跳转到行首/行尾? [关闭]【英文标题】:How to set keyboard shortcuts to jump to beginning/end of line? [closed] 【发布时间】:2011-09-06 12:05:09 【问题描述】:我可以看到 Ctrl+left/right 跳转到行首/行尾。如何将其更改为 Cmd+left/right arrow?
【问题讨论】:
我在这里描述过:github.com/nikoloza/articles/blob/master/devtools/… 如果您希望这些快捷方式也可以在 VIM 中使用,请参阅此答案:***.com/a/9611698/991068 【参考方案1】:按照上面列出的教程在 iterm2 中设置您的关键偏好。
-
创建一个新的快捷键
选择“发送转义序列”作为操作
然后,在下面的文本中设置 cmd-left:
输入 [H 表示 行开始OR
输入 [F 表示 行尾
【讨论】:
F 在我的 iterm2 中只跳一个字 ITerm => 首选项 => 键 喜欢这个!其他解决方案对我不起作用。我花了好几个小时在 iterm2 中无法使用 ctrl+a 和 ctrl+e 感到沮丧。但我不想为此放弃鱼。这完全有效,谢谢! 其他解决方案对我也不起作用,但这个解决方案对我有用。【参考方案2】:在 iTerm2 中添加以下配置文件快捷键
FOR | ACTION | SEND |
---|---|---|
⌘ ← | "SEND HEX CODE" | 0x01 |
⌘ → | "SEND HEX CODE" | 0x05 |
⌥ ← | "SEND ESC SEQ" | b |
⌥ → | "SEND ESC SEQ" | f |
这是给需要的人的视觉效果
【讨论】:
你知道Command+Delete的代码/序列是什么吗? (清除提示) 我在别处回答了我的第一条评论,基本上十六进制代码 0x15 给出了 Ctrl+U 来清除行。但是我发现 0x01 Ctrl+A 会干扰 Tmux 的使用。因此,我打算将其映射到 Home 键(与 Mac 键盘上的 Fn+Left 功能相同)。 Home 的转义序列为 [1~,End 的转义序列为 [4~ 像魅力一样工作,太棒了! 正确的绑定是⌘← "SEND ESC SEQ" OH
用于 Home 和 ⌘→ "SEND ESC SEQ" OF
用于 End (这些是大写的 'o' 不是零)。这模拟了实际按下 Home 和 End 键,因此可以在 bash、vim 等中工作。【参考方案3】:
只是为了帮助遇到同样问题但专门将 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
文件中。
【讨论】:
【参考方案4】:对于任何想在 iTerm2 中转到行尾或行首的人的快速参考,上面的链接 http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word-in-iterm.html 注意到在 iTerm2 中:
Ctrl+A,跳转到行首,同时 Ctrl+E,跳转到行尾。【讨论】:
为什么这个答案不在顶部? @GangadharJannu:完全同意。它直接进入ans。应该在顶部。 同意我知道ctrl
+ A
可以进入行首,但找不到行尾。这需要标记为答案。【参考方案5】:
要在 iTerm2 中的单词和行首/行尾之间跳转,请选择以下两种解决方案中的一个。
1。简单的解决方案(推荐)
-
打开首选项
点击“个人资料”标签
在左侧列表中选择一个配置文件(例如“默认”)
点击“键”标签
单击“键映射”选项卡(如果存在)
点击“预设”下拉菜单并选择“自然文本编辑”
注意:如果您有多个配置文件(例如默认和热键窗口)并希望对所有配置文件应用相同的修改,请改用以下步骤:
-
点击“键”标签
选择“键绑定”
2。手动映射键(高级)
如果你不想使用上面提到的“自然文本编辑”预设,你可以手动映射你需要的键:
-
打开首选项
点击“个人资料”标签
在左侧列表中选择一个配置文件(例如“默认”)
点击“键”标签
单击“键映射”选项卡(如果存在)
点击
[+]
图标
从下表中添加快捷方式
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 |
注意
如果上述快捷键已经存在键盘绑定,则必须删除它们才能使新快捷键生效。
【讨论】:
这对我来说在 iTerm2 中效果很好,而且很容易理解,谢谢! 只是澄清 ⌥← 的原始绑定是做什么的?我看到了Says send Hex Codes: 0x1b 0x1b 0x5b 0x44
。如果人们不想删除它,最好知道。
iTerm 有没有办法将这些捆绑到我们可以加载的预设中?手动输入似乎很烦人,但这对我有用,而且很棒。谢谢lto!
非常感谢,Home/End 键终于可以在 macOS ITerm2 上按预期工作了。
我认为这应该是问题的正确答案【参考方案6】:
对我来说,以下组合有效:
| Key Action Esc+ End result |
|-----------------------------------------------------|
| ⌘← Send Escape Sequence a Send ^[ a |
| ⌘→ Send Escape Sequence e Send ^[ e |
【讨论】:
【参考方案7】:bind -p
将在您的 shell 中显示绑定转义键的列表,这可能有助于为您提供更多想法/搜索词。
【讨论】:
bind -p
仅适用于 zsh、csh tcsh 的 Bourne shell(bash、sh),请使用 bindkey
。【参考方案8】:
我看到已经有很多很好的答案,但这应该提供最接近本机 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 0x08
Elixir 的 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
前面的$
感到困惑(只需将其删除?)。除此之外,它是完美的。谢谢。
@Christophe 所以看起来键绑定是应该的。您在添加十六进制值时犯了一个错误,或者向后单词的键绑定被覆盖。运行bindkey | grep "\^\[b"
,它会告诉你设置后是否有其他东西覆盖它。它应该只返回#=> "^[b" backward-word
。如果它被覆盖,您必须找到它被覆盖的位置并将其删除。如果这不可行,您可以运行echo 'bindkey "^[b" backward-word' >> ~/.zshrc
,它会将其添加到您的.zshrc
的最后一行,然后重新启动 iTerm,它应该可以工作了
@Christophe 检查 iTerm 首选项中的 keys
选项卡,看看它是否也将 ⌥
+←
映射到某个东西。如果是这样删除它。您可以通过快速按下esc
释放,然后按下b
来测试您的b
是否正常工作。那应该向左跳一个字。或者,您可以将⌥
+←
映射到十六进制0x1b 0x42
或 0x1b 0x5b 0x31 0x3b 0x35 0x44
。我证实这两个都对我有用。我真的认为你有 ⌥
+←
在 iTerm 中被覆盖,无论是在你的 profile
keys
选项卡或 keys
选项卡中。
太棒了!刚刚从这里了解了撤消和重做绑定。
我手动执行此操作,我想为什么我不能导入配置文件来执行此操作?然后我根据这些说明创建了GabLeRoux/iterm2-macos-dynamic-profile。它完美无瑕,谢谢?【参考方案9】:
老式的 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 绑定不可用。
【讨论】:
【参考方案10】:在 iTerm 3.0.12 中你可以切换到Natural Text Editing
预设:
iTerm → 首选项 → 配置文件 → 键
警告由于是预设,它可以覆盖你之前绑定的键。因此,最好在应用预设之前保存当前的键绑定。
【讨论】:
您能否详细说明您的答案?例如,该预设包含哪些内容并可能覆盖? 感谢您的回答。此外,最好将其应用于您自己的自定义配置文件,这样您就不会使用默认设置,并且可以将配置文件切换为自然文本编辑“模式” 迄今为止最简单的解决方案。应该是第一答案。 @CarlesAlcolea 我认为它会删除您的自定义预设和热键,因此如果您想保存它们,您应该导出配置文件。 @CarlesAlcolea 和@wordsforthewise 看看warning
【参考方案11】:
正如here 中所述,您可以通过简单的步骤完成:
默认情况下,单词跳转(选项+→或←)和单词删除(选项+ 退格)不起作用。要启用这些,请转到“iTerm → 首选项 → 配置文件 → 按键 → 加载预设... → 自然文本编辑 → 繁荣!头 爆炸”
【讨论】:
【参考方案12】:解释于https://aaronaddleman.com/articles/hexcodes-and-iterm/
您可以使用xxd -psd
获取密钥十六进制代码。
【讨论】:
【参考方案13】:唯一适用于移动到行首和行尾的是
⌘← "SEND ESC SEQ" OH
- 移到行首⌘→ "SEND ESC SEQ" OF
- 移到行尾
【讨论】:
【参考方案14】:我使用了Travis answer,并创建了一个动态配置文件,您可以根据其说明导入。
GabLeRoux/iterm2-macos-dynamic-profile
说明在自述文件中,导入它比手动添加要快得多。我根据@gooli 的要求做了这个回答,因为这被隐藏在评论中。希望你喜欢这个 ?
【讨论】:
一年后回到这里,很高兴找到这个!以上是关于如何设置键盘快捷键以跳转到行首/行尾? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章