2012-01-14 12 views
7

Say, tengo el siguiente<Plug> asignaciones basadas del Vim no trabajo con: comando normal de

:nm <Plug>Ls :ls<CR> 
:nm <Leader>L <Plug>Ls 

Cuando hago un , L (, ser el líder), me pongo la salida de :ls mando. También consigo la salida cuando lo haga :normal ,L, pero no cuando se hace la siguiente

:normal <Leader>L 
:normal <Plug>Ls 

puedo entender por qué el primero no funciona, supongo que tengo que hacer algo como execute 'normal ' . mapleader . 'L'. Lo que no puedo entender es el segundo. No me da ningún error, simplemente no hace nada, que es lo que me vuelve loco. No pude encontrar nada sobre esto en los documentos tampoco.

Lo que quiero hacer es ejecutar lo que esté mapeado en <Plug>Ls, desde el modo de comando (en una función en realidad). ¿Cualquier truco oscuro necesario para esto?

Respuesta

10

que hacen el trabajo con normalidad, sólo que no se está suministrando <Plug>, contrate para <, P, l, u, g, >. sintaxis correcta es

:execute "normal \<Plug>Ls" 

Lo mismo se aplica a feedkeys(): call feedkeys("\<Plug>Ls"), no call feedkeys("<Plug>Ls").

También tenga en cuenta que execute "normal ".mapleader."L" en realidad no debería usarse nunca como si mapleader cambios después de ejecutar :nm <Leader>L <Plug>Ls, entonces este :execute … intentará llamar a la cartografía inexistente (mapleader cambios no afectan a las asignaciones ya creados). Y usted no hay formas de saber si mapleader ha cambiado.

+0

Sí, eso funciona. En realidad, intenté esto, pero con comillas simples. ¡Me siento tan estúpido ahora mismo! Gracias por esta maravillosa respuesta. Nunca supe que hay una diferencia en el uso de las cotizaciones. –

Cuestiones relacionadas