Wiem tylko o jednym wystąpieniu, w którym za pomocą rejestrów CtrlR*wklejam tekst ze schowka.
Jakie są inne zastosowania rejestrów? Jak z nich korzystać?
Wszystko, co wiesz o rejestrach VI (skupmy się na vi 7.2) - podziel się z nami.
Wiem tylko o jednym wystąpieniu, w którym za pomocą rejestrów CtrlR*wklejam tekst ze schowka.
Jakie są inne zastosowania rejestrów? Jak z nich korzystać?
Wszystko, co wiesz o rejestrach VI (skupmy się na vi 7.2) - podziel się z nami.
Odpowiedzi:
Rejestry w Vimie pozwalają uruchamiać akcje lub polecenia na zapisanym w nich tekście. Aby uzyskać dostęp do rejestru, należy wpisać "a
przed poleceniem, gdzie a
jest nazwa rejestru. Jeśli chcesz skopiować bieżącą linię do rejestru k
, możesz wpisać
"kyy
Lub możesz dołączyć do rejestru, używając dużej litery
"Kyy
Następnie możesz poruszać się po dokumencie i wklejać go w innym miejscu za pomocą
"kp
Aby wkleić ze schowka systemowego w systemie Linux
"+p
Aby wkleić ze schowka systemowego w systemie Windows (lub ze schowka „podświetlenia myszy” w systemie Linux)
"*p
Aby uzyskać dostęp do wszystkich aktualnie zdefiniowanych rejestrów, wpisz
:reg
"+
jest specjalny rejestr, który odnosi się do schowka systemowego.
"*
; więc polecenie kopiowania do końca pliku staje się "*yG
.
*
jest schowek „podświetlenia myszy” i +
jest to schowek Ctrl-XCV.
+
)?
Byłem zadowolony, kiedy odkryłem 0
rejestr. Jeśli szarpniesz tekst bez przypisywania go do określonego rejestru, zostanie on przypisany do 0
rejestru, a także zapisany w "
rejestrze domyślnym . Różnica między rejestrami 0
i "
polega na tym, że 0
wypełniony jest tylko tekstem zszarpanym, podczas gdy rejestr domyślny jest również wypełniany tekstem usuwanym za pomocą poleceń d
/ D
/ x
/ X
/ c
/ C
/ s
/ S
.
Uważam to za przydatne, gdy chcę skopiować jakiś tekst, coś usunąć i zastąpić skopiowanym tekstem. Poniższe kroki ilustrują przykład:
y[motion]
- ten tekst zostanie zapisany "
i 0
zarejestrowanyd[motion]
- ten tekst zostanie zapisany w "
rejestrze"0p
gdzie "
jest polecenie użycia rejestru dla następnego polecenia.
W ostatnim kroku, jeśli chcesz wkleić z rejestru domyślnego (za pomocą p
), użyje on właśnie usuniętego tekstu (prawdopodobnie nie tego, co zamierzałeś).
Zauważ, że p
lub P
wkleja się z rejestru domyślnego. Ekwiwalent długiej ręki byłby ""p
(lub ""P
) i "0
utrzymuje ostatnią szarpnięcie,"1
przechowuje ostatnie usunięcie lub zmianę.
Aby uzyskać więcej informacji, zobacz :help registers
.
p
lub P
wkleja z rejestru domyślnego. Odpowiednikiem długodystansowym byłoby ""p
(lub ""P
).
"
to polecenie użycia rejestru dla następnego polecenia. Więc ""p
użyłby "
rejestru dla polecenia wklejania i "0p
użyłby 0
rejestru.
0p
oznaczałoby przejście do pierwszego znaku bieżącego wiersza i wklejenie z zawartości rejestru domyślnego ( "
). "p
byłoby niepełnym poleceniem, ponieważ musisz podać polecenie, dla którego chcesz użyć rejestru p
.
Jedną z moich ulubionych części na temat rejestrów jest używanie ich jako makr!
Załóżmy, że masz do czynienia z plikiem wartości rozdzielanym tabulatorami jako takim:
ID Df %Dev Lambda
1 0 0.000000 0.313682
2 1 0.023113 0.304332
3 1 0.044869 0.295261
4 1 0.065347 0.286460
5 1 0.084623 0.277922
6 1 0.102767 0.269638
7 1 0.119845 0.261601
Teraz decydujesz, że musisz dodać znak procentu na końcu pola% Dev (zaczynając od 2. linii). Zrobimy proste makro w (arbitralnie wybranym) m
rejestrze w następujący sposób:
Naciśnij:: qm
Aby rozpocząć rejestrowanie makra pod m
rejestrem.
EE
: Przejdź na koniec trzeciej kolumny.
a
: Tryb wstawiania, aby dołączyć na końcu tej kolumny.
%
: Wpisz znak procentu, który chcemy dodać.
<ESC>
: Wróć do trybu poleceń.
j0
: Przejdź do początku następnej linii.
q
: Zatrzymaj rejestrowanie makra
Teraz możemy po prostu wpisać, @m
aby uruchomić to makro w bieżącym wierszu. Co więcej, możemy @@
napisać, aby powtórzyć lub 100@m
zrobić to 100 razy! Życie wygląda całkiem nieźle.
W tym miejscu powinieneś powiedzieć: „ ALE CZEKAJ, CO, DO TYCH CHCESZ, MUSI ZROBIĆ Z REJESTRAMI ?”
Doskonały punkt Sprawdźmy, co jest w m
rejestrze, pisząc "mp
. Następnie otrzymujemy:
EEa%<ESC>j0
Na początku wygląda na to, że przypadkowo otworzyłeś plik binarny w notatniku, ale na drugi rzut oka jest to dokładna sekwencja znaków w naszym makrze!
Jesteś ciekawską osobą, więc zróbmy coś ciekawego i edytuj ten wiersz tekstu, aby wstawić !
zamiast nudnego starego %
.
EEa!<ESC>j0
Następnie wpiszmy to do n
rejestru, pisząc B"nyE
. Następnie, tylko dla kopnięć, uruchommy n
makro w wierszu naszych danych, używając @n
....
OMG, DODANO A !
Zasadniczo uruchamianie makra jest jak naciśnięcie dokładnej sekwencji klawiszy w rejestrze tego makra. Jeśli to nie jest fajna sztuczka z rejestracją, zjem kapelusz.
+
zamiast j0
iść do pierwszej nieprzestrzegania znaku pustego w następnym wierszu.
Inne przydatne rejestry:
"*
lub "+
- zawartość schowka systemowego
"/
- ostatnie polecenie wyszukiwania
":
- ostatnie polecenie.
Uwaga w przypadku makr vima można je edytować, ponieważ są one tylko listą naciśnięć klawiszy używanych podczas rejestrowania makra. Możesz więc zapisać do pliku tekstowego makro (używając "ap
makra a ), edytować je i załadować do rejestru za pomocą "ay$
. Fajny sposób przechowywania przydatnych makr.
vim --version
- -clipboard
oznacza, że go nie masz, +clipboard
oznacza , że masz.
"*
a "+
są jeszcze chłodniej: "+
wkleja ostatni tekst skopiowany z ctrl+c
(bufor kopiowania), czy co tam skrót używają (lub right-click>copy
). "*
wkleja ostatni zaznaczony tekst myszą (bufor wyboru). Jeśli więc skopiujesz coś za ctrl+c
pomocą myszy, a następnie podświetlisz coś innego za pomocą myszy, możesz wybrać, który chcesz wkleić. Nie działa to w systemie Windows, w którym te dwa rejestry są synonimami.
"*
i "+
od lat! Myślałem, że tylko gvim ma dostęp do schowków systemowych, ale najwyraźniej również zwykły vim!
-xterm_clipboard
włączony vim --version
. Jakikolwiek prosty pakiet do zainstalowania? (debian / apt-get). Dzięki.
Czarną dziurę rejestr _
jest /dev/null
rejestrów.
Używam go w moim vimrc, aby umożliwić usuwanie pojedynczych znaków bez aktualizacji rejestru domyślnego:
noremap x "_x
i wkleić w trybie wizualnym bez aktualizacji rejestru domyślnego:
vnoremap p "_dP
x
staje się mniej wygodne do transponowania znaków.
x
mapowaniu nie można już wykonać xp
„polecenia”, aby przełączyć prąd na następny znak. Całkiem przydatne w przypadku poprawek literówek. Musimy także Xp
zmienić prąd na poprzedni znak.
Jeśli kiedykolwiek chcesz wkleić zawartość rejestru do polecenia trybu ex, naciśnij <C-r><registerletter>
.
Dlaczego miałbyś to wykorzystać? Chciałem przeprowadzić wyszukiwanie i zastąpić długi ciąg, więc wybrałem go w trybie wizualnym, zacząłem wpisywać wyrażenie wyszukiwania / zamiany :%s/[PASTE YANKED PHRASE]//g
i zacząłem dzień.
Jeśli chcesz wkleić tylko jedno słowo w trybie ex, możesz upewnić się, że znajduje się na nim kursor przed przejściem do trybu ex, a następnie naciśnij <C-r><C-w>
w trybie ex, aby wkleić słowo.
:
wierszu poleceń to najlepsza rzecz, jakiej się dzisiaj nauczyłem
/[write out your regex]<cr>
a potem na just s/<C-R>//replacement/
. W ten sposób zyskujesz informację zwrotną na temat wyrażenia regularnego przed uruchomieniem zamiany.
Myślę, że sekretnym rejestrem guru jest wyrażenie = rejestr. Można go wykorzystać do kreatywnych mapowań.
:inoremap \d The current date <c-r>=system("date")<cr>
Możesz używać go w połączeniu z systemem jak wyżej lub otrzymywać odpowiedzi z niestandardowych funkcji VimL itp.
lub po prostu takie rzeczy ad hoc
<c-r>=35+7<cr>
Fajną sztuczką jest "1p
wklejenie ostatniego skasowania / zmiany (a następnie .
kilkakrotne wklejenie kolejnych skasowań. Innymi słowy, "1p...
jest to w zasadzie odpowiednik"1p"2p"3p"4p
.
Możesz użyć tego do odwrotnego zamówienia kilku linii:
dddddddddd"1p....
Ze strony pomocy vima:
CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
Insert the contents of a numbered or named register. Between
typing CTRL-R and the second character '"' will be displayed
<...snip...>
Special registers:
'"' the unnamed register, containing the text of
the last delete or yank
'%' the current file name
'#' the alternate file name
'*' the clipboard contents (X11: primary selection)
'+' the clipboard contents
'/' the last search pattern
':' the last command-line
'-' the last small (less than a line) delete
'.' the last inserted text
*c_CTRL-R_=*
'=' the expression register: you are prompted to
enter an expression (see |expression|)
(doesn't work at the expression prompt; some
things such as changing the buffer or current
window are not allowed to avoid side effects)
When the result is a |List| the items are used
as lines. They can have line breaks inside
too.
When the result is a Float it's automatically
converted to a String.
See |registers| about registers. {not in Vi}
<...snip...>
nmap <F2> @q
używam rejestru q, ponieważ wtedy, aby zapisać makro do F2 do odtwarzania, po prostu nacisnąłem qq
. szybkie zapisywanie i odtwarzanie makr.
Używam domyślnego rejestru do grepowania tekstu w oknie vima bez konieczności sięgania po mysz.
:!grep "<CTRL-R>0"<CR>
Używaj rejestrów w poleceniach z @
. Na przykład:
echo @a
echo @0
echo @+
Ustaw je w poleceniu:
let @a = 'abc'
Teraz "ap
wklei się abc
.
Dużym źródłem nieporozumień jest rejestr domyślny "
. Ważne jest, aby wiedzieć, jak to działa. O wiele lepiej jest unikać rejestru domyślnego przez większość czasu. Wyjaśnienie z dokumentacji Vima:
Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g. "xdd). This is like the unnamed register is pointing
to the last used register.
Rejestr domyślny jest tak naprawdę wskaźnikiem do ostatnio używanego rejestru. Kiedy usuniesz lub szarpniesz coś, ten rejestr będzie wskazywał na inne rejestry. Możesz to sprawdzić, sprawdzając rejestry. Zawsze istnieje inny rejestr, który jest dokładnie taki sam jak rejestr domyślny: rejestr szarpnięcia ( "0
), pierwszy rejestr kasowania ( "1
), mały rejestr kasowania ("-
) lub inny rejestr, który został użyty do usunięcia lub szarpnięcia.
Jedynym wyjątkiem jest rejestr czarnej dziury. Vim doc mówi:
An exception is the '_' register: "_dd does not store the deleted text in any
register.
Zazwyczaj są znacznie lepiej przy użyciu bezpośrednio: "0
, "-
a "1-"9
rejestry domyślne lub nazwane rejestry.
Jednym z pomijanych rejestrów jest „.” rejestr kropkowy, który zawiera ostatni wstawiony tekst bez względu na to, jak został wstawiony, np. ct] (zmień do]). Wtedy zdajesz sobie sprawę, że musisz wstawić go w inne miejsce, ale nie możesz użyć metody powtarzania kropek.
:reg .
:%s/fred/<C-R>./
Mój przyjaciel Brian napisał obszerny artykuł na ten temat. Myślę, że to świetne wprowadzenie do korzystania z tematów. https://www.brianstorti.com/vim-registers/