Vim:231キーコマンド
文字の前に^がある場合は、その文字を入力するときにコントロールを保持する必要があることに注意してください。
mbomayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0wmbyiwo@f @d^V^[@z ^["fc0"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0dd`bAe^[0@e
あなたもこれを実行できるようにステップ!
- 行をVimにコピーします
- タイプ
:s/\^V/<Ctrl-V><Ctrl-V>/g
してEnterキーを押します(2つのsは青の^ Vになります)
- タイプ
:s/\^R/<Ctrl-V><Ctrl-R>/g
してEnterキーを押します(青い^ Rsが表示されます)。
- タイプ
:s/\^X/<Ctrl-V><Ctrl-X>/g
してEnterキーを押します(青い^ Xが表示されます)。
- タイプ
:s/\^O/<Ctrl-V><Ctrl-O>/g
してEnterを押します
- タイプ
:s/\^A/<Ctrl-V><Ctrl-A>/g
してEnterを押します
- タイプ
:s/\^\[/<Ctrl-V><Ctrl-[>/g
してEnterを押します([]をエスケープする必要があるため、このコマンドは少し異なります)
- タイプ
0"yy$
ます。コマンドは現在、yレジスタに格納されています
- 行に入力を設定し、次のコマンドで実行します
@y
誰かがコマンドを共有するより良い方法を知っているなら、私に知らせてください。私はこれが長いことを知っていますが、私が思いつくことができる最高です。
入出力
入力文字列は、ファイル内の任意の行で単独でなければなりません。1 0 0 4 3 0 0 0 7
出力は単に入力文字列を上書きします1 2 3 4 3 4 5 6 7
説明
アルゴリズム
- ゼロ以外の数字から開始し、最後の数字ではないことを確認してください
- 次のゼロ以外の数を見つける
- それらの違いを取る。答えが否定である場合、範囲を修復するためにデクリメントする必要があり、そうでない場合、範囲を修復するためにインクリメントする必要があります。
- 最初の文字に戻り、前の数字を増減して各ゼロを置き換えます。
- 最後のキャラクターに到達するまで繰り返します
使用されるマクロ
@e-終了を確認します。最後の番号にはeが追加されます。カーソルの下の番号の末尾にeがある場合、eを削除して実行を停止します。それ以外の場合は、@ bで補間サイクルを開始します。
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b-補間サイクルを開始します。減算演算(@s)のためにカーソルの下の数値を保存してから、次の非ゼロの項(@f)を見つけます
mayiwo^R"^V^X ^["sy0dd`a@f
@s-@dで使用する減算コマンドを格納します。補間ステップの開始時の番号は単純に(val)^X
あり(val)
ます。これは、@ bコマンドによって設定されます。
@f-次の非ゼロ項を見つけます。現在の値を名前のないレジスタに書き込み@f @d
、次の行に書き込み、@ zを実行します。これは、数値がゼロの場合はこのコマンドを繰り返し、そうでない場合は@dを実行します。
wmbyiwo@f @d^[@z
@z-名前のないレジスタが0の場合、条件付き実行。このコマンドは、形式の新しい行に2つのコマンドが必要ですcommand1 command2
。名前のないレジスタが0の場合command1
は実行され、そうでない場合command2
は実行されます。どちらのコマンドにもスペースを含めることはできません。
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t-一時コマンドレジスタ。さまざまなコマンドを短時間実行してから実行します。主にifステートメントで使用されます。
@d-補間方向を決定します。(@sを使用して)カーソルの下の数値からシーケンスの最初の数値を減算します。結果が負の場合、^ Xが@aに保存されるように、補間は減少する必要があります。そうでなければ、^ Aが@aに保存されるようにインクリメントする必要があります。これが保存されたら、この補間サイクルの最初に戻り、@ iを実行して実際に補間します
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a- ^A
または^X
補間ステップ中に増分または減分するためにをします。これは、@ dコマンドによって設定されます。
@i-補間。現在の場所の番号を@xにコピーし、次の番号に移動します。その数値がゼロの場合は、@ xに置き換え、@ aを実行して適切に上下に変更してから、このコマンドを繰り返します。数値がゼロでない場合、この補間サイクルの終わりに達しました。この番号を先頭として新しいものを開始する必要があるため、@ eを実行して終了を確認し、再度実行します。
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x-一時ストレージレジスタ。補間コマンドで使用(@i)
キーストロークを分解する
mbo :Set b mark to current position and open a new line below to write macros
mayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0 :Write to @b and reset line
yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0 :Write to @d and reset line
mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0 :Write to @e and reset line
wmbyiwo@f @d^V^[@z ^["fc0 :Write to @f and reset line
"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0 :Write to @i and reset line
IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0 :Write to @z and reset line
dd`b :Delete this line and move cursor back to original line
Ae^[ :Append an e to the last number
0@e :Move to the beginning of the line and run
0
、プログラムは次のような別の値を取ることができますnull
か?