Comment effacer complètement un registre / plusieurs registres?

16

Je l' utilise très souvent la :registerscommande pour afficher le contenu de tous les registres (j'oublie ce que je mets où, exactement ce que le rôle "*, "., "%, etc. sont).

Surtout parce que je mets l' "option dans l' viminfooption, et donc mes registres sont persistants entre mes sessions vim (ce que je veux en général, à court terme), avec le temps la :registersliste s'allonge de plus en plus, et donc de plus en plus lourde et remplie avec des trucs vraiment vieux.

Jusqu'à présent, le seul moyen que j'ai trouvé pour résoudre ce problème est de modifier manuellement certains des «anciens» contenus de registre ~/.viminfo, ce que je dois faire vim -u NONEet est donc un peu lourd.

Existe-t-il un moyen plus propre d'effacer tous les registres ou d'effacer un registre spécifique pour qu'il n'apparaisse plus dans la :registersliste?

Andrew Ferrier
la source

Réponses:

12

En bref, il n'y a pas de moyen plus propre d'effacer les registres si complètement qu'ils disparaissent :reg.

Plutôt que de flâner avec ~/.viminfo, j'ai tendance à "clair" les registres quand j'en ai vraiment et vraiment fini en les réglant pour être vides. Pour effacer le aregistre, par exemple, je tape qaqpour définir le aregistre sur une chaîne vide. De manière équivalente, :let @a=''fait de même.

Ensuite, regarder la sortie de :regest toujours utile car il est très facile de distinguer les registres vides des registres contenus. D'un autre côté, je trouve que pratiquement tous mes registres nommés se trouvent sur la ligne supérieure (macros) ou la ligne principale (choses de collage utiles), et même alors, je n'ai utilisé qu'une quinzaine de registres nommés.

Il y a quelques années, il y avait un fil sur la liste de diffusion vim qui concluait également qu'il n'y avait pas de moyen plus simple d'effacer les registres.

davidlowryduda
la source
5

Pour ceux qui souhaitent supprimer le nom du registre (disons a) de la :registersliste, il existe un moyen de le faire maintenant. Exécutez la commande :call setreg('a', []).

J'ai découvert cela à partir de cette question sur StackOverflow de l'utilisateur @LucHermitte. Sa réponse détaille comment effacer plusieurs registres. Si vous voulez que cette tâche soit super facile, faites preuve de créativité avec votre .vimrc:)

Jason Cemra
la source
3

Mettez ceci dans votre .vimrc:

command! WipeReg for i in range(34,122) | silent! call setreg(nr2char(i), []) | endfor

et effacer chaque registre avec :WipeReg

Si vous souhaitez que cela se produise à chaque démarrage de Vim, ajoutez également:

autocmd VimEnter * WipeReg
laktak
la source
1
Merci pour la commande bien qu'elle ne fonctionne pas avec les registres en lecture seule comme ".,"%, ":," #
Ashok