0

私は、行を完全に揃えるのが好きな私のようなクレイジーな人のために、素敵な機能を書こうとしています。

私はよく、「キー = 値」という形式のファイルを書きます。キーには不確定な数の文字が含まれている可能性があるため、クールではない「=」記号を手動で揃える必要があります。

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

2 番目のステップは、この形式をファイル全体に適用するためのショートカットを定義することです。

どんな助けでも大歓迎です。

ベン。

4

1 に答える 1

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

2 番目のステップでは、複数の繰り返しコマンドを使用し、等号を確認して、その直前の列 25 までスペースを挿入します。等号が実行前に 25 列目以降にある場合は機能しませんが、アイデアは得られます。

:g/=/exe 's/=/\=printf( "%' . ( 24 - stridx( getline('.'), "=" ) ) . 's", " " ) . submatch(0)/'
于 2012-05-11T22:39:03.917 に答える