Nagoya vim #1 about plugins
Transcript of Nagoya vim #1 about plugins
Vim プラグインについて
2013/09/07@sgur
自己紹介
● sgur● Vim歴5年くらい
● 名古屋で働く組み込み屋さん
● 最近の仕事はASP.NET
お題
● プラグインの種類● プラグインロードのしくみ● プラグインのインストール● プラグインの紹介
プラグインの種類
● 汎用プラグイン● ファイル形式に関係なく使用されるもの
● ファイルタイププラグイン● 特定のファイル形式の時のみロードされるもの● 例えば:
– シンタックス定義
– Omni補完
● カラースキーム● その他
プラグインロードのしくみ
● runtimepath● スクリプトが読み込まれるディレクトリのカンマ区切りの
リスト– UnixライクOS: $HOME/.vim,$VIM/vimfiles,
$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after– Windows: $HOME/vimfiles,$VIM/vimfiles,$VIMRUNTIME,
$VIM/vimfiles/after,$HOME/vimfiles/after● ユーザーディレクトリ
– Windows では %HOME%\vimfiles、それ以外の場合は ~/.vim
● runtimepath の各ディレクトリを基準にplugin/, doc/, ftplugin/ といったディレクトリ以下の *.vim ファイルがロードされる
スクリプトのロード
● :scriptnames● スクリプトを読み込まれた順に一覧する● プラグインが正常なタイミングでロードされたか確認す
るのに便利– ファイルタイププラグインなのに起動時にロードされた– ファイルを開いたけどプラグインがロードされていない
● autoload● 関数が実際に呼び出されたタイミングでスクリプトを
ロードする仕組み● 起動時間を短縮できる● 詳しくは :help autoload
プラグインのインストール(1)
● 単一ファイル● ~/.vim 以下のフォルダに保存するだけ
● プラグインの場合は plugin/● ファイルタイププラグインの場合は ftplugin/● カラースキームの場合は colors/● シンタックスの場合は syntax/
● VimBall● 自動インストールパッケージ● :source <ファイル名>
プラグインのインストール(2)
● Pathogenフレンドリな形式
● プラグインのディレクトリをruntimepathに追加すればそのまま使える形式
foo-bar-plugin/● plugin/● ftplugin/● autoload/● …
● github等で公開されているプラグインは大体この形
● プラグイン毎に runtimepath に手動で追加するのは面倒い…
プラグインマネージャー● pathogen
● プラグインのロード補助● ~/.vim/bundle 以下に保存したプラグインを探索して
runtimepath に追加する
● Vundle● pathogen と同様のロード機能
● プラグインをメニューから選択してインストールできる
※ https://github.com/vim-scripts/ でホストしているもののみ
● NeoBundle● Vundle をベースに Fork して多機能にしたもの
● 並列アップデート、遅延ロードなど
プラグイン紹介
ヘルプ日本語版
● いれましょう!
● https://github.com/vim-jp/vimdoc-ja● kaoriya版 vim には標準でインストール済み
キー操作拡張 (1)
Vimのキー操作の基本 (operator){motion}をそれぞれ拡張するプラグイン● vim-operator-user
– (operator) の拡張をサポート● vim-operator-replace … {motion} で指定した領域を置換● vim-operator-sort … {motion}で指定した領域をソート
● vim-textobj-user– {motion} のうち、テキストオブジェクトの拡張をサポート
● vim-textobj-indent … 同一インデント● vim-textobj-comment … コメント部分● vim-textobj-between … 任意の1文字に挟まれた領域
● vim-surround– {motion} の周囲の文字に対して挿入・変更・削除
キー操作拡張 (2)
● f,t,F,T キーの挙動を改善する
● clever-f.vim– f;;… を f連打可能にする
● WiseMan-f– f キー的に移動した後、<C-f>/<C-b>で微調整できる
● easymotion– 「ここらへん」でジャンプ可能
● * キーの挙動を改善する
● vim-visualstar– ビジュアル領域で選択したテキストで * を実行
短縮入力
● smartchr● 同一キー入力で、入力内容をトグルしたりする● 例: '.' 入力時に '.' '→' ⇔ をトグルする
● smartinput● smartchrの高機能版
● ファイルタイプやカーソル位置の文字をベースにより複雑なルール定義が可能
● Emmet (ZenCoding)● Emmet (ZenCoding) の機能を提供する
テキスト整形
● コメントプラグイン● caw.vim● vim-commentary● tcomment.vim
● テキスト整形● vim-alignta
● LastModified 挿入
● autodate.vim
ファイルタイププラグイン
● シンタックス系● キーワード定義● インデント設定● include, path 等の自動設定など
● 各種言語向けにたくさんあります…
● Omni補完● ファイルタイプ別の補完プラグイン● 外部パーサー等を利用したセマンティック補完● Jedi (Python), Tern (Javascript), OmniSharp (C#),
gocode (go), ghc-mode-vim(haskell), Vaxe(Haxe) など
バッファセレクタ
● FuzzyFinder● 昔有名だった
● unite.vim● 国内で主流● 多機能● プラグインたくさん (grep, 各種ヒストリ, …)
● ctrlp.vim● コンパクト● レスポンスが速い● プラグイン利用可能 (unite.vimほどいろいろない)
ファイラー
● Vimからファイルの一覧、操作が可能
● NerdTree● ツリー表示のサイドバー
● VimFiler● 「あふ」とか「dired」のようなファイラー
● 一括リネームとかができて便利● unite.vimが必要 (連携している)
QuickRun
● Vim から使える REPL のようなもの
● バッファ中のコードを直に(コンパイル&)実行可能
● ファイル形式毎にプリセットが用意されている● コード中の選択領域のみ実行することも可能● 例
● コードを書きながらビルド&テストして動作を確認
● Markdownを書きながらpandocでHTMLに変換しブラウザで表示
自動補完
● トリガキー(<C-n>/<C-p>)なしに補完を開始
● 独自の補完エンジンを実装したものが主流
● Neocomplete (neocomplcache)● vimscript + if_lua で実装
● 複数の入力ソースから候補を合成できる– 例) 編集中バッファ、tags、インクルードファイル、シンタック
ス、etc…● キャッシュファイルを利用して高速化● カスタマイズ対象が多い
● YouCompleteMe● 補完エンジンが C++ + if_python で実装されており高速
● バッファ補完 + ファイルパス補完が基本
● clang, jedi, OmniSharp 等はビルトインで対応されている
スニペット
● コードスニペットを入力するプラグイン● プレースホルダ間のジャンプ● スクリプトの評価結果の挿入
● neosnippet.vim● neocomplete と連携して自動で候補表示
● UltiSnips● if_python で実装
● YouCompleteMeと連携して自動で候補表示
シンタックスチェック
● コード編集中にエラーを左端のsign領域に表示
● ファイルタイプ毎に設定が用意されている
● Syntastic● Watchdogs
● QuickRun を利用
ステータスライン拡張
● ステータスラインをカラフルに表示する● 各種プラグインのバッファ専用の色付け
● vim-powerline● obsolete
● powerline● python を使って汎用的に実装されている
● airline
バージョン管理
● vim-fugitive● 編集中のバッファに対してgitのコマンドを適用できる
● index とのDiffを取って差分毎に git add -p 相当が可能
● Gitv● gitk を vim プラグインとして実装
● lawrencium● fugitiveのMercurial版