Wikia

Vim Tips Wiki

Changes: Fix meta-keys that break out of Insert mode

Edit

Back to page

(Comments: escape)
(Change <tt> to <code>, perhaps also minor tweak.)
 
Line 3: Line 3:
 
|previous=737
 
|previous=737
 
|next=739
 
|next=739
|created=June 2, 2004
+
|created=2004
 
|complexity=basic
 
|complexity=basic
 
|author=Yakov Lerner
 
|author=Yakov Lerner
Line 23: Line 23:
 
</pre>
 
</pre>
   
If you see <tt>^[a</tt> (that is, escape character followed by something), then add this snippet to your vimrc:
+
If you see <code>^[a</code> (that is, escape character followed by something), then add this snippet to your vimrc:
 
<pre>
 
<pre>
 
" fix meta-keys which generate <Esc>a .. <Esc>z
 
" fix meta-keys which generate <Esc>a .. <Esc>z
Line 59: Line 59:
   
 
----
 
----
In rxvt I found that the <tt>:set <M-a>=^]a</tt> commands don't work, instead only the map commands are needed. So I used:
+
In rxvt I found that the <code>:set <M-a>=^]a</code> commands don't work, instead only the map commands are needed. So I used:
 
<pre>
 
<pre>
 
for i in range(65,90) + range(97,122)
 
for i in range(65,90) + range(97,122)

Latest revision as of 05:45, July 13, 2012

Tip 738 Printable Monobook Previous Next

created 2004 · complexity basic · author Yakov Lerner · version 6.0


On Unix-based systems, the Meta (Alt) key may not work in Vim. For example, in insert mode, pressing Meta-A (Alt-A) may exit to normal mode, then execute normal-mode commands. This can occur with non-GUI Vim under some terminal emulators – those which generate escape sequences for Meta-characters. The actually generated escape-sequences are <Esc>a .. <Esc>z.

SolutionEdit

You must manually configure Vim to recognize these escape-sequences as Meta-characters, see below. Terminal emulators which are known to generate these sequences for Meta-keys are: rxvt (unix), putty (PC), teraterm (PC). Vim expects characters 225-250 for Meta-keys.

Here's how to fix Meta-keys on the Vim side:

Check what your Meta-keys generate:

i<press Ctrl-V><press Meta-A>

If you see ^[a (that is, escape character followed by something), then add this snippet to your vimrc:

" fix meta-keys which generate <Esc>a .. <Esc>z
let c='a'
while c <= 'z'
  exec "set <M-".toupper(c).">=\e".c
  exec "imap \e".c." <M-".toupper(c).">"
  let c = nr2char(1+char2nr(c))
endw

To fix Meta-keys definitions manually key-by-key:

:set <M-A>=<press Ctrl-V><press Meta-A>
:imap <press ctrl-v><press Esc>a <M-A>
; repeat each Meta-key.

See alsoEdit

CommentsEdit

Suggested fix does not work in PuTTY on Windows XP, using Vim 6.1.5.

The Vim help files suggest, for example:

:set <M-b>=^[b

This works, but remember to set ttimeoutlen to something small!

Also note, Meta-key mappings are case-sensitive (e.g. <m-b> and <m-B> are different).

--Fritzophrenic 18:02, 30 June 2008 (UTC)


In rxvt I found that the :set <M-a>=^]a commands don't work, instead only the map commands are needed. So I used:

for i in range(65,90) + range(97,122)
  let c = nr2char(i)
  exec "map \e".c." <M-".c.">"
  exec "map! \e".c." <M-".c.">"
endfor

instead of the snippet given above, and everything works fine now.

Jzxu 12:20, 13 March 2009 (UTC)

^] is not ^[, chłopcze

Around Wikia's network

Random Wiki