这是一个示例,[]表示光标:
vim is a text editor
[]great
此时我们会dd
:
vim is a[] text editor
然后我想将前一行粘贴在当前行的中间:
vim is a great[] text editor
答案 0 :(得分:2)
如果只关注你问题中的例子,你可以这样做:
kJD3bp
简短说明:
k: move back to above line
J: join the line you want to delete, and added a space
D: remove the text from the line you just joined
3b:go to the 3rd word's beginning backwards
p: paste you just deleted text (by D)
如果您需要通用解决方案,则可能需要将中间计算(line length /2)
包含在exec
cmd或map <expr>
答案 1 :(得分:1)
我认为没有任何非常简单的方法可以做到这一点;你必须复制不包括换行符的文本,删除换行符,粘贴它并自己添加额外的空格。您可以创建一个快捷方式来复制一行,在其末尾添加一个空格,并通过以下方式删除该行:
A<Space><Esc>^y$dd
然后带空格的文本将在第0个寄存器中。将光标移动到您想要的位置,然后粘贴"0P
。根据光标的位置,您可以通过以下方式执行此操作:
A<Space><Esc>^y$dd4w"0P
答案 2 :(得分:1)
不要使用&#34; dd&#34;但是&#34; dw&#34;删除单词,&#34; p&#34; (粘贴在光标后)或&#34; P&#34; (在光标前粘贴)它。
如果你坚持&#34; dd&#34;:你需要使用以下方式粘贴它:
[i] [Enter] [Esc] [p] [k] [J] [J]
使用vim,你也可以录制宏,进行&#34;粘贴&#34;上面:
just start to record ([q][a], to record in "a" register),
then [i] [Enter] [Esc] [p] [k] [J] [J]
then finish recording with [q].
and then use it with : [@] [a] (ie "execute registered macro "a")
当然,&#34; timtowtdi&#34; (天哪!)