ChatGPT解决这个技术问题 Extra ChatGPT

如何设置键盘快捷键以跳转到行首/行尾? [关闭]

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。去年关闭。改进这个问题

我可以看到 Ctrl+left/right 跳转到行的开头/结尾。如何将其更改为 Cmd+左/右箭头?

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

a
artist.pradeep

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

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

这是给需要的人的视觉效果

https://i.imgur.com/djgBBQ3.png


你知道 Command+Delete 的代码/序列是什么吗? (清除提示)
我在其他地方回答了我的第一条评论,基本上十六进制代码 0x15 给出了 Ctrl+U ,它清除了这条线。但是我发现 0x01 Ctrl+A 会干扰 Tmux 的使用。因此,我打算将其映射到 Home 键(与 Mac 键盘上的 Fn+Left 功能相同)。
Home 的转义序列是 [1~,End 的转义序列是 [4~
像魅力一样工作,太棒了!
正确的绑定是用于 Home 的 ⌘← "SEND ESC SEQ" OH 和用于 End 的 ⌘→ "SEND ESC SEQ" OF(它们是大写的 'o' 而不是零)。这模拟了实际按下 Home 和 End 键,因此可以在 bash、vim 等中工作。
s
sqren

要在 iTerm2 中的单词和行首/行尾之间跳转,请选择以下两种解决方案之一。

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

打开首选项 单击“配置文件”选项卡 在左侧列表中选择配置文件(例如“默认”) 单击“键”选项卡 单击“键映射”选项卡(如果存在)单击“预设”下拉菜单并选择“自然文本编辑” "

https://i.stack.imgur.com/NLIVi.gif

注意:如果您有多个配置文件(fe 默认和热键窗口)并希望对所有配置文件应用相同的修改,请改用以下步骤:

单击“键”选项卡选择“键绑定”

2. 手动映射键(高级)

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

打开首选项 单击“配置文件”选项卡 在左侧列表中选择一个配置文件(例如“默认”) 单击“键”选项卡 单击“键映射”选项卡(如果存在) 单击 [+] 图标 从表中添加快捷方式以下

快捷键 描述 动作 SEND ⌘ ← 跳转到行首“SEND HEX CODE” 0x01 ⌘ → 跳转到行尾“SEND HEX CODE” 0x05 ⌘ ← Delete 删除行“SEND HEX CODE” 0x15 ⌥ ← 跳转到字首“SEND HEX CODE” 0x1b 0x62 ⌥ → 跳转到字“SEND HEX CODE”的开头结尾 0x1b 0x66 ⌥ ← DELETE 删除字“SEND HEX CODE” 0x1b 0x08 ⌘ z 撤消“SEND HEX CODE” 0x1f

笔记

如果上述快捷键已经存在键盘绑定,则必须删除它们才能使新快捷键生效。


这在 iTerm2 中对我来说很有效,而且很容易理解,谢谢!
只是澄清 ⌥← 的原始绑定是做什么的?我看到了Says send Hex Codes: 0x1b 0x1b 0x5b 0x44。如果人们不想删除它,会很高兴知道。
iTerm 是否有办法将这些捆绑到我们可以加载的预设中?手动输入似乎很烦人,但这对我有用,而且很棒。谢谢lto!
这是假设您使用的是 emacs 模式 set -o emacs
我认为这应该是问题的正确答案
C
Community

我看到已经有很多很好的答案,但这应该提供最接近本机 OSX 功能的不仅仅是你的 shell。我验证这在 ZSH、Bash、node、python -i、iex 和 irb/pry 会话中有效(使用 rb-readline gem 进行 readline,但应该适用于所有人)。

打开 iTerm 首选项 +, 并导航到 Profiles 选项卡(可以使用 Keys 选项卡,但将键绑定添加到您的配置文件允许您{1 } 并将其同步到多台计算机)和 keys 子选项卡并输入以下内容:

删除光标左侧的所有字符

⌘+←Delete Send Hex Codes: 0x15 更兼容,但有时功能是删除整行而不是光标左侧的字符。我个人使用它,然后为 ^U 覆盖我的 zsh 绑定键,以仅删除光标左侧的内容(见下文)。或 0x18 0x7f 不太兼容,在节点中不起作用,默认情况下在 zsh 中不起作用,请参阅下面修复 zsh(bash/irb/pry 应该没问题),在它起作用时执行所需的功能。

删除光标右侧的所有字符

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

删除光标左侧的一个单词

⌥+←Delete Send Hex Codes: 0x1b 0x08 Elixir 的 IEX 中的中断,似乎在其他任何地方都可以正常工作或 0x17 在任何地方都可以正常工作,但不会在 IRB 中的正常单词中断处停止,而是会删除,直到它看到一个文字空间。

删除光标右侧的一个单词

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

将光标移动到行首

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

将光标移动到行尾

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

将光标左移一个字

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

将光标向右移动一个单词

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

撤消

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

Redo 通常不绑定在 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 中添加重做的解决方案,所以如果有人知道其中任何一个的解决方案,请在下面发表评论,我会尝试添加它们。

对于正在寻找有关如何将键序列转换为十六进制的查找表的任何人,我发现 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。它完美无缺,谢谢🍻
N
Nike Kov

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

https://i.stack.imgur.com/OsZFw.png

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

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


你能详细说明你的答案吗?例如,该预设包含哪些内容并可能覆盖?
感谢你的回答。此外,最好的做法是将其应用于您自己的自定义配置文件,这样您就不会使用默认设置,并且可以将配置文件切换为自然文本编辑“模式”
迄今为止最简单和最简单的解决方案。应该是#1答案。
@CarlesAlcolea 我认为它会删除您的自定义预设和热键,因此如果您想保存它们,您应该导出配置文件。
@CarlesAlcolea 和 @wordsforthewise 查看 warning
S
Stphane

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

创建一个新的快捷键 选择“发送转义序列”作为操作然后,设置 cmd-left,在下面的文本中:输入 [H for line start OR Enter [F for line end


在我的 iterm2 中只跳一个字
ITerm => 首选项 => 键
喜欢这个!其他解决方案对我不起作用。我花了好几个小时在 iterm2 中无法使用 ctrl+a 和 ctrl+e 感到沮丧。但我不想为此放弃鱼。这完全有效,谢谢!
其他解决方案也对我不起作用,但是这个解决方案对我有用。
F
Fabrizio

对于想要在 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 可以开始行,但找不到行尾。这需要标记为答案。
G
GabLeRoux

我使用了 Travis answer,并创建了一个动态配置文件,您可以根据其说明导入。

GabLeRoux/iterm2-macos-dynamic-profile

说明在自述文件中,导入它比手动添加它们要快得多。我根据@gooli 的要求做了这个回答,因为这被隐藏在评论中。希望你喜欢这个🍻


一年后回到这里,很高兴找到这个!
N
Nerdwood

只是为了帮助任何遇到相同问题但专门将 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 文件中。


z
zx485

唯一适用于移动到行首和行尾的是

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


h
halfelf

老式的 emacs 绑定仍然可以在 iterm2 和 os x 终端中工作:

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

设置左/右选项 键充当 +Esc (类似于 os x 终端)

这应该启用 alt-f 和 alt-b 来逐字移动。 (仍然 ctrl-a 和 ctrl-e 总是照常工作)

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


I
Islam.Ibrahim

here 中所述,您可以通过简单的步骤来完成:

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


J
Jose Alban

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


bind -p 仅适用于 zsh、csh tcsh、使用 bindkey 的 Bourne shell(bash、sh)。
Z
Zitao Xiong

https://aaronaddleman.com/articles/hexcodes-and-iterm/ 中解释

您可以使用 xxd -psd 获取密钥十六进制代码。


H
Halil Özgür

对我来说,以下组合有效:

按键操作 Esc+ 最终结果 ⌘← 发送转义序列 a 发送 ^[ a ⌘→ 发送转义序列 e 发送 ^[ e