标题:[实践OK]vim diff寄存器使用 Vim 寄存器实现vimdiff多个文件的粘贴,防止dd命令后影响粘贴的内容为删除行的内容的方法。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Mon, 27 May 2019 14:57:12 +0000 作者:jackxiang 地址:http://jackxiang.com/post/10207/ 内容: 我先把光标停留在第一行上,按下yy命令,将第一行复制,然后再移到第二行,按下dd命令,删除第二行。此时如果我们想要粘贴第一行的内容的话,直接按p是不行的,因为此时的p将引用无名寄存器中的内容,而它的内容已经被第二行的内容给覆盖了,所以此时就轮到复制专用寄存器大显身手了,此时如果按下这个命令: "0p 这时,将会粘贴复制专用寄存器中的内容。这里直接贴结果图可能看不出什么效果,那我就贴一下用dd删除了第二行后所有寄存器的内容给大家看看吧: l "" ddline^J 当前寄存器是",里存的是删除的内容。 l "0 yyline^J 0 是复制专用寄存器 从这里可以看出,无名寄存器保存的是dd命令删除的内容,而复制专用寄存器(0)保存的是y命令复制的内容。 "0p 就能打印出yyline,而直接p就会打印删的内容ddline。 vimdiff 的优势在于能同时查看各个文件的差别,而: vimdiff * 则对整个目录的文件进行比对,如果复制: yy 后再control+w(w按两次)跳到另一个文件里按p粘贴上去, 发现原来那行不需要了,于是得dd删掉,而此时再通过control+w(w按两次)到第仨文件,再按p时,则是粘贴的内容是刚删的那行内容,怎么办? 用寄存器: a-z26个命名寄存器中的a即可,如下: 可以用"{register}y来拷贝到{register}中, 用"{register}p来粘贴{register}中的内容。 实践: "ayy可以拷贝当前行到寄存器a中,而"ap则可以粘贴寄存器a中的内容。 #是单引号ayy ,单引号ap进行粘贴,少引单引号不行。 结论:合理地使用可以极大地提高效率。 =========================================================================== "+p可以粘贴剪切板的内容, ":p可以粘贴上一个Vim命令(比如你刚刚费力拼写的正则表达式), "/p可以粘贴上一次搜索关键词(你猜的没错,正是normal模式下的/foo搜索命令)。 在Vim中可通过:reg来查看每个寄存器当前的值。 来自:https://harttle.land/2016/07/25/vim-registers.html "+p 是用来粘贴剪贴板的内容,而不是将其放入寄存器中。在 Vim 中,要将剪贴板的内容放入寄存器中,你可以使用以下步骤: 进入命令行模式,按下 : 键。 输入以下命令,将剪贴板的内容放入指定寄存器(假设你想将内容放入 a 寄存器): :let @a = @+ 这将会将剪贴板内容复制到寄存器 a 中。 按下 Enter 键,剪贴板的内容就会被放入寄存器中。 现在,你可以在替换命令中使用寄存器 a,使用 :%s#\V原内容#\=@a#g 来进行替换。这里的 \=@a 表示使用寄存器 a 中的内容作为替换文本。 再次对之前的混淆回答表示歉意,希望这次的回答能够解决你的疑问。 如何查看寄存器 a 中的值? 要查看寄存器 `a` 中的值,你可以在 Normal 模式下使用以下命令: ``` :echo @a ``` 在 Normal 模式下,按下 `:` 进入命令行模式,然后输入上述命令。按下 `Enter` 后,Vim 将会在状态栏显示寄存器 `a` 中的内容。 这将会显示寄存器 `a` 中的文本内容,以便你查看和确认寄存器中的值。 vim如何打开状态栏? Mac:Contrl + g 两行状态栏: :set laststatus=2 在 Vim 中,状态栏通常是默认显示的,它位于编辑器底部,用于显示各种状态信息、命令的输出以及其他相关信息。如果你的状态栏没有被关闭,它应该是默认显示的。 如果你误操作关闭了状态栏,你可以通过以下方法重新打开: 如果你在 Normal 模式下,只需按下 Ctrl + g。这将会在底部显示一个短暂的信息栏,其中包含当前的文件名、行号等信息,它通常会自动消失。 如果你想恢复完整的状态栏,可以在 Normal 模式下执行以下命令: :set laststatus=2 这会将状态栏恢复为显示,同时在状态栏中显示更多信息。 请注意,状态栏的显示取决于你的 Vim 配置以及正在使用的主题等因素,有些情况下可能会稍有不同。 Generated by Jackxiang's Bo-blog 2.1.1 Release