iTerm2 Vim alt+right/left arrow

11,296

Solution 1

In iTerm's properties go to Profiles -> Keys and setup there

  • For ⌥→ Send Escape Sequence [1;5C
  • For ⌥← Send Escape Sequence [1;5D

enter image description here

Solution 2

Start by viewing the key code your terminal is sending to vim:

$ sed -n l
^[[1;9D 

In the above example, i ran the sed command and pressed Alt + Left.

The ^[[1;9D is the escaped sequence being sent to vim, so we can user that for our mapping.

Add to vimrc:

map <Esc>[1;9D :tabn<CR>

alternative solution for macOS

if sed -nl is not working as expected, try CTRL + V instead

You can determine the current mapping using the "control-V trick": First press control-V, then the keystroke you like to examine. This will print the characters that are sent to the terminal. http://www.macfreek.nl/memory/Backspace_and_Delete_key_reversed

For example typing control-V + delete prints ^?. I have only verified this on macOS 11.

Solution 3

I read another post describing that for option-left and option right, you need to bind them to the actions ^[b and ^[f, respectively. That is, you bind them to "Send escape sequence" and bind key b and f.

http://elweb.co/making-iterm-2-work-with-normal-mac-osx-keyboard-shortcuts/

Share:
11,296

Related videos on Youtube

seds
Author by

seds

Passionate young C, Python, Perl and Ruby developer.

Updated on September 18, 2022

Comments

  • seds
    seds over 1 year

    As a Linux user, I am very used to jump from word to word in vim/nano using ALT+left or right.

    This doesn't seem to work properly using iTerm, I am using zsh, I tried adding;

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

    It does work, but inside zsh only, then I commented those lines and added in iTerm a keyboard shortcut;

    enter image description here

    It does work, but only for the ALTleft

    How can I make it work for the right arrow too?

  • slhck
    slhck over 10 years
    That doesn't work for me. The escape sequences are sent, but vim only moves one space back and forth. Running the default vim 7.3 that comes with OS X 10.8. Ideally, I'd like to change it on vim's side, not tweaking the defaults of the Terminal emulator (since that'll result in better portability).
  • eiennohito
    eiennohito over 10 years
    That's weird, it works both in vim (from homebrew, not a default one) and zsh with the default configuration from oh-my-zsh (in ~/.oh-my-zsh/lib/key-bindings.sh).
  • seds
    seds over 10 years
    Doesn't work here either, I can use alt + arrow in inside zsh, in Vim it only works with shift + arrow :(
  • eiennohito
    eiennohito over 10 years
    I checked it one more time on available remote systems (ubuntu 13.04, stable debian, and scientific linux) and it works everywhere. What is the output when you press Control+V, ⌥→? For me it is ^[[1;5C
  • pabouk - Ukraine stay strong
    pabouk - Ukraine stay strong over 10 years
    You should include the essential information instead of just putting a reference here.
  • Petro Semeniuk
    Petro Semeniuk over 10 years
    Works for me: iTerm/Vi + zsh
  • Cam Jackson
    Cam Jackson over 8 years
    +1! I found similar instructions here: coderwall.com/p/h6yfda/…
  • Niing
    Niing over 3 years
    what's the key code for delete?
  • lfender6445
    lfender6445 over 3 years
    try ctrl + v and then press the delete key instead of the sed cmd which prints nothing. i get this (running osx): ^?