在Vim中使用覆盖进行粘贴

Tum*_*r41 8 vim

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

这就是我需要知道的,但如果你想知道我的具体问题:

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

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

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

从...开始

//<><><><><><><><><><><><><><><><><><><><><><><><><><><>
Run Code Online (Sandbox Code Playgroud)

粘贴"FunctionName"并以.结尾

// FunctionName <><><><><><><><><><><><><><><><><><><><>
Run Code Online (Sandbox Code Playgroud)

谢谢大家,

〜不倒翁

0-_*_*_-0 16

您可以使用视觉选择。

  • Vp选择整行并用缓冲区覆盖
  • viwp选择光标下的单词并用缓冲区内容覆盖。
  • vi(p覆盖括号之间的内容。

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


Bre*_*t Y 13

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

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

所以R <ctrl-r>"会做你想要的.注意前后有一个空格<ctrl-r>".

老答复

你很容易用宏来做这件事

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
Run Code Online (Sandbox Code Playgroud)

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

let @h = 'mhA ^[a<>^[40.80|D`h'
Run Code Online (Sandbox Code Playgroud)

请注意,^[应该是按下输入的一个字符<ctrl-V><esc>

  • 你真的需要`gR`吗?`R <CR>"`似乎也有效 (2认同)

yol*_*yer 3

你可以这样做:

:exe "normal ".strlen(@p)."x\"pP"
Run Code Online (Sandbox Code Playgroud)

它删除正确数量的字符,然后粘贴 register 的内容p