如何在Vim中复制到剪贴板?
是否可以直接从Vim复制到剪贴板<代码>yy仅将内容复制到Vim的内部缓冲区。我想复制到操作系统的剪贴板。Vim中是否有任何此类命令,或者您只能在Vim中拖动内容?使用寄存器如何在Vim中复制到剪贴板?,vim,clipboard,Vim,Clipboard,是否可以直接从Vim复制到剪贴板yy仅将内容复制到Vim的内部缓冲区。我想复制到操作系统的剪贴板。Vim中是否有任何此类命令,或者您只能在Vim中拖动内容?使用寄存器“+复制到系统剪贴板(即”+y而不是y) 同样,您可以从“+粘贴以从系统剪贴板获取文本(即“+p而不是p)。寄存器将执行此操作。在Windows中,+和*是等效的。在unix中,+和*之间存在细微的区别: 在Windows下,*和+寄存器 它们是等价的。对于X11系统, 尽管如此,它们却有所不同。对于X11系统, *是选择,+是剪切
“+
复制到系统剪贴板(即”+y
而不是y
)
同样,您可以从
“+
粘贴以从系统剪贴板获取文本(即“+p
而不是p
)。寄存器将执行此操作。在Windows中,+
和*
是等效的。在unix中,+
和*
之间存在细微的区别:
在Windows下,*和+寄存器
它们是等价的。对于X11系统,
尽管如此,它们却有所不同。对于X11系统,
*是选择,+是剪切缓冲区(如剪贴板)。
*
可能是您大多数时候想要的,所以我使用*
,因为它在两种环境中都能正常工作
在Linux发行版中,您必须首先安装vim gtk
(又称gvim
)才能获得剪贴板功能。这是因为非gtk vim通常在没有X11支持的情况下编译。这是为了允许它在仅控制台的机器(通常是服务器)上运行
对于那些在拉或放时对如何使用寄存器感到困惑的人,你只需写
“
,然后写寄存器的名称。因此,要将某些内容复制到剪贴板寄存器,你需要键入”*y
,然后键入”*p
(来源:Kyle Mathews)如果您使用的是GVim,您还可以设置guioptions+=a
。这将触发在视觉模式下突出显示的文本自动复制到剪贴板。缺点:请注意,在这种情况下,高级剪贴板管理器(具有历史记录)将获取您的所有选择历史记录…我无法复制到剪贴板的系统,因为我的~/.vimrc文件中有此项:
if has('mouse')
set mouse=a
endif
但如果您接下来添加这一行,它将允许您只需Ctrl+c即可将所选内容输入剪贴板
vmap <C-c> "+y
vmap“+y
原始讨论和更多详细信息:在vimrc文件中,您可以指定自动使用系统剪贴板进行复制和粘贴 在Windows集合上:
set clipboard=unnamed
在Linux上(vim 7.3.74+):
注意:您可能需要使用最新版本的Vim才能使其正常工作
在Mac上的OSX上
- 复制所选部分:目视选择文本(在正常模式下键入
或v
) 模式)和类型v
:w!pbcopy
- 复制整个文件
:%w!pbcopy
- 从剪贴板粘贴
:r!pbpaste
以上带有pbcopy
或xclip-i-sel c
xsel-i-b
使用pbpaste
或xclip-o-sel-c
xsel-o-b
--注意:如果这些工具(
和xsel
)都没有预装在发行版上,您可能可以在repos中找到它们xclip
vim--version | grep'clipboard'
<代码>+剪贴板意味着你很好,这里的建议对你很有用,而-剪贴板
意味着你必须重新编译和重建vim。我在.vimrc中写了一行简单的代码来实现复制。希望这对别人有帮助。不幸的是,我的vim没有安装剪贴板支持,因此这些建议对我都不起作用。基本上,将这一行粘贴到.vimrc中:
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
map y:e~/clipsongzboardP:w!pbcopy:删除!
如果您想了解这一功能的详细信息,您可以在总结中了解这一功能,让新手更容易理解 要复制当前行,请在命令模式下键入:
"*yy
要复制整个文件/缓冲区,在命令模式下,首先通过gg
转到开头,然后键入
"*yG
如前所述,这需要
+clipboard
出vim--version
,这表明剪贴板支持的可用性,-clipboard
表示否。如果您的vim碰巧没有+xterm_clipboard
选项进行编译,就像Debian和我猜Ubuntu中默认的那样,您可以将所选内容或整个缓冲区传送到处理桌面剪贴板的外部程序。对于xclip
(您可能需要在前面安装),命令将是:w!xclip-sel clip
我的解决方案是安装附加的vim,其中包括剪贴板选项:
sudo apt-get install vim-gnome
也许有人会发现它很有用。我想保持独立于X剪贴板,并且仍然能够在两个运行的Vim之间复制和粘贴一些文本。这段小代码将所选文本保存在temp.txt文件中以便复制。将下面的代码放入.vimrc。使用CTRL-c CTRL-v来执行该作业 虚拟地图:w!cp/dev/null~/temp.txt&&cat>~/temp.txt
诺雷马克:r!cat~/temp.txt对于某些国际键盘,您可能需要按“+空格键以获取
”
因此,在这种情况下,您必须按“Space+y”或“Space*y”
set clipboard=unnamed
放入vimrc
中视觉模式下复制的内容(按v键输入)
Normal
模式下按p/p李>
如果你不想为vim使用任何图形界面,而你更喜欢保持机智
sudo apt-get install vim-gnome
alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"
vim --version | grep clip
-clipboard +insert_expand +path_extra +user_commands
+emacs_tags -mouseshape +startuptime -xterm_clipboard
vim --version | grep clipboard
+clipboard +insert_expand +path_extra +user_commands
+emacs_tags +mouseshape +startuptime +xterm_clipboard
vim --version | grep .xterm_clipboard -o
vim --version
# 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"
set clipboard=unnamed
map <C-y> :w !xclip -sel c <CR><CR>
#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
}
rangecp filename.txt 50 89
rangecp filename.txt 50