VIM使用系列:寄存器与复制粘贴缓冲区

转自: http://www.2cto.com/os/201307/227903.html

VIM使用系列:寄存器与复制粘贴缓冲区
 
现在已经可以熟练使用VIM的大多数基本命令、功能来进行项目代码的开发了,但是在项目的开发过程中,依然会感觉到一些操作效率比较低,比如通过h/j/k/l来进行光标的大范围移动这类操作,显然VIM提供了更高效的命令操作方式。最近经常需要完成的工作就是需要在代码之间来回的复制、粘贴、搜索和替换,常用的d/y/x/p命令已经显得不够,于是学习了一下VIM的寄存器功能,使用寄存器的内容缓冲功能可以极大地提高大量复制粘贴工作的效率。
 
寄存器类型
VIM中有9中类型的寄存器,寄存器的主要功能就是缓存操作过程中删除、复制、搜索等的文本内容,通过 :help registers命令查看寄存器的详细帮助说明,这里对类型翻译如下:
 
未命名寄存器 ""  —— vim使用的默认寄存器,文本来源命令:d/c/s/x/y
10个数字命名寄存器 "0 - "9 —— vim缓存yank和delete行操作命令产生的文本
1个非行删除内容缓存寄存器 "- —— vim缓存delete操作在非行上时产生的文本
26个字母命名寄存器 "a - "z / "A - "Z —— 完全由用户指定内容的寄存器
4个只读寄存器 ". "% "# ": 
表达式寄存器 "= —— 使用VIM强大的表达式功能(从来没用过,一点不懂)
GUI选择寄存器 "* "+ "~ —— vim缓存在GUI中选择的文本
黑洞寄存器 "_ —— 类似Linux中的/dev/null文件,只进不出,可用来滤掉影响默认寄存器的内容
最后搜索模式寄存器 "/ —— 缓存在vim中使用过的最后的搜索内容
这些寄存器很多,那怎么来查看它们的内容呢?使用VIM的 :registers命令或者短一些的 :dis命令,这两个命令会列出所有存在的寄存器的内容,然后你就可以选择指定寄存器的内容进行粘贴了。
 
寄存器使用
注意到上述寄存器的命名前面都有一个双引号,这就是使用他们的方式。
 
在Normal模式下操作d/y/x等命令时,通过在命令前面加入寄存器的名字如 "ayy,来将命令生成的内容放入指定的寄存器中,如上面的a寄存器中,而不是vim默认使用的""寄存器和"0寄存器。
粘贴时,通过在p命令的前面加入寄存器的名字如 "ap,来将寄存器中的内容放入到光标所在的位置行上或下。
只读寄存器、搜索模式寄存器由VIM进行内容放入,用户只能使用他们的内容。
下面对个人觉得在开发中会比较有用和熟悉的一些寄存器进行具体的说明。
数字寄存器
"0 : 存放最近使用最多的y命令生成的文本内容,如果未显式指定其内容
"1 - "9 : 存放最近使用的d行操作命令生成的文本内容,如果未显式指定其内容,并在9个寄存器间对内容进行轮流存放,即有新的内容时,将"1的内容推到"2, 2到3,3到4 ...
字母寄存器
如果你打算将一段内容进行多次长时间的来回拷贝,则最好使用字母寄存器,因为他们的内容被你修改后不会被VIM自动修改掉,而数字寄存器的内容随着新操作的使用会覆盖掉你指定的内容。
 
"a - "z : 每次指定这些寄存器之一时,产生的文本内容将覆盖掉寄存器中原有的内容
"A - "Z : 每次指定这些寄存器之一时,产生的文本内容将追加到寄存器中原有的内容之后,如果选项‘cpoptions‘的值中有>符号,则在追加同时会进行行分割,可以通过命令: :set cpo+=>设置。
只读寄存器
". : 包含最后在vim insert模式下插入的文本内容,也可以通过命令 . 重复上一次的操作。
"% : 包含当前文件的名字,方便在文件中插入文件名
"# : 包含当前可选择的文件名,指在当前会话中使用过的文件的名字
系统剪贴板
在系统中进行多个应用之间的内容拷贝时,会使用到系统剪贴板,这可以使用"*,"+寄存器来将内容粘贴到VIM中,他们也都是只读寄存器。除此之外,还可以使用键盘快捷键Shift+Insert来快速插入。
寄存器内容设置
除了上面介绍的通过在操作命令前添加寄存器号来指定寄存器的内容外,vim还提供了在命令行显式指定寄存器内容的命令 :[email protected],例如命令 :let @a = "vim registers blog", 表示将"a寄存器内容设置为右值。
 
粘贴模式
在vim中可以通过命令 :set paste来设置粘贴模式状态,此时粘贴的内容将可以保持原有的格式不变;通过命令 :set nopaste命令回到正常操作模式。

