webentwicklung-frage-antwort-db.com.de

Jak skutecznie usunąć rejestry vim?

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

Wiem, że 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, lista nadal wyświetla rejestr a (z pustą wartością), podczas gdy rejestry, które nigdy nie były używane, nie są wyświetlane.

Czy istnieje sposób na usunięcie rejestru z efektem ubocznym usunięcia rejestru z tej listy?

A 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

Seit dieser ehrwürdigen Antwort auf der Mailingliste, die mit @romainl verlinkt ist, haben wir setreg('a', []), die das Register löscht.

So könnte der Code werden:

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

AFAIK können Sie keine eingebauten Befehle/Funktionen verwenden, um Register aus der Liste verschwinden zu lassen. Das scheint nur machbar zu sein, wenn Sie sie aus Ihrem ~/.viminfo entfernen, was etwas extrem klingt.

Dieser Thread in der vim-Mailingliste hat einen Befehl, der alle Register löscht, jedoch nicht aus :reg:

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

Entfernen Sie die .viminfo-Datei oder löschen Sie die Registerzeile in der .viminfo-Datei.

Die Details erhalten Sie von Hier :

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

Fügen Sie dies in Ihren .vimrc ein:

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

und löschen Sie jedes Register mit :WipeReg

Wenn Sie möchten, dass dies bei jedem Start von Vim geschieht, fügen Sie Folgendes hinzu:

autocmd VimEnter * WipeReg
6
laktak

Es ist möglich, für jedes verwendete Register einen Wert festzulegen, ähnlich wie bei 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

Dies vermeidet die Aufnahme eines zusätzlichen Registers in der Ausgabe von :registers.

5
mMontu

Eine weitere Option ist, niemals Register zu laden. Wie andere schon gesagt haben, werden Register aus .viminfo geladen. Das -i-Flag wird verwendet, um anzugeben, welche Viminfo-Datei verwendet werden soll. Wenn Sie NONE angeben, wird kein viminfo und daher werden keine Register geladen.

vim -i NONE
4
DJMcMayhem

Der Vollständigkeit halber werde ich beachten, dass, während das Einstellen eines Registers mit einem leeren String das Register nicht aus der Ausgabe des Befehls :registers entfernt, Vim Register, die auf diese Weise gelöscht wurden, nicht in der Datei .viminfo speichert .

Eine weitere schnelle Alternative zum Entfernen bestimmter Register aus der Liste besteht daher darin, sie mit einem der von Ihnen vorgeschlagenen Befehle zu löschen und Vim neu zu starten.

0
Rich