是否可以直接从Vim复制到剪贴板?yy
只将东西复制到Vim的内部缓冲区.我想复制到操作系统的剪贴板.在Vim中有没有这样的命令,或者你只能在Vim中猛拉东西?
该*
寄存器将做到这一点.在Windows中,+
并且*
是等效的.在unix中,+
和之间有一个微妙的区别*
:
在Windows下,*和+寄存器是等效的.但是,对于X11系统,它们有所不同.对于X11系统,*是选择,+是剪切缓冲区(如剪贴板). http://vim.wikia.com/wiki/Accessing_the_system_clipboard
*
可能是你大多数时候都想要的,所以我使用*
它,因为它的功能与我在两种环境中的预期相同.
在Linux发行版中,出于某种原因,您必须首先安装vim-gtk才能获得剪贴板功能.
对于那些在yanking或put时如何使用寄存器感到困惑的人,你只需要写下"
寄存器的名称.因此,要将某些内容复制到剪贴板寄存器,请键入"*y
,然后输入您的类型"*p
在Mac OSX上
复制所选部分:直观地选择文本(类型v
或V
在正常模式下)并键入:w !pbcopy
复制整个文件 :%w !pbcopy
从剪贴板粘贴 :r !pbpaste
在大多数 Linux Distros上,您可以替换:
pbcopy
以上用xclip -i -sel c
或xsel -i -b
pbpaste
使用xclip -o -sel -c
或xsel -o -b
- 注意: 如果您的发行版中没有预安装这些工具(xsel
和xclip
),您可以在回购中找到它们
在vimrc文件中,您可以指定自动使用系统剪贴板进行复制和粘贴.
在Windows上设置:
set clipboard=unnamed
在Linux上设置(vim 7.3.74+):
set clipboard=unnamedplus
注意:您可能需要使用最新版本的Vim才能使用这些版本.
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
使用寄存器"+
复制到系统剪贴板(即"+y
代替y
).
同样,您可以粘贴"+
以从系统剪贴板获取文本(即"+p
代替p
).
@Jacob Dalton在评论中提到了这一点,但似乎没有人在答案中提到vim必须使用剪贴板支持编译,以便提供此处提到的任何建议.默认情况下我没有在Mac OS X上配置我的方式,我不得不重建vim.使用此命令查明您是否拥有它vim --version | grep 'clipboard'
.+clipboard
意味着你很好,这里的建议对你-clipboard
有用,同时意味着你必须重新编译和重建vim.
总结并让新手更容易,
要复制当前行,请在命令模式下键入:
"*yy
要复制整个文件/缓冲区,请在命令模式下首先进入开头gg
,然后键入
"*yG
如上所述,这需要+clipboard
out of vim --version
,表示剪贴板支持的可用性,-clipboard
意味着没有.
如果你在MAC OSX中使用vim,不幸的是它配备了较旧版本,并且没有符合剪贴板选项.幸运的是,自制软件可以轻松解决这个问题.
安装vim:
brew install vim
安装vim的gui:
brew install macvim
重启终端才能生效.
将以下行追加到〜/ .vimrc
set clipboard=unnamed
现在你可以在vim中复制该行yy
并在系统范围内粘贴它.
更新方法:
多年来我一直对set clipboard方法感到满意.最大的缺点是它会弄乱您的剪贴板历史记录,即使您使用x
删除也是如此.这是一个更好,更优雅的解决方案.
将vim的文本[范围]复制到系统剪贴板中.(提示:首先使用v
或V
选择范围,然后键入冒号:
以激活Ex命令):
:[line-range]yank +
例如,
:5,10y *
(复制/抽取5-10行到系统剪贴板*
寄存器)
将系统剪贴板中的内容粘贴到新行的vim中:
:put +
对于Ubuntu - 2018年7月
使用寄存器"+"复制到系统剪贴板(即"+ y而不是y").
同样,您可以粘贴"+"从系统剪贴板中获取文本(即"+ p而不是p").
您还必须确保编译vim并支持剪贴板.尝试:
vim --version | grep .xterm_clipboard -o
如果它是-xterm_clipboard(减去前缀),那么你没有支持.
以下是使用具有剪贴板支持的vim工作版本进行交换的一些说明.
$ sudo apt-get purge vim
$ sudo apt-get autoremove(从系统中删除任何无关的vim依赖包)
$ sudo apt-get install vim-gnome
再次检查vim --version | grep .xterm_clipboard -o
,您可以确认剪贴板现在可用(即+ xterm_clipboard)
祝好运.
我无法复制到我的剪贴板系统,因为我在〜/ .vimrc文件中有这个:
if has('mouse') set mouse=a endif
但是,如果您接下来添加此行,它将允许您简单地Ctrl+c将您选择的任何内容添加到剪贴板中.
vmap"+y
原始讨论和更多细节:使用set mouse = a从vim复制文本
我的解决方案是安装包含剪贴板选项的附加vim:
sudo apt-get install vim-gnome
如果您正在使用GVim,您也可以set guioptions+=a
.这将触发自动复制到您在可视模式下突出显示的文本的剪贴板.
缺点:请注意,在这种情况下,高级剪贴板管理器(具有历史记录)将获取所有选择历史记录...
你可以在这里找到答案 Arch Wiki
对于Linux:首先,您必须通过安装在vim版本中启用剪贴板
gvim
.
接下来,您必须将此行放在您的.vimrc
文件上.
set clipboard=unnamedplus
如果您的vim恰好在没有+xterm_clipboard
选项的情况下进行编译,就像默认情况下在Debian中编译而我猜Ubuntu,您可以将管道选择或整个缓冲区管道到处理桌面剪贴板的外部程序.对于xclip
(您可能需要先安装),命令将是:w !xclip -sel clip
仅在ubuntu终端下的vim中,
按shift + drag mouse
,然后ctrl + shift + c
在终端上选择vim中的文本
然后ctrl + v
在其他编辑
如果你有xclip,一种简单的方法将文本复制到剪贴板如下:
要复制的Yank文本.(y
vanilla vim中的命令)
输入 :call system("xclip -selection clipboard", @")
:call system()
运行终端命令.它需要两个参数,第一个是命令,第二个是管道到该命令的内容.例如,:echom system("head -1", "Hello\nWorld")
返回Hello(带有一些填充).echom返回命令的输出,调用不返回.
xclip -selection clipboard
只需将文本复制到系统剪贴板中,而不是默认的X剪贴板,(由中间的moue按钮访问).
@"
返回最后一个被拉动的文本."是默认寄存器,但您可以使用任何寄存器.要查看所有寄存器的内容,请键入:registers
.