web-dev-qa-db-fra.com

Jak skutecznie usunąć rejestry vim?

Rejestry w vim są świetną funkcją do przechowywania fragmentów tekstu, une nawet do uruchamiania poleceń zapisanym w nich tekście. Jestem jednak porządną osobą i staram się sprzątać, kiedy skończę.

Wiem, jee jeśli chciałbym wyczyścić rejestr a, mogę użyćqaq.

Mogę również wykonać następujące polecenie:

:let @a = ''

Jednak rozwiązania te wydają się zwykłym obejściem problemu. Kiedy wykonuję :registers, listez les noms des réponses a (z pustą wartością), les retours de baladeurs, les changements de noms, les détails.

Vous êtes déjà inscrit sur notre site: rejeuz-vous si vous voulez acheter?

Un jeśli tak, czy istnieje również sposób na usunięcie wszystkich rejestrów naraz, tzn. Zresetowanie tej listy rejestrów?

50
Robin Klose

Depuis cette vénérable réponse sur la liste de diffusion, reliée par @romainl , nous avons setreg('a', []) qui efface le registre.

Ainsi, le code pourrait devenir:

let regs=split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-"', '\zs')
for r in regs
  call setreg(r, [])
endfor
18
Luc Hermitte

Autant que je sache, vous ne pouvez pas utiliser les commandes/fonctions intégrées pour faire disparaître les registres de la liste. Cela semble être faisable seulement en les supprimant de votre ~/.viminfo qui semble un peu extrême.

ce fil de la liste de diffusion vim a une commande qui efface tous les registres mais ne les supprime pas de :reg:

let regs='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/-"' | let i=0 | while (i<strlen(regs)) | exec 'let @'.regs[i].'=""' | let i=i+1 | endwhile | unlet regs
16
romainl

Supprimez le fichier .viminfo ou supprimez la ligne de registre dans le fichier .viminfo.

Vous pouvez obtenir les détails de Ici :

The viminfo file is used to store:
- The command line history.
- The search string history.
- The input-line history.
- Contents of non-empty registers.
- Marks for several files.
- File marks, pointing to locations in files.
- Last search/substitute pattern (for 'n' and '&').
- The buffer list.
- Global variables
6
Marslo

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 fois que vous démarrez Vim, ajoutez également:

autocmd VimEnter * WipeReg
6
laktak

Il est possible de définir une valeur pour chaque registre utilisé, similaire à l'approche de romainl:

function! ClearRegisters()
   redir => l:register_out
   silent register
   redir end
   let l:register_list = split(l:register_out, '\n')
   call remove(l:register_list, 0) " remove header (-- Registers --)
   call map(l:register_list, "substitute(v:val, '^.\\(.\\).*', '\\1', '')")
   call filter(l:register_list, 'v:val !~ "[%#=.:]"') " skip readonly registers
   for elem in l:register_list
      execute 'let @'.elem.'= ""'
   endfor
endfunction

Cela évite d'inclure un registre supplémentaire sur la sortie de :registers

5
mMontu

Une autre option est de ne jamais charger aucun registre. Comme d'autres l'ont dit, les registres sont chargés à partir de .viminfo. L’indicateur -i permet de spécifier le fichier viminfo à utiliser. Si vous spécifiez NONE, aucun viminfo, et par conséquent aucun registre ne sera chargé.

vim -i NONE
4
DJMcMayhem

Par souci d'exhaustivité, je noterai que, si définir un registre de manière à contenir une chaîne vide ne supprime pas le registre du résultat de la commande :registers, Vim n'enregistre pas les registres ainsi effacés dans le fichier .viminfo .

Par conséquent, une autre solution rapide pour supprimer des registres spécifiques de la liste consiste à les effacer à l'aide de l'une des commandes que vous suggérez, puis à redémarrer Vim.

0
Rich