Vim の開発環境

     eagletmt



  2012/05/27




 eagletmt   Vim の開発環境
プラグイン




 私が使っている Haskell 用プラグイン
   ghcmod.vim
   neco-ghc
   unite-haddock
 これらの紹介とデモを行います




                   eagletmt   Vim の開発環境
ghcmod.vim




             ghcmod.vim




               eagletmt   Vim の開発環境
ghcmod.vim




        https://github.com/eagletmt/ghcmod-vim

     コンパイルエラー・警告を QuickFix に表示
     HLint による提案を QuickFix に表示
     カーソル下の型を表示




                     eagletmt   Vim の開発環境
ghcmod.vim の導入




 まず ghc-mod をインストール

            cabal install ghc-mod




                 eagletmt   Vim の開発環境
ghcmod.vim の導入

 vimproc を利用しているので先に vimproc をインストール

 Vim のプラグイン管理に不慣れな人は neobundle.vim を利用する
 といいでしょう
 http://vim-users.jp/2011/10/hack238/

    :NeoBundle ’Shougo/vimproc’
    cd $HOME/.vim/bundle/vimproc;
    make -f make unix.mak

 Windows 向けに、コンパイル済みのバイナリ配布あり
 https://github.com/Shougo/vimproc/downloads

    :NeoBundle ’eagletmt/ghcmod-vim’



                     eagletmt   Vim の開発環境
:GhcModCheck
  :GhcModCheck コマンドで GHC からのコンパイルエラー・警告
  を QuickFix に表示

  コンパイルエラー・警告がある場合は自動的に QuickFix を開く




                eagletmt   Vim の開発環境
QuickFix




  Vim に備わっている、主に処理系からのメッセージを表示する
  機能
     メッセージとそれが示しているファイルと位置 (行番号・列
     番号) を表示
     メッセージを選択するとその位置へジャンプ
  などができ、「編集→チェック→修正」のサイクルを快適に行える




              eagletmt   Vim の開発環境
:GhcModCheck
  保存時に自動的にチェックしたい!

  syntastic を利用している人が多いようです
  https://github.com/scrooloose/syntastic




                       eagletmt   Vim の開発環境
:GhcModCheck



  しかし……

     多くのモジュールをインポートしている
     Template Haskell を使っている
     型レベルプログラミングをしている

  とき、チェックに時間がかかり、その間すべての Vim の操作がし
  ばらくブロックされてしまう




                    eagletmt   Vim の開発環境
:GhcModCheckAsync




  :GhcModCheckAsync コマンドは :GhcModCheck を (疑似) 非同期
  的に実行

  ⇒ 保存時に自動的にチェックしてもストレスが少ない!




                    eagletmt   Vim の開発環境
:GhcModLint
  同様に :GhcModLint コマンドで HLint からの提案を QuickFix
  に表示
  非同期版の :GhcModLintAsnyc、非同期的に :GhcModCheck と
  :GhcModLint の両方を行う :GhcModCheckAndLintAsync も




                    eagletmt   Vim の開発環境
:GhcModType

  :GhcModType コマンドでカーソル下の型を表示。型を表示してい
  る部分はハイライトされる。
  ハイライトは :GhcModTypeClear コマンドで消す。



   式
   パターン
   束縛

  の型を表示できる




               eagletmt   Vim の開発環境
:GhcModType の使い道




    コードリーディング時のサポートに
    なかなか型が合わない → とりあえず undefined を書いて
    コンパイルを通して型を見る




               eagletmt   Vim の開発環境
neco-ghc




           neco-ghc




           eagletmt   Vim の開発環境
neco-ghc




  オムニ補完を行う関数 necoghc#omnifunc() を提供するプラグ
  イン。
     インポートするモジュール名の補完
     インポートしているモジュールを考慮した補完
     LANGUAGE プラグマの補完
     OPTIONS GHC プラグマの補完




                 eagletmt   Vim の開発環境
neco-ghc




           eagletmt   Vim の開発環境
neco-ghc の導入




         https://github.com/ujihisa/neco-ghc

    cabal install ghc-mod
    :NeoBundle ’ujihisa/neco-ghc’




                     eagletmt   Vim の開発環境
