Vim ne se souvient pas de la dernière position

89

Mon Ubuntu LTS 12.04 a l’éditeur vim. Si j'ouvre un fichier, passe à un paragraphe et rouvre vim, le curseur ira toujours au début du fichier.

Ce n'est pas le comportement attendu. Comment vim peut-il se souvenir de la dernière position de lecture après la fermeture d'un fichier?

J'ai essayé viaussi, mais le résultat est le même.

Champignons lunaires
la source
1
Je suis désolé, mais il semble y avoir 0 documentation qui dit qu'il devrait. Êtes-vous sûr à 100% que c'est le cas pour Vim? Et, je suis désolé, je ne sais pas comment le configurer pour qu'il se souvienne de la dernière position. Peut-être un commentaire inutile de ma part, mais je dois savoir si vous avez expérimenté le programme le faire plus tôt.
Denny
4
Par exemple, dans Redhat, vim se souvient de la dernière ligne référencée dans un fichier. Vim semble être gênant dans Ubuntu 12.04
Champignons lunaires
De plus, dans Ubuntu 10.04, ce n'est certainement pas un comportement par défaut. J'utilise Vim sur Ubuntu depuis longtemps, je n'ai jamais vu votre comportement attendu. Vous l'avez probablement configuré pour le faire sur cette installation - voir la réponse de @GaryBishop par exemple.
gertvdijk
Désolé, ce n'était pas Ubuntu 10.04, c'était le chapeau rouge qui fonctionnait. Mise à jour de mon commentaire
Champignons lunaires

Réponses:

117

Résolu le:

/ etc / vim / vimrc

Contient déjà la fonctionnalité nécessaire. Juste besoin de le commenter:

" 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

(Enfait, vous pouvez également vous référer à /usr/share/vim/vim73/vimrc_example.vim)

Champignons lunaires
la source
Cela ne semble fonctionner qu'avec l'utilisateur root, pas avec les autres utilisateurs. Mon fichier vimrc est -rw-r--r-- 1 root root; serait-ce le problème?
ADTC
2
J'avais un problème étrange: un utilisateur se souvenait de la dernière position, mais pas des autres. Il s'avère que ces lignes se trouvaient dans le fichier .vimrc de l'utilisateur, mais ont été commentées dans / etc / vim / vimrc. Le fait de les commenter a permis à tous les utilisateurs.
Felwithe
66

J'ai eu ce même problème et il s'est avéré que le fichier .viminfo de mon répertoire personnel avait un mauvais propriétaire. Il appartenait à root: root.

Une fois que j'ai corrigé la propriété du fichier en le changeant moi-même, me souvenir que la position du fichier a recommencé à fonctionner pour moi

TikiTavi
la source
3
Ces choses ont fonctionné dans mon cas. J'avais le même problème. J'ai changé la propriété de .viminfo (présent dans le répertoire personnel) qui corrige les problèmes de vim. Mais pourquoi a-t-il été créé avec root: root?
Brijesh Valera
1
@BrijeshValera probablement parce que vous avez démarré vim en tant que root alors que le fichier n'existait pas encore.
Ruslan
1
@Ruslan Mais alors le fichier n'aurait-il pas dû être créé dans le répertoire personnel de l'utilisateur root?
ankush981
5
@ dotslash c'est délicat avec sudo. Cela ne change pas l'environnement (du moins la plupart du temps): essayez de sudo bash -c 'echo $HOME'le lancer, vous obtiendrez votre répertoire personnel à la place de celui de root.
Ruslan
1
C'était la cause dans mon 18.04
Hanynowsky
2

Il existe un plugin appelé vim-lastplace (je suis l'auteur) qui ouvrira vos fichiers là où vous les aviez laissés. Il améliore les suggestions ci-dessus en ignorant les messages de validation, car vous modifiez généralement un nouveau message et souhaitez commencer en haut du fichier des messages de validation.

Greg Dietsche
la source
pourquoi le vote négatif? vim-lastplace fait exactement ce que le PO a demandé, et le fait même mieux que la réponse acceptée (qui contient un certain nombre de bugs).
Greg Dietsche
0

Dans mon cas, vi est un lien symbolique: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Ce dernier n'a pas de véritables fonctionnalités de vim. L'installation du paquet 'vim' (en utilisant synaptic ou apt-get) a renvoyé ce lien symbolique vers /usr/bin/vim.basic, ce qui a résolu le problème.

Bruno Haible
la source
-1

Il y a une erreur dans la solution Lunar Mushrooms. Voici la correction:

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
Arnaud
la source
Pourquoi pensez-vous que votre solution est correcte? Cela se ressemble beaucoup, mais pour les barres obliques inverses au début d'une ligne. Le cas échéant, ne devraient-ils pas être à la fin d'une ligne pour indiquer que la commande continue sur la ligne suivante ...? En outre, la réponse acceptée parle simplement de la suppression d'une section dans un fichier de configuration global, qui est installé avec vim. Apparemment, cela a résolu le problème. Où est l'erreur?
Nephente
Parce que si je copie / colle la première solution, j'ai une erreur. Et j’ai posté le contenu de mon /usr/share/vim/vim74/vimrc_example.vim (qui incluait les barres obliques inverses au début).
Arnaud
1
@Amud la zone de lignes déjà fournie dans le fichier, mais commentée. Il vous suffit de supprimer le "caractère au début des lignes pour les décommenter. Il n'y a pas besoin de "copier / coller la première solution".
ADTC