2011-10-25 21 views
16

Quando esco da VIM e apro di nuovo lo stesso file, sono posizionato all'inizio del file. Come posso mantenere l'ultima posizione del cursore?Mantieni l'ultima posizione di modifica in VIM

+0

possibile duplicato di [Come si fa in modo che Vim ti riporti dove eri l'ultima volta che hai modificato un file?] (Http://stackoverflow.com/questions/1682536/how-do-you-make-vim-take -si-back-dove-tu-were-when-you-last-edited-a-file) – mloskot

+0

: help viminfo dovrebbe dirti cosa ti serve –

risposta

21

Il "out of the box" .vimrc permette questo con l'affermazione:

source $VIMRUNTIME/vimrc_example.vim 

si può solo bisogno di ripristinare questa dichiarazione nel vostro .vimrc. In ogni caso, vedere vimrc_example.vim e vedere anche la funzione line()in the Vim manual per una discussione su come funziona.

+0

Questo ha funzionato per me su mac os x. Ho copiato il file, chmod 600, e la vita era grandiosa. – tggagne

0

È possibile provare il comando :mks (effettua sessione). Memorizza un file di script che, una volta eseguito tramite vim, ripristina la sessione di modifica corrente, inclusi tutti i file aperti e la posizione del cursore.

+0

Crea un file Session.vim nella directory locale. Questo non è quello che volevo. Ora posso salvare automaticamente la posizione di modifica e ripristinarla quando viene aperto lo stesso file. Io proprio non so come. –

10

Tratto da http://amix.dk/vim/vimrc.html

" Return to last edit position when opening files (You want this!) 
autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \ exe "normal! g`\"" | 
    \ endif 
+0

Puoi spiegare cosa sta facendo l'istruzione 'if' qui? Lo sto leggendo come "Ripristina il cursore solo se il cursore si trova dopo la prima riga o prima dell'ultima riga", e non mi è chiaro quale sia la differenza. Al momento ho aggiunto 'autocmd BufReadPost * normale! g \ '" zv' al mio vimrc e sembra funzionare, ma credo di non capire le potenziali insidie ​​del ripristino incondizionato del segno. – robru

+1

Ah, se il file è troncato al di fuori di vim, e il segno di vim è su una riga che non esiste più, vim lancia un errore, risolto con 'autocmd BufReadPost * silenzioso! normal! g \' "zv' – robru

4

C'è un plugin (io sono l'autore) chiamato vim-lastplace che intelligentemente si torna alla ultima modifica che hai fatto.

Ha anche un'opzione di configurazione per ignorare determinati tipi di file. Per impostazione predefinita ignorerà i messaggi di commit per git, svn e mercurial. Per questi tipi di file inizierà il cursore sulla prima riga. I frammenti di codice sopra salteranno nel mezzo del tuo file dei messaggi di commit (in cui hai lasciato il commit precedente) anche se probabilmente non è ciò che desideri. vim-lastplace risolve questo problema.

5

L'ultima posizione di modifica viene automaticamente conservata da Vim ed è disponibile come "speciale" segno di salto .. Altri marchi speciali includono " (posizione in cui è stato salvato da) e ' (posizione in cui è stato effettuato il salto da).

È possibile passare ad un marchio digitando '<mark>, così '. vi porterà al luogo dell'ultima modifica, '' vi porterà indietro a dove eravate, e '" vi porterà alla posizione in cui si è salvato il file a.

Questo e altro su Vim segna a Vim.Wikia.