如何在Vim中复制到剪贴板?
是否有可能直接从Vim复制到剪贴板? yy
只能复制东西到Vim的内部缓冲区。 我想复制到操作系统的剪贴板。 在Vim中有没有这样的命令,或者你只能在Vim中打开一些东西?
*
注册会这样做。 在Windows中, +
和*
是等效的。 在unix中, +
和*
之间有细微的差别:
在Windows下,*和+寄存器是等效的。 但是对于X11系统,它们是不同的。 对于X11系统,*是select,+是剪切缓冲区(如剪贴板)。 http://vim.wikia.com/wiki/Accessing_the_system_clipboard
*
可能是你大部分时间想要的东西,所以我使用*
是因为它在两个环境中的function都如我所愿。
在Linux发行版中,出于某种原因,您必须首先安装vim-gtk才能获得剪贴板function。
在Mac OSX上
-
复制选中的部分:直观地select文本(在正常模式下input
v
或V
)并键入:w !pbcopy
-
复制整个文件
:%w !pbcopy
-
从剪贴板粘贴
:r !pbpaste
在大多数 Linux发行版中 ,您可以replace:
- 使用
xclip -i -sel c
xsel -i -b
xclip -i -sel c
或xsel -i -b
- 使用
xclip -o -sel -c
xsel -o -b
xclip -o -sel -c
或xsel -o -b
– 注意: 如果您的发行版中没有预装这些工具(xsel
和xclip
),则可以在repos中find它们
使用寄存器"+
复制到系统剪贴板(即"+y
而不是y
)。
同样,你可以粘贴"+
从系统剪贴板中获取文本(即"+p
而不是p
)。
在您的vimrc文件中,您可以指定自动使用系统剪贴板进行复制和粘贴。
在Windows上设置:
set clipboard=unnamed
在Linux上(vim 7.3.74 +):
set clipboard=unnamedplus
注意:您可能需要使用最新版本的Vim才能正常工作。
总结和使新手更容易,
要复制当前行,请在命令模式下键入:
"*yy
要复制整个文件/缓冲区,在命令模式下,首先通过gg
开始,然后键入
"*yG
如上所述,这需要vim --version
的剪贴板,这表明剪贴板支持的可用性, -clipboard
意味着没有。
@Jacob Dalton在评论中提到了这一点,但似乎没有人在回答中提到vim必须使用剪贴板支持来编译这里提到的任何build议。 我没有在Mac OS X上configuration这种方式,我不得不重buildvim。 使用这个命令找出你是否有vim --version | grep 'clipboard'
vim --version | grep 'clipboard'
。 +clipboard
意味着你很好,这里的build议将为你工作,而-clipboard
意味着你必须重新编译和重buildvim。
我无法复制到我的剪贴板的系统,因为我在〜/ .vimrc文件中有这个:
if has('mouse') set mouse=a endif
但是如果你接下来添加这一行,它将允许你简单地按Ctrl + C来获得你已经select到你的剪贴板的任何东西。
vmap <Cc> "+y
原始的讨论和更多的细节: 复制文本出vim与设置鼠标=启用
如果你正在使用GVim,你也可以set guioptions+=a
。 这将触发自动复制到在视觉模式下突出显示的文本的剪贴板。
缺点:请注意,高级剪贴板pipe理器(包含历史logging)在这种情况下将获得您所有的select历史logging…
对我来说,解决scheme是安装附加的剪贴板选项的vim:
sudo apt-get install vim-gnome
如果您在MAC OSX中使用vim,不幸的是,它带有较旧的版本,而不符合剪贴板选项。 幸运的是,自制软件很容易解决这个问题。
安装vim:
brew install vim --with-lua --with-override-system-vim
安装vim的gui verion:
brew install macvim --with-lua --with-override-system-vim
重启terminal生效。
将以下行附加到〜/ .vimrc
set clipboard=unnamed
现在你可以在vim中用yy
复制该行,并将其粘贴到系统范围内。
更新方法 :
我从未满意多年来设置剪贴板方法。 最大的缺点是它会弄乱你的剪贴板的历史,即使你使用x删除。
这是一个更好的和优雅的解决scheme:
将vim的文本[范围]复制到系统剪贴板中。 (提示:用v或V先select范围,然后input:激活Ex命令)
:[范围] yank +
将系统剪贴板的内容粘贴到新行的vim中
:把+
如果你的vim碰巧没有使用+xterm_clipboard
选项编译,就像在Debian中默认的那样,我猜Ubuntu可以通过pipe道select或整个缓冲区来处理桌面剪贴板的外部程序。 对于xclip
(您可能需要先安装),该命令将是:w !xclip -sel clip
也许有人会觉得它有用。 我想保持独立于X剪贴板,仍然能够复制和粘贴两个正在运行的vim之间的文本。 这个小代码将选定的文本保存在temp.txt文件中进行复制。 把下面的代码放到.vimrc中。 使用CTRL-c CTRL-v来完成这项工作。
vnoremap:w!cp / dev / null〜/ temp.txt && cat>〜/ temp.txt
noremap:r!cat〜/ temp.txt
在ubuntu下的vimterminal下,
按shift + drag mouse
在vim中select一个文本,然后在terminal上按ctrl + shift + c
然后在其他编辑器上按ctrl + v
我在.vimrc中写了一个简单的行来获得复制的工作。 希望这有助于某人。 我的vim没有安装剪贴板支持,不幸的是,所以这些build议没有为我工作。 基本上,将这行粘贴到.vimrc中:
map <Cc> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
如果您想详细了解这个function,可以在我的博客上阅读
对于一些国际键盘,您可能需要按“ + 空格键"
。
所以在这种情况下,你将不得不按“ Space + y”或“ Space * y”
- 把
set clipboard=unnamed
在您的vimrc
。 - 在
Visual
模式下select要复制的内容(按v进入)。 - 返回
Normal
模式(按Esc键退出),按y进行复制。 - 如果你想从操作系统的剪贴板上粘贴东西,在Vim
Normal
模式下按下p / P。
你可以在这里findArch Wiki的答案
对于Linux:首先,您必须通过安装gvim
来在vim版本中启用剪贴板。
接下来,您必须将这行放在.vimrc
文件中。
set clipboard=unnamedplus
如果你不想为vim使用任何graphics界面,而且你更愿意坚持使用terminal模拟器,那么这个问题可能会简单得多。 首先看看你使用的terminal的文档,而不是使用任何类似的东西。 我一直在努力解决相同的问题(试图使用+剪贴板和xclip等),最后,在terminal仿真器中,只需按shift并select要复制的任何文本即可。 而已。 很简单,没有必要搞乱configuration。 (我用urxvt的方式)。
如果通过putty连接到unix系统,请按照以下步骤复制文件的内容
- 突出显示要复制的文本(您可以逐页复制)
- 按ctrl + c(它会复制文本到剪贴板
- 粘贴在任何外部编辑器完成
selecting
与mouse
的帮助和right-click copy
在我的情况下工作。
我不想包含行号,所以我:set nonumber
在copying
之前:set nonumber
数字。
在我的Windows笔记本电脑上没有任何上述工作。
Ctrl + C是好的复制..但我需要Shift + 插入粘贴!
(总是有一台笔记本电脑的地方,总是可以访问插入,而无需按下辅助键)
对于OSX,就像上面的10342答案已经明确说明的那样,你需要确保vim支持剪贴板function,并说OSX预装的剪贴板不支持剪贴板,如果你运行brew install vim
, 。
除了运行vi仍然会让你运行预装的OSX版本,而不是你从brew安装的版本。
为了解决这个问题,我简单地将我的vim命令别名为brew版本,而不是OSX的默认版本:
alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
现在我是金