Kopiowanie tekstu poza Vimem z ustawioną myszą = włączone

232

Po włączeniu set mouse=atekst skopiowany w Vimie nie będzie wklejany poza Vimem. Czy ktoś wie, jak to naprawić?

W tym przypadku zaznaczanie tekstu myszą włącza tryb wizualny i wyłącza Copyopcję w menu podręcznym:

wprowadź opis zdjęcia tutaj

lyuba
źródło
2
Jeśli Vim został skompilowany z +clipboarda mouse=a, będzie można skopiować / wklej z / do vim bez użycia terminala menu podręczne. Możesz sprawdzić, czy clipboardmożna używać vim --version.
Jérôme Pouiller,
@Jezz Warto wyjaśnić, że A) mouse=anie jest opcją kompilacji, jest czymś w vimrc B) Kiedy vim został skompilowany +clipboard, pozwala na kopiowanie / wklejanie, gdy :set numberjest włączony, i bez kopiowania / wklejania liczb, chociaż być może nadal musisz coś zrobić mapowania C) Nie trzeba samodzielnie kompilować VIM-a, może on być włączony w vimie na niektórych menedżerach pakietów obsługiwanych przez jakikolwiek system operacyjny. Moja odpowiedź wspomina o tym osx.
barlop
Być może instalacja xseldziała również dla Ciebie, możesz wybrać tekst za pomocą edytora lub myszy i nacisnąć, ctrl+caby skopiować tekst, tak przy okazji, dla neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi

Odpowiedzi:

426

Naciśnij shiftpodczas wyboru za pomocą myszy. To sprawi, że wybór myszy będzie zachowywał się tak, jakby mouse=anie został włączony.

Uwaga: ta sztuczka dotyczy także „wklejania środkowego przycisku”: jeśli chcesz wkleić tekst vim, który został wybrany na zewnątrz, naciśnij shiftpodczas klikania środkowego przycisku. Po prostu upewnij się, że tryb wstawiania jest włączony, gdy to zrobisz (możesz także chcieć :set pasteuniknąć nieoczekiwanych efektów).

OS X (mac): przytrzymaj alt / opcję podczas wybierania ( źródło )

François
źródło
2
OK, to jest rzeczywiście rozwiązanie. Ale co, jeśli chcesz wybrać dużo kodu, który jest większy niż na ekranie? (następnie musisz przewinąć i wybrać jednocześnie)
Ozkan,
3
Istnieje również opcja użycia wyboru bloku, naciskając <kbd> ctrl </kbd> + <kbd> shift </kbd> + lewy przycisk myszy, aby rozpocząć wybór bloku. Środkowy przycisk myszy wkleja skopiowane treści do innego okna.
micrub
6
Jeśli masz numery linii (jak pokazuje zrzut ekranu), to przy wybieraniu za pomocą ALT na Mac OS X numery linii są również kopiowane. W tym przypadku lepiej jest użyć ALT + CMD podczas wybierania trybu wyboru bloku, aby uniknąć wybierania liczb.
Aaron
16
Dla Mac terminalu, po OS X 10.11 El Capitan , Fnkluczem jest właściwa droga. To znaczy, (z mouse=awłączonym) zaznaczaniem tekstu podczas naciskania Fnklawisza, a następnie użyj CMD + C, aby skopiować i wkleić w dowolnym miejscu.
YaOzI
1
Nie wiem, jak ta odpowiedź ma tak wiele pozytywnych opinii. Jeśli włączyłeś obsługę myszy, aby uniknąć kopiowania numerów linii, ta sugestia jest całkowicie bezużyteczna.
Stelios Adamantidis
49

Zastosowanie ", +, ypo dokonaniu selekcji wizualnej. I tak nie powinieneś używać polecenia kopiowania terminala, ponieważ kopiuje to, co terminal widzi zamiast rzeczywistej zawartości. Oto, co to robi:

  • ", +mówi Vimowi, aby używał rejestru nazwanego +do następnego usunięcia, szarpnięcia lub wprowadzenia. Rejestr o nazwie +jest rejestrem specjalnym, jest to rejestr schowka X11. (W innych systemach, *zamiast tego użyłbyś, jak sądzę, zobacz :help clipboardi :help x11-selection)
  • y to polecenie yank, które każe Vimowi umieścić zaznaczenie w rejestrze o nazwie poprzedniej.

