Jak wkleić tekst do wiersza poleceń Vima?

Chciałbym wkleić tekst do wiersza poleceń Vima. Czy to możliwe?

Author: kenorb, 2010-10-22

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żywasz y w trybie normalnym, bez podawania rejestru, szarpany tekst trafia tam, a także do rejestru domyślnego),
  • 1 do 9 (przenoszenie kasowanych rejestrów, kiedy używasz komend takich jak c lub d, 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 do z na własny użytek (pisane wielkimi literami A do Z służą do dołączania do odpowiednich rejestrów).
  • _ (działa jak /dev/null (Unix) lub NUL (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 poprzez Q 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') wtedy p. Funkcja setreg 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 gdzie x 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 to getreg() i getregtype().

  • 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 z p, 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 zawiera e, 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 foo, a następnie wszystkie linie zawierające bar 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.

    Dzięki temu rejestr ten działa w trybie dopisywania.]}

    Lepiej, jeśli Q nie został przerobiony przez mswin.vim, uruchom tryb Ex z Q, połącz "polecenia dwukropka", które są właściwie lepiej nazywane "polecenia Ex", i wróć do trybu normalnego, wpisując visual.

    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 rejestrze a, a tutaj pokazano, jak można użyć rejestru wyrażeń w tym celu.

  • Jeśli czy dddd, możesz zrobić uu aby cofnąć. Z p 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
 1028
Author: Benoit,
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.

 42
Author: skeept,
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

 34
Author: Wandspiegel,
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.

 13
Author: naught101,
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.

 13
Author: Proto,
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.

 1
Author: Conrad.Dean,
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.

 1
Author: anonymous,
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.

 1
Author: wmmso,
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
  1. "[a-z]y skopiuj tekst do rejestru [a-z];

  2. Użyj :! go to edit command;

  3. CTRL+R postępuj zgodnie z identyfikatorem rejestru, aby wkleić to, co skopiujesz.

Kiedyś CentOS7.

 0
Author: yang,
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