Vim: sposta il cursore nella sua ultima posizione


251

È possibile in (g) Vim spostare il cursore nella posizione precedente (in modalità normale)? Qualcosa da scorrere avanti e indietro nell'elenco delle posizioni precedenti del cursore sarebbe l'ideale. Ma anche solo il passaggio all'ultima posizione sarebbe sufficiente (qualcosa come cd -bash con le directory).

Ecco una piccola dimostrazione:

line |1| <- cursor position
line 2
line 3
line 4

E supponiamo di averlo fatto 2j, ecco com'è adesso:

line 1
line 2
line |3| <- cursor position
line 4

Ora vorrei premere qualcosa (oltre 2kovviamente) per tornare alla prima posizione e possibilmente alle posizioni precedenti.

Risposte:


409

Il modo più rapido è quello di colpire:

''

(due apostrofi) o:

``

(due punte posteriori). Si noti che la differenza è che il backtick va nella stessa posizione sulla linea, mentre l'apostrofo va all'inizio della linea. Su una tastiera del Regno Unito, l'apostrofo è più accessibile, quindi tendo a usarlo. Ci sono un sacco di segni utili come questo, vedi :help mark-motions.

Per alcuni altri movimenti (non 2jcredo), c'è anche la jump-list che ti consente di navigare avanti e indietro tra un numero di movimenti. CtrlOe CtrlIfai questa navigazione, ma vedi :help jump-motionsper maggiori informazioni.


3
in realtà nessuno di questi si comporta esattamente come mi aspetto ma immagino che non ci sia nient'altro disponibile.
Idan K,

1
@Idan K - in che modo `` (doppio backtick) non ti dà esattamente quello che vuoi? (Ad eccezione dell'aspetto "storia").
Dan,

3
@Dan: se lo provo nell'esempio sopra, vedo questo comportamento: sto sulla linea 1, quindi premo jdue volte di fila (ora sono sulla linea 3) quindi premendo il doppio backtick arriva a me la linea 1 e mi aspetto per passare alla linea 2.
Idan K

2
Penso che devi spostare (2j o qualcosa del genere), quindi modificare (o eseguire qualsiasi azione per modificare il testo) quindi utilizzare '' per tornare alla posizione precedente. Non è logico usare "2j", non fare nulla e tornare alla posizione precedente
Asenar,

8
@IdanK Il jumplist viene aggiornato (ovvero viene registrata la posizione precedente del cursore) quando si utilizza un "salto" effettivo, che è (credo) qualsiasi comando di movimento diverso dai i j k lmovimenti. (L'elenco completo, dai documenti di aiuto, è "'"', "`", "G", "/", "?", n", "N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", H" and the commands that start editing a new file.) Quindi no, questo non "annullerà" 2jo simili, ma funzionerà per quasi tutto il resto. Questo ha senso perché 2jet al. hanno già inversioni semplici ( 2k, ecc.), mentre le altre no.
Kyle Strand,

61

Puoi anche utilizzare g;e g,per spostarti avanti e indietro nell'elenco delle posizioni di modifica precedenti .

Su tastiere non statunitensi

Sui layout di tastiera svizzeri e tedeschi, digitare in modo ;inopportuno richiede l'uso del Shifttasto. Quindi, ho definito g-un alias più conveniente per g;in $MYVIMRC:

" Map g- as an alias for g;
nnoremap g- g;

Anche se mi piace molto, salterà solo tra le modifiche in un file. Se si modifica il buffer 1, quindi si modifica il buffer 2, non tornerà al buffer 1.
thouliha

39

Perché nessuno ha capito il problema con la risposta di DrAl ? Il ''o ``non risolverà il problema originale di questo post! Questi due comandi non funzioneranno per alcuni movimenti del cursore come 2j, almeno per me. Renderà il neofita di vim più confuso.

Il comportamento di ''o ``, e CtrlIo CtrlOsi basa sulla jump list. Il 2jnon salverà le modifiche di posizione nella jump list quindi questi comandi non funzioneranno 2j.

''oppure ``passare dall'ultima posizione alla posizione corrente. CtrlIe CtrlOscorrere la cronologia dei jump list.

g;e g,spostarsi tra le posizioni di modifica, anch'esse utilizzate molto frequentemente.


1
Grazie per averlo segnalato! Mi chiedo, cosa funzionerà per casi come 2jallora?

33

Direttamente dall'aiuto (: help jump):

: ju [mps] Stampa l'elenco di salto (non un comando di movimento). {not in Vi} {non disponibile senza | + jumplist | caratteristica}

                          *jumplist*

I salti sono ricordati in una lista di salti. Con il comando CTRL-O e CTRL-I puoi andare alle posizioni del cursore prima dei salti più vecchi, e viceversa. Quindi puoi spostarti su e giù nell'elenco. C'è una jump list separata per ogni finestra. Il numero massimo di voci è fissato a 100. {non disponibile senza il jumplist | + | caratteristica}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.