Możesz to zmapować w następujący sposób:

:vmap <C-C> "+y

Następnie zaznacz coś za pomocą myszy i naciśnij, Control-Caby je skopiować.

Ta funkcja działa tylko wtedy, gdy Vim został skompilowany z +xterm_clipboardopcją. Uruchom, vim --versionaby dowiedzieć się, czy ma.

Josh Lee
źródło
4
Lub ewentualnie w "*yzależności od systemu operacyjnego.
frabjous
To się udało! Jednak kombinacja jest dość złożona, właściwie 4 przyciski .. Prawdopodobnie muszę odwzorować drugi, używając „shift” z drugiej odpowiedzi.
lyuba
Mapowanie działa również doskonale :) Teraz nie wiem, którą z odpowiedzi powinienem oznaczyć jako zaakceptowany :)
lyuba
2
Dla mnie jest to lepsze rozwiązanie niż zaakceptowana odpowiedź, ponieważ przy tej metodzie numery linii nie są kopiowane.
Saulo Silva
Co +clipboard? A co +clipboardz xterm_clipboardwyłączeniem?
barlop
18

Zamiast set mouse=aużywać set mouse=rw .vimrc

Nefeline
źródło
1
Ale wyłącza przewijanie
Makesh
3
Proszę powiedz dlaczego. Na pierwszy rzut oka wydaje się, że jest to w zasadzie to samo, co całkowite wyłączenie trybu myszy, co nie jest pytaniem.
Mikel
@Mikel racja, patrz moja odpowiedź, również może pomóc odpowiedź Josha Lee
barlop
Niestety spowoduje to również skopiowanie numerów linii, jeśli są one włączone.
vikin9,
17

Na OSX użyj fnzamiast shift.

ssasa
źródło
pracował dla mnie z optionkluczem, który jest altkluczowym odpowiednikiem na hoście MacOS. Był to jednak zdalny terminal na debian9. nie pracował przez dodanie jednej z set mouse=a/ set mouse=rw /etc/vim/vimrcna pilocie.
mrtipale
5

W Ubuntu można używać X-Term powiązań kopiuj i wklej w VIM (Ctrl-Shift-C i Ctrl-Shift-V) na tekście, który został podświetlony za pomocą klawisza Shift.

Marc Gibbons
źródło
4

Inną opcją OSX-Mac jest odznaczenie View->Allow Mouse Reporting (lub naciśnięcie ⌘-R, aby przełączyć). Pozwala to na przełączanie między interakcją myszy a wyborem myszy, co może być przydatne podczas wybierania i kopiowania / wklejania kilku bitów, ponieważ nie masz aby przytrzymać klawisz modyfikatora, aby to zrobić.

Uwaga dla Multilinii z numerami linii:

Zwykle mam włączone numery linii, więc to również skopiuje numery linii, jeśli wybierzesz wiele linii. Jeśli chcesz skopiować wiele linii bez numerów linii, wyłącz numery za pomocą, :set nonua następnie możesz je :set nuponownie włączyć po zakończeniu kopiowania.

reor
źródło
1

Możesz użyć :set mouse&w linii poleceń vim, aby włączyć kopiowanie / wklejanie tekstu zaznaczonego za pomocą myszy. Następnie możesz po prostu użyć środkowego przycisku myszy lub shiftinsertwkleić go.

Madhu
źródło
Następnie, gdy masz :set number, podświetla liczby. Więc niewiele dobrego. set mouse=a
Cofniesz
1

Częścią problemu są ustawienia kompilacji, z którymi vim został skompilowany. vim --versionpokazuje te.

W OSX domyślny vim ma -clipboard Ale potrzebujesz+clipboard

Na OSX możesz i najwyraźniej ogólnie powinieneś używać Macvima. Można to zrobić brew cask install macvim , że trzeba +clipboard.

Będziesz miał dwa vima.

~$ ls -l /usr/bin/vim   <--- default vim
-rwxr-xr-x  1 root  wheel  1745984 15 Jul  2017 /usr/bin/vim

