Jak skopiować zawartość wklej w edytorze vi


165

Próbowałem użyć Ctrl+ Vdo wklejenia treści w dokumencie edytora vi, ale Ctrl+ Vnie jest interpretowany jako wklej.


16
Tylko uwaga, głównym powodem używania Vi jest to, że Vim nie jest zainstalowany. Jeśli masz zainstalowanego Vima, prawdopodobnie warto go użyć. Vi nie ma przewagi, poza tym, że jest już obecny przy każdej instalacji Unixa. Moim zdaniem najlepszym sposobem na nauczenie się Vima jest otwarcie emulatora terminala (nie z poziomu Vima) i wpisanie. vimtutorPrzyspieszy on pracę z komputerem w ciągu około 45 minut.
Ben Mordecai

1
+1 @BenMordecai - Znałem już vi (ze starego), w tym jej wygodną funkcję podpowłoki, ale potrzebowałem tego odświeżenia. Świetna odrobina korepetycji. Przeszedłem przez to jak wiatr. Dzięki.
Cbhihe

Odpowiedzi:


192

Najpierw upewnij się, że jesteś w trybie edycji (naciśnij i). Następnie możesz wkleić za pomocą Ctrl+ Shift+ V, jeśli korzystasz z emulatora terminala, takiego jak gnome-terminal(lub wybierz „Wklej” z menu po kliknięciu prawym przyciskiem myszy).

Możesz także wpisać :set pastevim przed wklejeniem, aby wyłączyć automatyczne wcięcia itp. Następnie :set nopastepo wklejeniu zawartości.

Sprawdź również to pytanie na stackoverflow.com, aby uzyskać więcej informacji.

Jeśli chcesz skopiować / wkleić linie vim(w przeciwieństwie do wklejania zawartości schowka), powinieneś sprawdzić polecenie yank . Oto ściągawka, która może pomóc.


1
Myślę, że jeśli masz kursor myszy, nie możesz wkleić za pomocą Ctrl + Shift + V.
Alvin Wong,

14
Uwaga: wielkość Iliter ma znaczenie. Małe litery ito normalny sposób wejścia w tryb wstawiania. Capital Iprzenosi kursor na początek linii, a następnie przechodzi do trybu wstawiania.
Ben Mordecai

64

Vi (i Vim) działa zupełnie inaczej niż zwykły edytor tekstu, taki jak Gedit. Ma również dość stromą krzywą uczenia się. Jeśli chcesz nauczyć się podstawowych poleceń, zacznij od tego interaktywnego samouczka .

Jednak aby odpowiedzieć na twoje pytanie. Do zawartości schowka systemowego można uzyskać dostęp poprzez rejestr plus. Aby wkleić coś ze schowka systemowego, możesz w trybie normalnym nacisnąć: "+p(Nie w tym samym czasie, ale jeden po drugim).


3
To było coś, czego do tej pory nie wiedziałem. Ponadto +1 za połączenie jeszcze jednego niesamowitego tutoriala vim.
Attila O.

19
Mówiąc o krzywych uczenia się dla redaktorów, istnieją „klasyczne krzywe uczenia się dla niektórych popularnych redaktorów”, blog.thilelli.net/public/store/attached/curves.jpg .
hlovdal

W GNOME Terminal skrótami do kopiowania i wklejania są odpowiednio Ctrl-Shift-C i Ctrl-Shift-V.
Flimm

1
Próbowałem kolejno naciskać <kbd> "</kbd>, <kbd> + </kbd> i <kbd> p </kbd>, a także <kbd>" </kbd> i <kbd> p < / kbd> i nic się nie stało. Co zrobiłem źle? Używam vinievim
user907860

1
To właściwa odpowiedź. Używając np. Ctrl-Shift-v będzie działał tylko z najprostszą zawartością (podziały linii i wcięcia mogą się naprawdę nie zgadzać, jeśli jesteś w terminalu i zapomniałeś go użyć set :paste).
rsenna

