1
1 1
1 1
1111111
1 1
1 1
1 1
上記のような3つの異なるブロック文字の行を想像してください。
^V
上記を選択するA
と、行の長さが等しくないため、行の最後の文字のすべてをに変更できませんでした。前のブロックの文字がで罰金を働いた
:s/\%V1/T/g
Tは、1つの」から作られた「前のブロックの手紙。変更/T/
何でもします。
しかし、上記の最後のブロック文字を選択すると、すべての「1」が「A」に変わり、A *のポイントになり、残りは1のままでした。
*最短ライン。
すべての行を同じ長さにするために、スペースを入れました。(私はvimが初めてなので、もっと良いスクリプトを書くことができると思います。)
注:Aのピークはライン2から始まりました。
let Maxlen = 0
" Find longest line
for i in range(2,8)
let t = getline(i)
let a = strlen(t)
if a > Maxlen
Maxlen = a
endif
endfor
" Append spaces 'til all lines are the same length.
for i in range(2,8)
let t = getline(i)
let a = strlen(t)
if a < Maxlen
let b = Maxlen - a
execute "normal!" . i . "gg0" . b . "A "
endif
endfor
この後:s/\%V1/T/g
、行の最後のブロックレターで宣伝されたとおりに働きました。
PS私はexecute
上の行がドットなしで機能するはずだと読んだのですが、私には機能しませんでした。