如何将选择内容复制到OS X剪贴板


225

我在Vim中选择了一个区域。如何将其复制到OS X剪贴板中?

(可以通过管道将OS X剪贴板写入/usr/bin/pbcopy


4
只是视觉选择,然后"+y
zx1986 '18

2
Vim的附带OSX 具有+clipboard+xterm-clipboard。您可以使用进行验证vim --version | grep clipboard。可以使用解决此问题brew install vim --with-client-server
LondonRob

1
或使用MacVim,它提供了一个命令行版本,可以通过符号链接到您的命令行中~/bin,然后~/bin可以将其插入到系统中正常安装的vim和同义词之前。
锡人

在@ zx1986编写的内容的基础上,我做了三件事:1)在我的〜/ .bashrc中添加了以下内容,以便将vi / vim别名为MacVim的终端模式: alias vi='mvim -v'2)在〜/ .vimrc中添加了以下内容,它映射了Ctrl + c(不是Cmd + c): vnoremap <C-c> "+y3)配置的键盘大师^c在终端中运行时键入键序列(Ctrl + C)(在我的情况下为iTerm2),这使得可以使用Cmd + c将文本复制到OSX剪贴板以便可以将其粘贴到其他OSX应用程序中。
尼尔·格里芬

Answers:


79

根据使用的Vim版本,我可以使用+寄存器访问剪贴板。

Mac OS X剪贴板共享 ”可能也有一些适合您的想法。


5
对于使用VIM编译而不带+ clipboard的人们,上面的链接是一个很好的资源,它提供了无需重新编译VIM的解决方法
sdjuan 2012年

非常重要的细节!!!如果您使用的是Vim-version 7.3,那么这可能对您不起作用,但是如果您使用的是Vim-version 7.4,那么它就可以了(有时甚至不必做整个“ + y”)。在终端上写> vim,然后启动它的版本号
Zeth


1
"+寄存器仅适用于X11(除非您使用+ X11支持构建vim,它将在OS X中安装X11服务器XQuartz),而OS X并不将X11用作其Windows系统。
nn0p

如果同时做- vimmacvim具有+剪贴板,该怎么办。并clipboard=unnamed添加到~/.vimrc?看起来很痛苦,尝试了所有变通办法,并且目前必须使用spacemacs,当我知道时,我将不得不使用全局剪贴板:)
Nikolay Fominyh

240

对于MacVim和Windows Gvim,只需将以下内容添加到您的~/.vimrc

set clipboard=unnamed

现在,所有的操作,如yyDP与剪贴板工作。无需在它们前面加上"*"+


2
我花了整个上午的时间来弄清楚如何将MacVim为您启用的⌘-C和⌘-V分离y,d和P命令,最后才发现了这一点。果然,当我还是青少年时,我已经将此添加到了vimrc中,此后一直让我感到沮丧。
乔纳森·杜马因

2
对于MacVim的新用户,可以在带有-v标志(mvim -v)的终端上使用它。我的别名是vim和mvim。
pk-nb

3
正如@VincentG在上面的评论中所提到的,这确实适用于基于终端的Vim,但是在终端中使用tmux的用户将需要遵循此处详述的解决方案之一:stackoverflow.com/a/11421329/456584
user456584

3
这应该是公认的答案-只要:echo has("clipboard")1,这是对的MacVim的情况下,我有一个vi别名运行mvim -v,而不是
jdsumsion

1
@Joseph,如果:version显示给您,-clipboard则Vim的构建不支持剪贴板功能。我说的是MacVim,这是一个GUI应用程序。
乔治五世·赖利2015年

136

如果启用了剪贴板,则可以通过单击将所选区域复制到剪贴板 "*y

要查看是否已启用,请运行vim --version并查找+clipboard-clipboard。例如,默认情况下在我的10.5.6框中未启用它:

%vim
/ usr / bin / vim
%vim-版本
VIM-Vi IMproved 7.2(2008年8月9日,2008年11月11日编译17:20:43)
包含的补丁:1-22
_www@b77.apple.com编译
没有GUI的普通版本。  包含(+)或不包含(-)的功能:
... 
-clientserver- 剪贴板 + cmdline_compl + cmdline_hist + cmdline_info +注释
 ...

如果已使用进行编译+clipboard,则可以使用该"*寄存器访问系统剪贴板。

我下载了7.2源并对其进行了编译(很容易使用tar xjf vim-7.2.tar.bz && cd vim72 && ./configure && make && sudo make install),并且启用了剪贴板:

%vim
/ usr / local / bin / vim
%vim-版本
VIM-Vi IMproved 7.2(2008年8月9日,2009年3月24日编译17:31:52)
由rampion@Myrrhy.local编译
带有GTK2 GUI的普通版。  包含(+)或不包含(-)的功能:
... 
+客户端服务器+剪贴板 + cmdline_compl + cmdline_hist + cmdline_info +评论
 ...

