是否可以直接从Vim复制到剪贴板? yy 只复制东西给Vim 's internal buffer. I want to copy to the OS' s剪贴板 . 在Vim中有没有这样的命令,或者你只能在Vim中猛拉东西?
yy
如果您的vim恰好在没有 +xterm_clipboard 选项的情况下编译,就像默认情况下在Debian中编译而我猜Ubuntu,您可以选择管道或整个缓冲区来处理桌面剪贴板的外部程序 . 对于 xclip (您可能需要先安装),命令将为 :w !xclip -sel clip
+xterm_clipboard
xclip
:w !xclip -sel clip
你可以在这里找到答案Arch Wiki
对于Linux:首先,您必须通过安装 gvim 在vim版本中启用剪贴板 .
gvim
接下来,您必须将此行放在 .vimrc 文件上 .
.vimrc
set clipboard=unnamedplus
仅在ubuntu终端下的vim中,
按 shift + drag mouse 选择vim中的文本,然后在终端上选择 ctrl + shift + c
shift + drag mouse
ctrl + shift + c
然后 ctrl + v 在其他编辑器上
ctrl + v
* 寄存器将执行此操作 . 在Windows中, + 和 * 是等效的 . 在unix中, + 和 * 之间存在细微差别:
*
+
在Windows下,*和寄存器是等效的 . 但是,对于X11系统,它们有所不同 . 对于X11系统,*是选择,是剪切缓冲区(如剪贴板) . http://vim.wikia.com/wiki/Accessing_the_system_clipboard
* 可能是你大多数时候想要的,所以我使用 * 因为它在两种环境中都能正常运行 .
在Linux发行版中,出于某种原因,您必须首先安装vim-gtk才能获得剪贴板功能 .
对于那些在yanking或put时如何使用寄存器感到困惑的人,你只需要写入 " 然后写入寄存器的名称 . 因此,要将某些内容复制到剪贴板寄存器,请键入 "*y ,然后键入 "*p
"
"*y
"*p
在Mac上 OSX
复制所选部分:直观地选择文本(在正常模式下键入 v 或 V )并键入 :w !pbcopy
v
V
:w !pbcopy
复制整个文件 :%w !pbcopy
:%w !pbcopy
从剪贴板粘贴 :r !pbpaste
:r !pbpaste
在大多数 Linux 发行版中,您可以替换:
pbcopy 以上 xclip -i -sel c 或 xsel -i -b
pbcopy
xclip -i -sel c
xsel -i -b
pbpaste 使用 xclip -o -sel -c 或 xsel -o -b
pbpaste
xclip -o -sel -c
xsel -o -b
Note: 如果您的发行版上没有预安装这些工具( xsel 和 xclip ),您可以在回购中找到它们
xsel
在vimrc文件中,您可以指定自动使用系统剪贴板进行复制和粘贴 .
在Windows上设置:
set clipboard=unnamed
在Linux上设置(vim 7.3.74):
注意:您可能需要使用最新版本的Vim才能使用它们 .
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
使用寄存器 "+ 复制到系统剪贴板(即 "+y 而不是 y ) .
"+
"+y
y
同样,您可以从 "+ 粘贴以从系统剪贴板获取文本(即 "+p 而不是 p ) .
"+p
p
@Jacob Dalton在一条评论中提到了这一点,但似乎没有人在回答中提到vim必须使用剪贴板支持编译,这里提到的任何建议都可以使用 . 默认情况下我没有在Mac OS X上配置Mine,我不得不重建vim . 使用此命令查明您是否拥有它 vim --version | grep 'clipboard' . +clipboard 意味着你很好,这里的建议对你有用,而 -clipboard 意味着你必须重新编译和重建vim .
vim --version | grep 'clipboard'
+clipboard
-clipboard
总结并让新手更容易,
要复制当前行,请在命令模式下键入:
"*yy
要复制整个文件/缓冲区,请在命令模式下首先通过 gg 转到开头,然后键入
gg
"*yG
如上所述,这需要 vim --version vim --version ,这表明剪贴板支持的可用性, -clipboard 表示没有 .
vim --version
我无法复制到我的剪贴板系统,因为我在〜/ .vimrc文件中有这个:
if has('mouse') set mouse=a endif
但是,如果您接下来添加此行,它将允许您只需 Ctrl+c 即可将您选择的任何内容添加到剪贴板中 .
vmap <C-c> "+y
原始讨论和更多细节:Copy text out of vim with set mouse=a enabled
如果你在MAC OSX中使用vim,不幸的是它配备了较旧版本,并且没有符合剪贴板选项 . 幸运的是,自制软件可以轻松解决这个问题 .
install vim:
brew install vim --with-lua --with-override-system-vim
install gui verion of vim:
brew install macvim --with-lua --with-override-system-vim
重启终端才能生效 .
将以下行附加到〜/ .vimrcset clipboard=unnamed
现在你可以用 yy 复制vim中的行并在系统范围内粘贴它 .
Updated Method :
多年来我一直对set clipboard方法感到满意 . 最大的缺点是它会弄乱你的剪贴板历史记录,即使你使用 x 进行删除也是如此 . 这是一个更好,更优雅的解决方案 .
x
将vim的文本[范围]复制到系统剪贴板中 . (提示:首先使用 v 或 V 选择范围,然后键入冒号 : 以激活Ex命令)::[range]yank +例如 . ,:5,10y * (复制/ yank行5-10到系统剪贴板 * 寄存器)
:
:[range]yank +
:5,10y *
将系统剪贴板中的内容粘贴到新行上的vim中::put +
:put +
我的解决方案是安装包含剪贴板选项的附加vim:
sudo apt-get install vim-gnome
如果您使用的是GVim,您也可以 set guioptions+=a . 这将触发自动复制到您在可视模式下突出显示的文本的剪贴板 .缺点:请注意,在这种情况下,高级剪贴板管理器(带历史记录)将获取所有选择历史记录...
set guioptions+=a
For Ubuntu - July 2018
您还必须确保编译vim时支持剪贴板 . 尝试:
vim --version | grep .xterm_clipboard -o
如果是的话 -xterm_clipboard (减去前缀)然后你做 not 有支持 .
以下是使用具有剪贴板支持的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 )
祝好运 .
如果你有xclip,一种简单的方法将文本复制到剪贴板如下:
要复制的Yank文本 . ( y 命令在vanilla vim中)
输入 :call system("xclip -selection clipboard", @")
:call system("xclip -selection clipboard", @")
:call system() 运行终端命令 . 它需要两个参数,第一个命令,第二个管道到该命令的内容 . 例如 :echom system("head -1", "Hello\nWorld") 返回Hello(带有一些填充) . echom返回命令的输出,调用不返回 .
:call system()
:echom system("head -1", "Hello\nWorld")
xclip -selection clipboard 只是将文本复制到系统剪贴板而不是默认的X剪贴板(由中间的moue按钮访问) .
xclip -selection clipboard
@" 返回最后一个被拉动的文本 . “是默认寄存器,但您可以使用任何寄存器 . 要查看所有寄存器的内容,请键入 :registers .
@"
:registers
也许有人会发现它很有用 . 我想保持独立于X剪贴板,并且仍然能够在两个运行的vims之间复制和粘贴一些文本 . 这个小代码将所选文本保存在temp.txt文件中以进行复制 . 将下面的代码放入.vimrc中 . 使用CTRL-c CTRL-v完成工作 .
vnoremap:w!cp / dev / null~ / temp.txt && cat>〜/ temp.txt
noremap:r!cat~ / temp.txt
将 set clipboard=unnamed 放在 vimrc 中 .
vimrc
在 Visual 模式中选择要复制的内容(按v进入) .
Visual
返回 Normal 模式(按escape [esc]),按y进行复制 .
Normal
如果要从OS的剪贴板粘贴内容,请在Vim Normal 模式下按p / P.
我是一个Vim newby但是,要将所有文本复制到系统剪贴板(例如,如果你想将它粘贴到文字处理器或其他文本编辑器,如gedit,mousepad等...),在正常模式下:
ggVGy
或者,更简单地说:
:%y
按照建议,我也安装了 vim-gtk 并且放了
在我的.vimrc中
一切正常
如果要仅复制部分文本,请使用 visual mode (v) ,选择要复制的文本,然后按 y .
最后,我建议剪贴板程序,如Clipman(我最喜欢的),Clipit,Parcellite或类似的 .
(我在Debian Stretch Xfce中使用vim 8.0)
为我的英语请求我! :-)
我在.vimrc中写了一个简单的行来获得复制工作 . 希望这有助于某人 . 不幸的是,我的vim没有安装剪贴板支持,所以这些建议都不适合我 . 基本上,将此行粘贴到.vimrc中:
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
如果您想阅读有关此功能的详细信息,可以在my blog上阅读此内容 .
对于某些国际键盘,您可能需要按“空格来获得 " ” .
因此,在这种情况下,您必须按“Space y或”Space * y
如果您不想为vim使用任何图形界面,并且您更喜欢坚持使用终端仿真器,那么可能会有一个更简单的方法来解决这个问题 . 不要使用yank或类似的东西,首先看一下你使用的终端文档 . 我一直在努力解决同样的问题(试图使用剪贴板和xclip等),最后我发现在我的终端模拟器中只需按shift并选择你要复制的任何文本就足够了 . 而已 . 非常简单,不需要搞乱配置 . (我顺便使用urxvt) .
如果您通过putty连接到unix系统,请按照以下步骤复制文件的内容
突出显示要复制的文本(您可以逐页复制)
按ctrl c(它会将文本复制到剪贴板
粘贴在任何外部编辑器中完成
selecting 在 mouse 和 right-click copy 的帮助下工作在我的情况下 .
selecting
mouse
right-click copy
我不想要包含行号,所以我 :set nonumber 在 copying 之前 .
:set nonumber
copying
我有问题,因为我的vim不支持 clipboard :
vim --version | grep clip -clipboard +insert_expand +path_extra +user_commands +emacs_tags -mouseshape +startuptime -xterm_clipboard
我安装了vim-gnome(支持剪贴板),然后再次检查:
vim --version | grep clipboard +clipboard +insert_expand +path_extra +user_commands +emacs_tags +mouseshape +startuptime +xterm_clipboard
现在我可以分别使用“y和”p进行复制和粘贴 .
上面没有任何东西在我的窗户上工作笔记本电脑 .
Ctrl C很适合复制..但我需要Shift Insert to Paste!
(总是得到一台笔记本电脑的好理由,无需按下辅助键即可随时访问Insert)
对于OSX,就像上面提到的10342答案一样,你需要确保vim支持剪贴板功能,说OSX预先附带的那个不支持剪贴板,如果你运行 brew install vim 它会工作 .
brew install vim
除了运行vi仍然会让你运行preshipped OSX版本,而不是你从brew安装的版本 .
为了克服这一点,我简单地将我的vim命令别名为brew版本,而不是OSX默认版本:
alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
而现在我是金色的
26 回答
如果您的vim恰好在没有
+xterm_clipboard
选项的情况下编译,就像默认情况下在Debian中编译而我猜Ubuntu,您可以选择管道或整个缓冲区来处理桌面剪贴板的外部程序 . 对于xclip
(您可能需要先安装),命令将为:w !xclip -sel clip
你可以在这里找到答案Arch Wiki
对于Linux:首先,您必须通过安装
gvim
在vim版本中启用剪贴板 .接下来,您必须将此行放在
.vimrc
文件上 .set clipboard=unnamedplus
仅在ubuntu终端下的vim中,
按
shift + drag mouse
选择vim中的文本,然后在终端上选择ctrl + shift + c
然后
ctrl + v
在其他编辑器上*
寄存器将执行此操作 . 在Windows中,+
和*
是等效的 . 在unix中,+
和*
之间存在细微差别:*
可能是你大多数时候想要的,所以我使用*
因为它在两种环境中都能正常运行 .在Linux发行版中,出于某种原因,您必须首先安装vim-gtk才能获得剪贴板功能 .
对于那些在yanking或put时如何使用寄存器感到困惑的人,你只需要写入
"
然后写入寄存器的名称 . 因此,要将某些内容复制到剪贴板寄存器,请键入"*y
,然后键入"*p
在Mac上 OSX
复制所选部分:直观地选择文本(在正常模式下键入
v
或V
)并键入:w !pbcopy
复制整个文件
:%w !pbcopy
从剪贴板粘贴
:r !pbpaste
在大多数 Linux 发行版中,您可以替换:
pbcopy
以上xclip -i -sel c
或xsel -i -b
pbpaste
使用xclip -o -sel -c
或xsel -o -b
Note: 如果您的发行版上没有预安装这些工具(
xsel
和xclip
),您可以在回购中找到它们在vimrc文件中,您可以指定自动使用系统剪贴板进行复制和粘贴 .
在Windows上设置:
在Linux上设置(vim 7.3.74):
注意:您可能需要使用最新版本的Vim才能使用它们 .
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
使用寄存器
"+
复制到系统剪贴板(即"+y
而不是y
) .同样,您可以从
"+
粘贴以从系统剪贴板获取文本(即"+p
而不是p
) .@Jacob Dalton在一条评论中提到了这一点,但似乎没有人在回答中提到vim必须使用剪贴板支持编译,这里提到的任何建议都可以使用 . 默认情况下我没有在Mac OS X上配置Mine,我不得不重建vim . 使用此命令查明您是否拥有它
vim --version | grep 'clipboard'
.+clipboard
意味着你很好,这里的建议对你有用,而-clipboard
意味着你必须重新编译和重建vim .总结并让新手更容易,
要复制当前行,请在命令模式下键入:
要复制整个文件/缓冲区,请在命令模式下首先通过
gg
转到开头,然后键入如上所述,这需要
vim --version
vim --version
,这表明剪贴板支持的可用性,-clipboard
表示没有 .我无法复制到我的剪贴板系统,因为我在〜/ .vimrc文件中有这个:
但是,如果您接下来添加此行,它将允许您只需 Ctrl+c 即可将您选择的任何内容添加到剪贴板中 .
原始讨论和更多细节:Copy text out of vim with set mouse=a enabled
如果你在MAC OSX中使用vim,不幸的是它配备了较旧版本,并且没有符合剪贴板选项 . 幸运的是,自制软件可以轻松解决这个问题 .
install vim:
brew install vim --with-lua --with-override-system-vim
install gui verion of vim:
brew install macvim --with-lua --with-override-system-vim
重启终端才能生效 .
将以下行附加到〜/ .vimrc
set clipboard=unnamed
现在你可以用
yy
复制vim中的行并在系统范围内粘贴它 .Updated Method :
多年来我一直对set clipboard方法感到满意 . 最大的缺点是它会弄乱你的剪贴板历史记录,即使你使用
x
进行删除也是如此 . 这是一个更好,更优雅的解决方案 .将vim的文本[范围]复制到系统剪贴板中 . (提示:首先使用
v
或V
选择范围,然后键入冒号:
以激活Ex命令)::[range]yank +
例如 . ,
:5,10y *
(复制/ yank行5-10到系统剪贴板*
寄存器)将系统剪贴板中的内容粘贴到新行上的vim中:
:put +
我的解决方案是安装包含剪贴板选项的附加vim:
如果您使用的是GVim,您也可以
set guioptions+=a
. 这将触发自动复制到您在可视模式下突出显示的文本的剪贴板 .缺点:请注意,在这种情况下,高级剪贴板管理器(带历史记录)将获取所有选择历史记录...
For Ubuntu - July 2018
使用寄存器 "+ 复制到系统剪贴板(即 "+y 而不是 y ) .
同样,您可以从 "+ 粘贴以从系统剪贴板获取文本(即 "+p 而不是 p ) .
您还必须确保编译vim时支持剪贴板 . 尝试:
如果是的话 -xterm_clipboard (减去前缀)然后你做 not 有支持 .
以下是使用具有剪贴板支持的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 )祝好运 .
如果你有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
.也许有人会发现它很有用 . 我想保持独立于X剪贴板,并且仍然能够在两个运行的vims之间复制和粘贴一些文本 . 这个小代码将所选文本保存在temp.txt文件中以进行复制 . 将下面的代码放入.vimrc中 . 使用CTRL-c CTRL-v完成工作 .
vnoremap:w!cp / dev / null~ / temp.txt && cat>〜/ temp.txt
noremap:r!cat~ / temp.txt
将
set clipboard=unnamed
放在vimrc
中 .在
Visual
模式中选择要复制的内容(按v进入) .返回
Normal
模式(按escape [esc]),按y进行复制 .如果要从OS的剪贴板粘贴内容,请在Vim
Normal
模式下按p / P.我是一个Vim newby但是,要将所有文本复制到系统剪贴板(例如,如果你想将它粘贴到文字处理器或其他文本编辑器,如gedit,mousepad等...),在正常模式下:
ggVGy
或者,更简单地说:
:%y
按照建议,我也安装了 vim-gtk 并且放了
set clipboard=unnamedplus
在我的.vimrc中
一切正常
如果要仅复制部分文本,请使用 visual mode (v) ,选择要复制的文本,然后按 y .
最后,我建议剪贴板程序,如Clipman(我最喜欢的),Clipit,Parcellite或类似的 .
(我在Debian Stretch Xfce中使用vim 8.0)
为我的英语请求我! :-)
我在.vimrc中写了一个简单的行来获得复制工作 . 希望这有助于某人 . 不幸的是,我的vim没有安装剪贴板支持,所以这些建议都不适合我 . 基本上,将此行粘贴到.vimrc中:
如果您想阅读有关此功能的详细信息,可以在my blog上阅读此内容 .
对于某些国际键盘,您可能需要按“空格来获得
"
” .因此,在这种情况下,您必须按“Space y或”Space * y
如果您不想为vim使用任何图形界面,并且您更喜欢坚持使用终端仿真器,那么可能会有一个更简单的方法来解决这个问题 . 不要使用yank或类似的东西,首先看一下你使用的终端文档 . 我一直在努力解决同样的问题(试图使用剪贴板和xclip等),最后我发现在我的终端模拟器中只需按shift并选择你要复制的任何文本就足够了 . 而已 . 非常简单,不需要搞乱配置 . (我顺便使用urxvt) .
如果您通过putty连接到unix系统,请按照以下步骤复制文件的内容
突出显示要复制的文本(您可以逐页复制)
按ctrl c(它会将文本复制到剪贴板
粘贴在任何外部编辑器中完成
selecting
在mouse
和right-click copy
的帮助下工作在我的情况下 .我不想要包含行号,所以我
:set nonumber
在copying
之前 .我有问题,因为我的vim不支持 clipboard :
我安装了vim-gnome(支持剪贴板),然后再次检查:
现在我可以分别使用“y和”p进行复制和粘贴 .
上面没有任何东西在我的窗户上工作笔记本电脑 .
Ctrl C很适合复制..但我需要Shift Insert to Paste!
(总是得到一台笔记本电脑的好理由,无需按下辅助键即可随时访问Insert)
对于OSX,就像上面提到的10342答案一样,你需要确保vim支持剪贴板功能,说OSX预先附带的那个不支持剪贴板,如果你运行
brew install vim
它会工作 .除了运行vi仍然会让你运行preshipped OSX版本,而不是你从brew安装的版本 .
为了克服这一点,我简单地将我的vim命令别名为brew版本,而不是OSX默认版本:
而现在我是金色的