代码之家  ›  专栏  ›  技术社区  ›  Adisak

如何使用vim寄存器?

  •  862
  • Adisak  · 技术社区  · 7 年前

    我只知道一个使用寄存器的实例是通过 Ctrl键 R * 我从剪贴板粘贴文本。

    寄存器的其他用途是什么?如何使用它们?

    关于vi registers的所有知识(让我们关注vi 7.2)——请与我们分享。

    16 回复  |  直到 8 年前
        1
  •  1089
  •   installero    10 年前

    vim中的寄存器允许您对存储在其中的文本运行操作或命令。要访问寄存器,请键入 "a 在命令之前,在 a 是寄存器的名称。如果要将当前行复制到寄存器中 k ,您可以键入

    凯伊

    或者你可以 追加 用大写字母登记

    凯伊

    然后可以在文档中移动,并使用

    “KP

    在Linux上从系统剪贴板粘贴

    “+P”

    从Windows上的系统剪贴板粘贴(或从Linux上的“鼠标突出显示”剪贴板粘贴)

    “*P

    访问所有当前定义的寄存器类型

    :注册表

        2
  •  726
  •   Wanderson Santos    10 年前

    当我发现 0 寄存器。如果不将文本分配给特定寄存器就将其分配给 注册,以及在默认情况下保存 " 寄存器。两者的区别 寄存器是 只填充了拉伸文本,而默认寄存器也填充了使用 d / D / x / X / c / C / s / S 命令。

    当我想复制一些文本、删除一些内容并用复制的文本替换时,我觉得这很有用。以下步骤举例说明:

    • 猛拉要复制的文本 y[motion] -此文本保存在 寄存器
    • 删除要替换的文本 d[motion] -此文本保存在 登记
    • 用粘贴拉伸的文本 "0p

    哪里 为下一个命令使用寄存器的命令。

    在最后一步中,如果要从默认寄存器粘贴(使用 p ,它将使用您刚刚删除的文本(可能不是您想要的)。

    注意 P 从默认寄存器粘贴。相当于长手的是 ""p (或) ""P ) "0 抓住最后一个猛力, "1 保存最后一次删除或更改。

    有关详细信息,请参见 :help registers .

        3
  •  307
  •   Francisco    10 年前

    关于寄存器,我最喜欢的部分之一是将它们用作宏!

    假设您正在处理以制表符分隔的值文件,如下所示:

    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字段的末尾添加一个百分号(从第2行开始)。我们将在中创建一个简单的宏(任意选择) m 注册如下:

    1. 出版社: qm :在下面开始录制宏 寄存器。

    2. EE :转到第三列的末尾。

    3. a :插入要附加到此列结尾的模式。

    4. % :键入要添加的百分比符号。

    5. <ESC> :返回命令模式。

    6. j0 :转到下一行的开头。

    7. q :停止录制宏

    我们现在可以打字了 @m 在当前行上运行此宏。此外,我们可以输入 @@ 重复,或 100@m 做100次!生活看起来很美好。

    现在你应该说, 但是等等,这跟寄存器有什么关系

    好极了。让我们调查一下 打字注册 "mp . 然后我们得到以下结果:

    EEa%<ESC>j0
    

    一开始这看起来像是你无意中在记事本中打开了一个二进制文件,但是第二眼看到, 这是我们宏中字符的精确序列!

    你是一个好奇的人,所以让我们做一些有趣的事情,编辑这行文字来插入 ! 而不是无聊的老 % .

    EEa!<ESC>j0
    

    那就把这个扯到 n 打字注册 B"nyE . 那么,就为了好玩,让我们跑 n 在数据行上使用宏 @n

    天啊,它加了一个 !

    实际上,运行宏就像按宏寄存器中键的确切顺序。如果这不是一个很酷的注册技巧,我会吃我的帽子。

        4
  •  96
  •   Michael Schmitz    12 年前

    其他有用寄存器:

    "* "+ -系统剪贴板的内容

    "/ -最后一个搜索命令

    ": -最后一个命令。

    注意,使用vim宏,您可以编辑它们,因为它们只是记录宏时使用的击键列表。所以可以将宏(使用 "ap 写宏 )编辑它们,并将它们加载到 "ay$ . 存储有用宏的好方法。

        5
  •  70
  •   mrucci    15 年前

    这个 黑洞寄存器 _ /dev/null 登记册。

    我在vimrc中使用它来允许删除单个字符而不更新默认寄存器:

    noremap x "_x
    

    在视觉模式下粘贴而不更新默认寄存器:

    vnoremap p "_dP
    
        6
  •  47
  •   sneeu    15 年前

    如果要在ex mode命令中粘贴寄存器的内容,请单击 <C-r><registerletter> .

    你为什么要用这个?我想搜索并替换一个长字符串,所以我在可视化模式下选择了它,开始键入搜索/替换表达式 :%s/[PASTE YANKED PHRASE]//g 在我的日子里。

    如果只想在ex模式下粘贴一个单词,可以在进入ex模式前确保光标在上面,然后点击 <C-r><C-w> 在ex模式下粘贴单词。

        7
  •  41
  •   Brandon    11 年前

    我认为秘密的大师寄存器是表达式=寄存器。它可以用于创造性的映射。

    :inoremap  \d The current date <c-r>=system("date")<cr>
    

    您可以像上面那样将它与您的系统结合使用,或者从定制的viml函数等获取响应。

    或者只是一些特别的事情比如

    <c-r>=35+7<cr>
    
        8
  •  34
  •   naught101    13 年前

    一个很酷的技巧是 "1p 粘贴上次删除/更改(,然后使用 . 重复粘贴后续删除。换句话说, "1p... 基本上相当于 "1p"2p"3p"4p .

    您可以使用此命令对少数行进行逆序排列: dddddddddd"1p....

        9
  •  17
  •   Brian    15 年前

    从Vim的帮助页面:

    CTRL-R {0-9a-z"%#:-=.}                  *c_CTRL-R* *c_<C-R>*
            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...>
    
        10
  •  16
  •   fpmurphy    16 年前
    • q5将编辑记录到寄存器5中(下一个q停止记录)
    • :reg显示所有寄存器及其任何内容
    • @5执行寄存器5宏(录制的编辑)
        11
  •  14
  •   Matt Mendell    15 年前

    我在vim窗口中使用默认寄存器grep来获取文本,而不必使用鼠标。

    1. 歪文本
    2. :!grep "<CTRL-R>0"<CR>
        12
  •  10
  •   Ciro Santilli 华涌低端人口 六四事件 法轮功    12 年前

    在命令中使用寄存器 具有 @ . 例如。:

    echo @a
    echo @0
    echo @+
    

    命令他们:

    let @a = 'abc'
    

    现在 "ap 威尔酱 abc .

        13
  •  8
  •   Catalin Ciurea    12 年前

    造成混乱的一大原因是默认寄存器 " . 了解它的工作方式很重要。如果在大多数情况下避免使用默认寄存器,效果会更好。vim文档中的解释:

    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 (e.g.  "xdd).  This is like the unnamed register is pointing
    to the last used register.
    

    所以默认寄存器实际上是指向最后使用的寄存器的指针。当您删除或拖动某个寄存器时,该寄存器将指向其他寄存器。你可以通过检查寄存器来测试它。总是有另一个寄存器与默认寄存器完全相同:yank寄存器( "0 ),第一个删除寄存器( "1 ),小删除寄存器( "- )或其他用来删除或拖动的寄存器。

    唯一的例外是黑洞寄存器。Vim Doc说:

    An exception is the '_' register: "_dd does not store the deleted text in any
    register.
    

    通常情况下,直接使用: “0 , “- "1-"9 默认寄存器或命名寄存器。

        14
  •  6
  •   Ryan Versaw    10 年前

    一个被忽略的寄存器是“.”点寄存器,它包含最后插入的文本,不管它是如何插入的,例如ct(change-till.)。然后你意识到你需要把它插入其他地方,但不能使用点重复方法。

     :reg .
     :%s/fred/<C-R>./
    
        15
  •  3
  •   siu    11 年前

    我最喜欢的登记册是 ':' 寄存器。运行 @: 在正常模式下,允许我重复先前运行的ex命令。

        16
  •  1
  •   Madis Nõmme    8 年前

    我的朋友布赖恩写了一篇关于这个的综合文章。我认为这是一个很好的介绍如何使用主题。 https://www.brianstorti.com/vim-registers/