Chciałbym wkleić szarpany tekst do linii poleceń Vima. Czy to możliwe?
vim
copy-paste
dan
źródło
źródło
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
(rejestry
szarpnięcia : gdy używasz w trybie normalnym, bez określania rejestru, szarpany tekst trafia tam, a także do rejestru domyślnego),1
do9
(przesunięcie kasowania rejestrów, gdy używasz poleceń takich jakc
lubd
, 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
doz
użytku własnego (kapitalizowaneA
doZ
są do dołączania do odpowiednich rejestrów)._
(działa jak/dev/null
(Unix) lubNUL
(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')
wtedyp
.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
gdziex
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()
igetregtype()
.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 zp
,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ącebar
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 odwzorowanymswin.vim
, uruchom tryb Ex zQ
, połącz te „polecenia dwukropka”, które w rzeczywistości są lepiej nazywane „poleceniami Ex”, i wróć do trybu normalnego, piszącvisual
.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 rejestrzea
, 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ękip
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ówźródło
Do 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.
źródło
:!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źródło
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.
źródło
Warto również zauważyć, że rejestry Yank są takie same jak bufory makr. Innymi słowy, możesz po prostu napisać całe polecenie w swoim dokumencie (w tym wklejony fragment), a następnie
"by
przeciągnąć je dob
rejestru, a następnie uruchomić@b
.źródło
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:
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:
Aby obejść ten problem, wystarczy odwołać się do zawartości makra, używając
@
:Przechowuje zawartość nienazwanego rejestru i działa z moimi podwójnymi cytatami i wielowierszowymi edgecases.
źródło
@
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.źródło
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.
źródło
"[a-z]y
: Skopiuj tekst do rejestru [az]Użyj,
:!
aby przejść do polecenia edycjiCtrl+ R: Postępuj zgodnie z tożsamością rejestru, aby wkleić to, co kopiujesz.
Kiedyś w CentOS 7.
źródło
Jeśli masz dwie wartości połączone w dwa różne rejestry (na przykład rejestr
a
i rejestrb
), 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ść wc
dowolnym miejscu.Na przykład w trybie WSTAW,
CTRL + R
wpisz,=
aby wejść do rejestru wyrażeń i po prostu wpiszc
znak równości i naciśnij ENTER. Zrobione, powinieneś teraz mieć łączniea
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.
źródło