2011-02-06 15 views
47

C'è un modo per spostare il cursore una quantità relativa di linee in vi/vim? Di 'che hai il cursore 10 linee sotto un blocco di codice che vuoi rimuovere. Se hai i numeri di linea mostrati in ordine relativo, sarebbe bello avere un comando "jump 10 lines up" che ti porterebbe lì.Spostare il cursore x linee dalla posizione corrente in vi/vim

O forse è meglio avere i numeri di linea assoluti mostrati e andare xgg dove x è il numero di linea?

+0

Se si deve ripetere più volte: https://superuser.com/questions/429917/repeat-last-normal-mode-command-including-moves-in-vim – toliveira

risposta

65

Sì, certo che c'è un modo. j e k spostare verso il basso e su una riga, quindi 10j e 10k spostare verso il basso e su dieci righe. Puoi ripetere qualsiasi movimento mettendo un numero prima di esso.

Si potrebbe anche voler set relativenumber se questo è qualcosa che si fa un sacco di - ti aiuterà a risparmiare il conteggio stampando numeri di linea relativi alla linea corrente, invece di numeri assoluti.

+0

Grazie! Avrei dovuto capire che il conteggio si sarebbe applicato anche ai comandi di spostamento. Hai reso la mia giornata! –

+0

Da Vim 7.4 è possibile vedere contemporaneamente sia numeri di linea relativi che assoluti aggiungendo quanto segue a .vimrc 'set relativenumber' e' set number'. Ciò fornirà numeri di linea relativi con un numero di linea assoluto per la linea su cui si trova il cursore. –

+1

È anche possibile spostare verso il basso un numero di righe semplicemente digitando il numero seguito da 'enter' (per i numeri di linea assoluti, basta preffrarlo con i due punti).Se sei abituato a 'j' e' k' ea un normale layout di tastiera, potrebbe non essere troppo utile, ma come utente di Colemak che usa la freccia, 'enter' è più facile da raggiungere rispetto a Colemak' j' (il QWERTY 'tasto y') – SnoringFrog

34

Lo spostamento di 10 linee in alto e in basso potrebbe non essere adatto all'attività e ad altre opzioni. Considerare altri movimenti:

Ctrl+f, Ctrl+b pagina avanti e indietro.

}, { spostare avanti e indietro di un paragrafo.

È possibile scrivere regole nel vostro vimrc di legarsi 10j a una chiave, dicono J a muoversi verso il basso 10 linee aggiungendo la seguente riga al file vimrc: map <S-j> 10j

Tuttavia si sarebbe sovrascrivendo il utile esistente Comando J (unire due righe). Trovare una combinazione di tasti inutilizzata ben posizionata per 10j/10k potrebbe essere difficile, quindi suggerisco di utilizzare i movimenti esistenti che ho menzionato.

si potrebbe anche voler sapere che si può tornare indietro ad una parola che si vede facendo: ?someword e in avanti ad una parola che si vede facendo /someword. Questi saranno più veloci di cercare di spostare su/giù 10 linee e quindi riposizionare il cursore nella posizione esatta. Se non riesci a pensare ad una stringa di ricerca semplice per la linea in questione, puoi sempre andare al numero di linea come hai detto (xgg).

+0

Pagina su e giù compiuto quello che stavo cercando! – jeremyjjbrown

+0

Uso sempre ctrl-f e ctrl-b ma trascurato {,} che sono forse la migliore granularità per la modifica del codice! Grazie! –

+0

Sapere esattamente quante linee si devono spostare è quasi impossibile. {e} sono la mia opzione preferita. – Andrejs

8

avrei dovuto vedermela con vim e ho notato - si muove su e giù + voi si muove, in modo da poter

10- 

o si potrebbe usare k dal momento che stai molto probabilmente abituati a hjkl movimento del cursore.

+1

Per spostarsi in avanti, 'enter' funziona come' + 'dopo un numero, ed è più facile raggiungere la maggior parte del tempo – SnoringFrog

+0

@SnoringFrog Sì, ma questo è solo così che ci può essere qualche relazione tra su e giù; Non intendo per nessuno davvero muoversi su e giù in questo modo, perché hjkl sarebbe comunque il più veloce. – Cilan

Problemi correlati