我如何使用vim寄存器?
我只知道使用寄存器的一个实例是通过Ctrl R * ,从而粘贴剪贴板中的文本。
什么是寄存器的其他用途? 如何使用它们?
你所知道的关于VI寄存器的一切(让我们关注vi 7.2) – 与我们分享。
 Vim中的寄存器让你可以对存储在其中的文本执行操作或命令。 要访问一个寄存器,可以在命令之前input"a ,其中a是寄存器的名称,如果要将当前行复制到寄存器k ,可以键入 
“KYY
或者您可以使用大写字母追加到registry中
“KYY
然后,您可以在文档中移动并使用它将其粘贴到其他位置
“KP
从系统剪贴板粘贴到Linux上
“+ P
要从Windows系统剪贴板粘贴(或从Linux上的“鼠标突出显示”剪贴板)
“* P
要访问所有当前定义的寄存器types
:REG
 当我发现0寄存器时,我很高兴。 如果你将文本分配给一个特定的寄存器,那么它将被分配到0寄存器,并保存在默认的"寄存器”中0和"寄存器之间的区别在于0只填充了被抽出的文本,而缺省寄存器也使用d / D / x / X / c / C / s / S命令填充文本。 
当我想复制一些文本,删除某些内容并将其replace为复制的文本时,我觉得这很有用。 以下步骤举例说明:
-  用y[motion]将要复制的文本抽出 – 将该文本保存在"和0寄存器中
-  用d[motion]删除要replace的文本 – 该文本保存在"注册”中
-  粘贴被抽出的文本与"0p
 其中"是为下一个命令使用寄存器的命令。 
 在最后一步,如果你要从默认的registry(使用p )粘贴,它会使用你刚删除的文本(可能不是你想要的)。 
 请注意, p或P从默认寄存器中粘贴。 等号为""p (或""P ), "0为最后一个下拉"1为最后一个删除或更改。 
 有关更多信息,请参阅:help registers 
我最喜欢的关于寄存器的部分之一是使用它们作为macros!
假设您正在处理制表符分隔的值文件,如下所示:
 ID Df %Dev Lambda 1 0 0.000000 0.313682 2 1 0.023113 0.304332 3 1 0.044869 0.295261 4 1 0.065347 0.286460 5 1 0.084623 0.277922 6 1 0.102767 0.269638 7 1 0.119845 0.261601 
 现在您决定需要在%Dev字段末尾添加百分号(从第二行开始)。 我们将在(任意select的) m寄存器中创build一个简单的macros,如下所示: 
- 
按: qm:在m寄存器下开始录制macros。
- 
EE:转到第三栏的末尾。
- 
a:插入模式追加到本栏末尾。
- 
%:input我们要添加的百分号。
- 
回到命令模式。 
- 
j0:转到下一行的开始。
- 
q:停止录制macros
 我们现在只需键入@m就可以在当前行上运行这个macros。 此外,我们可以input@@重复,或100@m来做这个100次! 生活看起来不错。 
在这一点上,你应该说:“ 但是等等,这是否需要用registry进行检查 ?”
 优点。 让我们通过input"mp调查m寄存器的内容,然后我们得到以下结果: 
 EEa%<ESC>j0 
起初,这看起来像是不小心在记事本中打开了一个二进制文件,但是第二眼就是我们macros中的确切序列!
 你是一个好奇的人,所以让我们做一些有趣的事情,并编辑这行文本插入! 而不是枯燥的旧% 。 
 EEa!<ESC>j0 
 然后,我们通过键入B"nyE来将它放到n寄存器中,然后,只需要踢,就可以使用@n …在我们的数据行上运行nmacros 
  OMG,IT增加了! 
