In vim, come faccio ad aprire un file con lo stesso numero di riga che ho chiuso l'ultima volta?


141

Voglio configurare vim per aprire un file nello stesso posto in cui mi ero interrotto.

vim 

: '"apostrofo seguito da virgolette reindirizza le ultime modifiche alla riga
Dhiren Hamal

Risposte:


195

Dal /etc/vim/vimrcfile di Ubuntu , questo esempio è commentato:

" Uncomment the following to have Vim jump to the last position when                                                       
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
    \| exe "normal! g'\"" | endif
endif

Se questo non funziona, un problema comune non è la proprietà del tuo ~/.viminfofile. In tal caso, eseguire:

sudo chown user:group ~/.viminfo

dove l'utente è tuo usernameed groupè spesso uguale al tuo nome utente.


9
L'autocmd esce direttamente dal documento vim. Vedi: help last-position-jump
user55400,

19
Se la virgoletta singola nella penultima riga viene cambiata in un backtick, salterà alla posizione attuale del cursore, non solo all'inizio di quella riga:\| exe "normal! g`\"" | endif
u2622

4
La chownparte ha risolto il problema per me. Giù i cappelli!
slowpoison,

2
Finalmente qualcuno sottolinea che il mio .viminfo è di proprietà di root per qualche motivo! Questo deve essere nelle altre 100 documentazioni che ho letto.
Jack,

2
Voglio solo fare +1 chown user ~/.viminfosull'aggiunta. Sto cercando di capirlo da un'ora ormai e mi hai appena salvato la giornata.
Christopher Reid,

48

Se non ti dispiace fare trading sull'automazione per semplicità, basta premere il tasto '"(apostrofo, seguito da virgolette) per aprire un file, passerai al punto in cui ti trovavi. Questo è essenzialmente ciò che sta facendo la risposta di @ marcog.


24
  :h views-sessions

Puoi inserirlo nel tuo .vimrc :

  au BufWinLeave * mkview
  au BufWinEnter * silent loadview

le viste saranno posizionate in $ HOME / .vim / view. Probabilmente dovrai creare queste directory.


Mi piace questa risposta perché l'altra si riferiva a un file / etc / vim / che non esisteva sul mio Mac.
MarkHu,

15

Puoi avviare vim senza specificare un nome file usando

vim 

Quindi premi CTRL + O due volte per passare all'ultima posizione in qualsiasi file su cui hai lavorato.


Se hai installato NERDTree, premendo due volte Co puoi aprire NERDTree nel buffer corrente. Nel mio caso, a volte ho bisogno di premere Co fino a cinque volte, ma alla fine ottengo l'effetto descritto da @MatAff.
ashrasmun,

Premendo Ctrl-cuna volta è abbastanza per me. Inoltre, premendo di Ctrl-cpiù mi riporta più indietro nella posizione del cursore histroy (anche aprendo i file non aperti rilevanti). Uso Neovim 0.4.2, ma la mia comprensione è che si applica vimanche a.
T_T

7

Se hai abilitato viminfo, è semplice come `0passare all'ultima posizione del file modificato. Noterai che questo è solo un comando 'vai al segno';

Infatti, in seguito puoi fare '3 per andare alla terza posizione modificata precedente (forse in un altro file), e poi tornare all'ultima con di `0nuovo

Dai un'occhiata a

 :marks

per vedere le località ricordate. Si noti inoltre che viminfo memorizza tutti i tipi di altre cose (come il contenuto dei registri, i segni per file, i comandi e la cronologia delle ricerche). Molte persone hanno abilitato questo per ovvi motivi


`0 non funziona per me su vim versione 7.4.1689 su mac. Ma '0 fa il trucco. È un errore di battitura nella risposta?
alamoot,

@alamoot no non lo è, vedi vimdoc motion.txt - Controlla quale personaggio `genera effettivamente la tua chiave, oppure fai:verbose map `
vedi il

hai ragione. Secondo il vimdoc entrambi sono corretti!
alamoot,

6

C'è un plugin chiamato vim-lastplace (sono l'autore) che aprirà i tuoi file da dove eri rimasto. Migliora i suggerimenti di cui sopra ignorando i messaggi di commit perché in genere si sta modificando un nuovo messaggio e si desidera iniziare nella parte superiore del file dei messaggi di commit.


tutto ciò che puoi fare senza plug-in è il migliore. mira a .vimrc: più piccolo è il codice più leggero e veloce
nilon

1

A volte ~/.viminfodiventa di sola lettura o l'utente non ha accesso al file. Questo potrebbe anche essere un motivo per cui vim non memorizza la posizione del cursore quando chiudi il file.

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.