我没有问题,我只是好奇。
这是我.vimrc的一部分。
set tabstop=4
set shiftwidth=4
set expandtab
我想将所有notab
替换为<-here is a tab
所以命令应该是:
:%s/notab/^I<-here is a tab/
给我真正的标签,所以为了替换它需要4个空间来调用
:retab
一次调用的结果相同(直接添加4个空格):
:%s/notab/ <-here is a tab/
但是不方便,第一个版本包含文本中的真实标签,需要重新标记,第二个版本取决于定义为一个标签的空间数量。
有没有通用的方法呢?
答案 0 :(得分:4)
我认为这应该完全符合您的要求:
:%s/notab/\=repeat(" ", &tabstop)/ge
答案 1 :(得分:1)
notab
放在行的开头(当(col-1)%&amp; tabstop == 0)时,@ sehe的答案很有效,但是使用变量&amp; tabstop这保证只有在山口== 1)。如果你对%s/notab/\t/ge | retab
都不好(即你的变种用条形符号加入一行)(也许,因为已经有一些不被重新标记的标签,我没有看到任何其他原因)也没有@谢谢你的回答你必须使用更复杂的代码:
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')