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

236

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

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


7
只需进行可视化选择,然后执行"+y命令。 - zx1986
2
OSX自带的vim版本不支持+clipboard或者+xterm-clipboard。你可以通过运行vim --version | grep clipboard来验证这一点。你可以通过brew install vim --with-client-server来解决这个问题。 - LondonRob
1
或者使用MacVim,它提供了一个命令行版本,可以通过符号链接放置在你的~/bin下,然后将~/bin插入到你的路径中,优先于系统安装的vim和其同义词。 - the Tin Man
在@zx1986所写的基础上,我做了三件事: 1)将以下内容添加到我的/.bashrc中,以便将vi/vim别名为MacVim的终端模式: alias vi='mvim -v' 2)将以下内容添加到/.vimrc中,映射Ctrl+c(而不是Cmd+c): vnoremap <C-c> "+y 3)配置Keyboard Maestro在终端中运行时键入键序列^c(Ctrl+C)(在我的情况下是iTerm2)这使得可以使用Cmd+c将文本复制到OSX剪贴板中,以便在其他OSX应用程序中粘贴。 - Neil Griffin
28个回答

5

使用Homebrew的vim:brew install vim

Mac(截至10.10.3 Yosemite)预装有系统vim,但没有启用clipboard标志。

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

要查看此内容,请使用/usr/bin/vim --version命令查看原始系统vim。

您将看到类似以下内容:

$ /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 使用homebrew安装的vim,您将得到以下效果:
$ /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
那么如何进行复制呢? - Frozen Flame
使用brew版本的vim,我能够做到我想要的:我使用V高亮显示行,然后输入:w !pbcopy,它就起作用了。 - davidpm4

5

如果你的Vim没有编译剪贴板,想要复制选定的文本而不是整行,又不想安装MacVim或其他GUI,那么最简单的解决方案是在你的 .vimrc 文件中添加以下内容:

set clipboard=unnamedplus

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

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


但是在复制文本后,它也会在文本后面给我2条黑线。 - Nic Wanavit

4

我使用了:

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

它运行得非常好。


3

当您使用Mac电脑时,可以使用MacVim轻松访问剪贴板,使用标准的操作系统键即可。

它也完全向后兼容普通的Vim,因此我甚至不需要单独的.vimrc文件。


我使用 MacVim,然后将命令行 vim 的同义词链接到我的 ~/bin 目录中,以覆盖默认设置。 - the Tin Man

2

我的主要问题是默认的OSX版本Vim。通过Homebrew安装后,会添加+clipboard构建选项。

你可以用以下命令检查:

vim --version

查看是否存在 -clipboard+clipboard


2
如果您的Vim安装中有+clipboard选项(您可以使用:version命令进行检查),并且您处于可视模式,则可以执行"+y命令来将所选内容复制到+缓冲区,也就是剪贴板。
我已经在我的vimrc文件中添加了以下映射,并且它可以正常工作。 vmap <leader>y "+y:使用这个映射,在可视模式下我可以通过先按leader键然后按y来将内容复制到剪贴板。 nmap <leader>p "+p:使用这个映射,在正常模式下我可以通过先按leader键然后按p来从剪贴板粘贴内容。
PD: 在Ubuntu上,我必须安装vim-gtk才能获取+clipboard选项。

2
Fakeclip 实现了 +* 缓冲区,如果本地不支持的话。

2

command-C?对于从Terminal.app启动的vim和使用鼠标选择的文本,至少这种方法是有效的。


6
如果你在vim中使用纵向分割的子窗口(这是我想到的实际情况),或者结果超过一个终端屏幕,那么这个回答虽然简单易懂,但会破坏输出。 - ʞɔıu
3
你是对的,我没有考虑到这些情况。我留下我的答案只是为了防止其他人给出类似无用的答案。 - mouviciel

1
我在我的 .vimrc 文件中使用了以下设置:
set clipboard=unnamed
if has("unnamedplus") " X11 support
    set clipboard+=unnamedplus
endif

0
在 Mac 上,按住 option 键,然后在选择文本时再按下 ctrl V 就可以完成操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接