Wie kann ich ein Register / mehrere Register vollständig löschen?

16

Ich oft ganz den verwenden , :registersum den Inhalt aller Register zu zeigen (ich vergessen , was ich gebracht , wo genau das, was die Rolle der "*, "., "%etc. sind).

Vor allem, weil ich die "Option in der viminfoOption festgelegt habe und daher meine Register zwischen meinen vim-Sitzungen (die ich im Allgemeinen kurzfristig möchte) beibehalten werden, wird die :registersListe mit der Zeit immer länger und damit immer umständlicher und voller mit wirklich altem Zeug.

Bisher habe ich nur die Möglichkeit gefunden, dieses Problem zu beheben, indem ich einige der 'alten' Registerinhalte manuell bearbeite ~/.viminfo, was ich zu tun habe vim -u NONEund daher etwas umständlich ist.

Gibt es eine sauberere Möglichkeit, alle Register oder ein bestimmtes Register zu löschen, damit es nicht mehr in der :registersListe angezeigt wird ?

Andrew Ferrier
quelle

Antworten:

12

Kurz gesagt, es gibt keinen saubereren Weg, um Register so vollständig zu löschen, dass sie verschwinden :reg.

Anstatt mit ihnen herumzuspielen ~/.viminfo, neige ich dazu, Register zu "verwischen", wenn ich mit ihnen wirklich und wirklich fertig bin, indem ich sie leer lasse. Um das aRegister zu löschen , gebe ich zum Beispiel ein, qaqum das aRegister auf eine leere Zeichenfolge zu setzen. Gleichermaßen :let @a=''macht das gleiche.

Dann :regist es immer noch hilfreich , die Ausgabe von zu betrachten, da es sehr einfach ist, zwischen leeren und enthaltenen Registern zu unterscheiden. Andererseits finde ich, dass im Wesentlichen alle meine benannten Register in der obersten Zeile (Makros) oder in der Hauptzeile (nützliche Einfügesachen) liegen, und selbst dann habe ich nur ungefähr 15 benannte Register verwendet.

Vor ein paar Jahren gab es einen Thread auf der Vim-Mailingliste, der ebenfalls zu dem Schluss kam, dass es keinen einfacheren Weg gibt, Register zu löschen.

Davidlowryduda
quelle
5

Für diejenigen, die den Registernamen (z. B. a) aus der :registersListe entfernen möchten , gibt es eine Möglichkeit, dies jetzt zu tun. Führen Sie den Befehl aus :call setreg('a', []).

Das habe ich anhand dieser Frage zu StackOverflow vom Benutzer @LucHermitte herausgefunden. In seiner Antwort wird beschrieben, wie mehrere Register gelöscht werden. Wenn Sie möchten, dass diese Aufgabe super einfach ist, werden Sie kreativ mit Ihrem .vimrc:)

Jason Cemra
quelle
3

Fügen Sie dies in Ihre .vimrc:

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

und lösche jedes Register mit :WipeReg

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

autocmd VimEnter * WipeReg
laktak
quelle
1
Vielen Dank für den Befehl, obwohl er nicht mit schreibgeschützten Registern wie ".,"%, ":," #
Ashok