Jak wkleić tekst do wiersza poleceń Vima?
Chciałbym wkleić tekst do wiersza poleceń Vima. Czy to możliwe?
9 answers
Tak. Hit Ctrl-R wtedy ". Jeśli masz dosłowne znaki sterujące w tym, co przeciągnąłeś, użyj Ctrl-R, Ctrl-O, ".
Oto wyjaśnienie, co możesz 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 są w zasadzie miejscem przechowywania łańcuchów. Vim ma wiele rejestrów, które działają na różne sposoby:
-
0
(Yank register: gdy używaszy
w trybie normalnym, bez podawania rejestru, szarpany tekst trafia tam, a także do rejestru domyślnego), -
1
do9
(przenoszenie kasowanych rejestrów, kiedy używasz komend takich jakc
lubd
, to co zostało usunięte przechodzi do rejestru 1, to co było w rejestrze 1 przechodzi do rejestru 2, itd.), -
"
(rejestr domyślny, znany również jako rejestr bez nazwy. To tutaj " wchodzi Ctrl-R, "), -
a
doz
na własny użytek (pisane wielkimi literamiA
doZ
służą do dołączania do odpowiednich rejestrów). -
_
(działa jak/dev/null
(Unix) lubNUL
(Windows), możesz do niego pisać, ale jest odrzucany, a kiedy z niego czytasz, zawsze jest pusty), -
-
(mały rejestr kasacji), -
/
(search pattern register, aktualizowany, gdy szukasz tekst z/
,?
,*
można do niego również pisać, aby dynamicznie zmieniać wzorzec wyszukiwania), -
:
(przechowuje ostatnią komendę wpisaną przez VimL poprzezQ
lub:
, readonly), -
[23]} i
*
(rejestry schowka systemowego, można do nich pisać, aby ustawić schowek i odczytać z nich zawartość schowka)
Zobacz :help registers
w celu uzyskania pełnego odniesienia.
Możesz w każdej chwili użyć :registers
, aby wyświetlić zawartość wszystkich rejestry. Synonimami i skrótem tego polecenia są :display
, :reg
i :di
.
W trybie Insert lub Command-line, Ctrl-R plus Nazwa rejestru, wstawia zawartość tego rejestru. Jeśli chcesz wstawić je dosłownie (bez automatycznego wcięcia, bez konwersji znaków sterujących, takich jak {[30] } do backspace, itp.), Możesz użyć Ctrl-R, Ctrl-O , nazwa rejestru.
Zobacz :help i_CTRL-R
i kolejne akapity, aby uzyskać więcej informacji Referencja.
Ale możesz również wykonać następujące czynności (i prawdopodobnie zapomniałem o wielu zastosowaniach dla rejestrów).
-
W trybie normalnym, hit ":p . Ostatnie polecenie użyte w Vimie zostanie wklejone do twojego bufora.
Let ' s decompose:"
to polecenie w trybie normalnym, które pozwala wybrać rejestr, który ma być użyty podczas następnej operacji yank, delete lub paste. Więc ": wybiera rejestr dwukropka (zapisujący ostatnią dowództwo). Wtedy P jest komendą, którą już znasz, wkleja zawartość rejestru.Por.
:help "
,:help quote_:
-
Edytujesz plik VimL (na przykład twój
.vimrc
) i chcesz teraz wykonać kilka kolejnych linii: yj:@"wpisz .
Tutaj, yJ yanks current and next line (dzieje się tak dlatego, że J jest ruchem liniowym, ale jest to poza zakresem tej odpowiedzi) do rejestru domyślnego (znanego również jako rejestr bez nazwy). Następnie polecenie:@
Ex odtwarza polecenia Ex przechowywane w rejestrze podanym jako argument, a"
odnosi się do rejestru bez nazwy. Zobacz również początek tej odpowiedzi, która jest związana.Nie należy mylić
"
użytego tutaj (który jest nazwą rejestru) z"
z poprzedniego przykładu, który był komendą w trybie normalnym.Por.
:help :@
i:help quote_quote
-
Wstaw ostatni wzorzec wyszukiwania do pliku w trybie wstawiania lub do linii poleceń za pomocą Ctrl-R, /.
Por.
:help quote_/
,help i_CTRL-R
Corollary: Zachowaj wzorzec wyszukiwania, ale dodaj alternatywę:
/
Ctrl-R, /\|alternative
. -
Wybrałeś dwa słowa na środku linii w trybie wizualnym, przeciągnąłeś je
y
, są w rejestr bez nazwy. Teraz chcesz otworzyć nową linię tuż poniżej, gdzie jesteś, z tymi dwoma słowami::pu
. To skrót od:put "
. Polecenie:put
, podobnie jak wiele poleceń Ex, działa tylko liniowo.Por.
:help :put
Mogłeś też zrobić:
:call setreg('"', @", 'V')
wtedyp
. Funkcjasetreg
ustawia rejestr, którego nazwa jest podana jako pierwszy argument (jako łańcuch znaków), inicjalizuje go zawartością drugiego argumentu (i można używać rejestrów jako zmiennych o nazwie@x
gdziex
jest nazwą rejestru w VimL) i zamienia ją w tryb określony w trzecim argumencie,V
dla liniowego, nothing dla znakowego i literalnego^V
dla blokowego.Por.
:help setreg()
. Funkcje odwrotne togetreg()
igetregtype()
. -
Jeśli zostało zarejestrowane makro z
qa
...q
, następnie:echo @a
powie Ci, co wpisałeś, i@a
powtórzy makro (prawdopodobnie wiedziałeś, że jeden, bardzo przydatne, aby uniknąć powtarzających się zadania)Por.
:help q
,help @
Kontynuacja z poprzedniego przykładu: jeśli masz
8go
w schowku, to@+
odtworzy zawartość schowka jako makro, a tym samym przejdzie do 8 bajtu Twojego pliku. W rzeczywistości będzie to działać z prawie każdym rejestrem. Jeśli ostatni wstawiony ciąg znaków byłdd
w trybie wstawiania, to@.
(ponieważ rejestr.
zawiera ostatni wstawiony ciąg znaków) usunie wiersz. (Dokumentacja Vim jest w tym względzie błędna, ponieważ stwierdza, że rejestry#
,%
,:
i.
będzie działać tylko zp
,P
,:put
i Ctrl-R ).Por.
:help @
Nie myl
:@
(polecenia odtwarzające polecenia Vima z rejestru) i@
(polecenia w trybie normalnym odtwarzające polecenia w trybie normalnym z rejestru).Godnym uwagi wyjątkiem jest
@:
. Rejestr poleceń nie zawiera początkowego dwukropka ani ostatecznego zwrotu karetki. Jednak w normalnym mode,@:
zrobi to, czego oczekujesz, interpretując rejestr jako polecenie Ex, nie próbując odtwarzać go w trybie normalnym. Jeśli więc ostatnią komendą było:e
, rejestr zawierae
, ale@:
przeładuje plik, a nie przejdzie do końca programu word.Por.
:help @:
-
Pokaż, co będziesz robił w trybie normalnym przed uruchomieniem:
@='dd'
wpisz . Gdy tylko naciśniesz klawisz=
, Vim przełączy się na expression evaluation: podczas wprowadzania wyrażenia i naciśnięcia wprowadź , vim oblicza go, a wynik działa jako zawartość rejestru. Oczywiście rejestr=
jest tylko do odczytu, i jeden strzał. Za każdym razem, gdy zaczniesz go używać, będziesz musiał wprowadzić nowe wyrażenie.Por.
:help quote_=
Następująca: jeśli edytujesz polecenie i zdajesz sobie sprawę, że powinieneś wstawić do swojej linii poleceń jakąś linię z bieżącego bufora: nie naciskaj Esc! Użyj Ctrl-R
=getline(58)
Wpisz . Następnie wrócisz do edycji wiersza poleceń, ale wstawiono zawartość 58.linii. -
Definiowanie wzorca wyszukiwania ręcznie:
:let @/ = 'foo'
Por.
:help :let
Zauważ, że robiąc to, nie musisz uciekać
/
we wzorze. Musisz jednak oczywiście podwoić wszystkie pojedyncze cytaty. -
Skopiuj wszystkie linie zaczynające się od
Dzięki temu rejestr ten działa w trybie dopisywania.]}foo
, a następnie wszystkie linie zawierającebar
do schowka, połącz te polecenia:qaq
(resetuje a rejestr przechowujący puste makro wewnątrz niego),:g/^foo/y A
,:g/bar/y A
,:let @+ = @a
.Lepiej, jeśli
Q
nie został przerobiony przezmswin.vim
, uruchom tryb Ex zQ
, połącz "polecenia dwukropka", które są właściwie lepiej nazywane "polecenia Ex", i wróć do trybu normalnego, wpisującvisual
.Por.
:help :g
,:help :y
,:help Q
Podwójne miejsce na plik:
:g/^/put _
. To stawia zawartość rejestru czarnej dziury (pustą podczas czytania, ale zapisywalną, zachowującą się jak/dev/null
) liniowo, po każdej linii (ponieważ każda linia ma początek!).Dodaj wiersz zawierający
foo
przed każdym wierszem::g/^/-put ='foo'
. Jest to sprytne użycie rejestru wyrażeń. Tutaj-
jest synonimem.-1
(por.:help :range
). Ponieważ:put
umieszcza tekst po wierszu, musisz wyraźnie powiedzieć, aby działał na poprzednim jeden.-
Skopiuj cały bufor do schowka systemowego:
:%y+
.Por.
:help :range
(dla części%
) i:help :y
. W przypadku nieprawidłowego zapisu makra można wpisać
:let @a='
Ctrl-R=replace(@a,"'","''",'g')
Enter'
i edytuj. Spowoduje to modyfikację zawartości makra przechowywanego w rejestrzea
, a tutaj pokazano, jak można użyć rejestru wyrażeń w tym celu.-
Jeśli czy
dddd
, możesz zrobićuu
aby cofnąć. Zp
możesz uzyskać ostatnią usuniętą linię. Ale w rzeczywistości można również odzyskać do 9 usunięć za pomocą rejestrów@1
poprzez@9
.Jeszcze lepiej, jeśli zrobisz
"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')
Wpisz .Por.
:help strftime()
Jeszcze raz, co może być mylące:
- W przeciwieństwie do innych bibliotek, które nie są w pełni kompatybilne z vimscriptem, nie są w pełni kompatybilne z vimscriptem.]}
@
w trybie normalnym polecenie interpretujące zawartość rejestru jako naciśnięcia klawiszy w trybie normalnym (z wyjątkiem użycia:
register, które zawiera ostatnio odtworzone polecenie bez początkowego dwukropek: w tym przypadku powtarza polecenie tak, jakbyś ponownie wpisał dwukropek i ostatni klawisz powrotu)."
w trybie normalnym polecenie, które pomaga wybrać rejestr dla yank, paste, delete, correct, itp.-
"
jest również poprawną nazwą rejestru (domyślnym lub nienazwanym rejestrem) i dlatego może być przekazywana jako argument dla poleceń oczekujących nazw rejestru
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-02 06:57:11
Do wklejenia czegoś, co jest schowkiem systemowym możesz po prostu użyć SHIFT - INS .
Działa w Windows, ale zgaduję, że działa również w Linuksie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-15 20:03:48
" chciałbym wkleić tekst do wiersza poleceń Vima."
Podczas gdy odpowiedź jest bardzo kompletna, wolę edytować historię poleceń.
W trybie normalnym wpisz: q:
. Daje to listę ostatnich poleceń, które można edytować i przeszukiwać za pomocą zwykłych poleceń Vima. Zaczniesz od pustego wiersza poleceń na dole.
Dla dokładnej rzeczy, o którą prosi artykuł, wklejając szarpaną linię (lub szarpaną cokolwiek) do wiersza poleceń, szarpnij swój tekst, a następnie: q:p
(Pobierz w trybie edycji historii poleceń, a następnie (p)ut Twój przeciągnięty tekst do nowej linii poleceń. Edytuj do woli, Wpisz {[11] } aby wykonać.
Aby wyjść z trybu historii poleceń, jest odwrotnie. W trybie normalnym w historii poleceń wpisz: :q
+ enter
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-27 16:10:27
Warto również zauważyć, że rejestry yank są takie same jak bufory makr. Innymi słowy, możesz po prostu napisać całą komendę w dokumencie (łącznie z wklejonym fragmentem), a następnie "by
przenieść ją do rejestru b
, a następnie uruchomić za pomocą @b
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-27 01:28:33
Aby wkleić coś ze schowka systemowego do wiersza poleceń Vima ("tryb poleceń"), użyj Ctrl+R , po którym następuje +. Dla mnie, przynajmniej na Ubuntu, Shift+Ins nie działa.
PS: Nie wiem dlaczego Ctrl+R , po którym następuje *, który teoretycznie jest taki sam jak Ctrl+R , po którym następuje + nie zawsze to działa. Szukałam i odkryłam + wersja i wydaje się działać zawsze, przynajmniej na moim pudełku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-27 17:33:23
Miałem podobny problem. Chciałem, aby wybrany tekst znalazł się w poleceniu, ale nie polegałem na wklejeniu go. Oto Komenda, dla której próbowałem napisać mapowanie:
:call VimuxRunCommand("python")
Dokumenty dla tej wtyczki pokazują tylko za pomocą liter ciągów. Jeśli spróbujesz zaznaczyć tekst zawierający podwójne cytaty, poniższe znaki zostaną złamane:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
Aby to obejść, wystarczy odwołać się do zawartości makra za pomocą @
:
vnoremap y:call VimuxRunCommand(@")<cr>
Przekazuje zawartość rejestru bez nazwy w i działa z moim podwójnym cytatem i wielowierszowymi krawędziami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 04:12:02
OSX
Jeśli używasz Vima w MAC OSX, niestety ma on starszą wersję i nie jest zgodny z opcjami schowka. Na szczęście homebrew może łatwo rozwiązać ten problem.
Install vim:
brew install vim --with-lua --with-override-system-vi
Install GUI verion of vim:
brew install macvim --with-lua --with-override-system-vi
Uruchom ponownie terminal, aby zacząć działać.
Dołącz następujący wiersz do ~/.vimrc
set clipboard=unnamed
Teraz możesz skopiować linię w Vimie za pomocą yy
i wkleić ją w całym systemie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-02 12:24:14
To pytanie jest dość stare, ale ponieważ było oglądane tak wiele razy, wydaje się być popularne - umieszczę to tutaj dla potomności. dla kontekstu, ta informacja pochodzi z out-of-the-box, bez wtyczek, Nie .vimrc vim 7.4 zachowanie w linux mint z domyślnymi opcjami.
Zawsze możesz zaznaczyć tekst za pomocą myszy (lub używając V lub v i umieszczając zaznaczenie w rejestrze"*), a następnie wkleić go do wiersza poleceń za pomocą SHIFT-CTL-v.
Wpisanie CTL-r w wierszu poleceń spowoduje poproś o nazwę rejestru. wpisując :CTL - r * umieści rejestr zawartości * w wierszu poleceń. wklei każdy rejestr, nie tylko"*. patrz: help c_CTRL-R .
Ponadto środkowy przycisk myszy zostanie wklejony do wiersza poleceń. zobacz: help- > quote-plus aby uzyskać opis jak X11 radzi sobie z selekcją. nawet w zwykłym, gotowym do użycia Vimie (i tak w vim 7.4 w linux mint), każdy wybór dokonany lewym przyciskiem myszy może być wklejony w wierszu poleceń za pomocą środkowy przycisk myszy.
Ponadto środkowy przycisk myszy wklei również tekst zaznaczony w Vimie do wielu innych aplikacji x11, nawet gui (np., firefox, thunderbird) i wklejenie tekstu do wiersza poleceń jest również możliwe tam, gdzie tekst został wybrany z innych aplikacji.
Patrz: help- > X11-selection dla Addl info.
Tl; dr
Wypróbuj najpierw podejście: CTL - r, a następnie użyj SHIFT-CTL-v lub środkowego przycisku myszy, jeśli potrzebujesz czegoś innego.
It jest przyznany, że może to być mylące.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 20:30:55
-
"[a-z]y
skopiuj tekst do rejestru [a-z]; -
Użyj
:!
go to edit command; CTRL+R
postępuj zgodnie z identyfikatorem rejestru, aby wkleić to, co skopiujesz.
Kiedyś CentOS7.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-25 18:27:23