但是,即使编译后,在Terminal.app(仅在X11.app)中运行vim时,也无法将其复制到剪贴板。


3
我使用+ clipboard编译了最新版本,现在本机剪贴板将它用作*寄存器。另外,在您的.vimrc文件中设置“ set剪贴板=未命名”会使系统剪贴板成为典型的剪贴板。我实际上使用了 github.com/adamv/homebrew/blob/duplicates/Library/Formula/… 这个自制程序公式来构建和编译它。
拉多

嗯,不确定为什么Vim没有出现在我的自制软件中,但是我将其复制到了/ usr / local / Library / Formula,运行brew install vim,但失败了,并显示“ ld:-lruby-static找不到库”。我正在使用RVM并在1.8.7上。当我切换到1.9.2时,错误是“ ld:-lruby.1.9.1未找到库”。解决方案是通过首先执行rvm use system来使用系统Ruby。
justsee 2011年

9
比在通常有很多功能的清单中搜索“剪贴板”一词要容易一些:do :echo has("clipboard")。如果显示0,则不会编译。如果显示1,则编译。
ravron

3
您也可以使用自制软件通过剪贴板来编译vim: brew install vim
Anton Koval'15-4-28

4
谨防!我有一个+clipboard版本,但是安装--with-client-server了启用版本+x11,并且尝试在macOS上的终端vim中复制/粘贴到x11无效:)我必须在没有该版本的情况下重新安装+clientserver
jacwah

96

您可以直观地选择文本并输入 :w !pbcopy<CR>

或者,您可以在~/.vimrc文件中包含以下键映射。他们以可视模式将文本剪切/复制到操作系统的剪贴板。

vmap <C-x> :!pbcopy<CR>  
vmap <C-c> :w !pbcopy<CR><CR> 

来源:http : //drydevelopment.com/blog/vim-pbcopy-on-os-x


6
您也可以从命令行中选择文本,例如:1,10w!pbcopy,以将第1-10行复制到剪贴板。w和后面的空格很重要,可以将原始文本保留在原位。上面的源链接现在已断开,但这里有讨论:vim.wikia.com/wiki/Mac_OS_X_clipboard_sharing
sdjuan 2012年

我跟着这得到TMUX这个工作:superuser.com/questions/231130/...
WEX

@Wex链接已经修复
SnoringFrog

2
请注意,这似乎仅适用于选择整行。如果您只想选择一行的一部分,那似乎不起作用。stackoverflow.com/questions/16196826/...
凯文·惠勒

1
@Kevin Wheeler:您可以尝试使用以下命令来解决非逐行复制noremap <silent> <leader> y:<CR>:let @ a = @“ \ |执行“正常!vgvy“ \ | let res = system(” pbcopy“,@”)\ | 让@“ = @ a <CR>
dragonxlwang

38

"*在任何yank命令之前,双引号星号()会将结果放入拷贝缓冲区中。这也适用于Windows和Linux。


11
似乎只是发出响铃字符并没有其他作用我
ʞɔıu

3
在X11中,Vim的“ *是PRIMARY,” +是CLIPBOARD,而SECONDARY没有获得命名寄存器。(并非有人使用它...)
短暂

完美。确实有帮助,尤其是在块选择(ctrl-v)中。
Sonique

由于该问题是专门针对Mac OS X的,因此无需添加它也适用于Mac。
Paul Tomblin 2015年

@PaulTomblin好的,很公平:-)
apprenticeDev

26

在macOS 10.8上,vim编译时使用,-clipboard因此"*y需要重新编译。幸运的是,brew install vim它将很容易为您编译一个新版本+clipboard


1
要记住的事情-非常奇怪,brew install vim有更新vi,而没有 vim。因此,在使用自制软件安装vim之后,您可能不得不以不同的方式别名。
shridharama

18

可视地选择文本并键入:

ggVG
!tee >(pbcopy)

我发现比以下更好:

ggVG
:w !pbcopy

由于它不会闪烁提示:“按ENTER或键入命令以继续”


尽管如此拷贝整条生产线
卡尔Pokus


11

如果您使用的是MacPorts,则可以通过以下方式升级VIM以包括剪贴板支持:

port install vim +x +x11

现在,您可以使用"+寄存器将文本直接拉到Mac剪贴板上。奇迹般有效。


1
这正是我所需要的。只需要确保$ PATH是正确的,就可以得到/ opt / local / bin / vim而不是Apple vim。
Gareth

8

如果您使用的是MacOS X:

$ brew install vim
$ vim --version
VIM - Vi IMproved 7.4 [...]

然后,添加到您的.vimrc:

set clipboard=unnamed

现在,您只需处于vim并执行:%y,即可将所有内容复制到剪贴板。


内容被拉出,但不能粘贴到VIM之外。
–pradagupd

5

使用自制软件的 vim:brew install vim

Mac(自10.10.3 Yosemite起)预装了clipboard启用该标志的系统vim 。

您可以自己编译vim并启用该标志,也可以使用正确设置的Homebrew vim。

