Answers:
对于基于X11的系统(即Linux和大多数其他类似UNIX的系统),有两个彼此独立的剪贴板:
^C
并粘贴^V
(类似于MS Windows)。OS X和Windows系统只有一个剪贴板。
对于X11系统,还有许多工具可以为您同步这些剪贴板。因此,如果它们看起来相同,则可能其中之一正在运行。
Vim有两个对应于这些剪贴板的特殊寄存器:
*
使用PRIMARY; 记忆:小号焦油是小号选(复印-ON- 小号选)+
使用CLIPBOARD;助记符:CTRL PLUS C(用于公用键绑定)在Windows和OS X上,+
和之间没有区别*
,因为这些系统只有一个剪贴板,并且两个寄存器都引用相同的东西(使用哪个都无所谓)。
您可以将这些寄存器用作任何寄存器。例如,使用主剪贴板*
与y
和p
命令:
"*yy
"*p
您可以将其用作更方便的键绑定:
noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p
如果要“自动”与系统剪贴板交互,而不是一直手动引用它,则可以设置clipboard
变量:
unnamed
为使用*
(PRIMARY,选择)unnamedplus
为使用+
(CLIPBOARD,^C
)现在,只需使用yy
将转到系统的剪贴板,而不是Vim的未命名寄存器,p
并将粘贴系统的剪贴板。
您还可以像使用以下任何寄存器一样分配这些寄存器let
:
:let @+=42
:let @*=42
该clipboard
设置还有更多选项(例如排除过滤器);但是这些是基础。参见:help 'clipboard'
全文;-)
如果使用gVim,则使用时会出现选择时复制的行为
:set guioptions+=a
。
默认情况下在X11系统上启用此功能(复制到PRIMARY),而在MS Windows和OSX上则不启用(因为选择任何文本都将覆盖剪贴板)。
+clipboard
吗Vim需要+clipboard
功能标记才能使其中任何一个起作用。你可以检查你的Vim有这种通过:echo has('clipboard')
从Vim(如果输出是0
,它不存在,如果是1
,它是),或检查的输出
vim --version
进行+clipboard
。
大多数Linux发行版默认都带有“最小”的Vim构建,它没有+clipboard
,但是您通常可以安装它:
vim-gtk
或vim-gnome
。vim-X11
并运行,vimx
而不是vim
(更多信息)。gvim
(这也将+clipboard
正常启用vim
)。您也可以使用xclip
,xcopy
或xsel
将文本复制到剪贴板。请参阅以下问题以获取解决方案:
如果启用通过SSH的X11转发,还可以在远程计算机上使用剪贴板。这对上面的技巧特别有用,因为您可以随后使用它
xclip
来访问桌面的剪贴板。您要交换的计算机上的Vim仍将需要该+clipboard
功能。
这需要进行ForwardX11Trusted
设置,并且仅应在受信任的服务器上完成,因为这使服务器可以对X11会话进行几乎完全的控制:
$ ssh -XY myhost
要使这些设置持久化(因此您不必-XY
每次都添加),可以在您的代码中执行以下操作~/.ssh/config
:
# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
ForwardX11 yes
ForwardX11Trusted yes
Neovim改进了剪贴板支持。内置的界面中除去,并用该调用外部工具,如系统所取代xclip
,xsel
或
pbcopy
/ pbpaste
。
它应该自动选择并使用这些实用程序。在OS X上pbcopy
,pbpaste
默认情况下应该可用,在Linux上,您可能想安装它xclip
,因为它是使用最广泛的(实际上有两个
版本xsel
带有不兼容的标志。这确实很愚蠢)。
另请参阅:help clipboard
Neovim。
"<Space>
以获得一个"
。因此,在这种情况下,您将必须按"<Space>+y
或"<Space>*y
进行复制。
"
可以选择许多命名寄存器的实现。"+
不是魔术,只是注册+
。因此,举例来说,如果你想在同一时间复制三件事情,并通过一个,你可以一个他们每个人的粘贴"1y
,"2y
以及"3y
后来"1p
,"2p
和"3p
。在几乎所有其他编辑器中,它确实功能强大且不存在。另一个有趣的用法是查看存储的宏。例如,如果使用进行录制qq
,但您意识到需要修复它,则可以:在临时行"qp
中修复它,然后进行修改"qd
。
从http://vim.wikia.com/wiki/Accessing_the_system_clipboard
set clipboard=unnamedplus
这会将默认的Vim寄存器更改+
为链接到系统剪贴板的寄存器。来自:h clipboard-unnamedplus
:
clipboard-unnamedplus
unnamedplus A variant of the "unnamed" flag which uses the
clipboard register '+' (quoteplus) instead of
register '*' for all yank, delete, change and put
operations which would normally go to the unnamed
register. When "unnamed" is also included to the
option, yank operations (but not delete, change or
put) will additionally copy the text into register
'*'.
Only available with the +X11 feature.
Availability can be checked with:
if has('unnamedplus')
:version
在Vim 中使用来查看+ X11是否出现在包含的功能列表中。您还可以通过以下方法检查“ unnamedplus”功能是否可用: :if has('unnamedplus')⏎ echo 'yes'⏎ endif
如果您不在Linux上,则应使用unnamedplus代替unnamedplus。
您也可以使用全局命令在剪贴板上放置一些特定的图案。在您将信息分散在文件中并且手动处理容易出错和累人的情况下,此功能很有用。
首先清理将接收信息的寄存器
:let @a=""
然后将包含该模式的所有行复制到该行
:g/pattern/yank A
最后将信息转移(复制)到系统剪贴板
:let @+=@a
如果您尝试将包含“模式”的每一行直接复制到剪贴板,则将无法正常工作,因为剪贴板不具有附加新内容的功能,因此我们在此处使用普通的vim寄存器来存储包含该行的所有行。立即将其放入剪贴板中。
OBS:必须先使用寄存器,然后再使用它,并且使用UPPERCASE版本的寄存器允许我们附加内容,否则它也将不起作用。
如果您+clipboard
由于某种原因无法弄清楚如何上班,则可以执行此操作。
假设您只想复制文件的一部分,那么我进入shift
+ v
进入可视模式,并且只突出显示要复制的行。那我做
# Linux Wayland
:'<,'>w !wl-copy
# Linux Xorg
:'<,'>w !xclip -selection clipboard
说明
'<,'>
-表示您使用视觉模式选择了一个范围(您无需输入)w !{cmd}
-将范围写入标准输入cmd
,请参阅:help w_c
wl-copy
并且xclip
,你可以管的文本,他们就会把它添加到您的系统剪贴板程序同样,一旦这成为您的历史记录,您就不必再次输入整个内容。只需在可视模式下进行选择,w
然后键入然后按向上即可执行命令。另外,您也不必使用可视模式。您可以设置任意范围。