VIM内部和外部的复制粘贴

用vim这么久 了,始终也不知道怎么在vim中使用系统粘贴板,通常要在网上复制一段代码都是先gedit打开文件,中键粘贴后关闭,然后再用vim打开编辑,真的不 爽;上次论坛上有人问到了怎么在vim中使用系统粘贴板,印象里回复很多,有好几页的回复却没有解决问题,今天实在受不了了又在网上找办法,竟意外地找到 了,贴出来分享一下。

如果只是想使用系统粘贴板的话直接在输入模式按Shift+Inset就可以了,下面讲一下vim的粘贴板的基础知识,有兴趣的可以看看,应该会有所收获的。
vim帮助文档里与粘贴板有关的内容如下:

  1. vim(我这是GVIM)有17个粘贴板,分别是"、 0、1、2、...、9、-、*、+、. 、 : 、/:: ;用:reg命令可以查看各个粘贴板里的内容。在vim中简单用y只是复制到“(双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容;
  2. 要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容,然后按"Ny完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按"ay就可以了,有两点需要说明一下:
    • VIM内部("):”号粘贴板(临时粘贴板)比较特殊,直接按y就复制到这个粘贴板中了,直接按p就粘贴这个粘贴板中的内容(也可以说是VIM专用吧);
    • 与外部程序交互(*/+):+号粘贴板是系统粘贴板,用"+y将内容复制到该粘贴板后可以使用Ctrl+V将其粘贴到其他文档(如firefox、gedit)中,同理,要把在其他地方用Ctrl+C或右键复制的内容复制到vim中,需要在正常模式下按"+p;
  3. 要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p("+* 也行)将系统全局粘贴板里的内容粘贴进来 .

1.vim与外部文件的粘帖复制 
ubuntu默认vim是不支持从外部文件与vim之间的粘帖复制,vim有自己的剪切版,分别是”0-”9,”-,”8,”+,”:,”/,”%,”i,这些都是vim的寄存器,可以用命令:reg查看。

 要实现外部文件与vim之间的粘帖和复制,ubuntu需要安装vim-gnome,

 用命令:

 sudo apt-get install vim-gnome安装。

 “+y表示从vim复制到系统剪切版,

 “+p表示从外部文件(系统剪切版)粘帖到vim,

 “+d表示剪切.

"+gp  粘贴并且移动光标到粘贴内容后

2、vim常用复制粘贴命令 
Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P 
PS:

vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某种功能,只是方向不同,比如:

w 跳转到下个word,W:跳转到上个word 
f 某行正向查找并跳转 F: 反向….

然后部分双写的字母有行操作:

yy   复制一行
dd   删除一行
  • 所以,
p就是在当前光标后粘贴,P就是在当前光标前粘贴
  • gp,和p的功能基本一致,只是粘贴完,它会把光标移动至粘贴内容之后;gP同理

:pu[t] ,注意,这个是在命令界面输入的pu/put,它的意思是把x寄存器的内容粘贴到下一行

2、vim的寄存器和系统剪贴板 
寄存器简介 
vim强大之处之一就是它自带一堆寄存器,每个寄存器独立使用,你可以在不同寄存器中存储不同数据,命令,你可以把这个想象成一个加强版的剪贴板,当然它的功能不止剪贴板这么简单。如果你想看vim的官方文档有关部分:

:help  registers

根据官方手册:vim有9种寄存器

There are nine types of registers: registers E354 
1. The unnamed register “” 
2. 10 numbered registers “0 to “9 
3. The small delete register “- 
4. 26 named registers “a to “z or “A to “Z 
5. four read-only registers “:, “., “% and “# 
6. the expression register “= 
7. The selection and drop registers “*, “+ and “~ 
8. The black hole register “_ 
9. Last search pattern register “/

1.无名(unnamed)寄存器:”“,缓存最后一次操作内容;

2.数字(numbered)寄存器:”0 ~”9,缓存最近操作内容,复制与删除有别, “0寄存器缓存最近一次复制的内容,”1-“9缓存最近9次删除内容

3.行内删除(small delete)寄存器:”-,缓存行内删除内容;

4.具名(named)寄存器:”a ~ “z或”A - “0Z,指定时可用;

5.只读(read-only)寄存器:”:,”.,”%,”#,分别缓存最近命令、最近插入文本、当前文件名、当前交替文件名;

6.表达式(expression)寄存器:”=,只读,用于执行表达式命令;

7.选择及拖拽(selection and drop)寄存器:”*,”+,”~,存取GUI选择文本,可用于与外部应用交互,使用前提为系统剪切板(clipboard)可用;

8.黑洞(black hole)寄存器:”_,不缓存操作内容(干净删除);

9.模式寄存器(last search pattern):”/,缓存最近的搜索模式。

至于每个寄存器更加具体的使用方法,我希望大家能查询手册

基本操作

聊聊寄存器的基本操作把

现在输入命令,你就可以查询一下目前寄存器的情况

:reg

寄存器的使用方法也很简单:通过“ 加上 寄存器名,就可以访问特定的寄存器:

"ap      粘贴字母a寄存器内容
"1y      把选取内容复制到数字寄存器1

系统剪贴板

细心的人已经发现我重点标注的寄存器部分了,就是那个选择及拖拽寄存器,这就是系统的剪贴板,我们通常使用的ctrl+c ctrl+v 的内容就保存在这个寄存器中,所以你要把需要复制的内容放在+寄存器中,就可以在gui界面中用粘贴或ctrl+v粘贴了,同理,粘贴在vim中也一样

"+y    复制到系统剪贴板
"+p    粘贴
"+gp  粘贴并且移动光标到粘贴内容后

猜你喜欢

转载自blog.csdn.net/ifreewolf_csdn/article/details/83175832