实质上,运行一个macros就好像按下该macros的寄存器中的键的确切顺序。 如果这不是一个很酷的登记伎俩,我会吃我的帽子。
其他有用的寄存器
  "*或"+ – 系统剪贴板的内容 
  "/ – 最后的search命令 
  ": – 最后的命令。 
 请注意,vimmacros可以编辑它们,因为它们只是录制macros时使用的击键列表。 所以你可以写一个文本文件的macros(使用"ap来写入macros”)并编辑它们,并将它们加载到"ay$的寄存器中。 存储有用的macros的好方法。 
  黑洞寄存器 _是寄存器的/dev/null 。 
我在我的vimrc中使用它来允许删除单个字符而不更新默认的寄存器:
 noremap x "_x 
并以可视模式粘贴而不更新默认寄存器:
 vnoremap p "_dP 
 如果您想要使用ex-mode命令粘贴寄存器的内容,请按<Cr><registerletter> 。 
 你为什么要用这个? 我想做一个search并replace一个很长的string,所以我select了它在可视化模式下,开始inputsearch/replaceexpression式:%s/[PASTE YANKED PHRASE]//g ,继续我的一天。 
 如果您只想在ex模式下粘贴一个单词,可以在进入ex模式之前确保光标在上面,然后在ex模式下按<Cr><Cw>粘贴该单词。 
我认为秘密大师注册是expression式=注册。 它可以用于创意映射。
 :inoremap \d The current date <cr>=system("date")<cr> 
您可以像上面一样将它与您的系统一起使用,或者从自定义VimL函数等获得响应
或只是像特别的东西
 <cr>=35+7<cr> 
 一个很酷的窍门就是用"1p粘贴最后一次删除/更改(然后用“ .来重复粘贴后续的删除。换句话说, "1p...基本上相当于"1p"2p"3p"4p 。 
 你可以用这个命令反转一些行: dddddddddd"1p.... 
- q5将logging编辑到寄存器5中(接下来q停止logging)
- :reg显示所有寄存器及其中的任何内容
- @ 5执行注册5macros(录制编辑)
从vim的帮助页面:
 CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<CR>* Insert the contents of a numbered or named register. Between typing CTRL-R and the second character '"' will be displayed <...snip...> Special registers: '"' the unnamed register, containing the text of the last delete or yank '%' the current file name '#' the alternate file name '*' the clipboard contents (X11: primary selection) '+' the clipboard contents '/' the last search pattern ':' the last command-line '-' the last small (less than a line) delete '.' the last inserted text *c_CTRL-R_=* '=' the expression register: you are prompted to enter an expression (see |expression|) (doesn't work at the expression prompt; some things such as changing the buffer or current window are not allowed to avoid side effects) When the result is a |List| the items are used as lines. They can have line breaks inside too. When the result is a Float it's automatically converted to a String. See |registers| about registers. {not in Vi} <...snip...> 
我使用默认寄存器grep在我的vim窗口中的文本,而不必到达鼠标。
- 猛拉文本
-  :!grep "<CTRL-R>0"<CR>
  在带有@ 命令中使用寄存器 。 例如: 
 echo @a echo @0 echo @+ 
在命令中设置它们:
 let @a = 'abc' 
 现在"ap将粘贴abc 。 
 混淆的一个重要来源是默认寄存器" ,了解它的工作方式非常重要,如果大部分时间避免使用默认寄存器会好得多。 
 Vim fills this register with text deleted with the "d", "c", "s", "x" commands or copied with the yank "y" command, regardless of whether or not a specific register was used (eg "xdd). This is like the unnamed register is pointing to the last used register. 
 所以默认寄存器实际上是一个指向最后使用的寄存器的指针。 当你删除或者取消某些东西时,这个寄存器会指向其他寄存器。 您可以通过检查寄存器来testing。 总是有另外一个寄存器与默认寄存器完全相同:YANK寄存器( "0 ),第一个删除寄存器( "1 ),小删除寄存器( "- )或者其他被用来删除或者跳转的寄存器。 
唯一的例外是黑洞登记册。 Vim doc说:
 An exception is the '_' register: "_dd does not store the deleted text in any register. 
 通常情况下,通过直接使用"0 "-和"1-"9默认寄存器或指定寄存器,您的状况会好很多。 
一个被忽视的登记是'。' 包含最后插入的文本的点寄存器,不pipe它是如何插入的,例如ct](改变直到)。 然后你意识到你需要将它插入到其他地方,但不能使用点重复方法。
  :reg . :%s/fred/<CR>./ 
 我最喜欢的寄存器是':'寄存器。 在正常模式下运行@:允许我重复之前运行的ex命令。