如何在vim中用引号(或类似)包围视觉块

时间:2014-11-07 00:39:20

标签: vim

考虑到Vim中的视觉块选择,如何在它周围引用?

我经常发现自己的目标是获取字段列表 - 例如

name
address
telephone

在我的代码

中将其转换为类似的内容
declare name      = 'name';
declare address   = 'address';
declare telephone = 'telephone';

我很乐意通过一系列视觉区块选择和更改来进入下一阶段。

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

但是如何以最有效的方式插入尾部引号和分号?不得不在这里做一个前模式替补,感觉不对。

编辑:我记得Damian Conway在这里展示了这一点 - "More Instantly Better Vim" - 37:00。很难说,但是当他追加最后一个引号时,他是否正在利用dragvisuals.vim插件中的某些内容或vim本地的内容?

2 个答案:

答案 0 :(得分:2)

Visual Block

您可以将$A用于可视屏蔽模式。您可以使用gv重新启动Visual块模式。

gv$A';<esc>

换人

以视觉方式选择行,然后执行:s/$/';

更好的替代

忘记做视觉块事务和其他事情。只需从列表开始,然后执行以下替换:

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

如果你愿意,你可以做一个视觉范围。如果你想在行的开头保持缩进,请执行::%s/^\s*\zs.*/declare & = '&'/

补充工具栏:对齐

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

:Tabularize /\zs=

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

结论

我更喜欢&#34;更好的替代&#34;方法,然后是:Tabularize

有关详细信息,请参阅:

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

答案 1 :(得分:0)

您可以在正则表达式中匹配视觉选择,如下所示:'<,'>s/\%V.*\%V/'&'。有关说明,请参阅regexp帮助。

对于您的具体示例,我会录制一个宏来转换第一行:

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

然后重复其余部分:

2@q

让我们来看看:^yeIdeclare ^[pa = '^[A';^[j

  • ^将我们带到了行的开头
  • ye复制
  • 一词
  • Ideclare ^]在前面插入一个词组
  • p粘贴复制的字词
  • a = '^]插入等号并打开引号
  • A';^]附加结束语和分号
  • j转到下一行

当然,我只是通过点击qq并执行这些操作来记录宏。