Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get Cmd-left/right working with iTerm2 and Vim (without requiring .vimrc changes)?

Tags:

I want to be able to use Option-left and Option-right to skip words (and Cmd-left/right to go to beginning and end of lines) within Vim as it does at my shell prompt. My Iterm2 preferences have mappings to do this (e.g. Option-left to Esc-H and a one for option-right to Esc-F to skip over words), and this works in the shell locally or when ssh'd to a remote server.

When I use Vim locally or remotely, option-left works, but option-right does not. I suspect this is because Vim naturally listens for Esc-H, but not Esc-F. I am able to get around this by modifying .vimrc file to Esc-b to b and Esc-f to f, but I don't want to do this to every server I'm connecting to.

Similarly, I have the same desired setup for Cmd-left/right for going to beginning and end of a line. I can get this working in the shell via Iterm2 mappings (e.g. Cmd-left to Esc-[h), but Vim doesn't respond at all to this unless I map keys again (e.g. Esc-[h to ^).

Update: I just figured out how to get option-left/right working. I changed mapping in iTerm2 for these to be escape-[1;5D and escape-[1;5C respectively. I still want to solve the Cmd-left/right problem though (I changed my question's title to reflect this). Any ideas?

like image 701
Dolan Antenucci Avatar asked Mar 07 '12 04:03

Dolan Antenucci


2 Answers

To mimic OS X's behavior of sending Cmd-left/right to the beginning/end of a line, I add the following mappings in iTerm2:

  • Cmd-left to escape-sequence [1~
  • Cmd-right to escape-sequence [4~

To mimic OS X's behavior of sending Option-left/right to the previous/next word, I add the following mappings in iTerm2:

  • Option-left to escape-sequence [1;5D
  • Option-right to escape-sequence [1;5C

Special thanks to this blog post for tracking down what I was missing with the cmd-left/right mappings

like image 127
Dolan Antenucci Avatar answered Sep 19 '22 01:09

Dolan Antenucci


FWIW, dolan's answer didn't work for me on iTerm 2 1.0.0.20120203 on Mac OS X 10.7.3. His solution only inserted ~ and 5D/5C into my terminal when I pressed the shortcut keys.

Instead, I used the following solutions:

  • Cmd-left/right: iTerm 2: How to set keyboard shortcuts to jump to beginning/end of line?

  • Option-left/right as well as option-delete: http://hackaddict.blogspot.co.at/2007/07/skip-to-next-or-previous-word-in-iterm.html

YMMV, not sure why one set of solutions would work and not the other

like image 32
Ilias Karim Avatar answered Sep 19 '22 01:09

Ilias Karim