Looking for ALT+LeftArrowKey solution in zsh

柔情痞子 提交于 2019-12-02 13:54:59
lolesque

Run cat then press keys to see the codes your shortcut send.
(Press Ctrl+C to kill the cat when you're done.)
For me, (ubuntu, konsole, xterm) pressing Alt+ sends ^[[1;3D, so i would put in my .zshrc

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

(Actually I prefer to use Ctrl + arrow to move word by word, like in a normal textbox under windows or linux gui.)

Related question: Fix key settings (Home/End/Insert/Delete) in .zshrc when running Zsh in Terminator Terminal Emulator

For anyone using iTerm, regardless of shell

All of the solutions offered here take a backwards approach in my opinion. You're essentially telling your shell to listen for some esc sequence or other key binding you have set in your terminal, creating compatibility issues when you switch shells (If you SSH into some other shell, switch from BASH to ZSH, etc and you lose some if not all of your keybindings).

Most shells have a set of default sequences that come pre-bound. Furthermore, while they aren't 100% consistent, they're close enough. So the easiest way that I have found to create keybinding for a particular action in the shell is to tell your terminal application to bind to the default keybindings that are consistent across shells.

I wrote a compressive solution for getting your terminal to respond as close to native mac keybindings here

Open the iTerm preferences +, 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:

Move cursor one word left

+ Send Hex Codes: 0x1b 0x62

Move cursor one word right

+ Send Hex Codes: 0x1b 0x66

And that should give you the desired behavior not just in ZSH, but also if you SSH into a server running BASH, irb/pry, node etc.

Adding the following to ~/.zshrc worked for me on OSX Mountain Lion.

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

On MacOS High Siera 10.13.6 or Mojave 10.14.2 and using iTerm2 with ZSH To move from words I have to put like this:

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

Another solutions doesn't work fo rme

Though not strictly answering your question, the default binding for forward-word and backward-word are alt-f resp. alt-b.

This works everywhere, does not require you to leave the home row, and has a nice mnemonic property (f=forward, b=back), while also being consistent with ctrl-f and ctrl-b being forward-character and backward-character.

Rip out your arrow keys!

On Mavericks (10.9.4) the code is 1;5... so for binding alt with arrows I have my .zshrc using this:

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

You can use CTRL+V and then the command you want to use

in Yosemite use Rob's solution

To make it work for me I used this answer, however I had to swap the codes (left <-> right)

⌥+← Send Hex Codes: 0x1b 0x66
⌥+→ Send Hex Codes: 0x1b 0x62

and add the following to my ~/.zshrc

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

In zsh, you can use the bindkey command to see keyboard shortcuts.

Use bindkey to explore options that are available without custom keybindings.

Namely ^[b to move backward a word and ^[f to move forward a word.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!