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 yszarpnięcia : gdy używasz w trybie normalnym, bez określania rejestru, szarpany tekst trafia tam, a także do rejestru domyślnego),1do 9(przesunięcie kasowania rejestrów, gdy używasz poleceń takich jak club 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, "),ado zużytku własnego (kapitalizowane Ado Zsą 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ą Qlub :, tylko do odczytu),+i *(rejestry schowka systemowego, możesz do nich pisać, aby ustawić schowek i odczytać z nich zawartość schowka)Zobacz :help registerspełne odniesienie.
Możesz w dowolnym momencie użyć :registersdo wyświetlenia zawartości wszystkich rejestrów. Synonimy i skróty dla tego polecenia to :display, :regi :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 0x08backspace itp.), Możesz użyć Ctrl- R, Ctrl- O, zarejestrować nazwę. Więcej informacji można znaleźć w :help i_CTRL-Rkolejnych 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 ". :putPolecenia, podobnie jak wielu poleceń Ex, działa tylko linewise.
por. :help :put
Mógłbyś także zrobić: :call setreg('"', @", 'V')wtedy p. setregFunkcja 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 @xgdzie xjest nazwą rejestr w VimL) oraz zamienia go w tryb określony w trzecim argumencie, Vdla linii, nic dla znaków i dosłownie ^Vdla bloku.
por. :help setreg(). Funkcjami odwrotnymi są getreg()i getregtype().
Jeśli nagrałeś makro za pomocą qa... q, to :echo @apowie ci, co wpisałeś, i @aodtworzy 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 8gow 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ł ddw 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, :puti 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, eale @: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 bardo 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 Qnie 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ą fooprzed każdym wierszu: :g/^/-put ='foo'. To sprytne użycie rejestru wyrażeń. Tutaj -jest synonimem .-1(por :help :range.). Ponieważ :putumieszcza 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 pmożesz uzyskać ostatnią usuniętą linię. Ale rzeczywiście można również odzyskać maksymalnie 9 usuwaniem z rejestrów @1poprzez @9.
Nawet lepiej, jeśli tak "1P, to .w trybie normalnym będzie grać "2Pi 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-insjest ł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. vnoremapI 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 yyi 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 ai rejestr b), możesz po prostu ustawić zmienną ci wykonać na niej operację.
Na przykład, :set c = str2float(@a) + str2float(@b)a następnie możesz wkleić zawartość w cdowolnym miejscu.
Na przykład w trybie WSTAW, CTRL + Rwpisz, =aby wejść do rejestru wyrażeń i po prostu wpisz cznak równości i naciśnij ENTER. Zrobione, powinieneś teraz mieć łącznie aib rejestry.
Wszystko to można zapisać w makrze i powtórzyć!
str2floatFunkcja 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.