Wkleić w trybie wstawiania?


385

Czy można wkleić w trybie wstawiania w Vimie?

Odpowiedzi:


465

W trybie wstawiania naciśnij CTRL-R {register}

Przykłady:

  • CTRL-R * wstawi zawartość schowka
  • CTRL-R " (rejestr bez nazwy) wstawia ostatnie usunięcie lub szarpnięcie.

Aby znaleźć to w pomocy Vima, wpisz :h i_ctrl-r


13
Tak, dopiero niedawno dowiedziałem się o CTRL-R i jest to niezwykle przydatne.
— Dan

16
CTRL-R *działa tylko w GVIM lub wersjach skompilowanych do interakcji z x. Wpisz vim --versioni wyszukaj +xterm_clipboard. Jeśli tego nie masz, potrzebujesz innej wersji vima. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
— Conrad.Dean

10
W rzeczywistości potrzebujesz tylko +clipboard, ale jeśli tak, to i +xterm_clipboardtak powinieneś. W niektórych systemach operacyjnych xterm_clipboardnie ma zastosowania.
— Andrew Marshall,

1
Hmm, używam C-r + do wklejania ze schowka systemowego w Windows (używając GVim Portable)? Nigdy nie słyszałem o * rejestrze.
— kitsu.eb

6
@ kitsu.eb W systemach X *rejestr można wkleić za pomocą kliknięcia środkowym przyciskiem myszy, podczas gdy +jest to tradycyjny sposób kopiowania / wklejania. standard.freedesktop.org/clipboards-spec/clipboards-latest.txt
— amc

235

Jeśli nie chcesz Vim do modyfikacji formatowania przychodzące wklejony tekst, można również rozważyć użycie: :set paste. Zapobiegnie to ponownej tabulacji kodu przez Vima. Po :set nopastezakończeniu wklejania powróci do normalnego zachowania.

Możliwe jest także przełączanie trybu jednym klawiszem, dodając coś podobnego set pastetoggle=<F2>do .vimrc. Więcej informacji na temat przełączania automatycznego wcięcia znajduje się tutaj .


47
:set nopastewyłączy tryb wklejania
— James Snyder

24
@JamesSnyder Lepszym sposobem jest :set paste!Prawdopodobnie ustawienie wklejania jest bardzo blisko w historii poleceń, więc możesz po prostu nacisnąć „:”, a następnie strzałkę w górę i dodać „!”.
— Rafael Barbosa

6
Po prostu ciekawy - co jest lepsze lub różne w :set paste! Dzięki :)
— Michael Durrant

33
!na końcu polecenia w vimprzełącza polecenie i wyłączać. W ten sposób nie musisz pisać :set nopastezamiast tego, możesz przewinąć historię i ponownie uruchomić to samo polecenie ( :set paste!).
— 에이 바

3
@blockloop Powinieneś włączyć to podczas wklejania i zaraz potem wyłączyć.
— NieDzejkob,

125

Nie, nie bezpośrednio. Możesz jednak szybko wyjść z trybu wstawiania dla pojedynczej operacji w trybie normalnym, Ctrl-Oa następnie wkleić stamtąd, co zakończy się powrotem do trybu wstawiania.

Kombinacja klawiszy: Ctrl-O p

EDYCJA: Interesujące. Wygląda na to, że istnieje sposób, który wymieniło kilka innych osób.


2
ctrl-r "nie działa dla mnie (os x, vi w terminalu). ctrl-o p zrobił.
— Bob

4
To najszybszy i najłatwiejszy sposób na zapamiętanie.
— ospa wietrzna

Co esc + p?
— sitilge

2
Zdecydowanie szybsze niż esc + p + ii zdecydowanie łatwiejsze do pisania niżCTRL-R + "
— lucidbrot 31.01.18

W rzeczywistości czasami zachowuje się inaczej CTRL-R ". Na przykład, chociaż ustawienia vimrc mogą to zmienić, wklejenie czegoś w nowym wierszu CTRL-O ppowoduje zniknięcie wcięcia.
— noname

30

W trybie wstawiania możesz użyć Ctrl-R {register}, gdzie rejestr może być:

  • + do schowka
  • * dla schowka X (ostatnio zaznaczony tekst w X),
  • " dla nienazwanego rejestru (ostatnie usunięcie lub szarpnięcie w Vimie),
  • lub wiele innych (patrz :h registers).

Ctrl-R {register} wstawia tekst tak, jakby został wpisany.

Ctrl-R Ctrl-O {register} wstawia tekst z oryginalnym wcięciem.

Ctrl-R Ctrl-P {register} wstawia tekst i automatycznie wcina go.

Ctrl-Omoże być użyty do uruchomienia dowolnego polecenia trybu normalnego przed powrotem do trybu wstawiania, więc
Ctrl-O "+pmoże być również użyty na przykład.

Aby uzyskać więcej informacji, przejrzyj dokumentację za pomocą :h i_ctrl-r


4
Ta odpowiedź wydaje się najbardziej wyczerpująca. To bardzo jasne i moim zdaniem najbardziej pomocne. Odpowiada na pytanie OP, a następnie niektóre, zwięźle.
— Devvyn,

26

Możesz użyć tego do wklejenia ze schowka za pomocą Ctrlv:

set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>

A to za szarpanie wizualnego wyboru do schowka za pomocą Ctrlc:

vnoremap <C-c> "+y

Jeśli chcesz również domyślnie używać schowka do klasycznego vim-yanking / pasting ( y/ p) w trybie normalnym, oto opcja konfiguracji, która to robi:

set clipboard=unnamedplus

Dzięki tym konfiguracjom możesz np. Najpierw szarpać w trybie normalnym, a następnie wklejać Ctrlvw trybie wstawiania. Możesz także wklejać tekst z różnych instancji vima i różnych aplikacji.

