vim 寄存器使用

vim 寄存器使用

vim Posted by crackfree on August 24, 2017
## 前言 --- 使用vim需要粘贴复制的多了,系统剪贴板不能存多个值,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中使用过的最后的搜索内容 未命名寄存器(The Unnamed Register) 当使用y命令复制文本,或使用d、c、s、x命令删除文本时,文本将自动被放入""未命名寄存器。即使你在复制或删除文本时,已经指定了寄存器(例如使用"xdd命令),这些文本也将会被同时放入"x和""寄存器。 数字寄存器(The Numbered Registers) "0始终存放最近删除的文本。"1也包含上次删除的文本。区别在于:"0不断被删除的文本所覆盖;而如果删除文本时,指定了寄存器或者文本小于一行,那么"1将不会被更新。 数字寄存器1-9可以看作是删除历史, 你可以从中找到早先删除的文本。比如你使用了三次dd命令,那么这三行文本被分别存放在寄存器1,2,3中,可以通过命令"1P,"2P,"3P将这些文本再粘贴回来。 短删除寄存器(The Small Delete Register) 当删除少于一行的文本时,除非指定了某个寄存器,否则这些内容将会被放入"-短删除寄存器中。 命名寄存器(The Named Registers) 当文本被放入以小写字母命名的寄存器(例如"a)时,该寄存器原有的内容将被覆盖;而使用以大写字母命名的寄存器(例如"A)时,将会把文本追加到原有内容之后。 只读寄存器(The Read-Only Registers) 你只能从4个只读寄存器中粘贴内容,而不能放入文本。"%包含当前文件名;"#包含交替文件名;".包含最近插入的文本;":包含上次执行的命令行。 表达式寄存器(The Expression Register) 当我们输入"=,就会在Vim底部显示一个以“=”开始的提示行,可以在这里输入表达式并按回车键确认。随后使用命令p将表达式的结果粘贴到文本中。例如要在文本中插入38*56的值,首先进入命令模式,输入"=,在屏幕底部的提示行中输入“38*56”并按回车,然后输入命令p,这样就可以将计算结果插入文本中了。在表达式寄存器中,不仅可以使用通常的算术运算符,还可以使用Vim特定的函数和运算符。例如通过表达式寄存器来得到环境变量的值(例如"=$HOME)。如果没有输入任何表达式而直接按回车键,那么Vim将执行最近使用过的表达式。 选择和拖拽寄存器(The Selection and Drop Registers) 有3个寄存器用于保存选中的文本:"*用于访问系统剪切板。在Windows下,"*和"+相同;在Linux下,"+包含选中的文本,"*包含复制的文本。使用"+y命令,可以将当前选中的文文本复制到系统剪切板中。而"+p命令,则可以粘贴系统剪切板中的内容。通过剪切板寄存器,能够在不同的Vim编辑器或者是其他应用程序之间,进行文本交换。"~包含上次从其它应用程序拖拽到Gvim中的文本。 黑洞寄存器(The Black Hole Register) 任何放入"_中的文本都将不复存在。如果想要永久删除某些文本而不是将他放入1-9中的某个寄存中,就可以使用黑洞寄存器。例如:命令dd将删除一行文本并将其放入寄存器1中;而命令"_dd则将该行文本放入黑洞寄存器中,这些文本也就会永久消失了,而寄存器1中的文本会保持不变。 搜索模式寄存器(Search Pattern Register) 当你通过/命令进行搜索时,所使用的模式将自动被放入"/寄存器。 这些寄存器很多,那怎么来查看它们的内容呢? 1. 查看寄存器中内容 :reg 查看指定寄存器中内容 :reg {register name} ## 使用方法 --- - 调取寄存器 1. NORMAL Mode:"{register_name} 2. COMMAND MODE:+"寄存器名称 (输入后VIM会自动打出"寄存器引用符号。 3. INSERT MODE:+寄存器名称(无需输入寄存器引用符号") - 复制到寄存器 在复制或删除文本时,可以使用"register命令将文本放入指定的寄存器中。例如以下命令,将复制的文本放到寄存器a中,同时文本也会被放入未命名寄存器中。 "ayy 如果再使用相应的大写字母来指定寄存器,那么会将当前行内容追加到寄存器a中,这时该寄存器中就有了两行文本。 "Ayy - 从寄存器粘贴 命令:put会将寄存中的内容粘贴到指定的文本行后面。使用以下命令,可以将寄存器中的内容粘贴到第五行的后面: :5put a 如果要将文本放在这一行的前面,可以用以下命令: :5put! a 你也可以使用p命令,将x寄存中的文本粘贴到光标之后: "xp 而P命令,则将x寄存中的文本粘贴到光标之前: "xP 如果直接使用p或P命令,而没有指明特定寄存器,那么将粘贴未命名寄存器中的内容。 使用以下命令,可以粘贴上次插入的文本,方便你录入重复的内容: ".P 如果要粘贴系统剪切板中的内容,在Insert mode下可以利用快捷键Shift+Ins,而在Normal mode下,可以使用以下命令: "*p - 剪切板与自动缩进indent 如果开启了set autoindent,在粘贴具有格式缩进的文本时(如python程序),粘贴的结果将会是缩进混乱的,因为set autoindent的影响。 解决这个问题有两个方法: 1. 使用set paste模式 开启paste模式后,autoindent等缩进功能将会被屏蔽,粘贴格式就会不受影响。 每次手工开启关闭paste模式将会比较麻烦,可以在_vimrc中为其设置一个快捷键,每次需要时按一下即可切换:set pastetoggle= 2. 使用普通模式的"+p命令 3. 插入模式输入"+ ## 参考链接 --- - [http://www.jianshu.com/p/82b5eb3ae305](http://www.jianshu.com/p/82b5eb3ae305) - [https://my.oschina.net/shelllife/blog/144357](https://my.oschina.net/shelllife/blog/144357) - [http://liuzhijun.iteye.com/blog/1830931](http://liuzhijun.iteye.com/blog/1830931)

test: test