2012-05-11 19 views
0

私のような狂気の人たちのために、完璧に整列されたラインが好きな人にとって、素晴らしい機能を書こうとしています。Vi:自動的に空白を挿入する方法

私はしばしば、フォーマットが "key = value"であるファイルを書きます。 キーには不確定な文字が含まれている可能性があるので、 "="記号を手動で並べ替える必要があります。

viに「誰かが等しい文字を入力した後、必要に応じてスペースを挿入して列25に移動し、等号を書く」と伝える方法はありますか?

2番目の手順は、このフォーマットをファイル全体に適用するためのショートカットを定義することです。

ご協力いただければ幸いです。

ベン。

答えて

1

=の動作をに挿入します。挿入モード

次のコードでは、現在のカーソル位置から24桁目までのスペースが追加され、後ろに等号が追加されます。カーソルの位置の後ろに文字がある場合(単語の真ん中を想定)、それらの文字は25桁の後に移動されます。これをvimrcファイルに追加して試してください。第二の工程のために

"" If length of the line is more or equal to 24, add an equal sign at the end. 
"" Otherwise insert spaces from current position of cursor until column 24 
"" and an equal sign, moving characters after it. 
function My_align() 
    let line_len = strlen(getline('.')) 
    if line_len >= 24 
     s/$/=/ 
     return 
    endif 
    let col_pos = col('.') 
    exe 's/\%#\(.\|$\)/\=submatch(1) . printf("%' . (24 - col_pos) . 's%s", " ", "=")/' 
endfunction 

inoremap = <Esc>:call My_align()<CR>A 

、複数の反復コマンドを使用し、等号をチェックし、ちょうどその前にカラム25までのスペースを挿入します。等号が実行前のカラム25の後ろにある場合は動作しませんが、あなたはそのアイデアを得ます。

:g/=/exe 's/=/\=printf("%' . (24 - stridx(getline('.'), "=")) . 's", " ") . submatch(0)/' 
関連する問題