dd一行并将其粘贴在另一行的中间(在vi / vim中)

时间:2014-05-13 19:34:29

标签: vim vi

这是一个示例,[]表示光标:

vim is a text editor
[]great

此时我们会dd

vim is a[] text editor

然后我想将前一行粘贴在当前行的中间:

vim is a great[] text editor

3 个答案:

答案 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; (天哪!)