Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

Vim 起動中、または特定ファイル拡張子のときのみ処理を実行するやりかたを調べた

$
0
0

はじめに

Vim を起動した直後、あるいはあるファイル拡張子の場合のみ、何か処理を実行したいと思うときがあると思います。

そのやり方を調べてみました。

Vim 起動中に処理を実行する

以下のような記述で実現できます。

if has('vim_starting')
  echo 'HelloWorld'endif

組み込み関数 has({feature})で、指定された feature が有効かどうかを判定します。

また feature vim_startingVim の feature-listの1つです。以下のように明記されています。

vim_starting Vimの初期化プロセス中は真となる。

Vim マニュアルの startup の項目には、Vim の初期化の最後のステップに以下のように書いてあります。起動中は vim_startingが 1 になっているということですね。

スタートフラグがリセットされ、has("vim_starting") がゼロを返すようになる。

特定のファイル拡張子のときに処理を実行する

autocmdという自動コマンドを定義することで使えるようです。使い方は以下のような形です。

autocmd <イベント> <ファイルパターン> <実行コマンド>

Vim マニュアルの autocmd-events

Vim のイベント一覧を見てもらうとわかると思いますが、非常にたくさんのイベントがあります。上記の vim_startingは、Vim の起動処理中だったのに対し、様々なタイミングに対して処理を追加できます。

その中で例えば「特定のファイル拡張子のファイルを開いた後」としたい場合、新規作成・既存ファイル開くいずれも対応するには以下2つのイベントで良さそうです。

  • BufNewFile: 存在しないファイルの編集を始めたとき
  • BufRead: 新しいバッファの編集を始めたとき、ファイルを読み込んだ後

拡張子が .rbのファイルを開いたときに Hello Worldと表示したい場合は以下のような処理を書いておきます。

autocmd BufNewFile,BufRead *.rb echo 'Hello World'

ただ、上記を .vimrcなどに記載した場合、:source .vimrcなどで再度スクリプトを読み込んだ場合、自動コマンドが読み込まれるたびに登録されてしまいます。

そのために、augroupという、自動コマンドの処理をグループ化するコマンドに、autocmd!というすべての自動コマンドを削除する処理を入れておくことで重複登録を回避できます。

augroup Hello
  autocmd!
  autocmd BufNewFile,BufRead *.rb echo 'Hello World'
augroup END

おわりに

たまに他の人の .vimrcを読んだときに書いてあった autocmdの意味が何なのかわかってなかったのですが、調べられてよかったです。

参考


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>