Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vim:用另一个字符串替换n个字符串_Vim - Fatal编程技术网

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将替换所有空格/制表符,但我只想替换每行开头的空格/制表符。