Question vim ne se souvient pas de la dernière position


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

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

j'ai essayé vi aussi, mais le résultat est le même.


75
2017-11-28 13:07


origine


Je suis désolé, mais il semble y avoir 0 documentation qui le dit. Êtes-vous sûr à 100% que c'est le cas pour Vim? Et, je suis désolé, je n'ai aucune idée de la façon de le configurer pour mémoriser la dernière position. Un commentaire inutile de ma part, mais je dois savoir si vous avez déjà expérimenté le programme. - Denny
Par exemple, dans Redhat, la dernière ligne référencée dans un fichier est mémorisée par vim. vim semble être gênant dans Ubuntu 12.04 - Lunar Mushrooms
Aussi dans Ubuntu 10.04 ce n’est certainement pas un comportement par défaut. J'utilise Vim sur Ubuntu depuis longtemps, jamais vu votre comportement attendu. Vous l'avez probablement configuré sur cette installation - consultez la réponse de @GaryBishop par exemple. - gertvdijk
Désolé, ce n'était pas Ubuntu 10.04, c'était un chapeau rouge qui fonctionnait. Mis à jour mon commentaire - Lunar Mushrooms


Réponses:


Le résolu:

/ etc / vim / vimrc

Contient déjà la fonctionnalité nécessaire. Juste besoin de le dé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

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


95
2017-12-03 09:08



Il semble seulement fonctionner avec l'utilisateur root, pas les autres utilisateurs. Mon fichier vimrc est -rw-r--r-- 1 root root; serait-ce le problème? - ADTC
J'avais le problème étrange où un utilisateur se souviendrait de la dernière position, mais pas d'autres. Il s'avère que ces lignes étaient dans le fichier .vimrc de l'utilisateur, mais ont été commentées dans / etc / vim / vimrc. Les décommenter là-bas l'a permis à tous les utilisateurs. - felwithe


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

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


56
2017-11-26 15:36



Cela fonctionnait dans mon cas. J'avais le même problème. J'ai changé de propriétaire 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
@BrijeshValera probablement parce que vous avez démarré vim en tant que root lorsque le fichier n’existait pas encore. - Ruslan
@Ruslan Mais alors, le fichier ne devrait-il pas être créé dans le répertoire personnel de l'utilisateur root? - dotslash
@dotslash c'est difficile avec sudo. Cela ne change pas l'environnement (du moins surtout): essayez de courir sudo bash -c 'echo $HOME', vous obtiendrez votre répertoire personnel plutôt que celui de root. - Ruslan
C'était la cause dans mon 18.04 - Hanynowsky


Je pense que cette publication sur le wiki peut fournir une solution. Je ne crois pas que la restauration de la position soit le comportement attendu. http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session


5
2017-11-28 13:36





Il y a un plugin appelé vim-lastplace (Je suis l'auteur) qui ouvrira vos fichiers là où vous l'avez laissé. 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 de message de validation.


1
2018-01-17 03:20



pourquoi la descente? vim-lastplace fait exactement ce que l'OP demandait et le fait encore mieux que la réponse acceptée (qui contient un certain nombre de bogues). - Greg Dietsche


Dans mon cas, vi était un lien symbolique: /usr/bin/vi -> /etc/alternatives/vi -> /usr/bin/vim.tiny. Ce dernier n'a pas de véritable fonctionnalité vim. Installer le paquet 'vim' (en utilisant synaptic ou apt-get) a fait de ce lien symbolique /usr/bin/vim.basic, et cela a résolu le problème.


0
2018-02-11 20:57





Il y a une erreur dans la solution de champignons lunaires. 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

-1
2017-09-29 03:01



Pourquoi pensez-vous que votre solution est correcte? Cela se ressemble beaucoup, mais pour les antislashs au début d'une ligne. Le cas échéant, ne devraient-ils pas être à la fin d'une ligne indiquant que la commande continue à la ligne suivante ...? En outre, la réponse acceptée parle simplement de décommenter 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
@Amaud 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'est pas nécessaire de "copier / coller la première solution". - ADTC