これは Lakshmanan G によって書かれたゲスト投稿です。
この記事は、進行中の Vi / Vim Tips &Tricks シリーズの一部です。 Vi / Vim の autocommand 機能を使用すると、ファイルの読み書き中、バッファ/ウィンドウへの出入り中、または Vim の終了中に、いくつかの Vim コマンドを自動的に実行するように指定できます。
この記事では、3 つの簡単な手順を使用して、Vim のこの強力な autocmd 機能を使用してファイル内にヘッダー セクション (たとえば、C プログラミング コードのヘッダー) を作成し、ファイル名、作成日を指定する方法を確認します。 vi でファイルを開くと、最終更新日時が自動的に入力されます。
Vim autocmd 構文:
autocmd {event} {pattern} {cmd}
イベント: 40 を超える autocmd イベントがあります。以下は autocmd イベントのサンプルです。
BufNewFile - Starting to edit a file that doesn't exist. FileReadPre - Before reading a file with a ":read" command. BufWritePre - Starting to write the whole buffer to a file. FileWritePre - Starting to write part of a buffer to a file. BufDelete - Before deleting a buffer from the buffer list. BufWipeout - Before completely deleting a buffer. BufNew - Just after creating a new buffer. BufEnter - After entering a buffer. BufLeave - Before leaving to another buffer. SwapExists - Detected an existing swap file.
ほとんどの開発者は、自分のプログラムに何らかのデフォルト ヘッダーを求めています。例を見てみましょう。 「.c」ファイルを開くときは、作成者、ファイル名などを含むファイル ヘッダーが必要です。新しい「.c」ファイルを開くときに、次のテンプレートを自動的に読み込む必要があると考えてください。これは、以下で説明する 3 つのステップで実現できます。
/* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. * File Name : 1.c * Purpose : * Creation Date : 22-12-2008 * Last Modified : Mon 22 Dec 2008 10:36:49 PM PST * Created By : _._._._._._._._._._._._._._._._._._._._._.*/
ステップ 1:テンプレート ファイルを作成する
以下に示すように、上記のテンプレートを、最初の行に「:insert」、その後にテンプレートと最後の行に「.」(ドット) を付けてテキスト ファイルに保存します。
$ cat c_header.txt :insert /* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. * File Name : * Purpose : * Creation Date : * Last Modified : * Created By : _._._._._._._._._._._._._._._._._._._._._.*/ .
ステップ 2:autocmd コマンドを ~/.vimrc に追加する
~/.vimrc ファイルに次の行を追加します。
$ cat ~/.vimrc autocmd bufnewfile *.c so /home/jsmith/c_header.txt autocmd bufnewfile *.c exe "1," . 10 . "g/File Name :.*/s//File Name : " .expand("%") autocmd bufnewfile *.c exe "1," . 10 . "g/Creation Date :.*/s//Creation Date : " .strftime("%d-%m-%Y") autocmd Bufwritepre,filewritepre *.c execute "normal ma" autocmd Bufwritepre,filewritepre *.c exe "1," . 10 . "g/Last Modified :.*/s/Last Modified :.*/Last Modified : " .strftime("%c") autocmd bufwritepost,filewritepost *.c execute "normal `a"
ステップ 3:自動ヘッダー付きの新しい *.c ファイルを作成する
これで、vim を使用して新しい *.c ファイルを作成すると、Step1 で定義したヘッダーが自動的に追加され、以下に示すようにファイル名と作成日が自動的に入力されます。
$ vi myfile.c /* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. * File Name : myfile.c * Purpose : * Creation Date : 20-12-2008 * Last Modified : * Created By : _._._._._._._._._._._._._._._._._._._._._.*/
myfile.c ファイルを保存すると、以下に示すように、Last Modified フィールドが自動的に更新されます。
$ vi myfile.c /* -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. * File Name : myfile.c * Purpose : * Creation Date : 20-12-2008 * Last Modified : Sat 20 Dec 2008 09:37:30 AM PST * Created By : _._._._._._._._._._._._._._._._._._._._._.*/
~/.vimrc 内の autocmd コマンドの説明
$ cat -n ~/.vimrc 1 autocmd bufnewfile *.c so /home/jsmith/c_header.txt 2 autocmd bufnewfile *.c exe "1," . 10 . "g/File Name :.*/s//File Name : " .expand("%") 3 autocmd bufnewfile *.c exe "1," . 10 . "g/Creation Date :.*/s//Creation Date : " .strftime("%d-%m-%Y") 4 autocmd Bufwritepre,filewritepre *.c execute "normal ma" 5 autocmd Bufwritepre,filewritepre *.c exe "1," . 10 . "g/Last Modified :.*/s/Last Modified :.*/Last Modified : " .strftime("%c") 6 autocmd bufwritepost,filewritepost *.c execute "normal `a"
- 1 行目は、テンプレート ファイルを定義します。これは、*.c ファイルの場合、/home/jsmith/c_header.txt テンプレート ファイルを使用する必要があることを示しています。
- 2 行目は、1 行目から 10 行目までのパターン「ファイル名:」を検索します。見つかった場合、その行に現在のファイル名を書き込みます。
- 3 行目で作成日フィールドを更新します。
- 5 行目は、ファイルを保存するときに、Last Modified フィールドを現在の日時で更新します。
- 4 行目と 6 行目:ファイルを保存している間、カーソルは「最終変更日:」に移動します (最後の書き込み操作のため)。カーソルを前の位置に戻したい場合は、4 行目と 6 行目を .vimrc ファイルに追加する必要があります。
- 4 行目は、更新前の現在のカーソル位置をマークします。
- 6 行目は、カーソル位置を以前の位置に戻します。
最後の注意:
- Vi / Vim で autocmd が有効になっているかどうかを確認する – vi / vim から :version を実行します。自動コマンド機能が有効になっている場合、+autocmd が表示されます。
- オートコマンド ヘルプ – vi / vim から :help au を実行して、vim の autocmd 機能に関するクイック ヘルプを取得します。
推奨読書
Vi および Vim エディタの学習 、アーノルド・ロビンズ著 .私はコマンドライン中毒です。だから当然、私は Vi と Vim エディターの大ファンです。数年前、私が Linux で多くの C コードを書いていたとき、私は常に Vi エディターのポケット リファレンスを持ち歩いていました。数年間 Vi および Vim エディタを使用しており、この本をまだ読んでいない場合でも、ぜひこの本を読んでください。 Vim エディターの機能に驚かれることでしょう。
この記事は、進行中の Vi / Vim Tips and Tricks シリーズの一部です。 TheGeekStuff に登録して、今後の Vi および Vim エディターのヒントやコツをお見逃しなく。
この記事は Lakshmanan G によって書かれました。彼は bk Systems (p) Ltd で働いており、オープン ソースへの貢献に関心があります。 The Geek Stuff は、あなたのヒントやゲスト記事を歓迎します。