Vim:复制/设置多行,这些行只用一个vim命令中的某些文本分隔

时间:2015-05-07 15:52:34

标签: vim

现在举个例子,我有一些文字(全部在不同的行上):

*

1st Line)Who are you?
2nd Line)How are you?
3rd Line)Where are you?
4th Line)Whom are you with?
5th Line)Why are you here?

*

我想做的是在一个vim命令中复制/抽取1,3,5行,然后使用vim将其粘贴到通常的paste(p)命令中。

4 个答案:

答案 0 :(得分:0)

这是一种略微手动的方式,但我认为这是一种更为流畅的手动方式。它可以通过录音或功能实现自动化。

Position cursor on first line
"ayy
Position cursor on third line
"Ayy  (note the capital A)
Position cursor on fifth line
"Ayy  (again, capital).

Position cursor on place where you want to paste
p

符号"接着是一个字母,在像yank之类的命令之前,意味着将它拉入一个名为'&34;的命名缓冲区" (我相信有26个命名缓冲区,每个字母一个),如果你把这个字母大写,那么它就会附加而不是覆盖到那个缓冲区。

答案 1 :(得分:0)

接下来会将不均匀的线条拉到寄存器A中。

let @a=''|g/^/if (line('.')%2)|y A

细分

  • let @a=''清除“a”注册
  • 每行
  • g/^/
  • if (line('.')%2)如果亚麻布不均匀
  • y A将其附加到注册A

要立即复制到文件末尾,您可以使用

g/^/if (line('.')%2)|co $

答案 2 :(得分:0)

你可以用两个命令来完成。

选项1:

搜索并突出显示每行中的关键字 用你的例子。

/\v1|3|5

然后使用命令

:CopyLine

可以在copymatches plugin

中找到

然后使用p命令粘贴。

我想要一个小 video demo ,你可以查看它。

选项2:

您也可以使用全局命令

来完成

Fist Empty register A

:let @a='' 

然后使用全局命令

:g/\%1l\|\%3l\|\%5l/y A

然后粘贴“ap命令。

答案 3 :(得分:0)

您可以使用for循环使用行号选择您感兴趣的行。

在您的示例中,要将第1,3,5行拖入注册a,命令为:

:let @a=''|for c in [1,3,5]|execute c . ',' . c . 'y A'|endfor

然后"a p会将这3行粘贴到光标位置。

更新:要在命令中包含粘贴操作:

:let @a=''|for c in [1,3,5]|execute c . ',' . c . 'y A'|endfor|execute "normal! \"ap\<CR>"