オムニ補完



 Haskell のファイルを開いているバッファでオムニ補完の関数を
 necoghc#omnifunc に設定

 $HOME/.vimrc に

   autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc

 を追記

 インサートモードで <C-x><C-o> で補完できる




                         eagletmt   Vim の開発環境
自動補完



 neocomplcache を導入することで自動補完が可能に

       https://github.com/Shougo/neocomplcache

   $HOME/.vimrc に
   let g:neocomplcache enable at startup = 1
   または :NeoComplCacheEnable コマンド
 によって neocomplcache を有効化すれば、Haskell ファイルを開
 いているバッファで neco-ghc による自動補完が有効化




                      eagletmt   Vim の開発環境
unite-haddock




                unite-haddock




                   eagletmt   Vim の開発環境
unite-haddock

  unite.vim のインターフェイスで、インストール済みのモジュール
  名の一覧から絞り込んで選択してドキュメントをブラウザを開く




                eagletmt   Vim の開発環境
unite-haddock の導入



  まず unite.vim をインストール

           https://github.com/Shougo/unite.vim

  :NeoBundle ’Shougo/unite.vim’


  unite-haddock をインストール

        https://github.com/eagletmt/unite-haddock

  :NeoBundle ’eagletmt/unite-haddock’




                       eagletmt   Vim の開発環境
:Unite haddock




  :Unite haddock コマンドでインストール済みのモジュール一覧
  を表示

  そこからモジュールを選択し、
     ローカルのドキュメントを開く (デフォルト) (browse local)
     リモート (Hackage) のドキュメントを開く (browse remote)




                   eagletmt   Vim の開発環境
:Unite hoogle
  Hoogle をインストールしてあると、さらに :Unite hoogle で
  Hoogle による検索結果から関数や型のドキュメントを開くことが
  できる




                 eagletmt   Vim の開発環境
Hoogle の導入




    cabal install hoogle
    hoogle data default
    hoogle data vector
       vector.hoo を作成
    hoogle combine *.hoo
       *.hoo をまとめて default.hoo を作成




                     eagletmt   Vim の開発環境
デモ




       デモ




     eagletmt   Vim の開発環境