Inną opcją jest:

set clipboard=unnamed

Następnie będziesz mógł wybrać coś przeciągając myszą w swoim środowisku X i wkleić go później do vima. Ale (z jakiegoś powodu) nie będziesz w stanie szarpać czegoś ( y) w Vimie, a shiftinsertpotem gdzieś indziej, co jest prawdopodobnie dość ograniczające.

Dokumenty Vima na ten temat: http://vim.wikia.com/wiki/Accessing_the_system_clipboard

Aby wkleić z niestandardowych rejestrów, możesz postępować zgodnie z innymi odpowiedziami :). Ta odpowiedź dotyczy głównie integracji Vima ze schowkiem systemowym.


Zauważ, że do set clipboard=unnamedplusi set clipboard=unnameddo pracy musisz użyć gvim lub vimx ( vim-X11): Są one kompilowane +xterm_clipboard. Możesz opcjonalnie umieścić to w swoim .bashrcaliasie za vimpomocą vimx:

if [ -e /usr/bin/vimx ]; then
    alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi

Możesz dowiedzieć się, czy Twój vim posiada +xterm_clipboardinformacje zawarte w vim --version.


7
Właśnie tego szukałem. Jest to również jedyna rozsądna odpowiedź tutaj. Tak oczekuje się, że wszystko zadziała. Czy ktoś wie, dlaczego domyślne zachowanie :set pastei bizantyjskie <leader><leader> * yjest nawet zdalnie pożądane? Żeby nie zabrzmieć zbyt oddanym, jestem naprawdę ciekawy, jaką filozofię vim to odzwierciedla lub czy jest to po prostu historyczne nieszczęście.
— Ajschylos,

Twoja odpowiedź pozwoliła mi użyć Shift + Insert w Gvim również z inoremap <S-Insert> <F12><C-r>+<F12>(używam F12 jako pastetoggle). Dzięki.
— sromero

20

Jeśli ustawisz Vima na używanie schowka systemowego ( :set clipboard=unnamed), to każdy tekst, który skopiujesz w Vimie, możesz wkleić za pomocą Shift+ Insert. Shift+ Insertto po prostu kombinacja klawiszy wklejania dla całego systemu operacyjnego ( Ctrl+ Insertto odpowiednia „kopia”).


1
Nie wiedziałem o S-Insert :)
— BandGap

Czy to działa odwrotnie? Czy pwklei tekst do schowka?
— Zaz

Przed użyciem Shift + Insertdo wklejenia tekstu musimy być w trybie wstawiania.
— jdhao

18

Możesz także użyć środkowego przycisku myszy, aby wkleić w trybie wstawiania (tylko Linux).


106
O jakiej myszy mówisz?
— Jim Mitchener,

19
O jakich systemach operacyjnych innych niż Linux, o których mówisz?
— Bruno Bronosky,

-1: Ta odpowiedź w dużym stopniu zależy od ustawień sprzętu i terminala. Ostatecznie przyciski myszy wysyłają wstępnie ustawione ciągi do terminala, a terminal analizuje ten ciąg, aby wykonać określone polecenie. Problem polega na tym, że może się to znacznie różnić w zależności od ustawień terminala. Aby poprawić tę odpowiedź, podaj przynajmniej wersję terminala, system operacyjny oraz używaną wersję i model myszy.
— melvynkim

Wklejanie środkowego przycisku myszy jest dość powszechne we wszystkich aplikacjach Linuksa, nie jest ograniczone wersjami terminala lub systemu operacyjnego.
— lcltj

Nie działa w Arch Linux + urxvt. Dodaje tylko nową linię.
— zygimantus

5

Możesz przejść do -- INSERT (past) --trybu poprzez:

  • Kombinacja klawiatury: y p

lub

  • :set pastei wejście w tryb wstawiania ( :set nopasteaby wyłączyć)

w -- INSERT (past) --trybie po prostu użyj funkcji wklejania systemu (np. CtrlShiftvw systemie Linux, Cmdvw systemie Mac OS).

Ta strategia jest bardzo przydatna przy korzystaniu z vima nad ssh.


4

Tak. W systemie Windows Ctrl+ Vi Linux naciskanie obu przycisków myszy prawie jednocześnie.

W systemie Windows myślę, że ten wiersz w moim _vimrc prawdopodobnie to robi:

source $VIMRUNTIME/mswin.vim

W Linuksie nie pamiętam, jak to zrobiłem. Wygląda na to, że prawdopodobnie usunąłem jakąś linię z domyślnego pliku .vimrc.


Czy mogę głosować więcej niż raz? Chcę wklejać tylko, gdy pochodzę z innego okna - więc zawsze jestem przy myszy. Znakomity!
— dave

W systemie Linux wklejasz naciskając środkowy przycisk myszy. Jeśli masz mysz z dwoma przyciskami i naciskasz zarówno lewy, jak i prawy przycisk, do działania w ten sposób potrzebujesz „Emuluj 3 Przyciski” lub podobnego.
— Cougar

0

Wklej w trybie wstawiania

W tym przypadku mapa niestandardowa wydaje się odpowiednia. Oto, czego używam do wklejania szarpanych elementów w trybie wstawiania:

inoremap <Leader>p <ESC>pa

Mój Leaderklucz tutaj jest \; oznacza to, że uderzenie \pw trybie wstawiania wkleiłoby wcześniej szarpane elementy / linie.


0

Po prostu dodaj mapę:

" ~/.vimrc
inoremap <c-p> <c-r>*

uruchom ponownie vima i po naciśnięciu Crtl+pw trybie wstawiania skopiowany tekst zostanie wklejony

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.