VIM寄存器浅识

2024-04-11 00:58
文章标签 vim 寄存器 浅识

本文主要是介绍VIM寄存器浅识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VIM寄存器分为9类:

1、匿名寄存器(unnamed register)"": 

      用途:执行删除和复制命令时,删除或者复制的文本会保存到该寄存器中。

      例外:没有例外。这个寄存器是默认寄存器,无论操作有没有指定寄存器,这个寄存器都会生效。如果指定了其它寄存器,如"a,“a和""都会生效。

2、数字寄存器(numbered register):

1)"0

       用途:最近的复制内容。

       例外:如果复制时指定了其它寄存器(如"ayw),"0将失效。

2)“1"9:跨行删除寄存器

       用途:最近9次跨行删除的内容。”1是最近的一次,“9是最后一次。

       例外1:如果复制时指定了其它寄存器。

       例外2:删除的内容不超过一行(删除内容不包含换行符),这时删除内容将保存到”-中。

3、行内删除寄存器(small delete register)"-

       用途:最近删除的内容,且内容不超过一行。

       例外1:如果复制时指定了其它寄存器。

       例如2:如果删除内容超过一行。

4、具名寄存器(named register)"a-"z"A-"Z

       用途:操作时指定这些寄存器,该寄存器的内容才会更新。

                   小写和大写的区别是小写会覆盖上次的内容,大写会把本次内容加到上次内容的后面。

       例外:操作时不指定这些寄存器,不生效。

5、4个只读寄存器(readonly register):

1)".:最近进入insert模式插入的内容。

2)“%:当前文件名。

3)"#:交换文件名(alternate file)。

4)"::最近执行的命令。

6、表达式寄存器(expression register)"=

       用途:保存表达式的值。如在normal模式下,敲"=后,在命令行上会出现,然后敲3+9回车,再敲p,最后自动插入12。

                   更有用的是,在insert模式下,敲ctrl+r,再敲=,也会在命令行上出现=,可以输入某个变量、函数或者表态式,最后敲回车,刚才=后输入的结果立马出现在光标前。

       例外:没有例外。

7、选择和拖拽寄存器(selection and drop register)"* "+ "~:

       背景:X11有两种选择模式(其它有三个,有一种没有用),即选中模式和粘贴板。

       选中模式的用法为:在vim下用visual模式或者鼠标选中内容,不需要复制。然后在其它软件点鼠标中键,即可粘贴。好像WINDOWS和MAC都没有这个功能。

       选中模式对应"*,粘贴板对应"+

1)“*:对应选中模式。用鼠标或者可视模式选中的内容。还有一个用处,这个寄存器也是系统剪贴板(在程序之间共享复制内容)。

2)"+:对应粘贴板。WINDOWS和MAC,"*和"+应该是一样的。

3)"~:是个只读寄存器,且编译时指定+dnd特性时才能用(在:ver命令输出中看是+dnd还是-dnd)。保存拖拽到vim的内容。

8、黑洞寄存器(black hole register)"_

      用途:黑洞,故名思意,有去无回。比如,删除时指定这个寄存器,其它寄存器(如"1-"9)不受影响。

      例外:操作时不指定这些寄存器,不生效。

9、搜索模式寄存器(last search pattern register)"/

       用途:最近搜索的内容,也可以用let命令修改@/

       例外:操作时不指定这些寄存器,不生效。

例子1:“0“-的区别
操作前的寄存器值:

