今天被vim的复制粘贴弄得很烦,它不像windows那样,每次复制会把以前的内容覆盖。所以有时粘贴出来的东西并不是你想要的。
在不同终端中,用vim打开的两个文件之间的复制粘贴
1. 用同一个终端,直接使用这个命令:
vim file1 file2
这样就可以直接用y和p复制粘贴了。
但是这样比较麻烦,需要在两个文件之间切换。
2. 之所以不能直接用y和p复制粘贴。是因为每个终端中的vim复制的内容存储在不同的地方。在这里我们将存储vim复制到的内容的地方叫做寄存器。
可以使用一下命令查看vim的寄存器的内容:
在vim的normal模式下:
:reg
这样就可以看到寄存器的名字及其存放的内容了。如下图所示:
其中,寄存器的名字都是以“开头的。如果想将 “/ 这个寄存器的内容粘贴到文件中,可以在normal模式下使用如下命令:
”/p
默认按下p粘贴的是 ”“ 这个寄存器的内容。
在这些寄存器中, ”+ 这个寄存器是全局的。也就是说,两文件中,其他寄存器的内容都可以不一样,但是 “+ 这个寄存器的内容是一样的。所以,你可以使用以下命令将内容复制到 ”+ 这个寄存器中:
“+y
然后在另外一个文件中,使用如下命令粘贴;
”+p
这样就可以了实现两个文件之间的复制粘贴了。另外,使用鼠标右键paste粘贴的内容也是 ”+ 这个寄存器的,可以说它就是系统粘贴板。
如果寄存器列表中没有 “+ 这个寄存器,可能是没有安装vim的图形界面所致。
Debian/Ubuntu下可以通过安装vim-gnome解决,命令如下:
$ sudo apt-get install vim-gnome
3. 通过配置 ~/.vimrc 文件实现两个文件之间的复制粘贴。
把下面这段代码贴到你的.vimrc里面去,然后选择一段文本,用xw来copy,在另 外的终端上用xr来贴。原理非常简单,就是利用一个文件来作中转。
" transfer/read and write one block of text between vim sessions
" Usage:
" `from' session:
" ma
" move to end-of-block
" xw
"
" `to' session:
" move to where I want block inserted
" xr
"
if has("unix")
nmap xr :r $HOME/.vimxfer<CR>
nmap xw :'a,.w! $HOME/.vimxfer<CR>
vmap xr c<esc>:r $HOME/.vimxfer<CR>
vmap xw :w! $HOME/.vimxfer<CR>
else
nmap xr :r c:/.vimxfer<CR>
nmap xw :'a,.w! c:/.vimxfer<CR>
vmap xr c<esc>:r c:/.vimxfer<cr>
vmap xw :w! c:/.vimxfer<CR>
endif
参考文章:
http://www.cnblogs.com/end/archive/2012/06/01/2531147.html
http://blog.sina.com.cn/s/blog_66f64e510101bqib.html