<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]vim diff寄存器使用 Vim 寄存器实现vimdiff多个文件的粘贴，防止dd命令后影响粘贴的内容为删除行的内容的方法。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Mon, 27 May 2019 06:57:12 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	把光标停留在第一行上，按下yy命令，将第一行复制，然后再移到第二行，按下dd命令，删除第二行。此时如果我们想要粘贴第一行的内容的话，直接按p是不行的，因为此时的p将引用无名寄存器中的内容，而它的内容已经被第二行的内容给覆盖了，所以此时就轮到复制专用寄存器大显身手了，此时如果按下这个命令:<br/>&quot;0p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;===它是0,不是O，是数字0，别搞错了!!<br/>这时，将会粘贴复制专用寄存器中的内容。<br/><br/><textarea name="code" class="php" rows="15" cols="100">
#正常复制：abc
#dd各种删 dw
#&quot;0p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;【调出0号寄存器里的内容】
</textarea><br/><br/><textarea name="code" class="php" rows="15" cols="100">
细节上注意： 
vim中输入：
:reg
后：
得到：
l&nbsp;&nbsp;&quot;&quot;&nbsp;&nbsp; jack^J
l&nbsp;&nbsp;&quot;0&nbsp;&nbsp; jack^J&nbsp;&nbsp; &quot;0是双引号加0， 是一个寄存器。（想粘贴它就直接输入：&nbsp;&nbsp;&quot;0p ,不用输入 y&quot;0p ，这点容易搞错，出现无法粘贴上最近一次用 `y` 或 `yy` 命令复制的内容）
l&nbsp;&nbsp;&quot;1&nbsp;&nbsp; xiang^J
l&nbsp;&nbsp;&quot;2&nbsp;&nbsp; xiang^J

