Vim的寄存器
在普通的文本编辑器中,进行复制粘贴要用到剪切板。在Vim中没有剪切板的概念,取而代之的是寄存器。Vim寄存器功能更为丰富。大致可以分成以下几类:
匿名寄存器“
命名寄存器a-z
复制寄存器0-9
黑洞寄存器_
表达式寄存器=
只读寄存器%#.:/
系统剪切板寄存器+*
每种寄存器都用一个字符代表,比如命名寄存器用英文字母代表。在Normal模式中引用寄存器要加上双引号作为前缀。在insert模式中引用寄存器内容输入<C-R>reg,寄存器名字前不需要双引号。查看寄存器内容用reg命令。比如:reg "/查看最近一次搜索的模式。reg命令不带任何参数则列出所有的寄存器内容。
Vim代码
--- Registers ---
"" ^J<table>^J <tr>^J <tr>^J<table>^J
"0 <tr>^J <td>KeyStrokes</td>^J <td>Buffer Contents</td>^J </tr>^J
"1 <table>^J
"2 somethingInTheWa
"3 ^J
"4 3) line three^J
"5 2) line two^J
"6 3) line three^J
"7 2) line two^J
"8 3) line three^J
"9 2) line two^J
"b WhseM
"c LocThreshPct
"e H^[
"f ,^[
"g g^[^[^[^[jj^[^[
"j jjjjjjjjjjj?yc?yb
"k kkkkkkkkkkkkkkkkkkkkkkkkkk
"o ^[
"p ^[
"q :let i+=1^Mi^R=i^M. ^[
"y /* Print Information for Analyzer */^J put stream dataout "NEW SHEE
"z 3xic^[f(2xjF(l
"- KeyStrokes
"* 复制寄存器0原先的内容会放到复制寄存器1,
". 4.
": redir @a
"/ xterm_clipboard
"= i-- INSERT ---- INSERT --
匿名寄存器是默认的寄存器,当我们执行删除、修改或复制命令时原先的内容被自动放在匿名寄存器中。如果多次执行删除、修改或复制命令,该寄存器的内容将被覆盖,历史记录不会被保存。执行复制命令除了把内容放到匿名寄存器,还会放到复制寄存器0中去,复制寄存器0原先的内容会放到复制寄存器1,复制寄存器1原先的内容会放到复制寄存器2,以此类推直到复制寄存器9。命名寄存器由a-z 26个构成。往命名寄存器复制内容时使用小写字母会覆盖原先内容,使用大写字母则在原来的内容后添加。命名寄存器不像匿名寄存器一样自动拷贝其内容,必须明确使用才能访问命名寄存器中的内容。
黑洞寄存器相当于Unix中的/dev/null,任何复制到黑洞寄存器的内容会全部清除。该寄存器用下划线表示。利用该寄存器可以将不需要的内容删除而不影响匿名寄存器里的内容。
表达式寄存器用来指定一个vim脚本表达式,该表达式用等于号表示,它的值作为文本取代表达式被引用的地方。利用表达寄存器可以把上次帖子自动加序号基本思路是:
初始化变量i(:let i=0)
然后将光标放在要加序号的文本行首,并进入录制模式
执行:let i+=1回车,按^并进入插入模式,<C-R>=i回车,然后输入点和空格,按q退出录制模式
用Visual Line模式选中其它行,执行ex命令normal @q
只读寄存器存放了一些不能修改的值比如:
最近执行的ex命令(:)
最近搜索的模式(/)
最近插入的行(.)
当前编辑的文件路径(%)
前一次编辑的文件路径(#)
此外,在Vim可以方便地访问到系统剪切板,使用加或星寄存器即可。加和星在X11系统中略有差别。在Windows和Mac OS X中基本没有差别。