Vim 搜索和替换查询

4

我有一个正则表达式,如下:

:%s/pattern/        pattern/gc

如您所见,在替换文本中,我想要最初有八个空格字符。我不想每次都输入八个空格。是否有更优雅的方法来做到这一点?

3个回答

3
你可以使用printf('%*s', 8, ''):

使用星号“*”代替数字字符串,可以指定字段宽度或精度或两者兼备。在这种情况下,一个数字参数提供了字段宽度。

:%s/pattern/\=printf('%*spattern', 8, '')/gc

3
如果你想节省按键次数,可以使用命名寄存器来初始化替换文本:
:let @a = repeat(' ', 8)

然后,在构建替换命令时,您可以通过CTRL-R + {register-name} 来插入寄存器内容:

:%s/pattern/<C-R>a&/gc

为了进一步简化,我已经通过&在替换字符串中引用了搜索模式。

谢谢。对我来说,这似乎是一个合理的解决方案。我可以将寄存器初始化代码放在 .vimrc 中。我需要这样做是因为我需要在我的代码中使用 8 个空格缩进。 - Rakesh
我已经怀疑这一点,虽然我更喜欢通过%g/pattern/>来解决这个问题而不是使用替换。附言:别忘了接受答案。 - Ingo Karkat
@RakRaks 你的意思是你需要在整个代码中使用8个空格缩进,而不仅仅是偶尔使用8个空格缩进吗?如果是这样,有更好的方法可以让vim帮助你。 - David Pope
@David 我的 .vimrc 文件里有一些这样的东西。但是,这是当我复制粘贴一些内容然后进行编辑以获取代码时使用的。 - Rakesh

1

你可以在命令前输入一个数字来重复某些vi命令,例如: 8iA 将插入8个A(因此用空格替换它)。


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