El comando es
nnoremap <leader>; :execute "normal! mqA;\<esc>`q"
Si pulsa <leader>;
, se le E114: Missing quote: "normal! mqA;\
seguido de E15: Invalid expression: "normal! mqA;\
. ¿Por qué es esto? El comando funciona bien si se ingresa directamente en la línea de comando.
El comando agrega un ;
al final de la línea actual, sin cambiar la posición de los cursores.
Me doy cuenta de que puedo hacer lo nnoremap <leader>; mqA;<esc>`q
que funciona, la pregunta es por qué lo anterior no funciona y qué se puede hacer para que funcione en la forma de ejecución normal.
Mi suposición sería que se necesita cierto nivel de escape anidado, pero no pude encontrar uno que funcione.
fuente
:h <>
. La parte relevante es: la notación <> usa <lt> para escapar del significado especial de los nombres clave. El uso de una barra diagonal inversa también funciona, pero solo cuando 'cpoptions' no incluye la bandera 'B'. Entonces, si laB
bandera no está dentrocpotions
, puede usarla\<Esc>
para representar la<Esc>
clave.Necesita escapar del
<ESC>
modo de comando. Esto se hace con el prefijo<C-v>
. También necesita un seguimiento<CR>
para ejecutarlo realmente. Me gusta esto:fuente
Descubrí que hay 3 formas de escapar de la clave:
nnoremap <silent> <leader>; :execute "normal! mqA;<C-v><esc>`q"<CR>
nnoremap <silent> <leader>; :execute "normal! mqA;\<lt>esc>`q"<CR>
nnoremap <silent> <leader>; :execute "normal! mqA;\e`q"<CR>
Similar para la tecla Enter (
<cr>
):<c-v><cr>
o\<lt>cr>
o\r
.fuente