2010-05-31 13 views
24

Io uso il seguente Vim macro molto (si mette la linea corrente all'interno di tag XML):Come salvare una macro Vim che contiene i tasti "Escape"?

I<e>^[A</e> 

Così ho salvato nel mio Vimrc

let @e='I<e>^[A</e>' 

Ma non funziona.
La ^[ parte significa "fuga", ma non è intesa come tale nella .vimrc

Come posso salvare questa macro, o qualsiasi macro che contiene "Escape"?

risposta

31

Provare a immettere la fuga con <Ctrl-v><Esc> in modalità di inserimento. Vedi :help i_CTRL-V in vim.

+2

No, non dovrebbe. Con il^[è un singolo carattere (codice di escape per ESC), non i caratteri '^' e '[' caratteri. Appena testato nuovamente in vim e gvim 7.2, avvolge correttamente una riga nei tag. – catchmeifyoutry

+2

test semplice, quando si sposta il cursore lungo la parte^[, non si dovrebbe essere in grado di posizionarlo tra^e [, poiché rappresenta un singolo codice. – catchmeifyoutry

+0

Il trucco era davvero questo singolo carattere keycode, non ho visto la differenza all'inizio. Molte grazie! –

17

<ESC> è il tuo amico qui. Letteralmente digitare <ESC>, in tal modo:

let @e=I<e><ESC>A</e> 

Vedi :help key-notation in Vim per maggiori informazioni.

Aggiornamento:

Ah ... <ESC> opere in mapping dei tasti (come :map <Leader>e <ESC>I<e><ESC>A</e> [testato]), ma non nelle macro, che sono espansi letteralmente. Ho appena provato e testato questo:

:let @e='^[I<e>^[A</e>' 

Dove ^[ è solo uno char formata premendo CTRL + VESC. Nota la fuga all'inizio della macro.

+0

non funziona.Inoltre, penso che siano necessarie le citazioni. –

+1

Ora penso di capire cosa intendi con "non funziona". Risposta aggiornata – Johnsyweb

+1

Funziona, grazie mille MrGreen Il trucco era usare questo singolo carattere invece di^[Ora capisco che catchmeifyoutry ha avuto la soluzione! –

4

Se stai usando un comportamento di Windows per vim dove Ctrl +V è il comando Incolla, la sequenza equivalente è Ctrl +Q