vim:用另一个字符串替换n个字符串
阅读之后,我知道了如何用空格替换制表符:vim:用另一个字符串替换n个字符串,vim,Vim,阅读之后,我知道了如何用空格替换制表符: :%s/^\v(\t)*/\=repeat(repeat(' ',4),strlen(submatch(0)))/g 上面的命令允许我将每行开头的n个制表符替换为n个空格 现在我想倒过来:在每行的开头用n个制表符替换n个四格,我认为命令应该是:%s/^\v()*/\=repeat(“\t”,strlen(submatch(0)))/g,但它不起作用:如果有一个四格,那么在执行命令后,它将被四个制表符替换(但我只想让它成为一个制表符) 此外,是否可以获得
:%s/^\v(\t)*/\=repeat(repeat(' ',4),strlen(submatch(0)))/g
上面的命令允许我将每行开头的n个制表符替换为n个空格
现在我想倒过来:在每行的开头用n个制表符替换n个四格,我认为命令应该是:%s/^\v()*/\=repeat(“\t”,strlen(submatch(0)))/g
,但它不起作用:如果有一个四格,那么在执行命令后,它将被四个制表符替换(但我只想让它成为一个制表符)
此外,是否可以获得vim的tab的长度,以便我可以按如下方式发出命令
:%s/^\v(\t)*/\=repeat(repeat(' ',getSizeOfTab()),strlen(submatch(0)))/g
您可以通过在Vimscript中预先加上
&
来获取选项的值。因此,选项卡的大小是&tabstop
,或&ts
。还有&softtabstop
(&sts
),选择您真正关心的一个
虽然需要将空格数乘以制表符的大小,但需要将制表符数除以。然后剩下的就要处理了。因此,首先设置选项卡stop
:
:set ts=4
然后,您可以将选项卡转换为空间,并将空间转换为选项卡,如下所示:
:%s/^\v(\t)*/\=repeat(repeat(' ',&ts),strlen(submatch(0)))/g
:%s#^\v( )*#\=repeat("\t",strlen(submatch(0))/&ts).repeat(' ',strlen(submatch(0))%&ts)#g
(将分隔符从/
更改为#
,因为我需要/
进行除法:p)
然而。。。看来你在重新发明轮子<代码>:帮助:重新开始代码>和:帮助“expandtab”
。首先如上所述设置tabstop
,然后:
:set et | ret!
:set noet | ret!
第一种是将制表符更改为空格;第二个,空格到制表符,根据
tabstop
似乎:set et | ret代码>和:设置noet | ret代码>将替换所有空格/制表符,但我只想替换每行开头的空格/制表符。