Kopieren von Text außerhalb von Vim mit gesetzter Maus = a aktiviert


232

Nach dem Aktivieren set mouse=awird innerhalb von Vim kopierter Text nicht außerhalb von Vim eingefügt. Kennt jemand einen Weg, dies zu beheben?

Wenn Sie hier mit der Maus Text auswählen, wird der visuelle Modus aktiviert und die CopyOption im Popup-Menü deaktiviert :

Geben Sie hier die Bildbeschreibung ein


2
Wenn Ihr vim mit +clipboardund kompiliert ist mouse=a, können Sie von / nach vim kopieren / einfügen, ohne das Terminal-Popup-Menü zu verwenden. Sie können überprüfen, ob clipboarddie Verwendung mit aktiviert ist vim --version.
Jérôme Pouiller

@Jezz Es lohnt sich zu verdeutlichen, dass A) mouse=akeine Kompilierungsoption ist, sondern etwas in vimrc. B) Wenn vim damit kompiliert wurde +clipboard, können Sie kopieren / einfügen, wenn :set numberes aktiviert ist, und ohne die Zahlen kopieren / einfügen , obwohl Sie möglicherweise noch einige tun müssen Zuordnungen C) Man muss VIM nicht selbst neu kompilieren, es kann auf einigen Paketmanagern, die von jedem Betriebssystem unterstützt werden, im vim aktiviert sein. Auf osx hat Brews vim es, obwohl das Standard-vim von osx dies nicht tut. Meine Antwort erwähnt diesen Bericht.
Barlop

Vielleicht xselfunktioniert die Installation auch für Sie. Sie können Text mit dem Editor oder mit der Maus auswählen und ctrl+cdrücken, um Text zu kopieren. Dies gilt übrigens für neovim, github.com/neovim/neovim/issues/7945#issuecomment-361970165
Naeem Baghi,

Antworten:


425

Drücken Sie, shiftwährend Sie mit der Maus auswählen. Dadurch verhält sich die Mausauswahl so, als wäre sie mouse=anicht aktiviert.

Hinweis: Dieser Trick gilt auch für "Einfügen der mittleren Schaltfläche": Wenn Sie Vim-Text einfügen möchten, der außerhalb ausgewählt wurde, drücken Sie, shiftwährend Sie auf die mittlere Schaltfläche klicken. Stellen Sie einfach sicher, dass der Einfügemodus aktiviert ist, wenn Sie dies tun (möglicherweise möchten Sie auch :set pasteunerwartete Effekte vermeiden).

OS X (Mac): Halten Sie die Alt / Option gedrückt, während Sie ( Quelle ) auswählen.


2
OK, das ist in der Tat die Lösung. Aber was ist, wenn Sie viel Code auswählen möchten, der mehr als auf Ihrem Bildschirm angezeigt wird? (dann müssen Sie scrollen und gleichzeitig auswählen)
Ozkan

3
Es gibt auch eine Option zur Verwendung der Blockauswahl durch Drücken von <kbd> Strg </ kbd> + <kbd> Umschalt </ kbd> + linke Maustaste, um die Blockauswahl zu starten. Die mittlere Maustaste fügt kopierten Inhalt in ein anderes Fenster ein.
Micrub

6
Wenn Sie Zeilennummern haben (wie der Screenshot zeigt), werden bei Auswahl mit ALT unter Mac OS X auch die Zeilennummern kopiert. In diesem Fall ist es besser, ALT + CMD zu verwenden, wenn Sie den Blockauswahlmodus auswählen, damit Sie die Auswahl der Zahlen vermeiden können.
Aaron

16
Für Mac - Terminal nach OS X 10.11 El Capitan , FnSchlüssel ist der richtige Weg zu gehen. Dh (mit mouse=aAktivierung) Text auswählen, während Sie die FnTaste drücken , und dann CMD + C verwenden, um zu kopieren und an eine beliebige Stelle einzufügen.
YaOzI

1
Ich weiß nicht, wie diese Antwort so viele positive Stimmen hat. Wenn Sie die Mausunterstützung aktiviert haben , um das Kopieren von Zeilennummern zu vermeiden, ist dieser Vorschlag völlig nutzlos.
Stelios Adamantidis

49

