如何在vim中用引号(或类似字符)包围可视块?

3

在Vim中有一个视觉块选择,如何在其周围添加引号?

我经常需要对字段列表进行操作,例如:

name
address
telephone

将它转换成我代码中类似这样的东西。
declare name      = 'name';
declare address   = 'address';
declare telephone = 'telephone';

我可以通过一系列的视觉块选择和更改等操作轻松完成以下阶段。

declare name      = 'name
declare address   = 'address
declare telephone = 'telephone

但我该如何高效地插入尾引号和分号呢?在这里进行 ex-mode 替换操作感觉不太对。

编辑: 我记得 Damian Conway 在这里演示过 - "More Instantly Better Vim" - 37:00。很难确定,但他是在利用 dragvisuals.vim 插件中的某些功能还是 vim 原生支持来添加最后的引号吗?


2
为什么不使用正则表达式:1,3s/\(.*\)/declare \1 = '\1'; - ntalbs
2个回答

2

视觉块

您可以在视觉块模式中使用$A。您可以使用gv重新启动视觉块模式。

gv$A';<esc>

替换

可视化选择您的行,然后执行:s/$/';

更好的替换

忘掉可视块和其他麻烦事。只需从您的列表开始,执行以下替换:

:%s/.*/declare & = '&';/

如果您愿意,您可以进行视觉范围的操作。如果您想在行首保留缩进,请执行以下操作::%s/^\s*\zs.*/declare & = '&'/

侧边栏:对齐

您可以使用插件Tabular来进行对齐。

:Tabularize /\zs=

其他对齐插件有:Alignvim-easy-align

结论

我更喜欢使用“Better Substitution”方法,然后使用:Tabularize命令。

更多信息请参见:

:h visual-block
:h blockwise-operators
:h v_b_A
:h v_b_A_example
:h gv
:h /\zs
:h :s/\&

0

您可以像这样在正则表达式中匹配视觉选择:'<,'>s/\%V.*\%V/'&'。有关说明,请参见正则表达式帮助。

对于您的特定示例,我会记录一个宏来转换第一行:

qq^yeIdeclare ^[pa = '^[A';^[jq

然后为其余部分重复:

2@q

让我们逐步了解这个过程:^yeIdeclare ^[pa = '^[A';^[j

  • ^ 将光标移动到行首
  • ye 复制单词
  • Ideclare ^] 在前面插入短语
  • p 粘贴已复制的单词
  • a = '^] 插入等号和开头引号
  • A';^] 添加结尾引号和分号
  • j 移动到下一行

当然,我只需按下 qq 并执行这些操作即可记录宏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接