vim non ricorda l'ultima posizione


89

Il mio Ubuntu LTS 12.04 ha l'editor vim. Se apro un file, mi sposto in un paragrafo e riapro VIM, il cursore si sposta sempre all'inizio del file.

Questo non è il comportamento previsto. Come può il vim ricordare l'ultima posizione di lettura dopo aver chiuso un file?

Ho provato vianche io , ma il risultato è lo stesso.


1
Mi dispiace, ma sembra che ci sia 0 documentazione che dice che dovrebbe. Sei sicuro al 100% che sia il caso di Vim? E, mi dispiace, non ho idea di come configurarlo per ricordare l'ultima posizione. Potrebbe essere un mio commento inutile da parte mia, ma devo sapere se il programma è stato eseguito in precedenza.
Denny,

4
Ad esempio in Redhat, l'ultima riga di riferimento in un file viene ricordata da vim. vim sembra essere scomodo in Ubuntu 12.04
Lunar Mushrooms,

Anche in Ubuntu 10.04 questo non è certamente un comportamento predefinito. Sto usando Vim su Ubuntu da molto tempo, non ho mai visto il tuo comportamento previsto. Probabilmente l'hai configurato per farlo su quell'installazione - vedi la risposta di @GaryBishop per esempio.
gertvdijk,

Mi dispiace che non sia stato Ubuntu 10.04, è stato red hat a funzionare. Aggiornato il mio commento
Funghi lunari,

Risposte:


116

Risolto:

/ Etc / vim / vimrc

Contiene già le funzionalità necessarie. Devo solo decommentarlo:

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

(Infatti, puoi fare riferimento anche a /usr/share/vim/vim73/vimrc_example.vim)


Sembra funzionare solo con l'utente root, non con altri utenti. Il mio file vimrc è -rw-r--r-- 1 root root; sarebbe questo il problema?
ADTC l'

2
Stavo avendo lo strano problema in cui un utente avrebbe ricordato l'ultima posizione, ma nessun altro. Si scopre che queste righe erano nel file .vimrc dell'utente, ma sono state commentate in / etc / vim / vimrc. Uncommenting lì li ha permesso a tutti gli utenti.
Felwithe,

66

Ho avuto lo stesso problema e si è scoperto che il file .viminfo nella mia home directory aveva la proprietà sbagliata. Era di proprietà di root: root.

Dopo aver corretto la proprietà del file cambiandola in me stesso, ricordando che la posizione del file ha ripreso a funzionare per me


3
Queste cose hanno funzionato nel mio caso. Ho avuto lo stesso problema. Ho cambiato la proprietà di .viminfo (presente nella home directory) che risolve i problemi di vim. Ma perché è stato creato con root: root?
Brijesh Valera,

1
@BrijeshValera probabilmente perché hai avviato vim come root quando il file non esisteva ancora.
Ruslan,

1
@Ruslan Ma allora il file non dovrebbe essere stato creato nella home directory dell'utente root?
ankush981

5
@dotslash è difficile sudo. Non cambia l'ambiente (almeno per lo più): prova a correre sudo bash -c 'echo $HOME', otterrai la tua home directory invece di quella di root.
Ruslan,

1
Questa è stata la causa nel mio 18.04
Hanynowsky,


2

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.


perché il downvote? vim-lastplace fa esattamente ciò che l'OP ha chiesto e lo fa anche meglio della risposta accettata (che contiene un numero di bug).
Greg Dietsche,

0

Nel mio caso, v'è stato un link simbolico: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Quest'ultimo non ha caratteristiche vim reali. L'installazione del pacchetto 'vim' (usando synaptic o apt-get) ha fatto puntare questo symlink /usr/bin/vim.basice questo ha risolto il problema.


-1

C'è un errore nella soluzione dei funghi lunari. Ecco la correzione:

if has("autocmd")
  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  " Also don't do it when the mark is in the first line, that is the default
  " position when opening a file.
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif

endif

Perché ritieni che la tua soluzione sia corretta? Sembra molto simile, ma per le barre rovesciate all'inizio di una riga. Se ce ne sono, non dovrebbero essere alla fine di una riga che indica che il comando continua sulla riga successiva ...? Inoltre, la risposta accettata parla solo di decommentare una sezione in un file di configurazione globale, che viene installato insieme vim. Apparentemente questo ha risolto il problema. Dov'è l'errore?
Nephente,

Perché se copio / incollo la prima soluzione, ho ricevuto un errore. E ho pubblicato il contenuto del mio /usr/share/vim/vim74/vimrc_example.vim (che all'inizio includeva le barre rovesciate).
Arnaud,

1
@Audire l'area delle linee già fornita nel file, ma commentata. Devi solo eliminare il "carattere all'inizio delle righe per rimuovere il commento. Non è necessario "copiare / incollare la prima soluzione".
ADTC l'
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.