See the Elephant

1992生まれのプログラマが書くエンジニアブログ

vim-altercmdの設定にハマった

そもそもvim-altercmdとは

vim-altercmdとは, vimのExコマンドを独自のコマンドに置き換えることができるようになるプラグイン
長ったらしいコマンドを短縮したものに置換することができる(๑╹ڡ╹๑)べんりぃ〜
今回は, よく打つ上に長い:NeoBundleInstallを例にしていく.

:NeoBundleInstall -> :ni " pluginのコマンドを短縮することができる

vim-altercmdは2つある

kana/vim-altercmdとtyru/vim-altercmdの2つがあり,

  • kana : オリジナル
  • tyru : kana/をforkし改良したもの

だそう.

僕が使ってるのはtyruさんの方です. 詳しくはこちら. オリジナルのkana版とtyru版の違い / tyruさんのblog

やりたかったこと

tyru/vim-altercmdを使って.vimrc内からコマンドを短縮する.
:NeoBundleInstallを:niに置換したい.

altercmdでガッツリはまった

様々なサイトを巡回して設定方法を調べると下のような例が出てきた.

.vimrc

NeoBundle 'tyru/vim-altercmd' 
call altercmd#load()              # vim-altercmdを有効にする
AlterCommand NeoBundleInstall ni  # コマンドの設定  

vimを再起動する.

line   63:
E117: Unknown function: altercmd#load
line   64:
E492: Not an editor command: AlterCommand NeoBundleInstall ni

call altercmd#load()なんて関数知らないと言われてしまう.
しかも, AlterCommandvimコマンドじゃねぇ って言われてる...orz

altercmd#load()そもそも使えないんじゃないかと思って調べた結果, このサイトの方法で設定すると上手く行くことが判明.
最近導入したvimプラグインをまとめる

以下, 抜粋

.vimrc

" call altercmd#load()
autocmd User Rails AlterCommand r R
autocmd User Rails AlterCommand rc Rcontroller
autocmd User Rails AlterCommand rm Rmodel
autocmd User Rails AlterCommand rv Rview

autocmd User Railsrailsプロジェクトでのみ動作するよってこと.


altercmd#load()をコメントアウトすると,この設定はエラーもなく上手くいった.
どうやらautocmdがミソらしい.
autocmdについてはここを参考にした.
autocmdは何らかのeventが起きた時にpat(正規表現)で指定されたファイル形式であれば自動でcmdを行うコマンドだそう.

:au[tocmd] [group] {event} {pat} [nested] {cmd}
  {pat} 正規表現に一致するファイル.
  {event}のときに自動的に実行するコマンドのリストに、{cmd} を加える.
  {cmd} は常に既存の自動コマンドの後に追加されるので、自動コマンドは指定された順に実行される.
  ## [group]と[nested]は使わないので省略. ##

今回は, 新しいfile / 既存fileが読み込まれた時{event:BufRead},どのようなファイル{pat:*.*}であってもコマンド{cmd}を有効にしたい.

そこで, 上記サイトを参考にしながら以下の設定を行った.

.vimrc

" call altercmd#load()    エラーを吐くのでコメントアウト
autocmd BufRead *.* AlterCommand ni NeoBundleInstall 

保存後, vimを再起動. これで, :NeoBundleInstall:niだけで実行できる.

もちろん, 他のコマンドでも適応できる. 半日くらいこれで飛んでしまった...


autocmdの勉強にもなったので時間の無駄ではなかったかな.
vimrcを拡張していくのは時間を忘れてしまうʕ̡̢̡ʘ̅͟͜͡ʘ̲̅ʔ̢̡̢