it-swarm.com.de

Fixieren Sie Vim + Tmux Yank / Paste in einem unbenannten Register

Während ich vim in einer tmux-Sitzung verwende, kann ich nicht in das unbenannte Register ziehen oder einfügen. In ein benanntes Register zu gehen funktioniert einwandfrei, aber unbenannt funktioniert nie.

Fehler ist:

E353: Nothing in register *

Ohne tmux funktioniert vim mit meinen aktuellen Einstellungen einwandfrei. Wie behebe ich das, damit ich es verwenden kann? y dann p ohne Fehler und ohne Angabe des Registers?

65
Jason

Aus der Fehlermeldung (Nothing in register *) geht hervor, dass, wenn Sie eine Ebene tun? pname__, Ihre Instanz von Vim verwendet das * -Register anstelle des nbenannten Registers*. Dies liegt wahrscheinlich daran, dass Ihre Option clipboardNAME_ den Wert unnamedenthält. Wenn Vim auf diese Weise konfiguriert ist, wird das * -Register anstelle des unbenannten Registers standardmäßig für Operationen zum Ziehen, Löschen, Ändern und Platzieren verwendet (dh es sei denn, Sie geben ein anderes Register mit dem Präfix " an, z. B. "ap aus dem Register asetzen).

* Das unbenannte Register heißt tatsächlich " (doppeltes Anführungszeichen). Es ist nur "unbenannt" in dem Sinne, dass Sie es nicht benennen müssen, um es zu verwenden (es ist die Standardeinstellung). Das heißt Sie müssen nicht ""p sagen, um aus dem unbenannten Register nur pzu setzen.

Der Standardwert von clipboardenthält nicht unnamedname__, daher stammt er wahrscheinlich aus einem Teil Ihrer Konfiguration (oder einem Plugin). Der Befehl :verbose set clipboard? zeigt Ihnen das Skript, das den aktuellen Wert festlegt. Wenn dies in Ihrer Konfigurationsdatei ausgeführt wird, möchten Sie dies möglicherweise nicht, wenn Sie unter tmux ausgeführt werden. Z.B:

if $TMUX == ''
    set clipboard+=unnamed
endif

Alternativ kann es eine Möglichkeit geben, Instanzen von Vim-inside - tmux auf die GUI-Auswahl/Zwischenablage zuzugreifen (arbeiten Sie also mit dem Register * und/oder unnamedin clipboardname__). Wenn Sie Mac OS X ausführen, sollten Sie sich mein Workaround-Wrapper ansehen, mit dem der Zugriff auf die Zwischenablage für Prozesse, die in einer tmux -Sitzung ausgeführt werden, wieder aktiviert wird. Wenn Sie ein anderes Betriebssystem oder eine andere GUI verwenden, müssen Sie herausfinden, wie Vim normalerweise mit der GUI kommuniziert und warum dies nicht funktioniert (z. B. falscher DISPLAY-Wert unter X11, möglicherweise aufgrund der Verbindung zu einer alten Sitzung, die ausgeführt wird) eine Shell mit einem veralteten Wert).

101
Chris Johnsen

In vim/tmux/osx funktioniert Folgendes für mich:

  1. Installiere Homebrew
  2. Installieren Sie den Benutzer-Namespace erneut: brew install reattach-to-user-namespace
  3. in .vimrc: set clipboard=unnamed
  4. Teilen Sie tmux mit, die Zwischenablage des Systems zu verwenden: In .tmux.conf: set-option -g default-command "reattach-to-user-namespace -l bash"

Quelle: https://coderwall.com/p/j9wnfw

49
akofink

Das fakeclip plugin bewirkt, dass sich das Register der Zwischenablage in vielen Terminals wie erwartet verhält und tmux/screen unterstützt. Benutzt du es? Es kann Ihr Problem beheben.

Möglicherweise interessieren Sie sich auch für diesen Tipp ... Er ist nicht auf Ihre Frage anwendbar, aber verwandt. Abhängig von der Art des Systems/Terminals, in dem Sie tmux ausführen, benötigen Sie möglicherweise einige Anpassungen in Ihrem .tmux.conf. Hier ein Beispiel von meinem .tmux.conf unter OS X (mit einigen Anweisungen in Kommentaren):

# To use pbcopy and pbpaste on OS X, get this wrapper and install
#    git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git
#    cd tmux-MacOSX-pasteboard/
#    make reattach-to-user-namespace
#    mv reattach-to-user-namespace /usr/local/bin
# After installing, the default command can be reset to use the 'reattach-to-user-namespace' 
# wrapper that was compiled/installed as descripted above.
set -g default-command "reattach-to-user-namespace -l /bin/bash"
# #Next, create Ctrl-c and Ctrl-v mappings
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy"
bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste-buffer"
4
darcyparker

So fügen Sie der akzeptierten Antwort einige Notizen aus meiner Erfahrung mit OSX hinzu:

  • Stellen Sie sicher, dass Sie set clipboard=unnamed und nicht set clipboard=unnamedplus tun.
  • Ich musste meinen tmux-Server ($ killall tmux oder $ tmux kill-session -a) beenden. Beim erneuten Laden der tmux-Konfigurationsdateien wurde angezeigt, dass der Standardbefehl gesetzt wurde, vim jedoch keinen Zugriff auf die Systemzwischenablage gewährte.
0
nbwoodward

Späte Antwort, aber es könnte auch sein, dass Ihr .tmux.conf die folgende Zeile enthält:

set -g set-clipboard off

kombiniert mit einem .vimrc enthaltenden

set clipboard=unnamed

dies führt dazu, dass vim versucht, eine Zwischenablage zu verwenden, die nicht vorhanden ist.

0
Beat Richartz