問題

マクロまたは〜10行の関数(プラグインなし!)を使用して、最初と最後の単語(=非空白文字のシーケンス)の間にテキストを中央に配置する簡単な方法はありますか?例えば。

         >>> No user serviceable parts below.               <<<
 

         >>>       No user serviceable parts below.         <<<
 

スペース+/-1をバランスさせることで?タブはなく、結果にはタブは含まれてはいけませんが、最初の単語は列1で始まらないことに注意してください。

  ベストアンサー

ソースこの関数:

 fun! CenterInSpaces()
    let l   = getline('.')
    let lre = '^\s*\S+\zs\s*\ze'
    let rre = '\zs\s*\ze\S+\s*$'
    let sp  = matchstr(l,lre)
    let sp  = sp.matchstr(l,rre)
    let ln  = len(sp)
    let l   = substitute(l,lre,sp[:ln/2-1],'')
    let l   = substitute(l,rre,sp[ln/2:],'')
    call setline('.',l)
endf
 

注意この関数は、スタティックにコールすることはできません。

  • この関数はすべての場合には機能しない可能性があります。私はちょうど通常の場合にそれを素早く書いた。これは結局のところプラグインではありません

  • コード行は、関数呼び出しを組み合わせることで減らすことができます。しかし、私はそれがこのようにはっきりしていると思うので、私はちょうどこのようにそれを残します。

  • 地図を作ることができます

  • それは次のように動作します:(最後の2行は、cmd呼び出しを繰り返すために@:と入力しました)

enter image description here

  同じタグがついた質問を見る

vimmacroscenter