</textarea><br/>============ChatGPT说===============================================<br/>在 Vim 中，理解寄存器的工作原理对于有效地操作文本非常重要。你提到的步骤是正确的，但可能有一些细节需要注意，尤其是在不同系统（如 macOS）上可能存在的细微差异。下面是详细解释和操作步骤：<br/><br/>### 理解 Vim 寄存器<br/><br/>1. **无名寄存器 (`&quot;&quot;`)**：默认的寄存器，用于存储最后一次删除或复制的内容。<br/>2. **复制寄存器 (`&quot;0`)**：用于存储最近一次用 `y` 或 `yy` 命令复制的内容。<br/>3. **删除寄存器 (`&quot;1`, `&quot;2`, 等)**：用于存储最近的删除操作内容。<br/><br/>### 操作步骤<br/><br/>#### 1. 复制第一行<br/><br/>将光标移动到第一行，按 `yy` 命令，将第一行复制到寄存器 `0` 和无名寄存器 `&quot;&quot;`。<br/><br/>```vim<br/>yy<br/>```<br/><br/>#### 2. 删除第二行<br/><br/>将光标移动到第二行，按 `dd` 命令，删除第二行，并将其内容存储到无名寄存器 `&quot;&quot;` 和删除寄存器 `1`。<br/><br/>```vim<br/>dd<br/>```<br/><br/>#### 3. 粘贴第一行的内容<br/><br/>现在，如果你直接按 `p`，将会粘贴无名寄存器 `&quot;&quot;` 中的内容，也就是刚刚删除的第二行的内容。要粘贴之前复制的第一行的内容，你需要引用复制寄存器 `0`。<br/><br/>```vim<br/>&quot;0p<br/>```<br/><br/>### 完整步骤示例<br/><br/>1. **移动到第一行并复制：**<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;```vim<br/>&nbsp;&nbsp;&nbsp;&nbsp;gg (移动到第一行)<br/>&nbsp;&nbsp;&nbsp;&nbsp;yy (复制第一行)<br/>&nbsp;&nbsp;&nbsp;&nbsp;```<br/><br/>2. **移动到第二行并删除：**<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;```vim<br/>&nbsp;&nbsp;&nbsp;&nbsp;j (移动到第二行)<br/>&nbsp;&nbsp;&nbsp;&nbsp;dd (删除第二行)<br/>&nbsp;&nbsp;&nbsp;&nbsp;```<br/><br/>3. **粘贴第一行的内容：**<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;```vim<br/>&nbsp;&nbsp;&nbsp;&nbsp;&quot;0p (粘贴复制寄存器中的内容)<br/>&nbsp;&nbsp;&nbsp;&nbsp;```<br/><br/>### 解释<br/><br/>- `gg`：移动到文件的第一行。<br/>- `yy`：复制当前行。<br/>- `j`：移动光标到下一行。<br/>- `dd`：删除当前行。<br/>- `&quot;0p`：使用寄存器 `0` 粘贴内容。<br/><br/>### 常见问题<br/><br/>1. **命令未生效**：确保在正常模式下执行这些命令。按 `Esc` 确保你在正常模式下。<br/>2. **寄存器内容被覆盖**：确认每个步骤都按正确的顺序执行，且没有意外的命令干扰寄存器的内容。<br/><br/>通过正确理解和使用寄存器，你可以更高效地进行文本操作。如果还有问题，尝试通过 `:registers` 命令查看当前寄存器的内容，以确保你理解每个寄存器中的数据。<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>================遇到的问题=======================<br/>我先把光标停留在第一行上，按下yy命令，将第一行复制，然后再移到第二行，按下dd命令，删除第二行。此时如果我们想要粘贴第一行的内容的话，直接按p是不行的，因为此时的p将引用无名寄存器中的内容，而它的内容已经被第二行的内容给覆盖了，所以此时就轮到复制专用寄存器大显身手了，此时如果按下这个命令:<br/> &quot;0p<br/>这时，将会粘贴复制专用寄存器中的内容。这里直接贴结果图可能看不出什么效果，那我就贴一下用dd删除了第二行后所有寄存器的内容给大家看看吧：<br/>&nbsp;&nbsp;l&nbsp;&nbsp;&quot;&quot;&nbsp;&nbsp; ddline^J&nbsp;&nbsp;&nbsp;&nbsp; 当前寄存器是&quot;，里存的是删除的内容。<br/>&nbsp;&nbsp;l&nbsp;&nbsp;&quot;0&nbsp;&nbsp; yyline^J&nbsp;&nbsp;&nbsp;&nbsp; 0 是复制专用寄存器<br/><br/>从这里可以看出，无名寄存器保存的是dd命令删除的内容，而复制专用寄存器（0）保存的是y命令复制的内容。<br/>&quot;0p 就能打印出yyline,而直接p就会打印删的内容ddline。<br/><br/><br/><br/><br/>vimdiff 的优势在于能同时查看各个文件的差别，而：<br/>vimdiff *&nbsp;&nbsp; 则对整个目录的文件进行比对，如果复制：<br/>yy 后再control+w(w按两次)跳到另一个文件里按p粘贴上去，<br/>发现原来那行不需要了，于是得dd删掉,而此时再通过control+w(w按两次)到第仨文件,再按p时，则是粘贴的内容是刚删的那行内容，怎么办？<br/><br/>用寄存器：<br/>vim中输入<br/>:reg<br/><br/>a-z26个命名寄存器中的a即可，如下：<br/>可以用&quot;&#123;register&#125;y来拷贝到&#123;register&#125;中， 用&quot;&#123;register&#125;p来粘贴&#123;register&#125;中的内容。<br/><br/>实践：<br/> &quot;ayy可以拷贝当前行到寄存器a中，而&quot;ap则可以粘贴寄存器a中的内容。&nbsp;&nbsp; #是单引号ayy ，单引号ap进行粘贴，少引单引号不行。 <br/><br/>结论：合理地使用可以极大地提高效率。<br/><br/><br/>===========================================================================<br/>&quot;+p可以粘贴剪切板的内容，<br/>&quot;:p可以粘贴上一个Vim命令（比如你刚刚费力拼写的正则表达式），<br/>&quot;/p可以粘贴上一次搜索关键词（你猜的没错，正是normal模式下的/foo搜索命令）。<br/>在Vim中可通过:reg来查看每个寄存器当前的值。<br/><br/><br/>来自：https://harttle.land/2016/07/25/vim-registers.html<br/><br/><br/>&quot;+p 是用来粘贴剪贴板的内容，而不是将其放入寄存器中。在 Vim 中，要将剪贴板的内容放入寄存器中，你可以使用以下步骤：<br/>进入命令行模式，按下 : 键。<br/>输入以下命令，将剪贴板的内容放入指定寄存器（假设你想将内容放入 a 寄存器）：<br/><br/>:let @a = @+<br/>这将会将剪贴板内容复制到寄存器 a 中。<br/><br/>按下 Enter 键，剪贴板的内容就会被放入寄存器中。<br/>现在，你可以在替换命令中使用寄存器 a，使用 :%s#&#92;V原内容#&#92;=@a#g 来进行替换。这里的 &#92;=@a 表示使用寄存器 a 中的内容作为替换文本。<br/>再次对之前的混淆回答表示歉意，希望这次的回答能够解决你的疑问。<br/><br/><br/><br/>如何查看寄存器 a 中的值？<br/>要查看寄存器 `a` 中的值，你可以在 Normal 模式下使用以下命令：<br/><br/>```<br/>:echo @a<br/>```<br/>在 Normal 模式下，按下 `:` 进入命令行模式，然后输入上述命令。按下 `Enter` 后，Vim 将会在状态栏显示寄存器 `a` 中的内容。<br/>这将会显示寄存器 `a` 中的文本内容，以便你查看和确认寄存器中的值。<br/><br/>vim如何打开状态栏？<br/>Mac:Contrl + g<br/>两行状态栏： :set laststatus=2<br/><br/>在 Vim 中，状态栏通常是默认显示的，它位于编辑器底部，用于显示各种状态信息、命令的输出以及其他相关信息。如果你的状态栏没有被关闭，它应该是默认显示的。<br/>如果你误操作关闭了状态栏，你可以通过以下方法重新打开：<br/>如果你在 Normal 模式下，只需按下 Ctrl + g。这将会在底部显示一个短暂的信息栏，其中包含当前的文件名、行号等信息，它通常会自动消失。<br/>如果你想恢复完整的状态栏，可以在 Normal 模式下执行以下命令：<br/>:set laststatus=2<br/>这会将状态栏恢复为显示，同时在状态栏中显示更多信息。<br/>请注意，状态栏的显示取决于你的 Vim 配置以及正在使用的主题等因素，有些情况下可能会稍有不同。<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]vim diff寄存器使用 Vim 寄存器实现vimdiff多个文件的粘贴，防止dd命令后影响粘贴的内容为删除行的内容的方法。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>