:reg1 2 3 --- Registers ---                                                           4 ""   ^J5 "0   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""^J" 拆行^J"""""6 "1   ^J7 "2   ^J8 "3   ^J9 "4   ^J10 "5   ^J11 "6   ^J12 "7   ^J13 "8   1234^J14 "9   ^J15 "a   i^[I"<80>kb^[j216 "i   ^[^i"x<80>kb<80>kb^[j17 "-   1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890zzzzz18 "*   ^J19 ".   ^@^@^@^@^@^@

文本如下:
1 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890zzzzzzzzzzzzzzzzzzzz
2 678
3 90


在第二行执行 dw命令后,寄存器的值变化如下, "1- "9没有变, "-"",还有 "*变了
:reg1                                                                             2 3 --- Registers ---4 ""   6785 "0   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""^J" 拆行^J"""""6 "1   ^J7 "2   ^J8 "3   ^J9 "4   ^J10 "5   ^J11 "6   ^J12 "7   ^J13 "8   1234^J14 "9   ^J15 "a   i^[I"<80>kb^[j216 "i   ^[^i"x<80>kb<80>kb^[j17 "-   67818 "*   67819 ".   ^@^@^@^@^@^@20 ":   redir! > registers.txt

在第一行执行 dg$命令后,寄存器的值变化如下, "1- "9没有变, "-"",还有 "*变了
reg:1                                                                             2 3 --- Registers ---4 ""   1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890zzzzz5 "0   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""^J" 拆行^J"""""6 "1   ^J7 "2   ^J8 "3   ^J9 "4   ^J10 "5   ^J11 "6   ^J12 "7   ^J13 "8   1234^J14 "9   ^J15 "a   i^[I"<80>kb^[j216 "i   ^[^i"x<80>kb<80>kb^[j17 "-   1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890zzzzz18 "*   1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890zzzzz19 ".   ^@^@^@^@^@^@20 ":   redir! > registers.txt21 "/   test   

在第二行执行 dd命令后,寄存器的值变化如下, "-没有变, "1- "9"",还有 "*变了
reg:3 --- Registers ---4 ""   678^J5 "0   """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""^J" 拆行^J"""""6 "1   678^J7 "2   ^J8 "3   ^J9 "4   ^J10 "5   ^J11 "6   ^J12 "7   ^J13 "8   ^J14 "9   1234^J15 "a   i^[I"<80>kb^[j216 "i   ^[^i"x<80>kb<80>kb^[j17 "-   1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890zzzzz18 "*   678^J19 ".   ^@^@^@^@^@^@20 ":   redir! > registers.txt21 "/   test        
                                                                                                
从这几个例子,可以发现如果删除内容中包含换行,删除内容就保存到”1中,否则就保存到"-中。

例子2:用“1”9实现倒序
有如下几个数,要把它们倒序排序

0x11, 0x12, 0x13, 0x24, 0x29
第一步,先用 %s/, /\r/g把数字分行
0x11
0x12
0x13
0x24
0x29

第二步,把光标移到第一行,然后 dd,再连续四次 .(重复上次操作),把所有数字删掉,寄存器的值如下
  3 --- Registers ---4 ""   0x29^J5 "0   0x11^J0x12^J0x13^J0x24^J0x29^J6 "1   0x29^J7 "2   0x24^J8 "3   0x13^J9 "4   0x12^J10 "5   0x11^J11 "6   0x11^J12 "7   ^J13 "8   ^J14 "9   reg^J15 "a   i^[I"<80>kb^[j216 "i   ^[^i"x<80>kb<80>kb^[j17 "-   0x1118 "*   0x29^J19 "}   法为:在vim下用visual模式或者鼠标选中内容,不需要复制。然后在其它软件点鼠标中键,即可粘贴。好像WINDOWS和M20 ".   ^@^@21 ":   redir! > register.txt22 "/   ,  

第三步, "1p,然后再连续四次 .,文本变成:
0x29
0x24
0x13
0x12
0x11
0x11

这个例子最有趣的地方出现了:四次执行 .,不是执行了四次 "1p,而是执行了四个不一样的命令: "2p "3p "4p "5p
只能佩服bram考虑得太周到了。


例子3:共享粘贴板

在vim下用"*y"*p可以实现与其它程序共享粘贴板。

在.vimrc增加下面一句,可以实现用匿名寄存器共享粘贴板:

set clipboard=unnamed

例子4:"=的用法

要把光标所在的字母前插入该字母的大写形式

文本如下:

abcdefg

光标如果在a上,需要在a前面插入A

定义了一个函数,然后映射到`

function Insert_Upper()
1 return toupper(getline('.')[col('.') - 1])
endfunction
inoremap ` <c-r>=Insert_Upper()<cr>
inoremap ` i ` * <C-R>=Insert_Upper()<CR>


还有一个使用更广泛的例子:

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>

上面映射 cscopecs find s命令到 ctrl+_,有趣的是后面一段: <C-R>=expand("<cword>")<CR><CR>

<C-R>=就是“=,也就是说,命令行模式下也可以用这个寄存器。

expand("<cword>")返回光标所在的单词,后面两个<CR>,第一个让expand()函数生效,第二个让cs find s命令生效。

这篇关于VIM寄存器浅识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/892646

相关文章

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

centos 6安装 vim

centos 安装vim 1.首先查询当前当前vim所依赖的包存在不存在.检查缺少哪个几个依赖包 [root@bogon firstCopy]# rpm -qa|grep vivimvim-common-7.4.160-5.el7.x86_64vim-enhanced-7.4.160-5.el7.x86_64vim-filesystem-7.4.160-5.el7.x86_64vim-

文本编辑器-Vim

http://www.vim.org/ 简单介绍 Vim是一种高度可配置的文本编辑器,用于创建和更改任何类型的文本非常高效。它与大多数UNIX系统和苹果OS X一起被列为 “vi”。 Vim是稳定的,并且不断被开发以变得更好。 其功能包括: 1. 持久的,多级的撤消树 2. 广泛的插件系统 3. 支持数百种编程语言和文件格式 4. 强大的搜索和替换 5. 与许多工具集成 下载

Vim命令记录

2019年4月26日22:46修改 好玩网站:https://coolshell.cn/articles/5426.html http://c.biancheng.net/view/813.html vim启动进入普通模式,处于插入模式或命令行模式时只需要按Esc或者Ctrl+[即可进入普通模式。普通模式中按i(插入)或a(附加)键都可以进入插入模式,普通模式中按:进入命令行模式。命令行模

寄存器B

MCS-51单片机的中央处理器包含运算部件和控制部件两部分。         1. 运算部件         运算部件以算术逻辑运算单元ALU为核心,包含累加器ACC、B寄存器、暂存器、标志寄存器PSW等许多部件,它能实现算术运算、逻辑运算、位运算、数据传输等处理。         算术逻辑运算单元ALU是一个8位的运算器,它不仅可以完成8位二进制数据加、减、乘、除等基本的算

Linux 中常用的 Vim 命令大全

Vim 是 Linux 系统中最常用的文本编辑器之一,因其强大的功能和轻量级的性能广泛应用于开发者和系统管理员的日常工作中。无论是代码编辑、系统配置还是日志分析,掌握 Vim 的基础和高级命令都能极大提升工作效率。本文将汇总 Vim 的常用命令及其功能,帮助你在 Linux 环境中高效操作 Vim。 一、Vim 基础介绍 Vim 是一个基于 vi 的高级文本编辑器,提供了更多强大的功能。它

vim 安装与配置教程(详细教程)

vim就是一个功能非常强大的文本编辑器,可以自己DIY的那种 ,不但可以写代码 ,还可编译 ,可以让你手不离键盘的完成鼠标的所有操作。  如果想要了解vim的的发展历史和详细解说,可以自行上网搜索,我主要是记录一下安转和配置流程以及基础的使用方法,可以简单入个门。话不多说 直接开始吧!!! 注意: 本教程是在linux系统下进行的,当然vim 还支持Windows、CentOs等系统  1、

Linux下新手如何将VIM配置成C++编程环境(可以STL自动补全)

~ 弄拉老半天,终于弄的差不多啦,果然程序员还是需要有点折腾精神啊。 首先你要安装vim,命令:sudo apt-get install vim vim它只是一个编辑器,它不是IDE(比如codeblocks),IDE相当于已经给一个房子装好啦各种东西,你只要使用就行,vim却要自己装各种东西,相当于买了一个毛坯房,自己要给房子装潢。 如何安装g++编译器可以参考我上一篇博文. 1:vi

nano 和 vim对比

nano 和 vim 是两种流行的文本编辑器,各有优缺点和适用场景。以下是对这两种编辑器的详细对比: Nano 优点: 1.简单易用:nano 的界面和命令非常简单,易于新手上手。所有的命令都列在屏幕底部,不需要记住复杂的命令。 2. 直接编辑:打开文件后可以直接开始编辑,不需要进入插入模式。 3. 轻量便捷:通常预装在大多数Linux发行版上,启动速度快。 缺点: 1.功能有限:相比于vim

士兰微 SC32F5432 通过配置寄存器方式 将管脚配成开漏输出模式和TTL输入模式

目录 前言: 士兰微电子介绍 士兰微 SC32F5432介绍 士兰微 SC32F5432 通过配置寄存器方式 将管脚配成开漏输出模式和TTL输入模式 开漏输出模式 TTL输入模式 前言: 下面是对我在工作时公司所使用的一款国产芯片(士兰微 SC32F5432)开发过程所遇到的一些问题的记录与解决。 士兰微电子介绍 杭州士兰微电子股份有限公司(600460)坐落于杭州