29
  1. Jeśli chcesz skopiować zawartość wklejaną w tym samym pliku , użyj yanki paste.

  2. Jeśli chcesz skopiować zawartość wklejaną między terminalami , otwórz pierwszy plik, pociągając za tekst, który chcesz, a następnie otwórz drugi plik w vimie (np. :tabnew /path/to/second/file) I naciśnij, paby go wkleić.

  3. Jeśli chcesz skopiować zawartość wklejania z vima do zewnętrznego programu , musisz uzyskać dostęp do schowka systemowego. Zakładam, że używasz Ubuntu. Wersja vim z graficznym interfejsem użytkownika ma zawsze obsługę schowka, jednak jeśli chcesz używać Vima z terminala, musisz sprawdzić obsługę schowka X11.

    W konsoli wpisz:

    $ vim --version | grep xterm
    

    Jeśli znajdziesz -xterm_clipboard , masz dwie opcje:

    1) Skompiluj vima z włączoną flagą xterm_clipboard

    2) Odinstaluj vima, zamiast niego zainstaluj gvim (vim-gtk lub vim-gnome). Możesz trzymać się vim-gui, wywołując vim z terminala, tak samo jak wcześniej. Tym razem, gdy sprawdzisz, powinieneś znaleźć + xterm_clipborad .

    Teraz, gdy szarpniesz jakiś tekst w rejestrze + w edytorze vim (np. „+ Yy), zostanie on również skopiowany do schowka systemowego, który możesz pobrać z zewnętrznego programu, takiego jak edytor gedit, za pomocą Ctrl+ V.

  4. Jeśli chcesz skopiować zawartość wklejaną z zewnętrznego programu do vima , najpierw skopiuj tekst do schowka systemowego za pomocą Ctrl+ C, a następnie w trybie wstawiania edytora vim kliknij środkowy przycisk myszy (zwykle koło) lub naciśnij Ctrl+ Shift+, Vaby wkleić.

    Są to 4 podstawowe warunki kopiowania i wklejania związane z vimem. Mam nadzieję, że to pomoże.


Jaki jest sens: tabnew / path / to / second / file? Możesz osiągnąć dokładnie to samo, szarpiąc / kopiując / wycinając pierwszy plik, otwierając drugi plik za pomocą: vi / path / to / second / file i wklejając go (p / P). Przynajmniej w moim przypadku ... A może dlatego, że mam włączoną funkcję vim + xterm_clipboard? A może jest coś więcej do poznania niż tylko to?
Cbhihe

1
Na Ubuntu vim-gtkma xterm_clipboardwsparcie, a na Fedorze xvim.
icc97

18

Zawsze używam Shift+, Insertgdy chcę wkleić tekst do terminala, działa we wszystkich programach terminala.

(Co jest również powodem, dla którego nigdy nie dostaję laptopa, w którym nie można nacisnąć Insertbez naciśnięcia drugiego klawisza)


2
Vi/ Vim! = terminal;)
0xC0000022L

1
ok ok, ale nadal działa :)
Magnus Jonsson

+1 dla tego .. Czego używać do wykonywania powiedzmy Ctrl+A, Ctrl+Ctakże?
Arup Rakshit

Jeśli używam terminala wewnątrz DE, zwykle po prostu zaznaczam tekst za pomocą myszy i kopiuję za pomocą Ctrl + Shift + C.
Magnus Jonsson

Shift + Insert działa również w gvim. (Używam Ubuntu 13.10, jeśli to robi jakąkolwiek różnicę.)
eksortso

10

Użyj środkowego przycisku myszy, aby wstawić zaznaczony tekst w innym miejscu.

Jest to przydatne, gdy nie masz dostępu do schowka systemowego (na przykład w zdalnej sesji SSH).

Musi być w trybie edycji / wstawiania dla Vima.


6

Po wejściu w vi naciśnij, iaby przejść do trybu wstawiania, kliknij prawym przyciskiem myszy w terminalu, kliknij wklej.


Myślałem, że to małe litery i. Co robi wielkie litery I?
Flimm

@Flimm, co zostało już wyjaśnione w komentarzu Bena Mordecai na temat innej odpowiedzi.
sierrasdetandil

Zredagowałem odpowiedź na małą literę i. Wielkie litery Iprzenoszą kursor na początek linii przed przejściem do trybu wstawiania, co nie jest tutaj potrzebne.
Flimm

5

Szczegółowe instrukcje kopiowania / wklejania wierszy tekstu w vi za pomocą yankiput

(użyj następujących poleceń w trybie komend vi)

Kopiuj (YANK)