要亲自查看此信息,请使用 /usr/bin/vim --version

您会看到类似以下内容:

$ /usr/bin/vim --version

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2014 21:00:28)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
... -clientserver -clipboard +cmdline_compl ...

注意 -clipboard

有了自制软件,您反而会得到

$ /usr/local/bin/vim --version

VIM - Vi IMproved 7.4 (2013 Aug 10, compiled May 10 2015 14:04:42)
MacOS X (unix) version
Included patches: 1-712
Compiled by Homebrew
Huge version without GUI.  Features included (+) or not (-):
... +clipboard ...

注意 +clipboard


1
那么如何制作副本呢?
冰雪奇缘》 2015年

使用brew的vim版本,我可以做我想做的事:我使用V那时突出显示了行,然后:w !pbcopy起作用了
davidpm4 '16

5

如果您的Vim不是用剪贴板编译的,则您希望复制选定的文本而不是整行,不想安装MacVim或其他GUI,最简单的解决方案是将此行添加到.vimrc中:

map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

要使用它,只需直观地选择要复制的文本,然后选择Control- C。如果要对此行进行完整的说明,请阅读“ 如何在vim上复制到剪贴板 ”。


但在复制文字后,它也给了我两条黑线
Nic Wanavit

4

我用了:

map <C-x> :!pbcopy<CR>
vmap <C-c> :w !pbcopy<CR><CR>

真的很好


3

在Mac上时,可以使用MacVim使用标准OS键轻松访问剪贴板。

它也与普通Vim完全向后兼容,因此我什至不必单独使用.vimrc


我使用MacVim,然后将命令行vim同义词符号链接到我中,~/bin以覆盖默认值。
锡人

2

Command-C?至少对于从Terminal.app内部启动的vim起作用,该vim对于使用鼠标选择的文本。


6
好的天真的答案,但是如果您在vim中使用垂直分割的子窗口(我确实想到这种情况),或者如果结果长于一个终端屏幕
则会中断输出–ʞɔıu2009年

3
没错,我没有想到这些情况。我留下我的答案只是为了防止其他人提供类似的无用答案。
mouviciel


2

我的主要问题是Vim的默认OSX版本。通过自制软件安装将其添加+clipboard到构建中。

您可以通过以下方式进行检查:

vim --version

看它是说-clipboard还是写+clipboard


2

如果您+clipboard在Vim安装中具有选项(可以使用进行检查:version),并且您处于可视模式,则可以这样做。"+y这会将选择内容拖到+剪贴板中的缓冲区中。

我已经将以下映射添加到我的vimrc中,并且工作正常。

vmap <leader>y "+y :这样,我可以leader key按照以下步骤y以可视模式复制到剪贴板。

nmap <leader>p "+p :这样,我可以leader key按照以下步骤p在普通模式下从剪贴板粘贴。

PD:在Ubuntu上,我必须安装vim-gtk才能获得该+clipboard选项。


0

在Mac上,如果还有其他操作可行-用鼠标选择,右键单击选择复制。uff



0

什么对我有用 .vimrc

set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif

0

对于Mac用户-按住option键然后ctrl V选择文本即可解决问题。


0

Shift cmd c –设置复制模式拖动鼠标,选择文本,cmd c复制所选文本Cmd v进行粘贴


-1

对于Ubuntu用户,要使用剪贴板检索的软件包为vim-full。其他软件包(vim-tiny,vim)不包含剪贴板功能。


vim-full不再是ubuntu软件包的名称。默认的vim软件包(7.3.154)具有最少的功能集,包括-clipboard。安装vim-gtk或vim-nox将提供+ clipboard版本。
spazm 2012年

-1

使用寄存器“ +”或“ *”复制到剪贴板不起作用?

原因:您的特定版本的vim是在没有剪贴板支持的情况下编译的。在控制台上键入vim --verion,您将看到-xterm_clipboard。使用gui软件包安装vim可解决此问题。在ubuntu上,您可以通过在shell上键入以下内容来执行此操作:

须藤apt-get install vim-gui-common

现在再次在控制台上执行vim --version。最有可能的是,您现在将看到+ xterm_clipboard

因此,现在您可以使用register +将任何内容复制到剪贴板(例如,“ + yy将当前行复制到剪贴板”)


-1

我遇到同样的问题,安装后macvim仍然无法使用,最后我找到了解决方法:

尝试先卸载所有vim,

brew uninstall macvim

brew uninstall --force vim

并重新安装macvim

brew install macvim --with-override-system-vim

然后,您可以使用"*y"+y,而不必set clipboard=unnamed


-2

Command-c在MacVim和终端中都对我有用。


传统的复制和粘贴不适用于Vim缓冲区,并且会完全搞乱您的格式。例如,使用Cmd + C复制15行嵌套对象,然后使用Cmd + V粘贴将导致其对嵌套失去理解。这很可能取决于您在.vimrc中的设置,并且可能非常特殊
netpoetica 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.