选择第一个单词多行vim

时间:2017-03-24 14:46:52

标签: vim

我想复制多行的第一个单词。

代码示例:

DELETE FROM databasetable WHERE collumA LIKE '%Test7%'
-- Here --------------------------------^

我想把它放在我的剪贴板中:

apiKey := fmt.Sprintf("&apiKey=%s", args.ApiKey)
maxCount := fmt.Sprintf("&maxCount=%d", args.MaxCount)
id := fmt.Sprintf("&id=%s", args.Id)
userid := fmt.Sprintf("&userid=%s", args.Userid)
requestFields := fmt.Sprintf("&requestFields=%s", args.RequestFields)

我尝试使用ctrl-v和e之后,但它在图像上复制: enter image description here

3 个答案:

答案 0 :(得分:10)

您可以使用

将每个第一个单词附加到空的寄存器(假设为q
:'<,'>norm! "Qyiw

也就是说,在视觉选择的每一行中,执行"Qyiw normal命令序列以将(第一个)“内部词”附加到q寄存器。

您需要在>中设置cpoptions才能在yanks(:set cpoptions+=>)之间添加换行符,否则这些字词将在一行中连接。

如果您想快速清空注册表,可以在正常模式下使用qqq(或qaq清空注册表a)。

注意:未命名的注册表("")也会在操作结束时包含您想要的内容,因此您无需"qp将其粘贴,p将做。

答案 1 :(得分:1)

我认为所选择的答案非常好,在寄存器中添加匹配的想法在其他场景中也非常有用。

也就是说,完成此操作的另一种方法可能是先将右侧对齐,然后进行复制,然后撤消对齐。您可以使用https://github.com/jkuri/ng2-file-managertabularAlign等工具。

使用表格,标记区域并执行:Tab/:将导致:

apiKey        : = fmt.Sprintf("&apiKey=%s", args.ApiKey)
maxCount      : = fmt.Sprintf("&maxCount=%d", args.MaxCount)
id            : = fmt.Sprintf("&id=%s", args.Id)
userid        : = fmt.Sprintf("&userid=%s", args.Userid)
requestFields : = fmt.Sprintf("&requestFields=%s", args.RequestFields)

您现在可以使用可视块模式选择第一部分,然后使用u撤消对齐。

答案 2 :(得分:1)

依靠外部cut程序:

:'<,'>!cut -d' ' -f1