vim自己维护了一套register(寄存器)系统, 它的剪切复制等操作的内容都存储在某些register中, 与系统剪切板不互通. 这样有诸多麻烦, 比如不能在不同的vim窗口直接copy数据, 这样当我想把某一列数据复制到另一个窗口中的文件时就很麻烦. 幸好, 使用系统剪切板替代reg就可以解决这个问题.
Ubuntu系统有两个剪切板, 一个叫"X11 selection buffer(选择缓冲区)", 一个叫"clipboard(剪切板)". 输出选择缓冲区的内容按鼠标中键, 输出剪切板的内容点击鼠标右键选择粘贴. vim中"* 寄存器是选择缓冲区, "+ 寄存器是剪切板.
1. ubuntu下默认安装的命令行vim是不支持系统剪切板的, 需要安装
sudo apt-get install vim-gnome
2. 在~/.vimrc中增加一行
set clipboard=unnamed
这样剪切复制的内容就直接存入选择缓冲区了. 我们就可以在一个窗口内复制任意内容到另外一个窗口中粘贴了.
参考: http://www.cnblogs.com/jianyungsun/archive/2011/03/19/1988855.html
技巧1: 在insert mode中使用Ctrl-v粘贴选择缓冲区内容
imap <C-v> <C-r>*
技巧2: 复制一个word到选择缓冲区, 不包含前后空格
map <silent>ew yiw
技巧3: 用选择缓冲区中的内容替换一个word
map <silent>ee "_ciw<C-v><Esc>
技巧4: 用剪切板搜索某已有字符串, 将字符串复制, 再按命令ef即可 (字符串中不能包含某些特殊字符).
map <silent>ef :let @/=@*<cr>nN