2012-08-24 3 views
5

Estoy tratando de aprender Vimscript desde LearnVimscriptTHW y me encontré con el uso de :execute and :normal.Por qué: ejecutar no funciona como se esperaba en Vim: LearnVimscriptTheHardWay

Example from LVSTHW:

:normal! gg/a<cr> 

Del libro: El problema es que no reconoce normal! "caracteres especiales" como <cr>. Hay varias formas de evitar esto, pero la más fácil de usar y leer es execute.

Ahora cuando uso :execute "normal! gg/a<cr>" no funciona para mí. No busca a(char) en mi archivo actual en lugar de que solo ejecute gg y que no haga nada, pero si se usa :execute "normal! gg/a\r", funciona y resalta con éxito el char a en mi archivo.

También probé las siguientes formas pero ninguna de ellas funcionó.

:execute "normal! gg/a"<cr> 
:execute normal! gg/a<cr> 
:execute "normal! gg/a<cr>"<cr> 

Del libro parece que execute convierte internamente <cr> to \r. Entonces, por qué no está sucediendo en mi caso.

Respuesta

5

tiene que escapar del <cr> con una barra invertida: exe "norm! iHello\<cr>World"

+0

Ok funcionó, pero yo estaba en la ilusión de que 'execute' se encargará de todo, incluido el' escaping the sp. chars'. Entonces, ¿hay alguna función Vim en la que pueda envolver mi comando anterior para que maneje los caracteres que necesita escaparse automáticamente? ¡Algo así como la norma 'exe'! Escapefunc (iHello \ World) ' – RanRag

+0

Bueno, cuando uses' norma' tendrás que escapar de los caracteres especiales porque de lo contrario vim no sabe si quieres escribir '' o ejecutar ' \ r'. Fuera de 'norma' esto funciona automáticamente. – Conner

+0

Sí, use' escape ("iHello \ World") 'o adquiera el hábito de usar la notación literal como en mi respuesta. – romainl

5

Una mirada a :help :execute pueden ser útiles, aquí. Debe escapar cualquier <CR> o <ESC> con una barra invertida cuando los utiliza en una expresión: \<CR>, \<Esc> ... Estas anotaciones son válidas solo en asignaciones, si entiendo correctamente.

Otra opción es introducir la clave "literalmente":

  • i entrar en el modo de inserción, que no sean necesarios si yoou están en la línea de comandos
  • <C-v>
  • <CR>

Usted Obtendrá un solo carácter que se parece a ^M y no necesita ser escapado.

Cuestiones relacionadas