Dans vim, comment puis-je ouvrir un fichier au même numéro de ligne que je l'ai fermé la dernière fois?

141

Je veux configurer vim pour ouvrir un fichier au même endroit où je l'ai laissé.


la source
: '"apostrophe suivie de guillemets doubles vous redirige la ligne des derniers changements
Dhiren Hamal

Réponses:

195

À partir du /etc/vim/vimrcfichier d'Ubuntu , cet exemple est commenté:

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

Si cela ne fonctionne pas, un problème courant est de ne pas être propriétaire de votre ~/.viminfofichier. Si tel est le cas, exécutez:

sudo chown user:group ~/.viminfo

où l'utilisateur est le vôtre usernameet groupest souvent le même que votre nom d'utilisateur.

moinudin
la source
9
L'autocmd vient tout droit du document vim. Voir: help last-position-jump
user55400
19
Si le guillemet simple dans l'avant-dernière ligne est remplacé par un backtick, il passera à la position réelle du curseur, pas seulement au début de cette ligne:\| exe "normal! g`\"" | endif
u2622
4
La chownpartie a résolu le problème pour moi. Chapeau!
slowpoison
2
Enfin, quelqu'un fait remarquer que mon .viminfo appartient à root pour une raison quelconque! Cela doit figurer dans les 100 autres documentations que j'ai lues.
Jack
2
Je veux juste attribuer +1 à l' chown user ~/.viminfoajout. J'essaye de comprendre ça depuis une heure maintenant et tu viens de sauver ma journée.
Christopher Reid
48

Si cela ne vous dérange pas de négocier l'automatisation pour plus de simplicité, appuyez simplement sur la touche '"(apostrophe, suivie de guillemets doubles) lors de l'ouverture d'un fichier, vous sauterez là où vous étiez. C'est essentiellement ce que fait la réponse de @ marcog.

sykora
la source
24
  :h views-sessions

Vous pouvez placer ceci dans votre .vimrc :

  au BufWinLeave * mkview
  au BufWinEnter * silent loadview

les vues seront placées dans $ HOME / .vim / view. Vous devez probablement créer ces répertoires.

Oli
la source
J'aime cette réponse car l'autre faisait référence à un fichier / etc / vim / qui n'existait pas sur mon Mac.
MarkHu
15

Vous pouvez démarrer vim sans spécifier de nom de fichier en utilisant

vim 

Ensuite, appuyez deux fois sur CTRL + O pour accéder au dernier emplacement de tout fichier sur lequel vous avez travaillé.

MatAff
la source
Si vous avez installé NERDTree, appuyez deux fois sur Co pour ouvrir NERDTree dans la mémoire tampon actuelle. Dans mon cas, j'ai parfois besoin d'appuyer sur Co jusqu'à cinq fois, mais j'obtiens finalement l'effet décrit par @MatAff.
ashrasmun
Appuyer Ctrl-cune fois me suffit. De plus, appuyer sur Ctrl-cplus me ramène plus loin dans l'histroy de position du curseur (même en ouvrant les fichiers pertinents non ouverts). J'utilise Neovim 0.4.2, mais je crois comprendre que cela s'applique vimégalement.
T_T
7

Si vous avez activé viminfo, c'est aussi simple que `0d'aller à la dernière position du fichier édité. Vous remarquerez qu'il ne s'agit que d'une commande «aller pour marquer»;

En effet, vous pouvez faire plus tard '3 pour aller au troisième emplacement édité précédent (peut-être dans un autre fichier), puis revenir au dernier avec à `0nouveau

Jettes un coup d'oeil à

 :marks

pour voir les lieux mémorisés. Notez également que viminfo stocke toutes sortes d'autres choses (comme le contenu des registres, les marques par fichier, les commandes et l'historique de recherche). La plupart des gens l'ont activé pour des raisons évidentes

sehe
la source
`0 ne fonctionne pas pour moi sur vim version 7.4.1689 sur mac. Mais '0 fait l'affaire. Est-ce une faute de frappe dans la réponse?
alamoot
@alamoot non ce n'est pas, voir vimdoc motion.txt - Vérifiez quel caractère votre `clé génère en fait, ou faire:verbose map `
sehe
vous avez raison. D'après le vimdoc, les deux sont corrects!
alamoot
6

Il existe un plugin appelé vim-lastplace (je suis l'auteur) qui ouvrira vos fichiers là où vous les avez 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 que vous souhaitez commencer en haut du fichier de message de validation.

Greg Dietsche
la source
tout ce que vous pouvez faire sans plugins est mieux. Visez .vimrc: plus le code est petit, plus il est léger et rapide
nilon
1

Parfois ~/.viminfodevient en lecture seule ou votre utilisateur n'a pas accès au fichier. Cela pourrait également être une raison pour laquelle vim ne stocke pas la position de votre curseur lorsque vous fermez votre fichier.

dam0055
la source