我的替代品可以替换在某一列吗? (*不*在某一列搜索)

时间:2014-01-22 03:14:17

标签: vim

我在文件中有一些文字,我想按摩到固定宽度的格式。

我知道Vim对于here所讨论的搜索模式有一个很酷的\%c。任何人都知道在替代品的替换字符串中是否有相同类型的东西?所以我可以做某种事情:

:%s/ (.*/\%50c\0/

这样可以很好地接受第一个之后的所有内容(并将其移至第50列?

我想我需要假设我将所有内容都移到了右侧(并用空格填充。

是的,我知道有来自Chip博士的插件可以调整。这基本上做了我希望做的事情。我希望有一个:s选项。或者甚至可能是宏?

...谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用\=repeat功能填充替换内容。

:s/(.*/\=repeat(' ', 50 - col('.') + 1).submatch(0)/

如需更多帮助,请参阅:

:h :s\=
:h repeat(
:h col(

答案 1 :(得分:2)

我想到的一个解决方案是滥用:normal命令和|(这是<bar>而不是资本i)动议。例如......

:%norm! f(50i <C-v><C-[>d49|

或者,如你所说,用宏:

qq/(<cr>50i <esc>d49|<cr>q999@q

:%s\ze

:%s#\ze(#\=repeat(' ',50-col('.'))

为了增加击键次数; - )