blog · git · desktop · images · contact & privacy · gopher
2020-06-20
gVim hat zwei besondere Register, "*
und "+
, die den X11-Selections
PRIMARY und CLIPBOARD entsprechen. Ich mutmaße, dass die meisten Leute
das (oder die Maus) verwenden. Wie bei X11-Selections üblich, sind sie
nicht mehr verfügbar, sobald die Anwendung beendet wird. Eine
Möglichkeit, damit umzugehen, sind dann Clipboard-Manager.
Eine andere Variante ist, explizit zu forken und einen Prozess zurückzulassen, der die Selection hält. Das ist im Wesentlichen, was xclip tut. Hat auch den Vorteil, dass das mit einem „normalen“ Vim funktioniert, braucht also keinen gVim.
Diese Key-Bindings habe ich in meiner ~/.vimrc
:
nmap <Leader>xc :call X11Copy()<CR>
vmap <Leader>xc "xy:call X11CopyRegister('x')<CR>
nmap <Leader>xp :call X11PasteClipboard()<CR>
nmap <Leader>xP :call X11PastePrimary()<CR>
Wenn Text im Visual-Modus selektiert ist, kann ich ,xc
drücken, um ihn
ins X11 CLIPBOARD zu kopieren. ,xc
ohne aktive Auswahl kopiert die
ganze Datei. ,xp
ist entsprechend zum Pasten.
Die Funktionen sehen dann so aus:
fun! X11Copy()
silent %w !setsid xclip -selection clipboard
endfun
fun! X11CopyRegister(reg)
let l:ignore = system('setsid xclip -selection clipboard', getreg(a:reg))
endfun
fun! X11PasteClipboard()
r !xclip -selection clipboard -o
endfun
fun! X11PastePrimary()
r !xclip -o
endfun
setsid
erzeugt eine neue Session, aber vor allem auch eine neue
Process Group, damit mein xclip nicht durch ein SIGHUP
gekillt
wird, wenn man das Terminal unerwartet schließt.
Es hat eine Weile gedauert, bis ich herausgefunden hatte, wie man
korrekterweise Text aus dem Visual-Modus kopiert. Da muss man ein
bisschen tricksen, weil man natürlich nur das kopieren will, was auch
sichtbar markiert ist. Der Workaround besteht darin, das zuerst ins
Register "x
zu kopieren und dann dessen Inhalt an xclip zu senden.
(Naive Ansätze bringen einen schnell zu :'<,'>
, was aber zeilenbasiert
arbeitet.)
,xc
und ,xp
sind nur meine persönliche Präferenz. Mir gefällt daran,
dass sie sich klar von den normalen Key-Bindings für Register
unterscheiden. Man ist sich dann definitiv gewahr, dass man es jetzt mit
X11-Selections zu tun hat.