O comando é
nnoremap <leader>; :execute "normal! mqA;\<esc>`q"
Se você pressionar <leader>;
, você será E114: Missing quote: "normal! mqA;\
seguido por E15: Invalid expression: "normal! mqA;\
. Por que é isso? O comando funciona bem se for inserido diretamente na linha de comando.
O comando adiciona a ;
no final da linha atual, sem alterar a posição dos cursores.
Percebo que posso apenas fazer o nnoremap <leader>; mqA;<esc>`q
que funciona, a questão é por que o que foi dito acima não funciona e o que pode ser feito para fazê-lo funcionar da forma normal de execução.
Meu palpite seria que é necessário algum nível de escape aninhado, mas não consegui encontrar um que funcione.
fonte
:h <>
. A parte relevante é: A notação <> usa <lt> para escapar do significado especial dos nomes das chaves. Usar uma barra invertida também funciona, mas apenas quando 'cpoptions' não inclui o sinalizador 'B'. Portanto, se oB
sinalizador não estiver emcpotions
, você pode usar\<Esc>
para representar a<Esc>
chave.Você precisa escapar do
<ESC>
modo de comando. Isso é feito prefixando-o com<C-v>
. Você também precisa de um trailing<CR>
para executá-lo. Como isso:fonte
Descobri que existem três maneiras de escapar da chave:
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>
Semelhante para a tecla Enter (
<cr>
):<c-v><cr>
ou\<lt>cr>
ou\r
.fonte