繁体   English   中英

使用 Vim 从多行中的每一行中选择第一个单词

[英]Select first word from each line in multiple lines with Vim

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

代码示例:

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)

我想在我的剪贴板中有这个:

apiKey
maxCount
id
userid
requestFields

我尝试使用 ctrl-v 和 e 之后,但它复制到图像上: 在此处输入图片说明

你可以每首字为空寄存器(比方说,追加q使用)

:'<,'>norm! "Qyiw

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

您需要在cpoptions中添加>以便在 yanks ( :set cpoptions+=> ) 之间添加换行符,否则单词将连接在一行中。

如果你想快速清空寄存器,你可以在正常模式下使用qqq (或qaq清空寄存器a )。

注意:未命名的寄存器 ( "" ) 也会在操作结束时包含您想要的内容,因此您不需要"qp粘贴它, p就可以了。”

我认为选择的答案非常好,将匹配项附加到寄存器的想法在其他情况下也非常有用。

也就是说,完成此操作的另一种方法可能是先对齐右侧,进行复制,然后撤消对齐。 您可以使用tabularAligneasy-align 等工具

使用表格,标记区域并执行: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撤消对齐。

依靠外cut程序:

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

暂无
暂无

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

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