読者です 読者をやめる 読者になる 読者になる

拾い物のコンパス

まともに書いたメモ

Vimで簡単なファイルテンプレートを入力するコマンドを作成してみた

プログラムを組むとき,テンプレートを毎回手で入力することが面倒くさくなったので,Vimのショートカットにした.
編集中のファイル名を挿入する方法やレジスタについて勉強したので簡単にまとめておく.

目的

作成したいのは現在編集しているファイルに対して,自分が使っているテンプレートを書き込むだけの簡単なコマンドを実装する.本エントリではC言語向けのものを説明する.
具体的な動作は,編集中のファイルの最初と最後にそれぞれコメントを書き込むだけ.最初のコメント部にはファイル名を自動で書き込む.

Ex: filename.cを編集中の場合
/* filename.c */
<... code ...>
/* E.O.F. */

E.O.F.って手で打つと面倒くさい.

コマンド

最終的には以下を.vimrcに付け加えた.
nmap <silent> ,/ Go/* E.O.F. */<Esc>ggO/* <C-r>% */<CR>
ノーマルモードで,/と打つと実行.特に難しいものでもないから,肝となる部分だけ以下で説明する.

ファイル名の挿入

インサートモードで<C-r>+レジスタとすると,レジスタの内容を挿入することができる.今回はカレントファイル名を格納している%レジスタを使用した.

レジスタ

種類が多いから,少しだけ紹介.
 * 番号付きレジスタ: "0-9レジスタ0はコピー内容,それ以降は1から最新の削除内容が入る.
 * 名前付きレジスタ: "[a-Z]レジスタで明示的に指定することで任意に使える.
 * 消去専用レジスタ: "_レジスタ_ddとするとレジスタ内容に変化を起こさずに削除を行える.
レジスタ"<レジスタ名><コマンド>で使える.具体的にはV"ay"aレジスタに一行を保存し,"apでその内容を書き込める.
レジスタに何が入っているのかの確認は:regで行える.

まとめ

多分プラグインを探せばもっと高機能なものがあるのだろうが,そこまでの機能は求めていないからと軽い気持ちで実装したら思った以上に手間取った.レジスタについてはもっと使いこなせるようになりたい,特に_ddは多用しそうだ.

参考文献

インサートモード時に現在のファイルのフルパスを挿入するmap - YKMbPP
vimのレジスタ - Qiita