Vimのマクロ
非常に奇妙です、一方で、トピックは非常にありふれていますが、他方では、ここでもインターネットでも、そのような重要なトピックをよく理解していることがわかります。これにより、テキストを編集するタスクが大幅に簡素化されることがあります。 私は、Avdi GrimmのブログでEmacsのマクロについて議論することによって執筆するよう促されました。 最初にこれを修正し、次にインターネットから間違っていると言いましょう。
マクロはどのようなテキスト編集タスクを解決できますか? たとえば、これ:読んでいるこのまさに行で、すべてのコンマを取り、それらを0に変更します。正規表現を思い出すことができますが、誰もが好きではない、特に誰もが助けを借りて改行を挿入する方法を覚えていないサービス表現で正規表現として使用されるいくつかの文字を置き換える必要がある場合、あなたはすでにメインタスクから気をそらされ、テキストを編集する代わりに、検索と置換、試行と間違いをするための正規表現を書いています。
マクロを使用すると、何かを覚えたり書いたりする際の注意をそらすことなく、これをより速く行うことができます。 マクロがどのように機能するかを覚えておくのは非常に簡単で、テキストをジャンプするのと同時に、毎日の作業に入るでしょう。
このトピックでは、このまさにタスクでマクロを使用する方法を学びます。
最初にこれを手動で行う方法を覚えておきましょう。
f,r0
その後、連続して押すことができ
;
もう一度検索し
.
前のアクションを繰り返します。 しかし、ある時点ではそれほど単純ではないかもしれません。たとえば、間にいくつかの記号を追加する必要があります。 ポイントは機能しなくなり、
r0
もう一度押す必要があります。 または、これらのコンマが非常に多くあり、1つずつクリックします
;
および
.
かなりの回数があります。 この時点で、そのような機械的な労働を自動化できることをすでに何かが伝えています。
基本
複数の繰り返しと再帰呼び出し
マクロ編集
永遠のマクロ
毎
基本
Vimはレジスタを使用してマクロを記録および保存します。 テキストをコピーできるものと、メモを置くことができるもの。 レジスターは、大文字と小文字を区別しないラテン文字(aとAは同じレジスター)、数字、さらには特殊文字で示されます。
重要です。 魔法のようなものはレジスターに保存されるのではなく、単純なテキストはレジスターに保存されます。
登録するマクロを作成する
a
は、次のコマンドを使用します。
qaf,r0q
最初のkyu
q
はマクロの記録を開始し、qを押して記録を確認するまで続けます。
ここで、マクロを再度実行するには、
@a
を押す必要があり、レジスタ
a
保存されているマクロが実行されます。 従来、Vimに対して
100@a
を記述できます。マクロは100回実行され、100以下(行の行数が少ない場合)のコンマは
0
に置き換えられ
0
。
複数の繰り返しと再帰呼び出し
行に含まれるコンマの数がわからない場合があるため、
100@a
開始した後、まだ残っているかどうかを手動で確認する必要があります。
あなたは非常に単純にマクロ呼び出し自体を行うことができます。 1回だけ呼び出す必要がある同じマクロを記述し、それからそれ自体を呼び出します。
qaf,r0@aq
この場合、そのレコードはまだ発生していませんが、起動はすでに指定されています。 記録時にこのレジスタに何も保存されていないことが重要です。 これを行うには2つの方法があります。 最初の方法は、
qaq
でさらに3回クリックする、
qaq
空のシーケンスを書き込む前に、レジスタの内容をクリアすることです。 2番目は、
@@
を使用して呼び出された最後のマクロを呼び出すことです。
重要です。 チェーンまたは一連のマクロ実行の実行は、
fFtT
コマンドの1つ、つまり文字列内の文字の検索が失敗した時点で一時停止されます。 つまり、たとえば、行にコンマが残っていません。 当然、マクロを100回実行する必要があり、コンマが2つしかない場合でも、マクロは2回実行され、3番目は検索で停止して続行されません。 同様に、再帰的なマクロを使用します。
便利なことに、マクロが記録されると、その最初の実行が発生します。つまり、マクロが正しく記録されたかどうかがすぐにわかります。
マクロ編集
何かがうまくいかず、書き留めたことを確認したい場合は、標準のVim関数を使用して、register
a
の内容をテキストに直接貼り付けることができます:
"ap
。
エディター内に、一連のコマンドであるテキストが表示されます。
af,r0@a
テキストを
0
ではなく
1
ずつ変更する必要があると判断し、マクロテキストを編集しているとします。
af,r1@a
それをコピーして
0"ay$
を使用して
a
を登録
a
ます。
永遠のマクロ
レジスタが一定であることに注意してください。Vimを終了してから再度ログインしても、レジスタの内容は変更されません。 デフォルトでは
~/.viminfo
保存され
~/.viminfo
。
重要です。 レジスタの内容は誤って上書きされやすく、いくつかのマクロをいくつかのレジスタに永続的に存在させたい場合は、
.vimrc
に追加するか、
.vimrc
含まれる別のマクロファイルに追加するのが理にかなっています。
let @a='af,r1@a'
毎
マクロは必ずしも同じ行で動作するわけではありません;マクロ内の段落をジャンプして、最初の単語の大文字と小文字を変更してみてください。
Q
をExモードに押して誤って移行するのを避けるために、
Q
を前のマクロの呼び出しに割り当てることは理にかなっています。
nnoremap Q @@
役立つ情報:
:help registers
:help :registers
:help :recording
さらなる研究のために:
高度なVimマクロ