如何在vim中替换为展开的选项卡
我没有问题,我只是好奇 这是我的.vimrc的一部分如何在vim中替换为展开的选项卡,vim,Vim,我没有问题,我只是好奇 这是我的.vimrc的一部分 set tabstop=4 set shiftwidth=4 set expandtab 我想用替换文本中的所有notab,我认为这应该完全符合您的要求: :%s/notab/\=repeat(" ", &tabstop)/ge 我认为这应该完全符合您的要求: :%s/notab/\=repeat(" ", &tabstop)/ge @如果将notab放在行的开头(当(col-1)%&tabstop==0时,sehe的答
set tabstop=4
set shiftwidth=4
set expandtab
我想用
替换文本中的所有notab
,我认为这应该完全符合您的要求:
:%s/notab/\=repeat(" ", &tabstop)/ge
我认为这应该完全符合您的要求:
:%s/notab/\=repeat(" ", &tabstop)/ge
@如果将notab
放在行的开头(当(col-1)%&tabstop==0时,sehe的答案很有效,但对于变量&tabstop,只有当col==1时,才能保证发生这种情况)。如果您对%s/notab/\t/ge | retab
(即,您的变体使用条形符号连接成一行)或@sehe的回答都不满意(可能是因为已经有选项卡不需要重新标记,我看不到任何其他原因),那么您必须使用更复杂的代码:
function ToExpTab(pat)
for lnr in range(1, line('$'))
let line=''
let chunks=split(getline(lnr), a:pat, 1)
if len(chunks)<=1
continue
endif
for chunk in chunks[:-2]
let line.=chunk
let line.=repeat(' ', &tabstop-(strdisplaywidth(line))%&tabstop)
endfor
let line.=chunks[-1]
call setline(lnr, line)
endfor
endfunction
call ToExpTab('notab')
函数扩展选项卡(pat)
对于范围内的lnr(1,行(“$”)
让线=“”
让chunks=split(getline(lnr),a:pat,1)
如果len(chunks)@sehe将notab
放在行的开头(当(col-1)%&tabstop==0时,但对于变量&tabstop,只有当col==1时,才能保证这一情况发生),那么他的答案会很好地工作。如果您对%s/notab/\t/ge | retab
(即,您的变体使用条形符号连接成一行)或@sehe的回答都不满意(可能是因为已经有选项卡不需要重新标记,我看不到任何其他原因),那么您必须使用更复杂的代码:
function ToExpTab(pat)
for lnr in range(1, line('$'))
let line=''
let chunks=split(getline(lnr), a:pat, 1)
if len(chunks)<=1
continue
endif
for chunk in chunks[:-2]
let line.=chunk
let line.=repeat(' ', &tabstop-(strdisplaywidth(line))%&tabstop)
endfor
let line.=chunks[-1]
call setline(lnr, line)
endfor
endfunction
call ToExpTab('notab')
函数扩展选项卡(pat)
对于范围内的lnr(1,行(“$”)
让线=“”
让chunks=split(getline(lnr),a:pat,1)
如果是len(chunk),你想做什么?将notab
替换为表格或用4个空格替换?您想做什么?用表格替换notab
,或者用4个空格替换它?只有当“notab”恰好位于(col-1)%&tabstop==0的位置时,这才有效。@ZyX不知何故,我从来没有提交过这么多的编辑。嗯。这是一个非常繁忙的工作周。。。再次感谢您,只有当“notab”恰好位于(col-1)%&tabstop==0的位置时,这部作品才有效。@ZyX不知怎的,我从来没有完全承诺过我的编辑会这么说。嗯。这是一个非常繁忙的工作周。。。再次感谢