Vim の開発環境

  • 1.
    Vim の開発環境 eagletmt 2012/05/27 eagletmt Vim の開発環境
  • 2.
    プラグイン 私が使っている Haskell用プラグイン ghcmod.vim neco-ghc unite-haddock これらの紹介とデモを行います eagletmt Vim の開発環境
  • 3.
    ghcmod.vim ghcmod.vim eagletmt Vim の開発環境
  • 4.
    ghcmod.vim https://github.com/eagletmt/ghcmod-vim コンパイルエラー・警告を QuickFix に表示 HLint による提案を QuickFix に表示 カーソル下の型を表示 eagletmt Vim の開発環境
  • 5.
    ghcmod.vim の導入 まずghc-mod をインストール cabal install ghc-mod eagletmt Vim の開発環境
  • 6.
    ghcmod.vim の導入 vimprocを利用しているので先に vimproc をインストール Vim のプラグイン管理に不慣れな人は neobundle.vim を利用する といいでしょう http://vim-users.jp/2011/10/hack238/ :NeoBundle ’Shougo/vimproc’ cd $HOME/.vim/bundle/vimproc; make -f make unix.mak Windows 向けに、コンパイル済みのバイナリ配布あり https://github.com/Shougo/vimproc/downloads :NeoBundle ’eagletmt/ghcmod-vim’ eagletmt Vim の開発環境
  • 7.
    :GhcModCheck :GhcModCheckコマンドで GHC からのコンパイルエラー・警告 を QuickFix に表示 コンパイルエラー・警告がある場合は自動的に QuickFix を開く eagletmt Vim の開発環境
  • 8.
    QuickFix Vimに備わっている、主に処理系からのメッセージを表示する 機能 メッセージとそれが示しているファイルと位置 (行番号・列 番号) を表示 メッセージを選択するとその位置へジャンプ などができ、「編集→チェック→修正」のサイクルを快適に行える eagletmt Vim の開発環境
  • 9.
    :GhcModCheck 保存時に自動的にチェックしたい! syntastic を利用している人が多いようです https://github.com/scrooloose/syntastic eagletmt Vim の開発環境
  • 10.
    :GhcModCheck しかし…… 多くのモジュールをインポートしている Template Haskell を使っている 型レベルプログラミングをしている とき、チェックに時間がかかり、その間すべての Vim の操作がし ばらくブロックされてしまう eagletmt Vim の開発環境
  • 11.
    :GhcModCheckAsync :GhcModCheckAsyncコマンドは :GhcModCheck を (疑似) 非同期 的に実行 ⇒ 保存時に自動的にチェックしてもストレスが少ない! eagletmt Vim の開発環境
  • 12.
    :GhcModLint 同様に:GhcModLint コマンドで HLint からの提案を QuickFix に表示 非同期版の :GhcModLintAsnyc、非同期的に :GhcModCheck と :GhcModLint の両方を行う :GhcModCheckAndLintAsync も eagletmt Vim の開発環境
  • 13.
    :GhcModType :GhcModTypeコマンドでカーソル下の型を表示。型を表示してい る部分はハイライトされる。 ハイライトは :GhcModTypeClear コマンドで消す。 式 パターン 束縛 の型を表示できる eagletmt Vim の開発環境
  • 14.
    :GhcModType の使い道 コードリーディング時のサポートに なかなか型が合わない → とりあえず undefined を書いて コンパイルを通して型を見る eagletmt Vim の開発環境
  • 15.
    neco-ghc neco-ghc eagletmt Vim の開発環境
  • 16.
    neco-ghc オムニ補完を行う関数necoghc#omnifunc() を提供するプラグ イン。 インポートするモジュール名の補完 インポートしているモジュールを考慮した補完 LANGUAGE プラグマの補完 OPTIONS GHC プラグマの補完 eagletmt Vim の開発環境
  • 17.
    neco-ghc eagletmt Vim の開発環境
  • 18.
    neco-ghc の導入 https://github.com/ujihisa/neco-ghc cabal install ghc-mod :NeoBundle ’ujihisa/neco-ghc’ eagletmt Vim の開発環境
  • 19.
    オムニ補完 Haskell のファイルを開いているバッファでオムニ補完の関数を necoghc#omnifunc に設定 $HOME/.vimrc に autocmd FileType haskell setlocal omnifunc=necoghc#omnifunc を追記 インサートモードで <C-x><C-o> で補完できる eagletmt Vim の開発環境
  • 20.
    自動補完 neocomplcache を導入することで自動補完が可能に https://github.com/Shougo/neocomplcache $HOME/.vimrc に let g:neocomplcache enable at startup = 1 または :NeoComplCacheEnable コマンド によって neocomplcache を有効化すれば、Haskell ファイルを開 いているバッファで neco-ghc による自動補完が有効化 eagletmt Vim の開発環境
  • 21.
    unite-haddock unite-haddock eagletmt Vim の開発環境
  • 22.
    unite-haddock unite.vimのインターフェイスで、インストール済みのモジュール 名の一覧から絞り込んで選択してドキュメントをブラウザを開く eagletmt Vim の開発環境
  • 23.
    unite-haddock の導入 まず unite.vim をインストール https://github.com/Shougo/unite.vim :NeoBundle ’Shougo/unite.vim’ unite-haddock をインストール https://github.com/eagletmt/unite-haddock :NeoBundle ’eagletmt/unite-haddock’ eagletmt Vim の開発環境
  • 24.
    :Unite haddock :Unite haddock コマンドでインストール済みのモジュール一覧 を表示 そこからモジュールを選択し、 ローカルのドキュメントを開く (デフォルト) (browse local) リモート (Hackage) のドキュメントを開く (browse remote) eagletmt Vim の開発環境
  • 25.
    :Unite hoogle Hoogle をインストールしてあると、さらに :Unite hoogle で Hoogle による検索結果から関数や型のドキュメントを開くことが できる eagletmt Vim の開発環境
  • 26.
    Hoogle の導入 cabal install hoogle hoogle data default hoogle data vector vector.hoo を作成 hoogle combine *.hoo *.hoo をまとめて default.hoo を作成 eagletmt Vim の開発環境
  • 27.
    デモ デモ eagletmt Vim の開発環境