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?
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
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
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
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
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
.
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
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.