是否可以直接从 Vim 复制到剪贴板? yy
仅将内容复制到 Vim 的内部缓冲区。我想复制到操作系统的剪贴板。 Vim 中有没有这样的命令,或者你只能在 Vim 中拉取东西?
sudo apt-get install vim-gnome
在应用以下这些命令之前,否则您将收到 Invalid Register 错误!
vim-gnome
可能在他们的操作系统/发行版中过度使用或根本不可用,而我怀疑 vim-gtk
并且最好是 vim-gtk3
更有可能存在并提取更少的依赖项,同时仍提供剪贴板集成(至少对于那些还在 X11 上的人来说;我不确定这一切是如何与 Wayland 交互的)。
*
寄存器将执行此操作。在 Windows 中,+
和 *
是等效的。在 unix 中,+
和 *
之间存在细微差别:
在 Windows 下,* 和 + 寄存器是等效的。但是,对于 X11 系统,它们有所不同。对于 X11 系统,* 是选择,+ 是剪切缓冲区(如剪贴板)。 http://vim.wikia.com/wiki/Accessing_the_system_clipboard
*
可能是您大部分时间想要的,所以我使用 *
,因为它在两种环境中都能正常工作。
在 Linux 发行版中,您必须先安装 vim-gtk
(又名 gvim
)才能获得剪贴板功能。这是因为非 gtk vim 通常在没有 X11 支持的情况下编译。这是为了允许它在仅控制台的机器(通常是服务器)上运行。
对于那些在 yanking 或 put 时如何使用寄存器感到困惑的人,您只需写 "
然后是寄存器的名称。因此,要将某些内容复制到剪贴板寄存器,请输入 "*y
,然后输入 "*p
(来源:Kyle Mathews)
在 Mac OS X 上
复制所选部分:直观地选择文本(在正常模式下输入 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 -- 注意:如果这些工具(xsel 和 xclip)都没有预装在您的发行版上,您可能可以在 repos 中找到它们
vnoremap <C-c> :w !pbcopy<CR><CR> noremap <C-v> :r !pbpaste<CR><CR>
要使用此映射,如果要复制,请在可视模式下突出显示文本并按 Ctrl-c 进行复制。要从系统剪贴板粘贴,请按 Ctrl-v。
vnoremap <C-C> :w !xclip -i -sel c<CR><CR>
:w !pbcopy
或 :%w !pbcopy
复制整个文件
在您的 vimrc 文件中,您可以指定自动使用系统剪贴板进行复制和粘贴。
在 Windows 设置上:
set clipboard=unnamed
在 Linux 集 (vim 7.3.74+) 上:
set clipboard=unnamedplus
注意:您可能需要使用最新版本的 Vim 才能使这些工作。
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
+xterm_clipboard
功能(运行 vim --version
时可见)。我就是这种情况(运行 Kubuntu 12.10)。我必须安装 vim-gui-common
软件包才能获得正确的功能。
set clipboard=unnamed
适用于 Mac OS 10.11.6 (El Capitan) 和 vim 7.4
ggvGGy
set clipboard^=unnamed,unnamedplus
将为 Windows 和 Linux 解决这个问题。不确定Mac。
使用寄存器 "+
复制到系统剪贴板(即 "+y
而不是 y
)。
同样,您可以从 "+
粘贴以从系统剪贴板获取文本(即 "+p
而不是 p
)。
+
/*
的区别是 SELECTION
与 PRIMARY
复制缓冲区(不记得哪个是哪个 atm)
"+yy
(复制行到剪贴板)和"+yy
(复制行到选择); "+p
(从剪贴板粘贴)和 "*p
(从所选内容粘贴)。 "
是选择寄存器,它是 vim 自己的内部寄存器,默认情况下(yy
和 p
将在不引用 any 类型的寄存器的情况下工作)。 PS:我想知道 Vim 自己的内部寄存器是否有一个字符,例如 "&yy
,默认情况下会变成 yy
。
@Jacob Dalton 在评论中提到了这一点,但似乎没有人在回答中提到必须使用剪贴板支持编译 vim 才能使此处提到的任何建议起作用。默认情况下,我的 Mac OS X 上没有这样配置,我不得不重建 vim。使用此命令来确定您是否拥有它 vim --version | grep 'clipboard'
。 +clipboard
表示你很好,这里的建议对你有用,而 -clipboard
表示你必须重新编译和重建 vim。
brew install vim
。在 Ubuntu 上,您可以使用 sudo apt-get install vim-gnome
。在其他(非 GNOME)Linux 发行版上,您可能宁愿安装 vim-gtk
或 vim-athena
。
brew install vim
之后,我将 set clipboard=unnamed
添加到 .vimrc。在命令行中运行 source ~/.vimrc
。在 .bash_profile 中,我添加了 alias vim="/usr/local/bin/vim"
,然后运行 source ~/.bash_profile
。现在在 vim 中只需使用 y
和 p
来复制/粘贴
总结一下,方便新手,
要复制当前行,请在命令模式下键入:
"*yy
要复制整个文件/缓冲区,在命令模式下,首先通过 gg
转到开头,然后键入
"*yG
如前所述,这需要 vim --version
中的 +clipboard
,这表明剪贴板支持的可用性,-clipboard
表示不支持。
"*5yy
说 5 lines yanked
但剪贴板中什么也没有?操作系统/x。
.vimrc
中的 nnoremap <leader>c "*
可以很好地用作各种“副本”,然后是一个动作,将您想要复制到操作系统剪贴板中的文本对象抓取。
vim-gtk
以将 -clipboard
变成 +clipboard
,而不是 "+yy
工作。
"+yG
。
对于 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(或 sudo apt-get install vim-gtk3 用于较新的 Ubuntu 版本)
使用 vim --version | grep .xterm_clipboard -o
再次检查,您可以确认剪贴板现在可用(即。+xterm_clipboard)
祝你好运。
set clipboard=unnamedplus
放入我的 .vimrc
文件中才能使 yank 工作。我正在使用 Ubuntu 18.04。
如果您在 MAC OSX 中使用 vim,不幸的是它带有较旧的版本,并且不符合剪贴板选项。幸运的是,自制软件可以轻松解决这个问题。
安装vim:
brew install vim
安装vim的gui版本:
brew install macvim
重启终端生效。
将以下行追加到 ~/.vimrc
set clipboard=unnamed
现在您可以使用 yy
在 vim 中复制该行并将其粘贴到系统范围内。
更新方法:
多年来,我从未对设置剪贴板方法感到满意。最大的缺点是它会弄乱您的剪贴板历史记录,即使您使用 x
进行删除也是如此。这是一个更好,更优雅的解决方案。
将 vim 的文本 [range] 复制到系统剪贴板中。 (提示:先使用 v 或 V 选择范围,然后输入冒号 : 以激活 Ex 命令): :[line-range]yank + 例如 :5,10y * (复制/将第 5-10 行复制到系统剪贴板 * 注册) 将系统剪贴板中的内容粘贴到 vim 中的新行: :put +
笔记:
如果您选择一个单词范围,上述将不起作用。使用 "*y 或 "+y 将此可视块保存到剪贴板。但是这很难输入,我仍在考虑替代方案。 :help "* 或 :help *+ 获取更多信息 brew info vim 将能够看到安装 vim 的其他选项。目前它没有任何其他选项。
--with-override-system-vim
应该是 --with-override-system-vi
我无法复制到剪贴板的系统,因为我的 ~/.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 用户。
MAC 可用的默认 VIM 没有启用剪贴板选项。您需要该选项才能访问系统剪贴板。
要检查您的 vim 是否启用了该选项,请使用以下命令
vim --version
结果,您应该有 +clipboard
。如果是 -clipboard
,那么你的 VIM 没有访问系统剪贴板的选项。
你需要使用你需要的选项来制作和安装你的 VIM。以下是命令。
# Create the directories you need
$ sudo mkdir -p /opt/local/bin
# Download, compile, and install the latest Vim
$ cd ~
$ git clone https://github.com/vim/vim.git
$ cd vim
$ ./configure --prefix=/opt/local
$ make
$ sudo make install
# Add the binary to your path, ahead of /usr/bin
$ echo 'PATH=/opt/local/bin:$PATH' >> ~/.bash_profile
# Reload bash_profile so the changes take effect in this window
$ source ~/.bash_profile"
以上将安装启用选项 +clipboard
的最新 VIM。
现在您需要设置系统剪贴板。将以下行附加到 ~/.vimrc
set clipboard=unnamed
现在您可以将文本拉到系统剪贴板。下面的步骤解释了如何拉动。
在 vim 命令模式下按 v,这会将您切换到 VISUAL 模式。四处移动光标以选择需要复制的文本或行。按 y,这会将选定的文本复制到剪贴板。转到任何外部应用程序和 CMD + v 粘贴。
我将 MACBook Pro 与 macOS Mojave 一起使用,上面的方法可以在其中使用。
仅在 ubuntu 终端下的 vim 中,
按 shift + drag mouse
在 vim 中选择文本,然后在终端上按 ctrl + shift + c
然后 ctrl + v
在其他编辑器上
我的解决方案是安装包含剪贴板选项的附加 vim:
sudo apt-get install vim-gnome
"+y
建议仅适用于 vim-gnome
。使用 Linux Mint 18.2。
您可以在这里找到答案Arch Wiki
对于 Linux:首先您必须通过安装 gvim
在您的 vim 版本中启用剪贴板。
接下来,您必须将此行放在您的 .vimrc
文件中。
set clipboard=unnamedplus
如果您使用 GVim,您也可以set guioptions+=a
。这将触发自动将您在可视模式下突出显示的文本复制到剪贴板。
缺点:请注意,在这种情况下,高级剪贴板管理器(带有历史记录)将获取您的所有选择历史记录……
这个问题已经有很多答案了。我正在添加我认为很快的方式。
很快,您可以按 V
(Shift + v) 进入活动视觉模式。在可见模式下,您可以使用 j
和 k
选择要复制的文本。选择后,使用
"*y
现在,选定的文本被复制到剪贴板。
我已经使用这些多年了:
nnoremap Y "+y
vnoremap Y "+y
nnoremap yY ^"+y$
您现在可以只使用大写 Y
复制到剪贴板,而小写 y
不会受到影响,例如受 set clipboard=unnamed
影响,因此您仍然可以选择是否复制到剪贴板。
在 ubuntu 21.04、vim 8.2 上测试。
vim
,并且该软件包不支持 clipboard
,因此键盘映射对我不起作用,所以我用 vim-clipboard
软件包替换了我的 vim
软件包,然后剪贴板现在可用并且键盘映射在职的。
如果你有 xclip 一种将文本复制到剪贴板的简单方法,如下所示:
Yank 要复制的文本。 (原版 vim 中的 y 命令)输入 :call system("xclip -selection clipboard", @")
:call system()
运行终端命令。它需要两个参数,第一个是命令,第二个是要通过管道传递给该命令的内容。例如 :echom system("head -1", "Hello\nWorld")
返回 Hello(带有一些填充)。 echom 返回命令的输出, call 不返回。
xclip -selection clipboard
只是将文本复制到系统剪贴板,而不是默认的 X 剪贴板,(通过中间的鼠标按钮访问)。
@"
返回最后被抽出的文本。 " 是默认寄存器,但您可以使用任何寄存器。要查看所有寄存器的内容,请键入 :registers
。
:call system("pbcopy",@")
。可以将此命令绑定到一个键。
如果你的 vim 碰巧在没有 +xterm_clipboard
选项的情况下编译,就像 Debian 和我猜是 Ubuntu 一样,你可以将选择或整个缓冲区通过管道传输到处理桌面剪贴板的外部程序。对于 xclip
(您可能需要之前安装),命令将是 :w !xclip -sel clip
vim --version
时显示的标志中看到 -xterm_clipboard
。
几个月来我一直在使用键盘快捷键在 MacOsX 上为此苦苦挣扎。我知道问题不在于使用键盘短裤。但这可能会帮助有同样问题的人。
我发现如果你取消选中:
查看 -> 允许鼠标报告
从终端菜单,您将能够使用复制到剪贴板
命令 + c
再次。
⌘ + R
= "查看 -> 允许鼠标报告" 👍🏻
把 set clipboard=unnamed 放到你的 vimrc 中。在可视模式下选择要复制的内容(按 v 进入)。返回正常模式(按 escape[esc]),按 y 复制。如果你想从操作系统的剪贴板粘贴一些东西,在 Vim 普通模式下按 p/P。
我是 Vim 新手,但是,在正常模式下将所有文本复制到系统剪贴板(例如,如果你想将其粘贴到文字处理器或其他文本编辑器,如 gedit、鼠标垫等......):
ggVGy
或者,更简单地说:
:%y
正如建议的那样,我还安装了 vim-gtk 并把
设置剪贴板=未命名加号
在我的 .vimrc
一切正常
如果您只想复制部分文本,请使用可视模式 (v),选择要复制的文本并按 y。
最后,我建议使用 Clipman(我最喜欢的)、Clipit、Parcellite 或类似的剪贴板程序。
(我在 Debian Stretch Xfce 中使用 vim 8.0)
原谅我的英语! :-)
我的解决方案是将以下行放入 .vimrc:
map <C-y> :w !xclip -sel c <CR><CR>
该脚本使用 Ctrl + y 将选定的行(通过可视模式)或文件内容(如果未选择)复制到剪贴板。如果这很重要,我正在使用 Manjaro Linux。
vi
/vim
也许有人会发现它很有用。我想独立于 X 剪贴板,并且仍然能够在两个正在运行的 vim 之间复制和粘贴一些文本。这个小代码将选定的文本保存在 temp.txt 文件中以进行复制。将下面的代码放入您的 .vimrc 中。使用 CTRL-c CTRL-v 来完成这项工作。
vnoremap :w !cp /dev/null ~/temp.txt && cat > ~/temp.txt
noremap :r !cat ~/temp.txt
如果您不想为 vim 使用任何图形界面,而您更喜欢只使用终端仿真器,则可能有一种更简单的方法来解决这个问题。不要使用 yank 或类似的东西,先看看你使用的终端的文档。我一直在为同样的问题苦苦挣扎(尝试使用 +clipboard 和 xclip 等),最后发现在我的终端模拟器中,只需按下 shift 并选择要复制的任何文本就足够了。而已。很简单,不需要搞乱配置。 (顺便说一下,我使用 urxvt)。
我遇到了问题,因为我的 vim 不支持剪贴板:
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 进行复制和粘贴。
我在 mac osx (10.15.3) 和 vim 新手。我发现这很令人沮丧,这里的所有答案都太复杂和/或不适用于我的情况。我最终以两种方式完成了这项工作:
使用 pbcopy 的键映射:适用于 mac 附带的旧版本 vim。添加 vmap '' :w !pbcopy
我在我的 .vimrc 中写了一个简单的行来让复制工作。希望这可以帮助某人。不幸的是,我的 vim 没有安装剪贴板支持,所以这些建议都不适合我。基本上,将此行粘贴到您的 .vimrc 中:
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
如果您想详细了解它的作用,可以在 my blog 上阅读
对于某些国际键盘,您可能需要按 "+Space 来获得 "
。
因此,在这种情况下,您必须按“Space+y 或”Space*y
对于 OSX,就像上面明确的 10342 答案一样,你需要确保 vim 支持剪贴板功能,说 OSX 预装的那个不支持剪贴板,如果你运行 brew install vim
它会工作.
除了运行 vi 仍然会让你运行预装的 OSX 版本,而不是你从 brew 安装的那个。
为了克服这个问题,我只是将我的 vim 命令别名为 brew 版本,而不是 OSX 默认的:
alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
现在我是金色的
在我的实例中,通过用鼠标突出显示(单击并拖动)来选择文本导致 vim 进入可视模式。
无论如何,在 Mac 上,最简单的解决方案是使用 fn + mouse click and drag
来避免进入可视模式。
如果你希望默认避免这种行为,你可以编辑你的 vimrc
不定期副业成功案例分享
vim --version|grep .xterm_clipboard -o
,如果是-
,那么您没有支持。根据 ubuntuforums.org/showthread.php?t=1686955 下载不同的版本+
注册。例如,如果您想将三行复制到系统的剪贴板,请使用v3j"+y
之类的命令,然后您可以将它们粘贴到另一个应用程序或另一个 VIM 中。在 Linux 下使用*
寄存器只能在不同的 VIM 应用程序之间进行复制和粘贴。