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


127

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

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

我如何找回我心爱的捷径?

如果重要的话,我在Mac OS X上使用Terminal。

Answers:


240

运行,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下的普通文本框中一样。)

相关问题:在Terminator Terminal Emulator中运行Zsh时,修复.zshrc中的键设置(Home / End / Insert / Delete)


14
你是我的救星!在我的Mac上,“ Alt + <-”给了“ ^ [b”,->给了“ ^ [f”,所以我添加了这些。奇迹般有效。Ctrl +箭头保留用于在Mac上的桌面之间进行切换。
Mads Ohm Larsen 2012年

请注意,对于ctrl + <-cat ^[[D,我正在报告,而ctrl + v正在报告^[OD。Ctrl + v的建议有效,但cat的建议无效。此外,ctrl + v对于alt + <-和alt +->都报告了相同的内容。通过查看cat的输出并将任何“ [[”替换为“ O”,我能够添加这两个值
Mike S

10
我在cat下的输出^[^[[C用于正向单词和^[^[[D反向单词,但是由于某种原因,在.zshrc中对这些单词进行更新无法正常工作。
云蒂

2
@Yunti -把bindkey "^[^[[D" backward-wordbindkey "^[^[[C" forward-word〜/ .zprofile为我工作!
费尔南多·埃斯皮诺萨

男子!救了我一命!感谢分享!
Joao Henrique

185

对于使用iTerm的任何人,无论使用哪种shell

我认为,此处提供的所有解决方案都采用向后的方法。实质上,您是在告诉外壳程序监听您在终端中设置的某些esc序列或其他键绑定,在切换外壳程序时会造成兼容性问题(如果您将SSH切换到其他外壳程序,则从BASH切换到ZSH等,然后您会丢失一些(如果不是全部的话)。

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

我写了一个压缩解决方案,让你的终端以响应尽可能接近原生Mac键绑定在这里

打开iTerm首选项+ ,并导航至Profiles选项卡(Keys可以使用该选项卡,但是向个人资料中添加快捷键允许您保存个人资料并将其同步到多台计算机)和keys子选项卡并输入以下内容:

向左移动光标一个字

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

向右移动光标一个字

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

不仅在ZSH中,而且在将SSH SSH到运行BASH,irb / pry,node等的服务器中时,这也应该给您所需的行为。


1
我在接受的解决方案方面遇到了麻烦,因为我的zsh工作正常,但irb和其他控制台却不行。删除以前的设置(如建议的那样在iTerm配置文件中)就像一个超级按钮!
llekn

1
在Mac上,bindkey解决方案会发出令人讨厌的错误声音。这应该是正确的方法。
魏世曾

@Lev可能是因为您的外壳未映射到默认配置。运行时,bindkey | grep forward-word您应该看到已"^[f" forward-word返回,但如果没有,则有2个选项。映射到返回的其他一个,或添加"^[f" forward-word到您的中.zshrc
特拉维斯

我会注意到,这"^[f"似乎是forward-word用于所有shell 的最一致使用的绑定,并且在我的bash版本中默认是唯一的一组绑定。
特拉维斯

不知何故,它对我来说是命令按钮而不是选项。谢啦。:)
Vaibhav Jain

72

在OSX Mountain Lion上,为〜/ .zshrc添加以下内容对我有用。

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

4
此解决方案每次使用都会触发iTerm 2中的“铃铛”,因此在单词之间跳转可能会很烦人。
马修·莫雷克

1
任何人都想知道如何阻止这种情况的发生^ @MatthewMorek
Daniel Kobe

18
'\ e \ e'防止响铃。我在终端兼容模式下使用iTerm 2在El Capitan上进行的配置是 bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum,2016年

谢谢,这解决了macOs Sierra上的问题。在Terminal或iTerm2上都没有听到铃声。
Raspo

您如何设置它从单词的末尾而不是单词的开头或末尾移动?
Mafro34,18年

22

在MacOS High Siera 10.13.6或Mojave 10.14.2上并将iTerm2与ZSH结合使用要移开单词,我必须这样输入:

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

另一个解决方案对您不起作用


1
这也是唯一对我有用的解决方案。谢谢!Mac OS Mojave
jamescampbell

也可以在OS Catalina上使用!
里德·理查兹

7

虽然没有严格的回答你的问题,默认绑定forward-wordbackward-wordalt-fRESP。alt-b

该作品无处不在,不要求你离开家行,有一个很好的记忆性(F =前,B =背面),同时还具有一致的ctrl-fctrl-bforward-characterbackward-character

撕下箭头键!


4
在zsh / iterm2中对我不起作用,打印ƒ和∫(cb cf起作用)。
达沃林

2

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

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

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

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

1

在Mavericks(10.9.4)上,代码为1; 5 ...因此,要使用箭头绑定alt,我需要使用.zshrc:

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

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

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


1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie 2015年

0

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

使用bindkey探索可用没有定制键绑定选项。

^[b 向后移动一个词和向后^[f移动一个词。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.