59 votes

Conserver la dernière position d'édition dans le VIM

Lorsque je quitte VIM et que j'ouvre à nouveau le même fichier, je me retrouve au début du fichier. Comment puis-je conserver la dernière position du curseur ?

2 votes

Il est amusant de constater que Vim se souvient déjà de cette position. " marque. Ainsi, même si vous n'avez pas cette marque dans votre .vimrc vous pouvez appuyer sur g`" (g, backtick, doublequote)

43voto

Mariano Points 331

Tiré de http://amix.dk/vim/vimrc.html

" Return to last edit position when opening files (You want this!)
autocmd BufReadPost *
     \ if line("'\"") > 0 && line("'\"") <= line("$") |
     \   exe "normal! g`\"" |
     \ endif

1 votes

Pouvez-vous expliquer ce qu'est le if déclaration fait ici ? Je la lis comme "Ne restaure le curseur que si le curseur est après la première ligne ou avant la dernière ligne", et je ne vois pas très bien quelle différence cela fait. J'ai actuellement ajouté autocmd BufReadPost * normal! g`"zv à mon vimrc et cela semble fonctionner, mais je suppose que je ne comprends pas les pièges potentiels de la restauration inconditionnelle de la marque.

8 votes

Ah, si le fichier est tronqué en dehors de vim, et que la marque de vim se trouve sur une ligne qui n'existe plus, vim lance une erreur. Corrigé avec autocmd BufReadPost * silent! normal! g`"zv

1 votes

Je ne savais pas pourquoi le zv partie... Il s'avère qu'il "déplie" la ligne de courant. Wow, il y a toujours quelque chose de plus à apprendre même si vous savez comment quitter Vim.

34voto

DevSolar Points 18897

La dernière position d'édition est automatiquement préservée par Vim, et est disponible en tant que marque de saut "spéciale". . . Parmi les autres marques spéciales, on peut citer " (position à partir de laquelle vous avez effectué votre sauvetage) et ' (position que vous avez sautée de ).

Vous pouvez passer à une marque en tapant '<mark> Ainsi '. vous ramènera à l'endroit où vous avez effectué la dernière modification, '' vous ramènera à l'endroit où vous étiez, et '" vous ramène à la position où vous avez enregistré le fichier.

Pour en savoir plus sur les marques Vim, consultez le site Vim.Wikia .

32voto

MετάEd Points 1838

Le "out of the box" (hors des sentiers battus) .vimrc permet de le faire avec la déclaration :

source $VIMRUNTIME/vimrc_example.vim

Il se peut que vous deviez simplement rétablir cette déclaration dans votre .vimrc . En tout état de cause, voir vimrc_example.vim et voir également le line() fonction [dans le manuel Vim](http://vimdoc.sourceforge.net/htmldoc/eval.html#line()) pour en savoir plus sur son fonctionnement.

0 votes

Cela a fonctionné pour moi sur mac os x. J'ai copié le fichier, chmod 600, et la vie était belle.

1 votes

Cela permet de faire un tas d'autres choses aussi : github.com/vim/vim/blob/master/runtime/vimrc_example.vim

0 votes

E484 : Impossible d'ouvrir le fichier /usr/share/vim/vim81/vimrc_example.vim

17voto

Greg Dietsche Points 459

Il existe un plugin (j'en suis l'auteur) appelé vim-lastplace qui vous ramènera intelligemment à la dernière modification que vous avez effectuée.

Il dispose également d'une option de configuration permettant d'ignorer certains types de fichiers. Par défaut, il ignore les messages de livraison pour git, svn et mercurial. Pour ces types de fichiers, le curseur commencera à la première ligne. Les extraits de code ci-dessus sauteront au milieu de votre fichier de message de livraison (là où vous vous êtes arrêté dans votre livraison précédente) même si ce n'est probablement pas ce que vous voulez. vim-lastplace corrige ce problème.

12voto

Kazuya Gosho Points 102

Pour les utilisateurs de Neovim qui recherchent une version en Lua pur :

-- Restore cursor position
vim.api.nvim_create_autocmd({ "BufReadPost" }, {
    pattern = { "*" },
    callback = function()
        vim.api.nvim_exec('silent! normal! g`"zv', false)
    end,
})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X