189

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

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

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

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

4

12 回答 12

350

运行cat,然后按键以查看您的快捷方式发送的代码。
(完成后按Ctrl+C杀死cat。)
对我来说,(ubuntu,konsole,xterm)按Alt+←</kbd> sends ^[[1;3D, so i would put in my .zshrc

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

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

相关问题:在终结者终端模拟器中运行 Zsh 时修复 .zshrc 中的键设置(Home/End/Insert/Delete)

于 2012-09-13T10:01:26.807 回答
258

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

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

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

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

打开 iTerm 首选项⌘</kbd>+, and navigate to the Profiles tab (the Keys tab can be used, but adding keybinding to your profile allows you to save your profile and sync it to multiple computers) and keys sub-tab and enter the following:

将光标左移一个字

⌥</kbd>+←</kbd> Send Hex Codes: 0x1b 0x62

将光标向右移动一个单词

⌥</kbd>+→</kbd> Send Hex Codes: 0x1b 0x66

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

于 2015-07-09T21:58:36.780 回答
82

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

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word
于 2013-05-07T04:37:26.800 回答
41

在 MacOS High Siera 10.13.6 或 Mojave 10.14.2 上并使用带有 ZSH 的 iTerm2 要从单词中移开,我必须这样说:

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

另一种解决方案不起作用

于 2018-10-09T06:50:41.590 回答
7

虽然没有严格回答您的问题,但默认绑定forward-wordbackward-wordalt-fresp。alt-b.

这在任何地方都有效,不需要您离开主行,并且具有很好的助记符属性(f=forward,b=back),同时也与ctrl-f和一致。ctrl-bforward-characterbackward-character

撕掉你的方向键!

于 2016-03-10T15:49:11.750 回答
4

为了使它对我有用,我使用了这个答案,但是我不得不交换代​​码(左 <-> 右)

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

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

bindkey -e
bindkey "^[b" backward-word
bindkey '^[f' forward-word
于 2018-03-23T10:15:56.910 回答
4

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

在此处输入图像描述

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

在此处输入图像描述

于 2021-12-22T15:50:08.970 回答
1

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

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

您可以使用 CTRL+V 然后使用您要使用的命令

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

于 2014-03-19T15:06:11.847 回答
1

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

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

^[b 后退一个词和^[f前进一个词。

于 2019-06-20T19:23:10.537 回答
0

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

bindkey '^[[1;3D' backward-word
bindkey '^[[1;3C' forward-word
于 2020-08-30T22:56:52.737 回答
0

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

使 iTerm 以与其他操作系统相同的方式翻译“元密钥”

于 2021-01-28T09:14:26.560 回答
0

这些键绑定在 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
于 2022-01-05T16:31:05.230 回答