Odpowiedzi:
Tak. Hit Ctrl- Rwtedy ". Jeśli masz dosłownych znaków sterujących, co masz szarpnął, zastosowanie Ctrl- R, Ctrl- O, ".
Oto wyjaśnienie, co można zrobić z rejestrami. To, co możesz zrobić z rejestrami, jest niezwykłe, a kiedy już wiesz, jak z nich korzystać, nie możesz bez nich żyć.
Rejestry to zasadniczo miejsca przechowywania ciągów znaków. Vim ma wiele rejestrów, które działają na różne sposoby:
0
(rejestr y
szarpnięcia : gdy używasz w trybie normalnym, bez określania rejestru, szarpany tekst trafia tam, a także do rejestru domyślnego),1
do 9
(przesunięcie kasowania rejestrów, gdy używasz poleceń takich jak c
lub d
, co zostało usunięte, trafia do rejestru 1, co było w rejestrze 1, przechodzi do rejestru 2 itd. ),"
(rejestr domyślny, znany również jako rejestr nienazwany. W tym miejscu "pojawia się Ctrl- R, "),a
do z
użytku własnego (kapitalizowane A
do Z
są do dołączania do odpowiednich rejestrów)._
(działa jak /dev/null
(Unix) lub NUL
(Windows), możesz do niego pisać, ale jest on odrzucany, a kiedy czytasz z niego, zawsze jest pusty),-
(mały rejestr usuwający),/
(Szukaj Rejestracja wzór, zaktualizowane, jeśli spojrzeć na tekst z /
, ?
, *
lub #
, na przykład, można też napisać do niego dynamicznie zmieniać wzorzec wyszukiwania),:
(przechowuje ostatnie polecenie VimL wpisane za pomocą Q
lub :
, tylko do odczytu),+
i *
(rejestry schowka systemowego, możesz do nich pisać, aby ustawić schowek i odczytać z nich zawartość schowka)Zobacz :help registers
pełne odniesienie.
Możesz w dowolnym momencie użyć :registers
do wyświetlenia zawartości wszystkich rejestrów. Synonimy i skróty dla tego polecenia to :display
, :reg
i :di
.
W trybie wstawiania lub wiersza poleceń Ctrl- Rplus nazwa rejestru wstawia zawartość tego rejestru. Jeśli chcesz wstawić je dosłownie (bez automatycznego wcięcia, bez konwersji znaków kontrolnych, takich jak 0x08
backspace itp.), Możesz użyć Ctrl- R, Ctrl- O, zarejestrować nazwę. Więcej informacji można znaleźć w :help i_CTRL-R
kolejnych akapitach.
Ale możesz również wykonać następujące czynności (i prawdopodobnie zapomniałem wiele zastosowań rejestrów).
W trybie normalnym naciśnij ":p. Ostatnie polecenie użyte w vimie jest wklejone do bufora.
Dekomponujmy: "
to polecenie trybu normalnego, które pozwala wybrać rejestr, który ma być używany podczas następnej operacji szarpania, usuwania lub wklejania. ":Wybiera więc rejestr dwukropka (przechowujący ostatnie polecenie). Wtedy pto komenda już wiesz, że wkleja zawartość rejestru.
por. :help "
,:help quote_:
Ty edytujesz plik VimL (na przykład swoimi .vimrc
) i chciałby, aby wykonać kilka kolejnych liniach teraz: yj:@"Enter.
Tutaj yjciągnie bieżącą i następną linię (to dlatego, że j jest ruchem liniowym, ale jest to poza zakresem tej odpowiedzi) do rejestru domyślnego (znanego również jako rejestr nienazwany). Następnie :@
polecenie Ex odtwarza polecenia Ex zapisane w rejestrze podanym jako argument i "
jest to sposób odwoływania się do rejestru bez nazwy. Zobacz także początek tej odpowiedzi, która jest powiązana.
Nie należy mylić "
użytego tutaj (który jest nazwą rejestru) z "
poprzednim przykładem, który był poleceniem w trybie normalnym.
por. :help :@
i:help quote_quote
Włóż ostatniego wyszukiwania wzorca do pliku w trybie Insert, lub w linii komend, z Ctrl- R, /.
por. :help quote_/
,help i_CTRL-R
Następstwem: Trzymaj wzorzec wyszukiwania, ale dodać alternatywę: /
Ctrl- R, / \|alternative
.
W trybie wizualnym wybrałeś dwa słowa na środku linii, pociągnąłeś je y
, są w rejestrze bez nazwy. Teraz chcesz, aby otworzyć nową linię tuż poniżej gdzie jesteś, z tymi dwoma słowami: :pu
. To jest skrót od :put "
. :put
Polecenia, podobnie jak wielu poleceń Ex, działa tylko linewise.
por. :help :put
Mógłbyś także zrobić: :call setreg('"', @", 'V')
wtedy p
. setreg
Funkcja ustawia rejestr, którego nazwa jest podana jako pierwszy argument (jako ciąg), inicjuje go z treścią drugiego argumentu (i można korzystać z rejestrów jako zmienne o nazwie @x
gdzie x
jest nazwą rejestr w VimL) oraz zamienia go w tryb określony w trzecim argumencie, V
dla linii, nic dla znaków i dosłownie ^V
dla bloku.
por. :help setreg()
. Funkcjami odwrotnymi są getreg()
i getregtype()
.
Jeśli nagrałeś makro za pomocą qa
... q
, to :echo @a
powie ci, co wpisałeś, i @a
odtworzy makro (prawdopodobnie wiedziałeś, że to jedno, bardzo przydatne w celu uniknięcia powtarzających się zadań)
por. :help q
,help @
Następstwo z poprzedniego przykładu: Jeśli masz 8go
w schowku, @+
odtworzy zawartość schowka jako makro, a tym samym przejdzie do 8 bajtu pliku. W rzeczywistości będzie to działać z prawie każdym rejestrem. Jeśli ostatni wstawiony ciąg był dd
w trybie wstawiania, wówczas @.
(ponieważ .
rejestr zawiera ostatni wstawiony ciąg) usunie wiersz. (Dokumentacja Vim jest złego w tym względzie, ponieważ twierdzi, że rejestry #
, %
, :
i .
będzie tylko praca z p
, P
, :put
i Ctrl- R).
por. :help @
Nie mylić :@
(polecenie odtwarzające polecenia Vima z rejestru) i @
(polecenie trybu normalnego, które odtwarza polecenia trybu normalnego z rejestru).
Godnym uwagi wyjątkiem jest @:
. Rejestr poleceń nie zawiera początkowego dwukropka ani ostatecznego powrotu karetki. Jednak w trybie normalnym @:
zrobi to, czego oczekujesz, interpretując rejestr jako polecenie Ex, nie próbując odtwarzać go w trybie normalnym. Więc jeśli twoje ostatnie polecenie było :e
, rejestr zawiera, e
ale @:
przeładuje plik, a nie do końca słowa.
por. :help @:
Pokaż, co będziesz robił w normalnym trybie przed uruchomieniem go: @='dd'
Enter. Gdy tylko naciśniesz =
klawisz, Vim przechodzi do oceny wyrażenia: gdy wprowadzasz wyrażenie i naciskasz Enter, Vim oblicza je, a wynik działa jak zawartość rejestru. Oczywiście rejestr =
jest tylko do odczytu i jednorazowy. Za każdym razem, gdy zaczniesz go używać, będziesz musiał wprowadzić nowe wyrażenie.
por. :help quote_=
Następstwo: Jeśli edytujesz polecenie i zdajesz sobie sprawę, że musisz wstawić do linii poleceń jakiś wiersz z bieżącego bufora: nie naciskaj Esc! Użyj Ctrl- R =getline(58)
Enter. Następnie wrócisz do edycji wiersza poleceń, ale wstawił on zawartość 58-tej linii.
Zdefiniuj ręcznie wzór wyszukiwania: :let @/ = 'foo'
por. :help :let
Zauważ, że robiąc to, nie musisz uciekać /
we wzór. Oczywiście musisz podwoić wszystkie pojedyncze cytaty.
Skopiować wszystkie linie rozpoczynające się foo
, a potem wszystkie linie zawierające bar
do schowka, łańcuch tych poleceń: qaq
(zeruje rejestru przechowywania pusty makro wewnątrz niego) , , .:g/^foo/y A
:g/bar/y A
:let @+ = @a
Użycie nazwy rejestru kapitałowego powoduje, że rejestr działa w trybie dołączania
Lepiej, jeśli Q
nie został ponownie odwzorowany mswin.vim
, uruchom tryb Ex z Q
, połącz te „polecenia dwukropka”, które w rzeczywistości są lepiej nazywane „poleceniami Ex”, i wróć do trybu normalnego, pisząc visual
.
por. :help :g
, :help :y
,:help Q
Dwukrotnie przestrzeń plik: :g/^/put _
. Powoduje to umieszczenie zawartości rejestru czarnej dziury (pustego podczas czytania, ale zapisywalnego, zachowującego się jak /dev/null
) linii po każdej linii (ponieważ każda linia ma początek!).
Dodaj linię zawierającą foo
przed każdym wierszu: :g/^/-put ='foo'
. To sprytne użycie rejestru wyrażeń. Tutaj -
jest synonimem .-1
(por :help :range
.). Ponieważ :put
umieszcza tekst po wierszu, musisz wyraźnie powiedzieć mu, aby działał na poprzednim.
Skopiuj cały bufor do schowka systemowego: :%y+
.
por. :help :range
(dla %
części) i :help :y
.
Jeśli źle zapisałeś makro, możesz wpisać :let @a='
Ctrl- R =replace(@a,"'","''",'g')
Enter '
i edytować je. Spowoduje to modyfikację zawartości makra przechowywanego w rejestrze a
, a tutaj pokazano, jak można to zrobić za pomocą rejestru wyrażeń.
Jeśli tak dddd
, możesz to zrobić uu
, aby cofnąć. Dzięki p
możesz uzyskać ostatnią usuniętą linię. Ale rzeczywiście można również odzyskać maksymalnie 9 usuwaniem z rejestrów @1
poprzez @9
.
Nawet lepiej, jeśli tak "1P
, to .
w trybie normalnym będzie grać "2P
i tak dalej.
por. :help .
i:help quote_number
Jeśli chcesz wstawić bieżącą datę w trybie wstawiania: Ctrl- R=strftime('%y%m%d')
Enter.
por. :help strftime()
Jeszcze raz, co może być mylące:
:@
to polecenie wiersza polecenia, które interpretuje zawartość rejestru jako vimscript i źródle go@
w trybie normalnym, który interpretuje zawartość rejestru jako naciśnięcia klawiszy w trybie normalnym (z wyjątkiem sytuacji, gdy używasz :
rejestru, który zawiera ostatnio odtwarzane polecenie bez początkowego dwukropka: w tym przypadku odtwarza polecenie tak, jakbyś ponownie wpisał dwukropek i ostatni klawisz powrotu).
"
w trybie normalnym polecenie, które pomaga wybrać rejestr dla szarpnięcia, wklejania, usuwania, poprawiania itp.
"
jest również prawidłową nazwą rejestru (domyślny lub nienazwany rejestr) i dlatego może być przekazywany jako argument dla poleceń oczekujących nazw rejestrówDo wklejenia czegoś, co jest schowkiem systemowym, którego możesz po prostu użyć SHIFT- INS.
Działa w systemie Windows, ale myślę, że działa również dobrze w systemie Linux.
:!rm -rf /<cr>
, wykona to. Zamiast tego używaj rejestrów!
shift-ins
jest łatwiejsze niż ctrl-R+*
? Dzieje się tak oczywiście, jeśli jesteś w gvim. Jeśli jesteś w terminalu podłączonym do innej maszyny i chcesz wkleić coś ze schowka, czy znasz coś lepszego niż shift-ins
? ponieważ rejestry nie działają w tej sytuacji. Zastanów się, zanim skomentujesz i zrobisz inne rzeczy (np. Głosowanie w dół).
„Chciałbym wkleić szarpany tekst do wiersza poleceń Vima.”
Chociaż najczęściej głosowana odpowiedź jest bardzo kompletna, wolę edytować historię poleceń.
W trybie normalnym, należy wpisać: q:
. To da ci listę ostatnich poleceń, które można edytować i przeszukiwać za pomocą normalnych poleceń vima. Zaczniesz od pustego wiersza poleceń na dole.
Dokładnie o co pyta artykuł, wklejanie szarpanej linii (lub szarpanie czegokolwiek) do linii poleceń, przeciągnij tekst, a następnie: q:p
( przejdź do trybu edycji historii poleceń, a następnie (p) ut swój szarpany tekst w nowe polecenie linia. Edytuj do woli, enteraby wykonać.
Aby wyjść z trybu historii poleceń, jest odwrotnie. W trybie normalnym w historii poleceń wpisz: :q
+enter
Aby wkleić coś ze schowka systemowego do wiersza poleceń Vima („tryb poleceń”), użyj Ctrl+, Ra następnie +. Dla mnie przynajmniej na Ubuntu Shift+ Insnie działa.
PS: Nie jestem pewien, dlaczego Ctrl+, Rpo *którym następuje + , co teoretycznie jest takie samo jak Ctrl+, Rpo którym +nie wydaje się zawsze działać. Przeszukałem i odkryłem +wersję i wydaje się, że zawsze działa, przynajmniej na moim pudełku.
Miałem podobny problem. Chciałem, aby zaznaczony tekst skończył się w poleceniu, ale nie polegałem na wklejeniu go. Oto polecenie, dla którego próbowałem napisać mapowanie:
:call VimuxRunCommand("python")
Dokumenty tej wtyczki są wyświetlane tylko przy użyciu literałów łańcuchowych. Następujące elementy ulegną awarii, jeśli spróbujesz zaznaczyć tekst zawierający podwójne cudzysłowy:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
Aby obejść ten problem, wystarczy odwołać się do zawartości makra, używając @
:
vnoremap y:call VimuxRunCommand(@")<cr>
Przechowuje zawartość nienazwanego rejestru i działa z moimi podwójnymi cytatami i wielowierszowymi edgecases.
@
wysłałoby znak do komendy vimux. pomyśl o @
ucieczce od następującego podwójnego cudzysłowu i jest traktowany jako rejestr zamiast zwykłego znaku. vnoremap
I zostały zdefiniowane działa w trybie wizualnym, a więc wstawia wybrany tekst, a następnie wkleja się do polecenia vimux, wysyłając je do uruchomionej interpretera w sąsiednim panelu. naprawdę świetny do pracy nad skryptem i testowania jego niewielkich fragmentów za pomocą kilku naciśnięć klawiszy.
OS X
Jeśli używasz Vima w Mac OS X, niestety jest on dostarczany ze starszą wersją i nie jest zgodny z opcjami schowka. Na szczęście Homebrew może łatwo rozwiązać ten problem.
Zainstaluj Vima:
brew install vim --with-lua --with-override-system-vi
Zainstaluj wersję GUI Vima:
brew install macvim --with-lua --with-override-system-vi
Uruchom ponownie terminal, aby zadziałał.
Dodaj następujący wiersz do ~/.vimrc
set clipboard=unnamed
Teraz możesz skopiować linię w Vimie yy
i wkleić ją w całym systemie.
Dla kontekstu, ta informacja pochodzi z gotowego zestawu, bez wtyczek, bez zachowania .vimrc Vim 7.4 w Linux Mint z domyślnymi opcjami.
Zawsze możesz zaznaczyć tekst za pomocą myszy (lub używając Vlub vi umieszczając zaznaczenie w rejestrze „*) i wkleić go w wierszu polecenia za pomocą Shift+ Ctrl+v .
Wpisanie Ctrl+ rw wierszu polecenia spowoduje wyświetlenie monitu o nazwę rejestru. więc wpisanie :CTRL-r*umieści rejestr zawartości * w wierszu poleceń. Wklei każdy rejestr, nie tylko „*. Zobacz:help c_CTRL-R
.
Ponadto środkowy przycisk myszy wklei się do wiersza poleceń.
Widzieć :help->quote-plus
opis, w jaki sposób X Window radzi sobie z wyborem. Nawet w zwykłym, gotowym do użycia Vimie (ponownie, w każdym razie w Vimie 7.4 w Linux Mint), każdy wybór dokonany lewym przyciskiem myszy można wkleić w linii poleceń środkowym przyciskiem myszy.
Ponadto środkowy przycisk myszy wklei również tekst zaznaczony w Vimie do wielu innych aplikacji X Window, nawet GUI (na przykład Firefox i Thunderbird ) i wklejenie tekstu do wiersza poleceń jest również możliwe tam, gdzie tekst został wybrany z innych aplikacji .
Zobacz: pomoc-> wybór x11, aby uzyskać dodatkowe informacje.
tl; dr
Spróbuj najpierw: CTRL-r, a następnie użyj Shift+ Ctrl+ vlub środkowego przycisku myszy, jeśli potrzebujesz czegoś innego.
Przyznaje się, że może to być mylące.
"[a-z]y
: Skopiuj tekst do rejestru [az]
Użyj, :!
aby przejść do polecenia edycji
Ctrl+ R: Postępuj zgodnie z tożsamością rejestru, aby wkleić to, co kopiujesz.
Kiedyś w CentOS 7.
Jeśli masz dwie wartości połączone w dwa różne rejestry (na przykład rejestr a
i rejestr b
), możesz po prostu ustawić zmienną c
i wykonać na niej operację.
Na przykład, :set c = str2float(@a) + str2float(@b)
a następnie możesz wkleić zawartość w c
dowolnym miejscu.
Na przykład w trybie WSTAW, CTRL + R
wpisz, =
aby wejść do rejestru wyrażeń i po prostu wpisz c
znak równości i naciśnij ENTER. Zrobione, powinieneś teraz mieć łącznie a
ib
rejestry.
Wszystko to można zapisać w makrze i powtórzyć!
str2float
Funkcja jest używana, jeśli pracujesz z pływaków, jeśli tego nie zrobisz, dostaniesz zamiast liczb całkowitych.
Nie jestem pewien, czy to idiomatyczne, ale zadziałało w moim przypadku, w którym musiałem dodać 2 liczby z rzędu i powtórzyć to dla 500 kolejnych wierszy.