Verwenden Sie ", +, ynach einer visuellen Auswahl. Sie sollten den Kopierbefehl des Terminals sowieso nicht verwenden, da dadurch kopiert wird, was das Terminal anstelle des eigentlichen Inhalts sieht. Hier ist was das macht:

  • ", +weist Vim an, das +für das nächste Löschen, Ziehen oder Setzen genannte Register zu verwenden . Das genannte Register +ist ein spezielles Register, es ist das X11-Zwischenablage-Register. (Auf anderen Systemen würden Sie *stattdessen verwenden, denke ich, sehen :help clipboardund :help x11-selection)
  • y ist der Yank-Befehl, der Vim anweist, die Auswahl in das zuvor genannte Register zu stellen.

Sie könnten es so abbilden:

:vmap <C-C> "+y

Markieren Sie dann etwas mit der Maus und drücken Sie, Control-Cum es zu kopieren.

Diese Funktion funktioniert nur, wenn Vim mit der +xterm_clipboardOption kompiliert wurde . Laufen Sie vim --version, um herauszufinden, ob es hat.


4
Oder möglicherweise "*yabhängig vom Betriebssystem.
Frabjous

Das hat funktioniert! Die Kombination ist jedoch ziemlich komplex, eigentlich 4 Tasten. Wahrscheinlich muss ich die andere zuordnen, während ich "Shift" von der anderen Antwort verwende.
Lyuba

Mapping funktioniert auch einwandfrei :) Jetzt weiß ich nicht, welche der Antworten von euch ich als akzeptiert markieren soll :)
Lyuba

2
Für mich ist dies eine bessere Lösung als die akzeptierte Antwort, da bei dieser Methode Zeilennummern nicht kopiert werden.
Saulo Silva

Was ist mit +clipboard? Und was ist +clipboardmit xterm_clipboardoff?
Barlop

18

Anstelle der set mouse=aVerwendung set mouse=rin .vimrc


1
Aber es deaktiviert das Scrollen
Makesh

3
Bitte sagen Sie warum. Auf den ersten Blick scheint dies im Grunde dasselbe zu sein wie das vollständige Deaktivieren des Mausmodus, was nicht der Punkt der Frage ist.
Mikel

@Mikel richtig, siehe meine Antwort auch Josh Lees Antwort kann helfen
Barlop

Leider werden dadurch auch die Zeilennummern kopiert, wenn sie aktiviert sind.
Vikin9

17

Verwenden Sie unter OSX fnanstelle von shift.


arbeitete für mich mit optionSchlüssel, der altSchlüsseläquivalent auf MacOS-Host ist. Es war jedoch ein Remote-Terminal auf debian9. funktionierte nicht durch Hinzufügen von set mouse=a/ set mouse=rin /etc/vim/vimrcauf der Fernbedienung.
Mrtipale

5

In Ubuntu ist es möglich, die X-Term-Kopier- und Einfügebindungen in VIM (Strg-Umschalt-C & Strg-Umschalt-V) für Text zu verwenden, der mit der Umschalttaste hervorgehoben wurde.


4

Eine weitere OSX-Mac-Option ist das Deaktivieren View->Allow Mouse Reporting(oder Drücken von ⌘-R zum Umschalten). Auf diese Weise können Sie zwischen Mausinteraktion und Mausauswahl wechseln . Dies kann hilfreich sein, wenn Sie einige Bits auswählen und kopieren / einfügen, da Sie keine haben eine Modifikatortaste gedrückt halten, um dies zu tun.

Hinweis für Multiline mit Zeilennummern:

Normalerweise sind Zeilennummern aktiviert, sodass auch die Zeilennummern kopiert werden, wenn Sie mehrere Zeilen auswählen. Wenn Sie mehrere Zeilen ohne die Zeilennummern kopieren möchten, deaktivieren Sie die Nummern mit :set nonuund können Sie :set nusie nach dem Kopieren wieder aktivieren.


1

Sie können :set mouse&in der vim-Befehlszeile das Kopieren / Einfügen von Text aktivieren, der mit der Maus ausgewählt wurde. Sie können dann einfach die mittlere Maustaste verwenden oder shiftinserteinfügen.


Wenn Sie es haben, werden :set numberdann Zahlen hervorgehoben. Also nicht viel Gutes. Sie machen also das Gute rückgängig, das vonset mouse=a
barlop

1

Kompilierungseinstellungen, mit denen vim kompiliert wurde, sind Teil des Problems. vim --versionzeigt diese.

