(Remove html character entities) |
(Change <tt> to <code>, perhaps also minor tweak.) |
||
Line 4: | Line 4: | ||
|previous=1146 |
|previous=1146 |
||
|next=1148 |
|next=1148 |
||
− | |created= |
+ | |created=2006 |
|complexity=intermediate |
|complexity=intermediate |
||
|author=Martin Krischik |
|author=Martin Krischik |
||
Line 12: | Line 12: | ||
|category2= |
|category2= |
||
}} |
}} |
||
− | While fine tuning my plugins, I noticed that Vim does not correctly work with maps using < |
+ | While fine tuning my plugins, I noticed that Vim does not correctly work with maps using <code><Leader></code> when the mapleader is a function key like <code><F12></code>. You have to use <code>:execute</code> to get a correct mapping: |
<pre> |
<pre> |
||
Line 34: | Line 34: | ||
==Comments== |
==Comments== |
||
− | When you want to use < |
+ | When you want to use <code><F12></code> as a mapleader, you must use a backslash when you define it: |
<pre> |
<pre> |
||
Line 41: | Line 41: | ||
</pre> |
</pre> |
||
− | :But then you can't use the < |
+ | :But then you can't use the <code>g:mapleader</code> for setting up menus any more. I guess the problem runs deeper. |
---- |
---- |
||
Isn't it a much more general issue that affects all special keys? (see {{help|expr-string}}) |
Isn't it a much more general issue that affects all special keys? (see {{help|expr-string}}) |
||
− | It seems to me that special keys must always be escaped for < |
+ | It seems to me that special keys must always be escaped for <code>:execute</code> purpose, and of course not escaped when you want to use their name. |
---- |
---- |
Latest revision as of 06:09, 13 July 2012
Tip 1147 Printable Monobook Previous Next
created 2006 · complexity intermediate · author Martin Krischik · version 6.0
While fine tuning my plugins, I noticed that Vim does not correctly work with maps using <Leader>
when the mapleader is a function key like <F12>
. You have to use :execute
to get a correct mapping:
execute "nnoremap <unique> " . escape(g:mapleader . "1" , "\") . " :call <SID>Set_Font (1) <CR>" execute "nnoremap <unique> " . escape(g:mapleader . "2" , "\") . " :call <SID>Set_Font (2) <CR>" execute "nnoremap <unique> " . escape(g:mapleader . "3" , "\") . " :call <SID>Set_Font (3) <CR>" execute "inoremap <unique> " . escape(g:mapleader . "1" , "\") . " <C-O>:call <SID>Set_Font (1) <CR>" execute "inoremap <unique> " . escape(g:mapleader . "2" , "\") . " <C-O>:call <SID>Set_Font (2) <CR>" execute "inoremap <unique> " . escape(g:mapleader . "3" , "\") . " <C-O>:call <SID>Set_Font (3) <CR>"
Similarly, you can se then add menus using execute:
execute "48amenu Plugin.Font.Small<Tab>" . escape(g:mapleader . "1" , "\") . " :call <SID>Set_Font (1)<CR>" execute "48amenu Plugin.Font.Medium<Tab>" . escape(g:mapleader . "2" , "\") . " :call <SID>Set_Font (2)<CR>" execute "48amenu Plugin.Font.Large<Tab>" . escape(g:mapleader . "3" , "\") . " :call <SID>Set_Font (3)<CR>"
The examples are taken from my font plugin, see script#1337 for full details.
Comments[]
When you want to use <F12>
as a mapleader, you must use a backslash when you define it:
:let mapleader = "\<F12>" :map <Leader>h :echo "Hello world."<CR>
- But then you can't use the
g:mapleader
for setting up menus any more. I guess the problem runs deeper.
Isn't it a much more general issue that affects all special keys? (see :help expr-string)
It seems to me that special keys must always be escaped for :execute
purpose, and of course not escaped when you want to use their name.