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.


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)


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


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.


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.


-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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.