In OSX hat das Standard-Vim -clipboard Aber Sie brauchen+clipboard

Auf osx können und sollten Sie anscheinend generell macvim verwenden. Sie können das tun, brew cask install macvim was man hat +clipboard.

Sie haben zwei Vims.

~$ 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
~$ 

Wenn Sie vim ausführen, wird macvim ausgeführt, da cos /usr/local/binsich /usr/binim Pfad befinden sollte, obwohl Sie dies überprüfen können which vim.

vim ausführen (um macvim auszuführen) ist in Ordnung, aber Sie können vi macvim 'cos zuordnen, andernfalls bleibt das Ausführen von vi auf dem Standard-vim! Sie können den vi sym-Link mit ln neu schreiben oder löschen (mit rm) und neu erstellen. Und um dies ohne den Fehler "Operation nicht zulässig" zu tun, müssen Sie SIL (vorübergehend) deaktivieren. Https://apple.stackexchange.com/questions/208478/how-do-i-disable-system-integrity-protection- sip-aka-rootless-on-macos-os-x .

macvim hat +clipboardwie gezeigt vonvim --version

Hier wird ~/.vim/vimrcnur mit den erforderlichen Zeilen gearbeitet.

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

Der Standard-Führungsschlüssel ist Backslash.

Ich habe einen Vorschlag gelesen, dass man den Leitschlüssel verwenden soll. (Natürlich hat die Steuerung bereits viele Schlüssel verwendet, daher war der Vorschlag, keine Steuerung zu verwenden. Ich weiß nicht, ob dies auch für die Befehlstaste gilt, aber trotzdem).

Mit dieser erwähnten Zuordnung \cwird ausgeführt, "+ywas aus dem als + bekannten Register in die Zwischenablage kopiert wird. Und \vwird aus dem als + bekannten Register eingefügt.

Das ist also ein Kopieren / Einfügen, das zwischen Fenstern funktioniert.

Ein anderes Betriebssystem erfordert möglicherweise "*eher als"+


Beide Vims haben -xterm_clipboard. Vielleicht +xterm_clipboardwäre a in irgendeiner Weise von Vorteil, aber für diese Lösung spielt es keine Rolle.
Barlop

0

Wenn Sie die Putty-Sitzung verwenden, wird die Auswahl automatisch kopiert. Wenn wir in vim die Option "set mouse = a" verwendet haben, wird der Text durch Auswahl mit Umschalt + Maus ziehen automatisch ausgewählt. Müssen in X-Term einchecken.


0

em ... Halten Sie gedrückt Shiftund klicken Sie dann mit der rechten Maustaste


0

Ich habe versehentlich erklärt, wie man abschaltet set mouse=a, als ich die Frage erneut las und herausfand, dass das OP sie überhaupt nicht ausschalten wollte. Für alle, die suchen, wie sie die Maus ( set mouse=) zentral ausschalten können , hinterlasse ich hier einen Verweis auf meine Antwort: https://unix.stackexchange.com/a/506723/194822


0

Das Halten der Umschalttaste beim Kopieren und Einfügen mit Auswahl hat bei mir funktioniert


Dies ist, was die akzeptierte Antwort sagt. Um einem Benutzer zu danken: Sobald Sie einen solchen Ruf haben, können Sie seinen Beitrag verbessern.
Wai Ha Lee

0

Fügen Sie set clipboard=unnamedIhrem hinzu .vimrc. Daher wird das Zwischenablage-Register '*' anstelle des unbenannten Registers für alle Operationen zum Ziehen, Löschen, Ändern und Setzen verwendet (beachten Sie, dass dies nicht nur die Maus betrifft).

Das Verhalten des Registers '*' hängt von Ihrer Plattform ab und davon, wie Ihr vimkompiliert wurde (oder ob Sie es verwenden neovim).

Wenn es nicht funktioniert, können Sie es versuchen set clipboard=unnamedplus, aber diese Option ist nur auf X11-Systemen sinnvoll.


-3

Wenn Sie im ESC-Modus mouse = a setzen, wählen Sie den Text mit der Maus aus. Dies würde den visuellen Modus in vim aktivieren. Dann können Sie 'y' drücken, um den ausgewählten Text zu ziehen, und 'p', um ihn einzufügen, wo immer Sie möchten. Dies geschieht nur innerhalb von vim.


Nein, das funktioniert nicht, wenn Sie außerhalb von vim
barlop
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.