vim寄存器和变量类型

来源:互联网 发布:vba连接oracle数据库 编辑:程序博客网 时间:2024/04/30 11:38

一.官方帮助手册

:help registers

:help :registers

二: 寄存器分类

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         查看所有寄存器内容

:reg 寄存器名  查看单个寄存器内容   比如 :reg _        :reg *            :reg 1           :reg 9          :reg a 等等



数字寄存器,也是最常用的 从0-9。 如果不指定寄存器的名字,那么删除的内容,vim默认是存到 1 ,复制内容是存到 0 号寄存器。 如果继续删除,那么原来 1 的内容就转到 2,类推,当删除超过9的时候, 原先的 8号数字寄存器就转到9, 原先9的数字寄存器内容就会丢失。


实验1:

先在vim里面输入1-0 10个数字,每个数字一行,接着从0 9 8 7 6 5 4 3 2 依次dd删除,然后:reg查看寄存器,接着yy复制数字1的这行,可以看见"0 寄存器 的值是1

“1 ~ ”9 寄存器依次是 2~0

使用p来粘贴,如果最近一次操作是复制,那么p就会添加 “0 寄存器的内容,如果最近一次操作是删除那么就添加 "1 寄存器的内容 ,如果要粘贴其它数字寄存器的内容,

使用 "?p 来粘贴,比如要粘贴 “2 寄存器里面的,则在vim命令模式下 输入 "2p 就可以取出“2寄存器里面的内容了

其他的寄存器都是通过 "?p 来访问使用的。


具名寄存器(字母寄存器),也就是名称是单个英文字母, "a "b "c ,....,"z , 使用时,在复制或者删除命令 y 或者 d 时,在前面加上字母寄存器的字母名称就可以了, 或者是直接在删除或者复制命令后 加上字母寄存器的字母 比如  :y n 就是复制当前行到 “n 字母寄存器  :5,10y m 复制5到10行内容到 “m 字母寄存器 

:pu! n  将字母寄存器 “n的内容粘贴到当前行之前 也可以使用 "mP 效果一样

:p n  粘贴字母寄存器 ”n 的内容到当前行的下一行 也可以使用 "np 效果一样

(命令模式下  :y :d :pu 分别是复制 删除 和粘贴

一般模式下 "寄存器名y  “寄存器名d "寄存器名p  代表着复制 删除 和 粘贴 )


实验2:

"ayy  就是复制当前行到 "a 字母寄存器中

 "b3yy 复制当前行和下面2行 到 “b 字母寄存器

“ap 粘贴 “a 字母寄存器的内容

“cd2l 向右删除2个字符 并且把内容存到 字母寄存器 “c 中            “cp 粘贴 ”c 字母寄存器里面的内容

”d3dd 删除当前行和下面2行 并且把内容存到 字母寄存器 “d 中  

“fdf.     删除当前位置到句号  并且把内容存到 字母寄存器 “f 中

“gd'c 删除当前位置到标记c位置 并且把内容存到 字母寄存器 “g 中

同一个字母的大写和小写表示的是同一个寄存器,但是行为会不同,字母寄存器的名称大写时,当使用大写的寄存器进行复制或者删除文本时,原先的字母寄存器中的内容会被保留,刚删除或复制的内容则附加到原来字母寄存器内容的后面。 字母寄存器只有在指定时才被使用。


无名寄存器 ""  保存最近一次复制或删除的文本。就是p命令默认使用的寄存器。

短删除寄存器 "- (The small delete register)。事实上刚删除的文本并不一定被送到数字寄存器,如果删除的文本不含换行符(不足一整句)则文本被送至这个寄存器。如x、d2h这两条命令删除的文本都会被送到这个寄存器。注意下在这条命令虽然删除了一整行的文本但因不含换行符所以也被送到这个寄存器`0d$‘。

只读寄存器  ": ". "% "# 它们分别用来保存最近一次在命令行窗口使用的命令、最近一次插入的文本、当前编辑的文件名、当前的替代文件名。

表达式寄存器 "=

选择与拖放的寄存"* "+ "~ 在Windows中这几个寄存器就是剪贴板。在Linux中它们也是剪贴板——但这几个寄存器是有所区别的。

黑洞寄存器 "_ 删除操作会影响现有数字寄存器的内容。前一个数字寄存器的值传给后一个数字寄存器,"9的内容被丢弃,新删除的文本则放入"1。这至少有两个直接的影响,一是"9的内容被丢弃;二是寄存器中文本的位置都发生了变化。而复制操作会改变"0的值。如果你不希望删除或复制的操作影响数字寄存器的话就使用这个寄存器。使用这个寄存器进行删除或复制的内容都会被丢弃——这还可以提高一点速度节省一点空间。

搜索式样寄存器 "/ 保存上一次搜索所使用的式样。注意这也包括了s命令中所使用的搜索式样。


寄存器有26个字母寄存器可以使用;可以使用大写字母将文本附加到已有内容后。如果在你关闭文件之前还没想到这将这些内容贴在哪里也没关系,

用`:wviminfo my_viminfo‘命令。下一次编辑时输入`:rviminfo! my_viminfo‘或者在命令行用这个命令运行`gvim -i my_viminfo myfile‘,:reg看寄存器的内容都在的。


四 。寄存器是个变量——特殊的变量,只要在前面加上一个@号就可以用变量的方式访问寄存器。

所以,变量的操作也同样适用于寄存器。

" 给寄存器赋值
let @e="开始\<CR>"
let @E="结束"
echo @e
开始
结束
" 将寄存器作为表达式的一部分
let my_var=@a . @c
" 和
echo @e+4
" 清空寄存器。
" 注意:不能用unlet清除寄存器。

:let @e=""


二.变量类型

Vim 中使用如下的语法对变量进行赋值(创建变量):

let 变量名 = 数值

变量类型有两种,整数和字符串,在第一次赋值之前都不能使用。变量名除了可使用常规的字母、下划线和数字外,还可以使用几种特殊的前缀:

  • “b:”——只对当前缓冲区(buffer)有效的变量;
  • “w:”——只对当前编辑窗口(window)有效的变量。
  • “g:”——全局变量(在函数中访问全局变量必须使用该前缀,不加前缀的话则认为是函数内的局部变量);
  • “s:”——变量名只在当前脚本中有效;
  • “a:”——函数的参数;
  • “v:”——Vim 内部预定义的特殊变量(参见“:help vim-variable”)。

下面三个前缀用来访问特殊的数值,由于行为和变量较为相似(可以读取和修改),也放在这儿一起讲:

  • “$”——访问环境变量;
  • “&”——访问 Vim 选项;
  • “@”——访问寄存器。

当变量不再使用时,可以使用“unlet 变量名”删除变量。


原创粉丝点击