VIM猛拉很多东西然后粘贴所有没有指定寄存器?

时间:2016-01-05 14:22:57

标签: vim

我们说我有以下内容:

新示例

我注意到我的例子驱使我们另一条路线,所以这是一个新的路线:

输入:

这是一些包含一些特殊文字的文字。没有特定的模式。我喜欢做的所有内容都是将所有那些粗体子句复制一次,并将其全部复制到另一个文件。我不想复制,然后粘贴,然后复制然后粘贴,因为在文件之间保持切换太长

输出: 特别 喜欢做 并为了所有人 然后粘贴 长期不断改变

var x = "1";
var y = "a thing";
var something = "more things";
// some comment
var foo = "a lot more things";

我想将引号之间的字符串移动到另一个文件中,我将它们声明为常量。

有没有办法抽第一个字符串,猛拉第二个字符串,猛拉第三个字符串,然后猛拉第四个字符然后转到第二个文件并粘贴最后四个字段没有必须指定寄存器每次我猛拉?

良好的输出将是以下,而不必在抽搐和糊状物之间来回移动。先把所有东西都拿出来粘贴一次:

"1"
"a thing"
"more things"
"a lot more things"

3 个答案:

答案 0 :(得分:1)

我要做的是,将所有这些行复制/拉到新文件/缓冲区,然后执行:

%s/^[^"]*\|[^"]*$//g

'[,']s/^[^"]*\|[^"]*$//g

仅在粘贴的文本上进行替换,以防新文件为空。

答案 1 :(得分:0)

在我写完这个问题后,我想到了答案。我过去曾经多次面对这个问题,所以与其他人(以及我自己)分享这个问题是有意义的。

显然,将每个字符串放在自己的寄存器中需要我们从寄存器中取回它,这样我们最终可能会忘记或丢失计数(甚至混淆订单)

要解决此问题,请使用单个寄存器,但请将其附加到其中。

您还可以使用宏来更快地运行。 (@q的输入速度比"Ay$

快得多

这是你如何做到的:

  1. 将光标移动到第一行的第一个",然后键入:"ay$以覆盖寄存器a的内容
  2. 转到第二行并创建一个宏,如下所示: qq0f""Ay$q
  3. 在你要复制的字符串的每一行上播放宏(当然这取决于你的代码,但这适用于我上面的例子) @q
  4. 转到第二个文件以粘贴:"ap

答案 2 :(得分:0)

如果你不能指定一个模式来给每个文本位置的位置,那么只需记录一个指定寄存器和yanks的宏。看起来你只是在字符串中的东西,所以它可能是这样的:

首先,清除“a”寄存器,以便您可以附加到其中:

qaq

接下来,记录一个宏(到q),它将光标下的引号中的所有文本追加到寄存器A中,然后附加换行符以获取所有常量:

qq
"Aya"
:let @a.="\n"<CR>
q

现在不是直接yanking,而是将光标放在每个字符串上,然后用@q(或者你已经运行过一次宏之后的@@)运行宏。