Copy to clipboard from terminal with Vim bindings
Question
How do I copy to clipboard from terminal with yy
, assuming it's configured to use Vim bindings?
I am using zsh with bindkey -v
.
MWE
- Enter something on the commandline (without pressing enter):
$ uptime
. - Enter visual mode:
ESC
. - Yank:
yy
.
This successfully yanks uptime\n
, but only copys to the primary
buffer. I'd like to copy to the secondary (clipboard) buffer.
2 answers
I use kitty as my terminal, which allows you to map a key for copying any text from the screen to the keyboard. The text is selected by pressing some hint keys, similar to the Vimium extension. It's quite flexible but I mostly use "copy line" and "copy word".
This just works with clipboard managers like CopyQ, courtesy of Kitty supporting modern clipboards. This is not specific to vim, it's a general feature for anything that runs in the terminal, which vim happens to be. It's convenient enough that I haven't bothered setting up the vim clipboard integration since it stopped working a while ago.
0 comment threads
Vim has multiple "registers", which in modern parlance is multiple internal clipboards.
By default, y
ank sends to an anonymous register, which is separate from the clipboard. However, you can make it send to other registers. The registers *
and +
in particular are interesting, because they happen to be connected to the system clipboard that most people use.
So all you do is yank to a non-default register: "*y
And you can paste from the same with "*p
.
You might want to make that behavior the default for yy
- you can do so with set clipboard=unnamed,unnamedplus
. On Linux with X, one of these is for the "normal" clipboard, the other is for the select-and-middle-click clipboard.
See also:
- https://wiki.archlinux.org/title/Vim#Clipboard
- https://vim.fandom.com/wiki/Accessing_the_system_clipboard
- https://stackoverflow.com/a/3961954/21703684
0 comment threads