~$ ls -l /usr/local/bin/vim   <-- macvim, installed recently via that mentioned brew line. 
lrwxr-xr-x  1 apple  admin  42 16 May 23:32 /usr/local/bin/vim -> /Applications/MacVim.app/Contents/bin/mvim
~$ 

Uruchamianie vima uruchomi macvima, ponieważ /usr/local/binpowinno być wcześniej /usr/binna ścieżce, choć możesz to sprawdzić za pomocą which vim.

Uruchamianie vima (aby uruchomić Macvima), jest w porządku, ale możesz chcieć odwzorować vi na macvim, ponieważ w przeciwnym razie uruchomienie vi pozostaje na domyślnym vimie! Możesz przepisać lub usunąć (za pomocą rm) i ponownie utworzyć łącze vi sym za pomocą ln. Aby to zrobić bez błędu „operacja niedozwolona”, musisz (tymczasowo) wyłączyć SIL. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-aka-rootless-on-macos-os-x .

macvim ma, +clipboardjak pokazano przezvim --version

Oto praca ~/.vim/vimrcz tylko wymaganymi liniami.

:set mouse=a
:map <leader>c "+y
:map <leader>v "+p

Domyślny klucz wiodący to ukośnik odwrotny.

Przeczytałem sugestię, że należy użyć klawisza wiodącego .. (z pewnością kontrola ma już wiele używanych kluczy, więc sugerowano, aby nie używać kontroli. Nie wiem, czy dotyczy to również klawisza polecenia, ale w każdym razie).

Dzięki wspomnianemu mapowaniu \czrobi to, "+yco skopiuje z rejestru znanego jako +, do schowka. I\v wklei z rejestru znanego jako +.

To jest kopia / wklej, która działa między oknami.

Może wymagać innego systemu operacyjnego "*niż"+

barlop
źródło
Oba vims mają -xterm_clipboard. Być może +xterm_clipboardbyłoby to w jakiś sposób korzystne, ale nie ma znaczenia dla tego rozwiązania.
barlop
0

Jeśli używasz sesji Putty, to automatycznie kopiuje zaznaczenie. Jeśli użyliśmy opcji „ustaw mysz = a” w vimie, wybranie za pomocą Shift + przeciągnięcie myszą automatycznie zaznacza tekst. Musisz sprawdzić w X-term.

Amitesh Anand
źródło
0

em ... Naciskaj przycisk, Shifta następnie kliknij prawym przyciskiem myszy

levinit
źródło
0

Przypadkowo wyjaśniłem, jak wyłączyć set mouse=a, kiedy ponownie przeczytałem pytanie i dowiedziałem się, że OP nie chciał go wyłączyć. W każdym razie dla każdego, kto szuka sposobu set mouse=centralnego wyłączenia myszy ( ), zostawiam odniesienie do mojej odpowiedzi tutaj: https://unix.stackexchange.com/a/506723/194822

Holger Böhnke
źródło
0

Trzymanie zmiany podczas kopiowania i wklejania z zaznaczeniem działało dla mnie

Tito Kipkurgat
źródło
Tak mówi zaakceptowana odpowiedź . Aby podziękować użytkownikowi - gdy uzyskasz taką reputację, będziesz mógł głosować na jego wpis.
Wai Ha Lee
0

Dodaj set clipboard=unnamed do swojego .vimrc. Będzie więc używał rejestru schowka „*” zamiast rejestru bez nazwy dla wszystkich operacji szarpania, usuwania, zmiany i wstawiania (pamiętaj, że nie wpływa to tylko na mysz).

Zachowanie rejestru „*” zależy od platformy i tego, w jaki sposób vim jej skompilowania (lub korzystania z niej)neovim ).

Jeśli to nie działa, możesz spróbować set clipboard=unnamedplus, ale ta opcja ma sens tylko w systemach X11.

Jérôme Pouiller
źródło
-3

W trybie ESC, gdy ustawisz mysz = a, zaznacz tekst za pomocą myszy. Pozwoliłoby to włączyć tryb wizualny w vimie. Następnie możesz nacisnąć „y”, aby szarpnąć zaznaczony tekst i „p”, aby go wkleić w dowolnym miejscu. Dzieje się tak tylko w vimie.

Avishek
źródło
nie, to nie zadziała, gdy wkleisz poza
vimem