Kann vim standardmäßig die Systemzwischenablage (n) verwenden?

73

Ich habe mehrere Probleme, weil die Registerkarten von vim, mangels eines besseren Begriffs, schrecklich sind. Ich möchte stattdessen mehrere Gnome-Registerkarten mit jeweils einer anderen Instanz von vim verwenden. Alles sollte gut funktionieren, jedoch kann nur der Systempuffer +zum Teilen von Text verwendet werden. Dies verlängert alle Befehle um zwei Tastenanschläge:

y y wird " + y y

y w wird " + y w

d ' k wird " + d ' k

Dies ist besonders dann der Fall, wenn man bedenkt, dass eine einfache Ruck / Paste-Operation so ist

y y p

wird

" + y y " + p

Gibt es eine Möglichkeit, vim anzuweisen, immer die System-Zwischenablage (n) zu verwenden?

EDIT sehen hier für weitere Informationen mehrere Instanzen von vim über Gnome - Terminal Tabs zur Verwendung von

puk
quelle
2
Wer auch immer dafür gestimmt hat, dies zu schließen, können Sie bitte klarstellen, warum Sie dies für keine gute Frage halten.
Puk
Können Sie erklären, warum Sie die Registerkarten von vim nicht mögen? Einige Leute empfehlen auch nicht, mehr als eine Vim-Instanz zu haben: Ein Vim ... nur eine
mMontu
@mMontu Ich möchte nicht 1 Puffer / Tab, aber ich möchte trotzdem in der Lage sein, meine Puffer in verschiedenen Tabs zu gruppieren. Vim erlaubt das nicht. Alle Puffer sind global. Ich diskutiere es hier stackoverflow.com/questions/8756459/…
puk
1
@puk: Warum müssen Sie Vims Tabs als "gottesfürchtig" oder "nutzlos" bezeichnen, nur weil sie nicht zu Ihrem eigenwilligen Workflow passen? Sie sind offensichtlich nützlich; Eine große Anzahl von Benutzern verwendet und verwendet gerne die Registerkarten von Vim, um die Bearbeitung zu vereinfachen. Trotzdem wäre es ein interessantes Projekt, ein Plugin zu schreiben, das Funktionen hinzufügt, die Sie in anderen SO-Fragen beschreiben. Beispielsweise könnte jede Registerkarte eine t:buffersVariable zum Speichern der Pufferliste für jede Registerkarte haben, und eine tabbuffersNavigation und andere Operationen könnten mit Einschränkung auf Puffer nur in der t:buffersListe einer Registerkarte erstellt werden .
Herbert Sitz
2
Nein, es ist wahr, Vim passt nicht nur ohne Anstupsen in den heutigen Standard-Workflow, und die Probleme sind für Menschen, die das Programmieren gelernt haben, nachdem die Dinge aufgehört haben, wirklich wirklich schrecklich zu sein, gottesfürchtig.
James

Antworten:

97

Ich habe hier eine Lösung für mein Problem gefunden . Wenn Sie Ihrer .vimrc-Datei Folgendes hinzufügen

set clipboard=unnamedplus

Alles, was Sie in vim ziehen, wird in das unbenannte Register verschoben und umgekehrt.

puk
quelle
3
Ich habe Ihnen diese Antwort bereits in einer Ihrer vorherigen Fragen gegeben.
Romainl
Ich habe es dir nicht bewusst gestohlen. Ich habe die Inspiration bekommen, nach dieser Lösung von einer ähnlichen Lösung zu suchen, die ich hier gesehen habe stackoverflow.com/a/1372546/654789
puk
14
Oder "set clipboard = unbenannt" auf einem Windows-Computer.
Zbstof
1
Beachten Sie, dass dies keine perfekte Lösung ist. Wenn Sie eine Zeile außerhalb von vim kopieren, ist dies nicht dasselbe wie das Ziehen yy. Wenn Sie sie einfügen p, wird sie an Ort und Stelle eingefügt, nicht in der nächsten poder vorherigen PZeile
puk
11
Ich glaube, Sie können beide gleichzeitig verwenden, wie : set clipboard=unnamed,unnamedplus. Allerdings muss VIM mit + X11, + Zwischenablage und + xterm_clipboard erstellt werden. Unter Windows geht es vermutlich standardmäßig so.
Alex
5

Übrigens, wenn Sie nur die native Kopier- / Einfügebehandlung des Terminals verwenden möchten, schlagen Sie die Einstellung vor

:se mouse-=a

und doppelklicken Sie einfach mit der rechten Maustaste, wie Sie es in Ihrem Terminal gewohnt sind.

Das heißt, ich liebe vim geteilte Fenster und die Tatsache, dass Sie die Maus verwenden können, um Fensterteiler zu ziehen / den Cursor zu positionieren ( Häresie! ). Das erfordert Maus + = a ... (und funktioniert auch über SSH / Screen-Sitzungen!).

Ich bin es gewohnt, stattdessen solche Dinge zu tun:

:%retab|%>|%y+|u

und haben solche Befehle beim Rückruf. Beachten Sie, dass das Register "+" in der Befehlszeile codiert ist. Um die letzte visuelle Auswahl in die Zwischenablage zu kopieren,

:*y+

oder

:'<,`>y+ 
sehe sehen
quelle
Können Sie bitte etwas genauer erklären, was das :se mouse-=abedeutet? Persönlich bin ich kein großer Fan der Fenster, ich bevorzuge die Puffer. Puffer> Fenster >>> Tabs
Puk
@puk: Ich habe angefangen, Windows für Diffmode + Quickfix zu schätzen. Ich fing an, Registerkarten für mehrere Diff-Sets (z :tabedit a|vert diffsplit b. B. ) zu schätzen . Ich benutze :set guioptions=agim switchbuf=usetab. Um die UI-Sauberkeit und Langsamkeit zu entfernen
siehe
Nachdem ich lange Zeit getan habe, was Sie vorschlagen, empfehle ich die Antwort von puk von oben:set clipboard=unnamed[plus]
Milimetric
@ Millimetric Ich bin auf meine Art eingestellt (ich verlasse mich auf separate Zwischenablagen und hasse nicht standardmäßige Einstellungen in meinem vim - zu viele verschiedene Systeme). Aber : Auf Ihre Empfehlung hin werde ich es für ein paar Wochen ausprobieren. Prost
sehe
2

Mögliche Problemumgehung:

"Ctrl-c to copy in + buffer from visual mode
vmap <C-c> "+y

"Ctrl-p to paste from the + register in cmd mode
map <C-v> "+p

"Ctrl-p to paste from the + register while editing
imap <C-v> <esc><C-v>
Vincenzo Pii
quelle
2
Ich dachte an das, aber dann würden Sie eine neue Verknüpfung für benötigen yw, y{, y}, y%, D...
puk
1
Ich fand eine Tastatur mit gerade genug Tasten rlv.zcache.com/…
puk
1
Wenn Sie diese Lösung verwenden möchten, sollten Sie vnoremap, noremap bzw. inoremap verwenden.
Kimball Robinson