在Vim中使用覆盖进行粘贴

时间:2014-08-20 19:46:31

标签: vim

我希望能够从缓冲区中粘贴一些内容(可能使用" p"),但我不想将其插入到文本中,而是要替换之前的内容。 (就像" R"命令一样)我搜索了Google,vim文档和Stack Overflow,但在这个问题上找不到任何东西。我想这只是一个我不了解的命令。任何帮助将不胜感激。

这就是我需要知道的全部内容,但如果您想了解我的具体问题:

基本上我只是想为文档标题创建一个简短的脚本。在每个函数的开头我都提到了以下内容:

// FunctionName<><><><><><><><><><><> <><><><><><><><><>

然而,添加所有这些"<>"变得讨厌我希望能够将光标放在函数名称上,按F6键并生成上述内容。当然,问题在于函数名称不是常量大小,它会使"链"看起来很奇怪。所以我只想粘贴一堆预先制作的链,这样整个事物总是会是一个恒定数量的字符。即:

开始
//<><><><><><><><><><><><><><><><><><><><><><><><><><><>

粘贴&#34; FunctionName&#34;

结束
// FunctionName <><><><><><><><><><><><><><><><><><><><>

全心全意,

〜不倒翁

4 个答案:

答案 0 :(得分:11)

我找到了一个更好的解决方案

R输入替换模式:您键入的每个字符都会替换现有字符,从光标下的字符开始。

所以R <ctrl-r>"会做你想要的。请注意<ctrl-r>"之前和之后有空格。

OLD ANSWER

你很容易用宏来做到这一点

qhmhA <esc>a<><esc>40.80|D`hq

qh start macro
mh set mark
A <esc> insert a space after the existing text
a<><esc> insert '<>'
40. repeat last command 40 times
80| move to column 80
D delete to the end of the line
`h jump back to mark
q end macro

然后可以使用@h重复宏。您可能希望将此保存到.vimrc中,如此

let @h = 'mhA ^[a<>^[40.80|D`h'

请注意,^[应该是按<ctrl-V><esc>

输入的一个字符

答案 1 :(得分:2)

你可以这样做:

:exe "normal ".strlen(@p)."x\"pP"

删除正确数量的字符,然后粘贴寄存器p的内容。

答案 2 :(得分:0)

您可以使用视觉选择。

  • WHERE NOT EXISTS (SELECT TI.Item_strItemId FROM VISTAHO.dbo.tblTrans_Inventory_HO TI WHERE TI.Item_strItemId = IT.Item_strItemId AND TI.TransI_dtmDateTime >= DATEFROMPARTS(YEAR(DATEADD(month, -6, GETDATE())), MONTH(DATEADD(month, -6, GETDATE())), 1) ) 选择整行并用缓冲区覆盖
  • Vp选择光标下的单词并用缓冲区内容覆盖。
  • viwp会覆盖括号之间的内容。

我特别喜欢它突出显示了应该覆盖的内容, 使其更易于验证。

答案 3 :(得分:-1)

简短回答

只需执行R<C-r>0或您尝试拉动的“注册”即可。如有疑问,请检查:reg

长答案

来自:help i_CTRL-R

    Insert the contents of a register.  Between typing CTRL-R and
    the second character, '"' will be displayed to indicate that
    you are expected to enter the name of a register.
    The text is inserted as if you typed it, but mappings and
    abbreviations are not used.  If you have options like
    'textwidth', 'formatoptions', or 'autoindent' set, this will
    influence what will be inserted.  This is different from what
    happens with the "p" command and pasting with the mouse.
    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 inserted text
        '-' the last small (less than a line) delete
                        *i_CTRL-R_=*
        '=' the expression register: you are prompted to
            enter an expression (see |expression|)
            Note that 0x80 (128 decimal) is used for
            special keys.  E.g., you can use this to move
            the cursor up:
                CTRL-R ="\<Up>"
            Use CTRL-R CTRL-R to insert text literally.
            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.
            When append() or setline() is invoked the undo
            sequence will be broken.