我希望能够从缓冲区中粘贴一些东西(可能使用"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>
你可以这样做:
:exe "normal ".strlen(@p)."x\"pP"
Run Code Online (Sandbox Code Playgroud)
它删除正确数量的字符,然后粘贴 register 的内容p。