2010-10-18 16 views
29

Vorrei interrompere una linea (nella posizione del cursore) su due righe senza uscire dalla modalità normale (inserendo la modalità di inserimento o della riga di comando). È possibile?Come interrompere una linea in vim in modalità normale?

Attualmente arrivo alla posizione desiderata e premo 'i' per accedere alla modalità di inserimento, 'invio' per interrompere la linea in due, quindi 'esc' per tornare alla modalità normale.

Non sto provando a impostare una lunghezza massima della linea o fare alcuna sintassi o qualcosa del genere. Voglio solo rompere una linea in due righe senza lasciare la modalità normale. 'J' unisce la linea con il cursore alla linea sottostante, il che è utile. Voglio il contrario - per rompere una linea in due con un solo comando.

risposta

34

Prova questa:

:nnoremap <NL> i<CR><ESC> 

poi basta premere Ctrl-J ogni volta che si desidera dividere una linea.

+2

Questo è esattamente quello che speravo. Trovo strano che questo non sia un comando incorporato in vim, ma ho aggiunto la riga al mio file .vimrc e sto tranquillamente scuotendo. – Ted

+2

Grazie e mi rendo conto di aver scoperto una funzionalità che non avrei mai capito prima di ora ... ;-) –

+5

Penso che sia meglio usare ': noremap' piuttosto che': map', e che è ancora meglio usare ': nnoremap' in questo caso come la domanda afferma * modalità normale *. – Benoit

20

Non conosco un singolo comando, ma molte volte "r" quindi "Invio" per interrompere una linea.

"r" sostituisce il carattere corrente sotto il cursore senza passare alla modalità di inserimento. Questo non può essere quello che vuoi se non si vuole sostituire un carattere ...

+0

Non funziona per me ... inserisce il carattere '^ M'. Probabilmente dipende da '& fileformat'. – Benoit

+0

@Benoit, 'fileformat' non fa alcuna differenza durante la modifica; è usato solo per leggere e scrivere. – graywh

2

Per quanto ne so, questo non è possibile senza entrare nella modalità di inserimento. È possibile tuttavia macro con qualcosa di simile (sostituire Z con qualsiasi chiave che si desidera utilizzare)

nmap Z i<cr><esc>k$ 

in fondo questo associa il tasto 'Z' per entrare in modalità di inserimento 'i', inserire un ritorno a capo '<cr>', uscire dalla modalità di inserimento '<esc>', salire di un 'k' la linea e, infine, andare alla fine della linea '$'

2

per questa domanda duplicato: How do I insert a linebreak where the cursor is without entering into insert mode in Vim?

Dall'interno di vim, digitare:

:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter] 

Questa mappa il tasto G per macro I [Invio] [Esc]

+0

Grazie. Ho fatto qualche ricerca prima di postare, ma credo di non aver usato i termini giusti. È stata una buona discussione a cui ti sei collegato, e mi dispiace che abbia postato un duplicato, ma penso di aver ottenuto una risposta leggermente più elegante da parte di Amardeep. – Ted

+0

Trovo che sia meglio utilizzare la notazione della chiave di Vim (ad esempio e ) per le mappe. Inoltre, sii più specifico riguardo alle modalità della mappa. – graywh

13

mettere il cursore in posizione e ...

r<Enter> 
+0

Non sono sicuro del motivo per cui questa non è la risposta migliore in quanto non richiede mapping aggiuntivi. –

+3

Perché sostituisce il carattere nella posizione corrente con un \ n – caio

+0

anche perché potresti voler spezzare la linea su un carattere di spazio non bianco, ad esempio a '(| (arg)' che significa 'arg)' andrà sul linea successiva ma si perde uno dei parents – skamsie

9

Simile ad altre risposte, ma non sostituisce il carattere corrente.

R<enter>

No riassocia richiesto.

+2

Chiudi, ma lascia l'utente in modalità di inserimento, vuole finire in modalità normale. – Symmitchry

0

È possibile utilizzare la registrazione. Posiziona il cursore nel punto in cui desideri inserire un'interruzione di riga. Digitare qa per avviare la registrazione nel registro a (è possibile utilizzare un altro registro diverso a se si vuole. Poi digita i (selettore di modalità per inserire), ritorno (inserto di nuova riga), fuga (modalità inserimento uscita), q (termina la registrazione.) Ora puoi invocare questa sequenza di tasti digitando @a (dove a è il numero di registro che hai usato quando hai iniziato la registrazione, quindi continua a spostare il cursore nel punto in cui desideri inserire una nuova riga e scrivi @a.

Problemi correlati