2011-02-11 20 views
2

VIMでの文字列の書式設定は頭痛を与えています。VIMでの文字列の書式設定(埋め込み)

出力文字列がどのように区切られるかを指定できるPythonの文字列フォーマットに非常に慣れていると思います。私は、バッファにそれを追加する前に、その文字列を構築し、すべてが素晴らしい作品

Line: 1 ==>> ErrorName ==>> File Path: /foo 

は、だから私は、のように見えるスクラッチバッファに情報を出力するVIMプラグインを持っています。しかし、あなたが異なっている行番号(数字賢明な​​)を持っている時はいつでもあなたはこのようなものを得る:

Line: 1 ==>> Error ==>> File Path: /foo 
Line: 123 ==>> ErrorNameLong ==>> File Path: /foo 
Line: 12 ==>> ErrorShort ==>> File Path: /foo 

私はやって、タブの代わりに空白をやって試してみましたが、それは唯一の(スペースはさらに大きな成長)、それが悪化させます。私は助けるプラグイン(例えばtabular.vim)をよく承知していますが、これはプラグイン自体であることから、私は依存関係を必要としたくない

Line: 1 ==>> Error   ==>> File Path: /foo 
Line: 123 ==>> ErrorNameLong ==>> File Path: /foo 
Line: 12 ==>> ErrorShort ==>> File Path: /foo 

:だから、私の理想的な最終結果はこのようなものでなければならないであろう簡単な文字列の書式設定のためだけに別のプラグインで

これらは私がこれまで試してみましたものは以下のとおりです。

  • タブ(タブ+スペース)
  • 検索と(バッファにレンダリング後のスペースとタブ)タブに置き換え

これには良いアプローチがなければならないと思われ、私はそれを逃しているだけです。

VIMで必要な文字列フォーマットはどのように達成できますか?

答えて

3

私は2つの小さな機能を使用していますが、空想的なものはありません。文字列の後にパディングを追加するものと、文字列の前に追加したいものがあります。 PrePad関数では、パディング文字のオプションの引数を使用できます。これは、先行する0の数値を埋め込むために使用されることがあります。

function! Pad(s,amt) 
    return a:s . repeat(' ',a:amt - len(a:s)) 
endfunction 

" Pad('abc', 5) == 'abc ' 
" Pad('ab', 5) == 'ab ' 


function! PrePad(s,amt,...) 
    if a:0 > 0 
     let char = a:1 
    else 
     let char = ' ' 
    endif 
    return repeat(char,a:amt - len(a:s)) . a:s 
endfunction 

" PrePad('832', 4)  == ' 823' 
" PrePad('832', 4, '0') == '0823' 

元のログメッセージを構築するには、簡単にPad()を使用します。次のようなものがあります。

echo 'Line: ' . Pad(linenum,8) . '==>> ' . Pad(errmsg,12) . '==>> FilePath: ' . path 
+0

最初は、このアプローチがうまくいくかどうかは疑問でした。最初に私を投げ捨てたのは、それを動作させるために十分なパディングが必要なため、最初は「a:amt-len(a:s)」でした。これは私の問題を解決し、時間をかけてここで機能を享受してくれてありがとう。 – alfredodeza

+1

@alfredodeza asciiだけを受け入れる場合にのみ 'len()'を使うべきです。すべてのlenを 'strwidth()'(vim-7.3のみ)または 'len(split(a:s、 '\ zs'))'(全角文字は扱えません)に置き換えてみてください。 – ZyX

+3

@alfredodeza asciiだけを扱うのが普通なら、この2つの関数を捨てて、組み込みのprintfを使うことができます: 'echo printf( 'Line:% - * u == >> - %s *= >> FilePath%s '、8、linenum、12、errmsg、path) 'を実行します。 PrePadの場合、 '%'の後に '-'を削除します。 – ZyX

関連する問題