时间: 2025-01-04 11:40:44

VIM使用系列:寄存器与复制粘贴缓冲区的相关文章

Vim 安装、配置及复制粘贴操作

1.安装:sudo apt-get install vim 2.配置:cd ~ #进入用户主目录 touch .vimrc #.后缀文件不可见 vi .vimrc #打开文件 输入: 1 set cindent 2 3 set shiftwidth=4 4 set tabstop=4 5 set softtabstop=4 6 7 set number 8 set hlsearch 9 syntax on 10 11 set showmode 12 set foldmethod=syntax 1

vim 基本功能 删除 移动 复制 粘贴

删除 移动 复制 粘贴 以下是普通模式下的四种常用操作 Tip:进入普通模式后,如果发现没有行号,可以进入命令行模式去设置,输入 set nu 删除 x 删除一个字母 dw 删除一个单词 dd 删除一行 d1G 删除至首行 dG 删除至尾行 移动 行内移动 b 跳到前面一个单词 w 跳到后面一个单词 0 跳到该行的行首 $ 跳到该行的行尾 Fa 跳到前面一个字母a fa 跳到后面的一个字母a 行间移动 nG 跳到n行 gg 跳到首行 G 跳到尾行 复制 yw 复制一个单词 yy 复制一行 y1G

VIM 选择多行,复制粘贴

进入VIM,比如编辑一个文件, 1.进行选择,是V模式,按V键,进入该模式,然后选择要复制的行 2. 选择好之后,再按y键,即使复制到了 3.然后光标进入要复制的行之后,按一下P键,就粘贴了,oh yeah. 纳尼,说这么多,还没看明白..... 使用的按键是:v -> y->p 参考链接(熊希链接):vim下选中多行,并复制如何做到?求助!!![已解决]

vim一般模式下的复制粘贴

x键一个个的进行删除 shift+x向前删除 5x可以删除5个 d删除一行 p 粘贴 shift+P向上粘贴 u可以把刚才的操作全部还原,最多往回退50次 ctrl+r反撤销 y复制 p粘贴 5y复制5行 db删除一行 v可视 在按上下左右 在按x剪切 在按p粘贴

vim调用系统剪切板复制粘贴

文章参考:http://vim.wikia.com/wiki/In_line_copy_and_paste_to_system_clipboard. 将以下内容添加到~/下的.vimrc " On OSX vmap <C-c> y:call system("pbcopy", getreg("\""))<CR> nmap <C-v> :call setreg("\"",system(

Vim 复制粘贴探秘

Vim作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的事情.每当学会了vim的一个新功能,就会很大地提高工作效率.有人使用vim几十年,还没有完全掌握vim的功能,这也说明了vim的强大.而这样何尝不是一件好事呢,只要有的学习,就有的提高. 最近使用Vim来写博客,发现在Vim中粘贴Python代码后,缩进就全乱了.仔细研究了以下,原来是自动缩进的缘故,于是做如下设置: :set noai nosi 取消了自动缩进和智能缩进,这样粘贴就不会错行了.但在有的vim中不行,还是排

在LINUX终端和VIM下复制粘贴

http://www.tinylab.org/linux-terminal-and-paste-copy-under-vim/ 在GUI界面下,我们可以很自由的复制粘贴.但是在字符界面下,我们不得不用鼠标选定,然后单击右健,选择复制,再到别处去Ctrl-v.并且对于 那些用没有配置过的VIM来说,VIM的粘贴板和X Window的粘贴板还不共享.这在码字的过程中,感觉非常不流畅.下面,我们就尝试解决这个问题. 首先我们得让VIM和X Window共享一个粘贴板,这样我们就可以像在GUI界面下一样

【vim小小记】vim的复制粘贴(包括系统剪贴板)

1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某种功能,只是方向不同,比如: w 跳转到下个word,W:跳转到上个word f 某行正向查找并跳转 F: 反向.... 然后部分双写的字母有行操作: yy 复制一行 dd 删除一行 所以, p就是在当前光标后粘贴,P就是在当前光标前粘贴 另外,说完p,其实还有几个命令有时也是很有用的 gp,和p的功能基本一

vim的复制粘贴小结(转)

原文地址:http://lsong17.spaces.live.com/blog/cns!556C21919D77FB59!603.entry 内容: 用vim这么久 了,始终也不知道怎么在vim中使用系统粘贴板,通常要在网上复制一段代码都是先gedit打开文件,中键粘贴后关闭,然后再用vim打开编辑,真的不 爽:上次论坛上有人问到了怎么在vim中使用系统粘贴板,印象里回复很多,有好几页的回复却没有解决问题,今天实在受不了了又在网上找办法,竟意外地找到 了,贴出来分享一下. 如果只是想使用系统粘