Here's Piet Delport's excellent explanation for why mapping the meta
(alt) key, like this:

   :map <M-g> /foo<CR>cwbar<Esc>

sometimes doesn't work. Thanks!

--Jeff

----- Forwarded message from Piet Delport <[EMAIL PROTECTED]> -----

Date: Fri, 24 Aug 2001 20:59:58 +0200
From: Piet Delport <[EMAIL PROTECTED]>
Subject: Re: Using mapping to augment hjkl

On Fri, 24 Aug 2001 at 12:24:45 +1000, Jeff Turner wrote:
> Hello,
> 
> The "vim way of life" thread made me appreciate just how cool hjkl movement
> is. But as home keys go, their functionality is quite limited.  hjkl moves
> around; HJKL does various maybe-useful things (I only ever use J
> frequently), and that's it. 
> 
> So I'd like to map <M-h> and <M-l> to '(' and ')' respectively, to move
> between sentences. In ':help map-examples', there's the following
> example:
> 
>:map <M-g> /foo<CR>cwbar<Esc>
> 
> If I enter that, it doesn't work. If I type ":map", I see:
> 
>    ç             /foo<CR>cwbar<Esc>
> 
> Erm. What's that odd ç doing there?
> 
> I'm using 6.0ag. Removing my .vimrc makes no difference.

Tried the mapping, and it works fine under gvim here.  It also shows up as:
   ç             /foo<CR>cwbar<Esc>
when i do a ":map", BTW.

I think it's because 'g' with the 8th (or meta) bit set is 'ç', and under the
GUI, pressing Alt-g results in a said 'ç' character being generated.

However, under console vim (which is what you're using?), the mapping didn't
work.  I think this is because my terminal is set up to handle Alt-<foo> by
prefixing <foo> with an escape character, and not by setting the 8th bit of
<foo>.

So on hunch i tried:

:map <Esc>g /foo<CR>cwbar<Esc>

and it works. :)

So, to summarise:  On both vim and gvim, ":map <M-G> ..." results in ç (or, g
with the 8th bit set) being mapped.  This doesn't work under console vim if
your terminal generates an "g" sequence when you press Alt-g.

Solution 1:

Put something like the following in your .vimrc:

if has('gui_running')
  map <M-g> /foo<CR>cwbar<Esc>
else
  map <Esc>g /foo<CR>cwbar<Esc>
endif

to conditionally map <M-g> or <Esc>g depending on whether you're in the GUI or
not.

Solution 2:

Get your terminal to handle Alt-<foo> keypresses by setting the 8th bit,
instead of prefixing an escape character.

I got this working by for rxvt by adding:

Rxvt*meta8:     true

to my ~/.Xdefaults.  This might break other programs though.  (It broke mutt
here, which expects escape-prefixed characters for its Alt- commands.  I could
fix this by setting meta_key=yes in my .muttrc, but am getting sidetracked...)

HTH,

-- 
Piet Delport <[EMAIL PROTECTED]>
Today's subliminal thought is:



----- End forwarded message -----

Reply via email to