Aby skopiować jedną linię w vi:

  • W trybie komend przesuń kursor do linii, którą chcesz skopiować, i wpisz yylub wpiszY

Aby skopiować 2 linie w vi:

  • W trybie poleceń przesuń kursor do pierwszego wiersza, który należy skopiować, i wpisz 2yylub wpisz2Y

(podobnie można skopiować dowolną liczbę wierszy)

Aby skopiować wszystkie linie z bieżącej lokalizacji na koniec pliku:

  • W trybie poleceń przesuń kursor do pierwszego wiersza, który należy skopiować, i wpisz yG

Aby skopiować cały tekst z bieżącej lokalizacji na koniec bieżącego słowa:

  • W trybie komend przesuń kursor do miejsca, z którego należy skopiować tekst i wpisać yw

Aby skopiować cały tekst z bieżącej lokalizacji na koniec linii:

  • W trybie komend przesuń kursor do miejsca, z którego należy skopiować tekst i wpisać y$

Wklej (PUT)

Aby wkleić tekst do schowka - po położeniu kursora:

  • W trybie komend wpisz p

Aby wkleić tekst do schowka - przed położeniem kursora:

  • W trybie komend wpisz P

1

Miałem problem, ponieważ moja instalacja Vima nie obsługiwała schowka :

vim --version | grep clip
-clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

Zainstalowałem vim-gnome (który obsługuje schowek), a następnie ponownie sprawdziłem:

vim --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +user_commands
+emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

Teraz jestem w stanie skopiować i wkleić, używając odpowiednio „+ y” i „+ p.


To naprawiło mój problem!
astrojuanlu,

1

Z Vimem 8+ na Linuksie lub Macu, możesz teraz po prostu użyć natywnej pasty systemu operacyjnego ( ctrl+shift+Vna Linuksie, cmd+Vna Macu). Nie naciskaj, iaby przejść do trybu wstawiania.

Wklei zawartość schowka systemu operacyjnego, zachowując spacje i tabulatory bez dodawania automatycznego wcięcia. Jest to odpowiednik starego :set paste, i, ctrl+shift+V, esc, :set nopastemetoda.

Nie potrzebujesz już nawet instalowanych funkcji +clipboardlub +xterm_clipboardvim. Ta funkcja nosi nazwę „wklejania w nawiasach”. Aby uzyskać więcej informacji, zobacz https://stackoverflow.com/questions/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763


Oto odpowiedź, której szukam. Ponieważ Vim nie jest domyślny w dystrybucjach gnu / linux, należy go zainstalować nawet w Ubuntu. Ponadto przyciski „góra w dół” Vi nie działają na Ubuntu i nie wyróżniają się.
itsnotmyrealname


0

Chciałem tylko zauważyć, że używając Vima przez Git Bash w systemie Windows, możesz po prostu użyć pmyszy lub kliknąć środkowy przycisk myszy, nie będąc w trybie wstawiania. Używając Vima przez PuTTY , możesz kliknąć prawym przyciskiem myszy. I wyróżnianie wykonuje kopiowanie.

Zauważyłem to, ponieważ nie zauważyłem, że jest to SE dla Ubuntu.

Inne pomocne polecenia:

  • yy(# linii) - yank (kopia)
  • dd(# linii) - usuń
  • p - wklej linię poniżej bieżącej linii
  • Shift+ p- wklej linię powyżej bieżącej linii
  • u - Cofnij
  • r - powtórz
  • i - tryb wstawiania
  • v - tryb wizualny

To nie działało dla mnie w Windows Git Bash. Z której konsoli korzystasz, mięty lub Windows cmd?
wisbucky

Wierzę, że to było miętowe.
Tyler Christian

0

Możesz użyć Ctrl+ Shift+ Vdo wklejenia w vimie wersji terminalowej, ale w wersji vim GUI, takiej jak Neovim-Qtwklejanie tekstu ze schowka systemowego za pomocą Ctrl+ Shift+ Vpo prostu nie będzie działać. Musisz uzyskać dostęp do schowka "+lub "*edytora vim.

Dodanie nowego skrótu klawiszowego .vimrcspowoduje po prostu polecenie kopiuj / wklej:

" paste from system clipboard, align indentation with surroundings
noremap <Leader>p "*]p:set nopaste<CR>
" copy a sentence into system clipboard
noremap <Leader>y "+y)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.