我最近刚从 bash 切换到 zsh,但是我想念我的Alt+LeftArrowKey和Alt+RightArrowKey一次来回一个词。
现在,如果我按Alt+ ,LeftArrowKey我会返回几个字母,然后我就卡住了。我不会再往后退,也不会像我预期的那样用Alt+回到行尾。RightArrowKey我什至不能使用箭头键转到行尾,只能到倒数第二个。无法在行上输入新字符或确实删除。
如何找回我心爱的快捷方式?
如果这很重要,我在使用终端的 Mac OS X 上。
运行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)
对于使用 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 等的服务器时也应如此。
在 OSX Mountain Lion 上将以下内容添加到 ~/.zshrc 对我有用。
bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word
在 MacOS High Siera 10.13.6 或 Mojave 10.14.2 上并使用带有 ZSH 的 iTerm2 要从单词中移开,我必须这样说:
bindkey "\e\e[D" backward-word
bindkey "\e\e[C" forward-word
另一种解决方案不起作用
虽然没有严格回答您的问题,但默认绑定forward-word
和backward-word
是alt-f
resp。alt-b
.
这在任何地方都有效,不需要您离开主行,并且具有很好的助记符属性(f=forward,b=back),同时也与ctrl-f
和一致。ctrl-b
forward-character
backward-character
撕掉你的方向键!
为了使它对我有用,我使用了这个答案,但是我不得不交换代码(左 <-> 右)
⌥+← 发送十六进制代码:0x1b 0x66
⌥+→ 发送十六进制代码:0x1b 0x62
并将以下内容添加到我的~/.zshrc
bindkey -e
bindkey "^[b" backward-word
bindkey '^[f' forward-word
在 Mavericks (10.9.4) 上,代码是 1;5... 所以为了用箭头绑定 alt 我有我的 .zshrc 使用这个:
bindkey "^[[1;5C" forward-word
bindkey "^[[1;5D" backward-word
您可以使用 CTRL+V 然后使用您要使用的命令
在优胜美地使用 Rob 的解决方案
在 zsh 中,您可以使用bindkey
命令查看键盘快捷键。
用于bindkey
探索没有自定义键绑定可用的选项。
即^[b
后退一个词和^[f
前进一个词。
如果您在 CSI u 模式下使用 iTerm,您的绑定.zshrc
最终将是:
bindkey '^[[1;3D' backward-word
bindkey '^[[1;3C' forward-word
如果您希望 iTerminal 尊重 Emacs 样式的快捷方式,例如 ^Mf 和 ^Mb 用于前进/后退一个单词,我发现使用此技巧的最佳方法:
这些键绑定在 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