是否可以直接从Vim复制到剪贴板? yy
只将内容复制到Vim的内部缓冲区。我想复制到操作系统的剪贴板。在Vim中有没有这样的命令,或者你只能在Vim中猛拉东西?
答案 0 :(得分:448)
*
寄存器将执行此操作。在Windows中,+
和*
是等效的。在unix中,+
和*
之间存在细微差别:
在Windows下,*和+寄存器 是等价的。对于X11系统, 但是,他们有所不同。对于X11系统, *是选择,+是剪切缓冲区(如剪贴板)。 http://vim.wikia.com/wiki/Accessing_the_system_clipboard
*
可能是你大多数时候想要的,所以我使用*
,因为它在两种环境中都能按照我的预期运行。
在Linux发行版中,出于某种原因,您必须先安装vim-gtk才能获得剪贴板功能。
对于那些在yanking或put时如何使用寄存器感到困惑的人,你只需要写"
然后写入寄存器的名称。因此,要将某些内容复制到剪贴板注册表,请键入"*y
,然后键入"*p
答案 1 :(得分:297)
在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
xsel
和xclip
),您可以在repos中找到它们 答案 2 :(得分:142)
在vimrc文件中,您可以指定自动使用系统剪贴板进行复制和粘贴。
在Windows上设置:
set clipboard=unnamed
在Linux上设置(vim 7.3.74 +):
set clipboard=unnamedplus
注意:您可能需要使用最新版本的Vim才能使用它们。
答案 3 :(得分:114)
使用注册"+
复制到系统剪贴板(即"+y
而不是y
)。
同样,您可以从"+
粘贴以从系统剪贴板获取文字(即"+p
而不是p
)。
答案 4 :(得分:66)
@Jacob Dalton在评论中提到过这一点,但似乎没有人在回答中提到vim必须使用剪贴板支持编译,这里提到的任何建议都可以使用。默认情况下我没有在Mac OS X上配置我的方式,我不得不重建vim。使用此命令查明您是否拥有vim --version | grep 'clipboard'
。 +clipboard
表示您很好,此处的建议适合您,而-clipboard
表示您必须重新编译并重建vim。
答案 5 :(得分:52)
总结并让新手更轻松,
要复制当前行,请在命令模式下键入:
"*yy
要在命令模式下复制整个文件/缓冲区,首先通过gg
转到开头,然后键入
"*yG
如上所述,这需要+clipboard
vim --version
,表示剪贴板支持的可用性,-clipboard
表示否。
答案 6 :(得分:23)
我无法复制到我的剪贴板系统,因为我在〜/ .vimrc文件中有这个:
if has('mouse')
set mouse=a
endif
但是如果你接下来添加这一行,它将允许你只需 Ctrl + c 来获取无论你在剪贴板中选择了什么。
vmap <C-c> "+y
答案 7 :(得分:20)
如果您在MAC OSX中使用vim,不幸的是它附带了较旧的版本,并且不符合剪贴板选项。幸运的是,自制软件可以轻松解决这个问题。
安装vim:
brew install vim --with-lua --with-override-system-vim
安装vim的vi:
brew install macvim --with-lua --with-override-system-vim
重启终端才能生效。
将以下行追加到〜/ .vimrc
set clipboard=unnamed
现在您可以使用yy
复制vim中的行并将其粘贴到系统范围内。
更新方法:
多年来我一直对set clipboard方法感到满意。最大的缺点是,即使您使用x
进行删除,也会破坏剪贴板历史记录。这是一个更好,更优雅的解决方案。
将vim的文本[范围]复制到系统剪贴板中。 (提示:首先使用v
或V
选择范围,然后键入冒号:
以激活Ex命令):
:[range]yank +
例如,
:5,10y *
(将5-10行复制到系统剪贴板*
注册)
将系统剪贴板中的内容粘贴到新行的vim中:
:put +
答案 8 :(得分:18)
我的解决方案是安装包含剪贴板选项的其他vim:
sudo apt-get install vim-gnome
答案 9 :(得分:16)
对于Ubuntu-2018年7月
使用寄存器“ + 复制到系统剪贴板(即” + y 代替 y )。
同样,您可以从“ + 粘贴以从系统剪贴板中获取文本(即” + p 而不是 p )。
还必须确保vim编译时支持剪贴板。试试:
vim --version | grep .xterm_clipboard -o
,如果它是 -xterm_clipboard (减号),那么您没有获得支持。
以下是一些有关替换具有剪贴板支持的工作版本的vim的说明。
使用vim --version | grep .xterm_clipboard -o
再次检查,您可以确认剪贴板现在可用(即 + xterm_clipboard )
祝你好运。
答案 10 :(得分:14)
如果您使用的是GVim,您还可以set guioptions+=a
。这将触发自动复制到您在可视模式下突出显示的文本的剪贴板
缺点:请注意,在这种情况下,高级剪贴板管理器(具有历史记录)将获取所有选择历史记录...
答案 11 :(得分:10)
如果您的vim恰好在没有+xterm_clipboard
选项的情况下编译,就像默认情况下在Debian中编译而我猜Ubuntu,您可以选择管道选择或整个缓冲区来处理桌面剪贴板的外部程序。对于xclip
(您可能需要先安装),命令将为:w !xclip -sel clip
答案 12 :(得分:10)
你可以在这里找到答案 Arch Wiki
对于Linux:
首先,您必须通过安装在vim版本中启用剪贴板
gvim
。
接下来,您必须将此行放在.vimrc
文件上。
set clipboard=unnamedplus
答案 13 :(得分:8)
仅在ubuntu终端下的vim中,
按List<String> list = new ArrayList<String>();
for(int i = 0; i < arr.length(); i++){
list.add(arr.getJSONObject(i).getString("name"));
}
选择vim中的文本,然后选择终端上的shift + drag mouse
然后ctrl + shift + c
在其他编辑器上
答案 14 :(得分:6)
如果您拥有xclip,则将文本复制到剪贴板的简单方法如下:
y
命令):call system("xclip -selection clipboard", @")
:call system()
运行终端命令。它有两个参数,第一个是命令,第二个是传递给该命令的内容。例如:echom system("head -1", "Hello\nWorld")
返回Hello(带有填充)。 echom返回命令的输出,调用不返回。
xclip -selection clipboard
只是将文本复制到系统剪贴板,而不是默认的X剪贴板(通过中间的Moue按钮访问)。
@"
返回最后被选中的文本。 “是默认寄存器,但是您可以使用任何寄存器。要查看所有寄存器的内容,请输入:registers
。
答案 15 :(得分:4)
也许有人会发现它很有用。我想保持独立于X剪贴板,并且仍然能够在两个运行的vims之间复制和粘贴一些文本。这个小代码将所选文本保存在temp.txt文件中以进行复制。将下面的代码放入.vimrc中。使用CTRL-c CTRL-v完成工作。
vnoremap:w!cp / dev / null~ / temp.txt&amp;&amp;猫&gt; 〜/ TEMP.TXT
noremap:r!cat~ / temp.txt
答案 16 :(得分:4)
set clipboard=unnamed
放入vimrc
。Visual
模式下选择要复制的内容(按v进入)。Normal
模式(按escape [esc]),按y复制。Normal
模式下按p / P. 答案 17 :(得分:3)
这个问题已经有很多答案。我正在添加我认为快速的方法。
您可以快速按V
(Shift + v)进入活动的视觉模式。在可见模式下,您可以使用j
和k
选择要复制的文本。选择后,使用
"*y
现在,选定的文本已复制到剪贴板。
答案 18 :(得分:3)
我在Mac OS X(10.15.3)上,并且是vim的新手。我觉得这很令人沮丧,这里的所有答案都太复杂和/或不适用于我的情况。我最终以两种方式使它工作:
key mapping that uses pbcopy:适用于Mac随附的旧版vim。
将
vmap '' :w !pbcopy<CR><CR>
添加到您的〜/ .vimrc
现在,您可以直观地选择并点击''
(两个撇号)以复制到剪贴板
安装较新版本的vim,这样我就可以访问在其他答案中最推荐的解决方案:
brew install vim
alias vim=/usr/local/bin/vim
(应将其添加到您的〜/ .bashrc或等效文件中)
现在您可以直观地选择并点击"+yy
以复制到剪贴板
答案 19 :(得分:3)
我的解决方案是将以下行添加到.vimrc:
map <C-y> :w !xclip -sel c <CR><CR>
该脚本使用Ctrl + y将选定的行(可视模式)或文件内容(如果未选择)复制到剪贴板。如果这很重要,我正在使用Manjaro Linux。
答案 20 :(得分:3)
我是Vim newby但是,要将所有文本复制到系统剪贴板(例如,如果要将其粘贴到文字处理器或其他文本编辑器,如gedit,mousepad等...),则在正常模式下:< / p>
ggVGy
或更简单地说:
<强>:%Y 强>
根据建议,我还安装了 vim-gtk 并添加了
设置clipboard = unnamedplus
在我的.vimrc
中一切正常
如果您只想复制部分文字,请使用可视模式(v),选择要复制的文字,然后按 y 。
最后,我建议剪贴板程序,如Clipman(我最喜欢的),Clipit,Parcellite或类似的。
(我在Debian Stretch Xfce中使用vim 8.0)
为我的英语请求我! : - )
答案 21 :(得分:2)
此答案特定于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
现在,您可以将文本拖到系统剪贴板。 以下步骤说明了如何拉动。
press v
中,这会将您切换到VISUAL模式。Press y
,这会将选定的文本复制到剪贴板。CMD + v
粘贴。我将MacBook Pro与macOS Mojave一起使用,并且可以在其中使用上述功能。
答案 22 :(得分:2)
如果你不想为vim使用任何图形界面,而你更喜欢坚持使用终端模拟器,那么解决这个问题可能会有一个更简单的方法。不要使用yank或类似的东西,首先看一下你使用的终端文档。我一直在努力解决同样的问题(尝试使用+剪贴板和xclip等等),最后我发现在我的终端模拟器中它只需按下shift并选择任何文本你想要复制。就是这样。非常简单,不需要搞乱配置。 (顺便说一下,我使用urxvt。)
答案 23 :(得分:2)
对于某些国际键盘,您可能需要按“ + Space 才能获得"
。
所以在这种情况下你必须按“ Space + y 或”< / KBD> 空间 * ý
答案 24 :(得分:2)
我在.vimrc中写了一个简单的行,以便复制工作。希望这有助于某人。不幸的是,我的vim没有安装剪贴板支持,所以这些建议都不适合我。基本上,将此行粘贴到.vimrc中:
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
如果您想阅读有关此功能的详细信息,可以在my blog
上阅读相关内容。答案 25 :(得分:1)
对于OSX,就像上面提到的10342答案一样,你需要确保vim支持剪贴板功能,表示OSX预先附带的那个不支持剪贴板,如果运行
var count = 0 ;
$('#inputEmail').focusout ( function(){
var color = "";
if ( $(this).val() == '' ){
count++;
color = "red"; /* Update variable */
$(this).css('border-color',color);
console.log('No of times input box focused out: ' + count + ' Current border color: ' + color);
} else {
color = "green"; /* Update variable */
$(this).css('border-color', color);
console.log(' Current border color ' + color);
}
});
它会起作用。
除了运行vi仍然会让你运行preshipped OSX版本,而不是你从brew安装的版本。
为了克服这个问题,我简单地将我的vim命令别名为brew版本,而不是OSX默认版本:
brew install vim
现在我是金色的
答案 26 :(得分:1)
我遇到了问题,因为我的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进行复制和粘贴。
答案 27 :(得分:1)
如果您通过putty连接到unix系统,请按照以下步骤复制文件内容
答案 28 :(得分:1)
我在这个问题上看到了很多答案,而完成这项工作的方法是多种方法的结合。
我将vim复制到系统剪贴板的步骤是
sudo apt remove vim
卸载 vim。 (我懒得找到如何使用 +clipboard 支持重新编译它。sudo apt install vim-athena
安装一个名为 vim-athena 的不同 vim 包。~/.vimrc
:set clipboard=unnamedplus
。source %
来获取文件。注意: 我使用的是 Ubuntu 20.04。
答案 29 :(得分:1)
我在复制到剪贴板时遇到了很多困难。在 Vim 中,使用可视模式非常简单,但如果你想复制到剪贴板,事情就很麻烦了。我有使用 xclip 实用程序进行复制的简单方法。为此,您必须先安装 xclip。
整个文件很简单
xclip -sel clip filename
但是如果您只想复制特定范围的行号
tail -n +[n1] filename | head -n [n2] | xclip -sel clip
你可以使用 ~/.bashrc 来简化这个
#rangecp copy lines from n1 to n2 from a given file to clipboard
function rangecp()
{
if [ -f $1 ]
then
if [ ! -z $3 ]
then
diff=$(($3 - $2 + 1))
#diff=`expr $3 - $2 + 1`
tail -n +$2 $1 | head -n $diff | xclip -sel clip
elif [ ! -z $2 ]
then
tail -n +$2 $1 | xclip -sel clip
else
echo "Provide a range from [n1] lines to [n2] lines"
fi
else
echo "[ $1 ] file doesn't exist"
fi
}
然后
source ~/.bashrc
使用方法
rangecp filename.txt 50 89
rangecp filename.txt 50
答案 30 :(得分:0)
我已经使用这些多年了:
nnoremap Y "+y
vnoremap Y "+y
nnoremap yY ^"+y$
您现在可以只使用大写 Y
复制到剪贴板,小写 y
不会受到影响,例如与 set clipboard=unnamed
相同,因此您仍然可以选择是否将副本放入剪贴板。
在 ubuntu 21.04、vim 8.2 上测试。
答案 31 :(得分:0)
我想补充一种将行复制到剪贴板并在功能上使用的方法。
下面是在浏览器中打开URL的示例
let g:chrome_exe = 'C:/.../Google/Chrome/Application/chrome.exe'
function OpenURL()
" copy the line and put it in the register *
normal "*yy
:execute "silent !start ".g:chrome_exe." ".getreg("*")
endfunction
map ,url :call OpenURL()<CR>
答案 32 :(得分:0)
在我的实例中,通过用鼠标突出显示(单击和拖动)来选择文本导致vim进入可视模式。
无论如何,在Mac上,最简单的解决方案是使用'multipart/form-data'
以避免进入可视模式。
如果您希望默认情况下避免这种行为,则可以编辑vimrc
答案 33 :(得分:0)
到目前为止,我一直在MacOsX上使用键盘快捷键来为此苦苦挣扎。 我知道问题不在于使用键盘短裤。但这可能会帮助那些同样担心的人。
我发现,如果您取消选中:
查看->允许鼠标报告
从“终端”菜单中,您将可以使用
复制到剪贴板再次命令 + c
。
答案 34 :(得分:0)
答案 35 :(得分:0)
我的Windows笔记本电脑上面没有任何功能。
Ctrl + C 可以复制..但我需要 Shift + 插入以粘贴!
(总是可以在不按二级密钥的情况下随时访问 Insert 的笔记本电脑的一个很好的理由)