繁体   English   中英

VIM拉很多东西,然后粘贴所有不带指定寄存器的东西?

[英]VIM yank many things then paste all WITHOUT specifying registers?

假设我有以下几点:

新例子

我注意到我的示例为我们带来了另一条路,所以这是一条新路:

输入:

这是一些包含特殊文本的文本。 没有具体的模式。 要做的就是将所有这些粗体子句一劳永逸地复制另一个文件中。 我不想复制, 然后粘贴 ,然后复制然后粘贴,因为在文件之间保持切换时间太长。

输出:特别喜欢这样做,然后所有人都粘贴很长时间以保持切换

结束

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

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

有没有一种方法,以抽出第一个字符串,抽出第二,猛拉3,并且抽出第四然后进入第二个文件并粘贴过去四年猛拉, 而无需指定每个我抽出时间报名?

一个好的输出将是随后的输出,而不必在猛拉和粘贴之间来回移动。 首先拉动所有内容,然后粘贴一次:

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

我要做的是,将所有这些行复制/添加到新文件/缓冲区中,然后执行以下操作:

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

要么

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

如果新文件不为空,则仅对刚刚粘贴的文本进行替换。

我写完问题后就想到了答案。 我过去曾多次面对这个问题,因此有必要与他人(和我自己)分享。

显然,将每个字符串放入自己的寄存器中将需要我们将其从该寄存器中拉回,这可能最终会导致忘记或丢失计数(甚至混淆顺序)

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

您也可以使用宏来更快地运行它。 @q键入速度比"Ay$快得多)

这是您的操作方式:

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

如果您无法指定一种模式来指定要拉动的每一行文本的位置,则只需记录一个宏,该宏指定一个寄存器并进行拉动。 看来您只想拉扯字符串中的内容,所以可能是这样的:

首先,清除“ a”寄存器,以便可以将其追加:

qaq

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

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

现在,不要直接拉动,而是将光标放在要拉动的每个字符串上,然后使用@q(或已经运行一次宏后使用@@)运行宏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM