Wkleić w trybie wstawiania?

385

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

Amir Rachum
źródło

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

David
źródło
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 .

James Snyder
źródło
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.

JaredPar
źródło
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

Zaz
źródło
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.

klimat
źródło
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”).

Będzie
źródło
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).

lcltj
źródło
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.

rudolph9
źródło
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.

Programista Windows
źródło
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.

Sheharyar
źródło
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

itsnikolay
źródło