Jak mogę całkowicie wyczyścić rejestr / wiele rejestrów?

16

I dość często korzystają z :registerspolecenia, aby wyświetlić zawartość wszystkich rejestrów (nie pamiętam co kładę, gdzie dokładnie, jaka jest rola "*, "., "%, itd. Są).

Zwłaszcza dlatego, że ustawiłem "opcję w viminfoopcji, a zatem moje rejestry są utrwalane między moimi sesjami vim (które generalnie chcę, w krótkim okresie), z czasem :registerslista staje się coraz dłuższa, a przez to coraz bardziej kłopotliwa i zapełniana z naprawdę starymi rzeczami.

Do tej pory jedynym sposobem, w jaki udało mi się to naprawić, jest ręczna edycja niektórych „starych” rejestrów, z ~/.viminfoktórych muszę sobie poradzić vim -u NONEi dlatego jest trochę kłopotliwa.

Czy istnieje prostszy sposób na wyczyszczenie wszystkich rejestrów lub wyczyszczenie określonego rejestru, aby nie pojawiał się już na :registersliście?

Andrew Ferrier
źródło

Odpowiedzi:

12

Krótko mówiąc, nie ma czystszego sposobu na wyczyszczenie rejestrów tak całkowicie, że znikają :reg.

Zamiast ~/.viminfomruczeć, mam tendencję do „miękkiego czyszczenia” rejestrów, kiedy naprawdę i naprawdę skończę z nimi, ustawiając je na puste. Na aprzykład, aby wyczyścić rejestr, piszę, qaqaby ustawić arejestr na pusty ciąg. Równolegle :let @a=''robi to samo.

Następnie spojrzenie na wynik :regjest nadal pomocne, ponieważ bardzo łatwo jest odróżnić puste rejestry od zawartych w nich rejestrów. Z drugiej strony stwierdzam, że zasadniczo wszystkie moje nazwane rejestry leżą w górnym rzędzie (makra) lub w głównym rzędzie (przydatne elementy do wklejenia), a nawet wtedy użyłem tylko około 15 nazwanych rejestrów.

Kilka lat temu na liście mailingowej vim pojawił się wątek, który stwierdził, że nie ma łatwiejszego sposobu na wyczyszczenie rejestrów.

davidlowryduda
źródło
5

Dla tych, którzy chcą, aby usunąć nazwę rejestru (powiedzieć a) z :registerslisty, nie jest to sposób, aby to zrobić teraz. Uruchom polecenie :call setreg('a', []).

Dowiedziałem się tego z tego pytania na StackOverflow od użytkownika @LucHermitte. Jego odpowiedź szczegółowo opisuje, jak wyczyścić wiele rejestrów. Jeśli chcesz, aby to zadanie było super łatwe, bądź kreatywny ze swoim .vimrc:)

Jason Cemra
źródło
3

Umieść to w .vimrc:

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

i wyczyść każdy rejestr za pomocą :WipeReg

Jeśli chcesz, aby tak się działo przy każdym uruchomieniu Vima, dodaj także:

autocmd VimEnter * WipeReg
laktak
źródło
1
Dzięki za polecenie, chociaż nie działa z rejestrami tylko do odczytu, takimi jak „.,”%, ”:,„ #
Ashok