在zsh中寻找ALT+LeftArrowKey解决方案

Posted

技术标签:

【中文标题】在zsh中寻找ALT+LeftArrowKey解决方案【英文标题】:Looking for ALT+LeftArrowKey solution in zsh 【发布时间】:2012-09-05 03:19:13 【问题描述】:

我最近刚从 bash 切换到 zsh,但是我想念我的 Alt+LeftArrowKeyAlt+RightArrowKey 一次来回一个词。

现在,如果我按 Alt+LeftArrowKey 我会返回几个字母然后我就卡住了。我不会再往后退,也不会像我所期望的那样用 Alt+RightArrowKey 回到行尾。我什至不能使用箭头键转到行尾,只能到倒数第二个。无法在行上输入新字符或确实删除。

如何找回我心爱的快捷方式?

如果这很重要,我正在使用终端在 Mac OS X 上。

【问题讨论】:

【参考方案1】:

运行cat,然后按键查看您的快捷方式发送的代码。 (完成后按 Ctrl+C 杀死 cat。) 对我来说,(ubuntu,konsole,xterm)按 Alt+ 发送^[[1;3D,所以我会输入我的 .zshrc

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

(其实我更喜欢使用 Ctrl + 箭头来逐字移动,就像在 windows 或 linux gui 下的普通文本框中一样。)

相关问题:Fix key settings (Home/End/Insert/Delete) in .zshrc when running Zsh in Terminator Terminal Emulator

【讨论】:

你是我的救星!在我的 Mac 上,“Alt + 给出了“^[f”,所以我添加了这些。奇迹般有效。 Ctrl+箭头保留用于在 Mac 上的桌面之间切换。 一个注意事项是,对于 ctrl+^[[D 而 ctrl+v 报告 ^[OD。 Ctrl+v 的建议有效,但 cat 的建议无效。此外,ctrl+v 为 alt+ 报告了相同的内容。我可以通过查看 cat 的输出并将任何“[[”替换为“O” 来添加这两个 我在 cat 下的输出是 ^[^[[C 用于正向词,^[^[[D 用于反向词,但由于某种原因,在 .zshrc 中更新这些内容不起作用。 @Yunti - 将 bindkey "^[^[[D" backward-wordbindkey "^[^[[C" forward-word 放入 ~/.zprofile 对我有用! 编辑文件后别忘了运行source ~/.zshrc【参考方案2】:

对于任何使用 iTerm 的人,无论外壳如何

在我看来,这里提供的所有解决方案都是倒退的。您实际上是在告诉您的 shell 侦听您在终端中设置的一些 esc 序列或其他键绑定,当您切换 shell 时会产生兼容性问题(如果您 SSH 到其他一些 shell,从 BASH 切换到 ZSH 等,您会输一些(如果不是全部)键绑定)。

大多数 shell 都有一组预先绑定的默认序列。此外,虽然它们不是 100% 一致的,但它们已经足够接近了。因此,我发现在 shell 中为特定操作创建键绑定的最简单方法是告诉您的终端应用程序绑定到跨 shell 一致的默认键绑定。

我编写了一个压缩解决方案,让您的终端响应接近原生 mac 键绑定 here

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

光标左移一个字

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

光标右移一个字

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

不仅在 ZSH 中,而且在您通过 SSH 连接到运行 BASH、irb/pry、node 等的服务器时,这应该会给您提供所需的行为。

【讨论】:

我在接受解决方案时遇到了问题,因为我的 zsh 工作正常,但 irb 和其他控制台没有。删除以前的设置(按照建议在 iTerm 配置文件中)就像一个魅力! bindkey 解决方案会在 Mac 上发出恼人的错误声音。这应该是正确的做法。 @Lev 可能是因为您的 shell 未映射到默认配置。运行 bindkey | grep forward-word 你应该会看到 "^[f" forward-word 返回,但如果你不这样做,你有 2 个选项。映射到返回的其他人之一,或将"^[f" forward-word 添加到您的.zshrc 我会注意到,"^[f" 似乎是跨 shell 使用的forward-word 最常用的绑定,也是我的 bash 版本中默认设置的唯一一个。 不知何故,它与我的命令按钮而不是选项一起工作。谢啦。 :)【参考方案3】:

在 OSX Mountain Lion 上将以下内容添加到 ~/.zshrc 对我有用。

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word

【讨论】:

这个解决方案每次使用都会在 iTerm 2 中触发一个“铃声”,因此在单词之间跳转真的很烦人。 任何人都想知道如何阻止这种情况发生^ @MatthewMorek '\e\e' 阻止响铃。我在终端兼容模式下使用 iTerm 2 在 El Capitan 上的配置是 bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word 谢谢,这解决了 macOS Sierra 上的问题。我在终端或 iTerm2 上都没有听到任何铃声。 你如何设置它从单词的末尾移动而不是开头或它们?【参考方案4】:

在 MacOS High Siera 10.13.6 或 Mojave 10.14.2 上并使用带有 ZSH 的 iTerm2 要离开的话,我必须这样说:

bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word

另一种解决方案不起作用

【讨论】:

这也是唯一对我有用的解决方案。谢谢! Mac OS Mojave 也适用于 OS Catalina! \e\e[D.它代表什么键 非常感谢,Big Sur 为我解决了这个问题。【参考方案5】:

虽然没有严格回答您的问题,但 forward-wordbackward-word 的默认绑定分别是 alt-falt-b.

这适用于任何地方,不需要您离开主行,并且具有很好的助记符(f=forward,b=back),同时也与ctrl-fctrl-b 一致,即forward-characterbackward-character.

撕掉你的方向键!

【讨论】:

在 zsh/iterm2 中对我不起作用,打印 ƒ 和 ∫(c-b cf 有效)。【参考方案6】:

为了让它对我有用,我使用了this answer,但是我不得不交换代​​码(左 右)

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

并将以下内容添加到我的~/.zshrc

bindkey -e
bindkey "^[b" backward-word
bindkey '^[f' forward-word

【讨论】:

如果您改为将bindkeys 改为将^[f 绑定到forward-word,而不是backward-word,则可能会减少混乱。【参考方案7】:

对于 iTerm,转到此屏幕截图显示的位置并选择“自然文本编辑”

如果您已经有一些键映射,它将在下面询问,请相应地选择不要丢失您之前设置的任何特殊绑定。但是,如果您不记得添加任何绑定或刚开始使用 iTerm(在这台机器上),您可以安全地选择“删除”

【讨论】:

【参考方案8】:

在 Mavericks (10.9.4) 上,代码是 1;5...所以为了用箭头绑定 alt,我的 .zshrc 使用了这个:

bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word

你可以使用CTRL+V然后你想使用的命令

在优胜美地使用 Rob 的解决方案

【讨论】:

bindkey "[C" forward-word bindkey "[D" backward-word【参考方案9】:

在zsh中,可以使用bindkey命令查看快捷键。

使用bindkey 探索没有自定义键绑定的可用选项。

^[b向后移动一个单词,^[f向前移动一个单词。

【讨论】:

【参考方案10】:

如果您在 CSI u 模式下使用 iTerm,您的 .zshrc 的绑定最终会是:

bindkey '^[[1;3D' backward-word
bindkey '^[[1;3C' forward-word

【讨论】:

【参考方案11】:

如果您希望 iTerminal 尊重 Emacs 样式的快捷方式,例如 ^Mf 和 ^Mb 用于前进/后退,我发现使用此技巧的最佳方法:

Making iTerm to translate 'meta-key' in the same way as in other OSes

【讨论】:

【参考方案12】:

这些键绑定在 Arch Linux 上与 Alacritty 一起使用,只需将它们添加到 ~/.zshrc 文件中

bindkey -e

bindkey "^[[3~" delete-char                     # Key Del
bindkey "^[[5~" beginning-of-buffer-or-history  # Key Page Up
bindkey "^[[6~" end-of-buffer-or-history        # Key Page Down
bindkey "^[[H" beginning-of-line                # Key Home
bindkey "^[[F" end-of-line                      # Key End
bindkey "^[[1;3C" forward-word                  # Key Alt + Right
bindkey "^[[1;3D" backward-word                 # Key Alt + Left

【讨论】:

以上是关于在zsh中寻找ALT+LeftArrowKey解决方案的主要内容,如果未能解决你的问题,请参考以下文章

解决Ubuntu下vscode中zsh乱码的问题

zsh : command not found pip3 的解决方案

解决oh-my-zsh中git分支显示乱码问题

如何安全地解决 homebrew 和 zsh 对 /usr/local/share/zsh 所有权的冲突需求?

解决 zsh:command not found

解决 zsh:command not found