vimscriptで文字列中のタブ文字を空白に置換したい。
バッファに対してなら retab
でいいんだけど、あくまで文字列に対して実行したい。そういう関数があるんじゃないかと思ったけど、見つけられなかった。
自分で実装するなら、こんな感じ?
function! ExpandTab(text,tabstop)let tokens = split(a:text,'\v\t\zs')let replaced = map(tokens,
\'v:val[-1:] !="\t" ? v:val :
\ v:val[:-2] . repeat(" ",a:tabstop-(len(v:val)-1) % a:tabstop)')returnjoin(replaced,'')endfunction
- splitで、各タブ文字の後ろで文字列を分割
- mapで、分割後の各文字列の長さがtabstopのn倍になるようにタブを空白に置換
- joinで文字列を再結合
で終わり。