我正在编辑一个wiki文件,我想在两列之间添加一个新列。
| *No* | *Issue* | *File* | *Status* |
| 1 | blah | foo | open |
| 2 | blah1 | foo1 | close |
现在在第3和第4列之间我想插入另一列,如果我可以搜索第四列匹配“|”在给定行中的字符,我可以用“| |”替换它。如何使用vim做到这一点?
最终结果将是
| *No* | *Issue* | *File* | | *Status* |
| 1 | blah | foo | | open |
| 2 | blah1 | foo1 | | close |
答案 0 :(得分:3)
如何通过在命令模式下输入q
来将宏录制到寄存器qq3f|a|<ESC>q
中(ESC表示按Esc键)。现在,您可以通过:%norm@q
将此宏应用于每一行。
额外奖励:
使用此模式,您可以添加更复杂的操作,例如将第一列复制为第3列(如果光标位于第一列):
qqf yf|;;;p0q
哦,问题的答案:在|
上搜索第{4}次3f|
(如果光标位于第0位,|
字符为在你的例子中。)
答案 1 :(得分:1)
考虑以下替换命令。
:%s/\%(.\{-}|\)\{4}\zs/ |/
答案 2 :(得分:1)
:%s/\(|[^|]*\)\{3\}/&| /
这意味着:在每一行(%
)上,找到三个以|开头的字符串出现(\{3\}
)其次是任意数量的非| ([^|]*
),并将其替换为自身(&
),后跟|
。
答案 3 :(得分:0)
您可以在sed
中呼叫vim
作为过滤器:
:%!sed 's/|/| |/3'