【bon-voyage.vim】起動時にディレクトリ固有のvimファイルを読み込むプラグイン


Vimでアプリケーション開発をするときに、プロジェクト毎にお決まりの設定をしたい場合がありますよね。例えばrubyプロジェクトの場合はタブ幅2だけど、Javaの場合は4にしたいだとか。railsプロジェクトの場合は、schema.rbを最初に開いておきたいとか。そういった固有の自動処理をvim起動時に読み込むプラグインを作成しました。

itmammoth/bon-voyage.vim

↑この画像の例では、とあるディレクトリでvimを起動すると、自動的にウインドウサイズを最大化し、必要なファイルを開き、NERDTreeを実行するようになっています。

どんなプラグイン?

  • vimを起動した際のディレクトリに.bon-voyage.vimというファイルがあれば、それをsourceコマンドで読み込みます
  • なければ$HOMEディレクトリ内の同名ファイルを探しに行きます
  • vimが引数付きで起動された場合は何も行いません
  • sourceで読み込む読み込む内容を”cargo”という複数ファイルに分割しておけます

例えば

railsアプリのディレクトリに.bon-voyage.vim というファイルを作成します。中身は次のような感じ。

📄the_rails_root/.bon-voyage.vim
" the_rails_root/.bon-voyage.vim
if has('gui_running')
  set columns=190 lines=70
endif
edit spec/factories.rb
vsplit db/schema.rb
let NERDTreeIgnore = ['tmp[[dir]]', 'bundle[[dir]]']
NERDTree
wincmd =
Rcd

そしてそのディレクトリでvimを引数無しで起動します。

📄$HOME/.bon-voyage/cargos/rails.vim
$ cd the_rails_root
$ gvim

すると、ウインドウが最大化され、factories.rb/schema.rbを左右に開き、VimmerおなじみのNERDTreeをいい感じで開いた上で、rials.vimプラグインの設定をします。

cargo(カーゴ)

読み込みたい内容をcargoというファイルに記載して、必要に応じLoadすることができます。$HOME/.bon-voyage/cargosディレクトリを作成し、そのディレクトリ内にrails.vimというファイルを作成します。内容はさっきと同じでいいです。

" $HOME/.bon-voyage/cargos/rails.vim
if has('gui_running')
  set columns=190 lines=70
endif
edit spec/factories.rb
vsplit db/schema.rb
let NERDTreeIgnore = ['tmp[[dir]]', 'bundle[[dir]]']
NERDTree
wincmd =
Rcd

railsルートには次のような.bon-voyage.vimを用意します。

📄the_rails_root/.bon-voyage.vim
BonVoyageLoad 'rails'

BonVoyageLoadコマンドは、cargoディレクトリ内の中から引数のファイルを探し(拡張子.vimは無くていい)sourceコマンドを実行します。

なおcargoファイルを複数Loadできますし、

📄a_jsproject_direcotry/.bon-voyage.vim
" a_jsproject_direcotry/.bon-voyage.vim
BonVoyageLoad 'javascript'
BonVoyageLoad 'maximize_window'
BonVoyageLoad 'nerdtree'

cargoファイルの中から別のcargoファイルをLoadすることも可能です。

📄$HOME/.bon-voyage/cargos/rails.vim
" $HOME/.bon-voyage/cargos/rails.vim
BonVoyageLoad 'maximize_window'
edit spec/factories.rb
vsplit db/schema.rb
BonVoyageLoad 'nerdtree_rails'
Rcd

 

とまあこんな感じです。

その他設定等はgithubを確認してください。

関連する記事


コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください