如何用vim中的单词替换uuid列

时间:2012-01-12 14:15:13

标签: regex vim

我得到的文字如下(它是一个sql脚本)

('63d3a510-321c-11e1-9fe7-000c2956598e', 1, 13, 'aaa', 'aa', 1309, 0),
('63d3a5ba-321c-11e1-9fe7-000c2956598e', 3, 34, 'bbb', 'bb', 3402, 1),
('63d3a6aa-321c-11e1-9fe7-000c2956598e', 3, 34, 'ccc', 'cc', 3403, 1),

我需要用uuid()替换所有uuids。

我怎么能在vim中做到这一点?

4 个答案:

答案 0 :(得分:4)

如果您的所有线条形状相同,则会执行以下操作:

:%s,'[^']\+',uuid(),

在命令模式下。

(是的,我使用,而不是更经典的/作为分隔符,但它也可以正常工作 - 并且更容易在azerty键盘布局上键入:))

答案 1 :(得分:4)

精确匹配uuid更安全:

:%s/'[-[:xdigit:]]\{36}'/uuid()/g

答案 2 :(得分:1)

如果它们很少,我会使用.重复上一次更改。

lca'uuid()<ESC>j.j.

说明:

l          # One position right to set cursor inside '...'
ca'        # Change content between '...'
uuid()     # Write literal string.
<ESC>      # Press <ESC> key to exit insert mode and return to normal mode.
j.         # Move one line down and repeat last change.
j.         # Move to last line and repeat last change.

答案 3 :(得分:1)

[简单方法]在这种特殊情况下(列对齐)我会使用视觉块模式:

  1. &lt; C-v&gt;(选择'')x
  2. 之间的区域
  3. &lt; C-v&gt;(选择第二列     引号')Iuuid()&lt; ESC&gt;
  4. 其中“&lt; C-v&gt;(select)I”允许在每个选定的行中插入相同的文本。