Nagoya vim #1 about plugins

25
Vim プラグインについて 2013/09/07 @sgur

Transcript of Nagoya vim #1 about plugins

Page 1: Nagoya vim #1 about plugins

Vim プラグインについて

2013/09/07@sgur

Page 2: Nagoya vim #1 about plugins

自己紹介

● sgur● Vim歴5年くらい

● 名古屋で働く組み込み屋さん

● 最近の仕事はASP.NET

Page 3: Nagoya vim #1 about plugins

お題

● プラグインの種類● プラグインロードのしくみ● プラグインのインストール● プラグインの紹介

Page 4: Nagoya vim #1 about plugins

プラグインの種類

● 汎用プラグイン● ファイル形式に関係なく使用されるもの

● ファイルタイププラグイン● 特定のファイル形式の時のみロードされるもの● 例えば:

– シンタックス定義

– Omni補完

● カラースキーム● その他

Page 5: Nagoya vim #1 about plugins

プラグインロードのしくみ

● 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 ファイルがロードされる

Page 6: Nagoya vim #1 about plugins

スクリプトのロード

● :scriptnames● スクリプトを読み込まれた順に一覧する● プラグインが正常なタイミングでロードされたか確認す

るのに便利– ファイルタイププラグインなのに起動時にロードされた– ファイルを開いたけどプラグインがロードされていない

● autoload● 関数が実際に呼び出されたタイミングでスクリプトを

ロードする仕組み● 起動時間を短縮できる● 詳しくは :help autoload

Page 7: Nagoya vim #1 about plugins

プラグインのインストール(1)

● 単一ファイル● ~/.vim 以下のフォルダに保存するだけ

● プラグインの場合は plugin/● ファイルタイププラグインの場合は ftplugin/● カラースキームの場合は colors/● シンタックスの場合は syntax/

● VimBall● 自動インストールパッケージ● :source <ファイル名>

Page 8: Nagoya vim #1 about plugins

プラグインのインストール(2)

● Pathogenフレンドリな形式

● プラグインのディレクトリをruntimepathに追加すればそのまま使える形式

foo-bar-plugin/● plugin/● ftplugin/● autoload/● …

● github等で公開されているプラグインは大体この形

● プラグイン毎に runtimepath に手動で追加するのは面倒い…

Page 9: Nagoya vim #1 about plugins

プラグインマネージャー● pathogen

● プラグインのロード補助● ~/.vim/bundle 以下に保存したプラグインを探索して

runtimepath に追加する

● Vundle● pathogen と同様のロード機能

● プラグインをメニューから選択してインストールできる

※ https://github.com/vim-scripts/ でホストしているもののみ

● NeoBundle● Vundle をベースに Fork して多機能にしたもの

● 並列アップデート、遅延ロードなど

Page 10: Nagoya vim #1 about plugins

プラグイン紹介

Page 11: Nagoya vim #1 about plugins

ヘルプ日本語版

● いれましょう!

● https://github.com/vim-jp/vimdoc-ja● kaoriya版 vim には標準でインストール済み

Page 12: Nagoya vim #1 about plugins

キー操作拡張 (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} の周囲の文字に対して挿入・変更・削除

Page 13: Nagoya vim #1 about plugins

キー操作拡張 (2)

● f,t,F,T キーの挙動を改善する

● clever-f.vim– f;;… を f連打可能にする

● WiseMan-f– f キー的に移動した後、<C-f>/<C-b>で微調整できる

● easymotion– 「ここらへん」でジャンプ可能

● * キーの挙動を改善する

● vim-visualstar– ビジュアル領域で選択したテキストで * を実行

Page 14: Nagoya vim #1 about plugins

短縮入力

● smartchr● 同一キー入力で、入力内容をトグルしたりする● 例: '.' 入力時に '.' '→' ⇔ をトグルする

● smartinput● smartchrの高機能版

● ファイルタイプやカーソル位置の文字をベースにより複雑なルール定義が可能

● Emmet (ZenCoding)● Emmet (ZenCoding) の機能を提供する

Page 15: Nagoya vim #1 about plugins

テキスト整形

● コメントプラグイン● caw.vim● vim-commentary● tcomment.vim

● テキスト整形● vim-alignta

● LastModified 挿入

● autodate.vim

Page 16: Nagoya vim #1 about plugins

ファイルタイププラグイン

● シンタックス系● キーワード定義● インデント設定● include, path 等の自動設定など

● 各種言語向けにたくさんあります…

● Omni補完● ファイルタイプ別の補完プラグイン● 外部パーサー等を利用したセマンティック補完● Jedi (Python), Tern (Javascript), OmniSharp (C#),

gocode (go), ghc-mode-vim(haskell), Vaxe(Haxe) など

Page 17: Nagoya vim #1 about plugins

バッファセレクタ

● FuzzyFinder● 昔有名だった

● unite.vim● 国内で主流● 多機能● プラグインたくさん (grep, 各種ヒストリ, …)

● ctrlp.vim● コンパクト● レスポンスが速い● プラグイン利用可能 (unite.vimほどいろいろない)

Page 18: Nagoya vim #1 about plugins

ファイラー

● Vimからファイルの一覧、操作が可能

● NerdTree● ツリー表示のサイドバー

● VimFiler● 「あふ」とか「dired」のようなファイラー

● 一括リネームとかができて便利● unite.vimが必要 (連携している)

Page 19: Nagoya vim #1 about plugins

QuickRun

● Vim から使える REPL のようなもの

● バッファ中のコードを直に(コンパイル&)実行可能

● ファイル形式毎にプリセットが用意されている● コード中の選択領域のみ実行することも可能● 例

● コードを書きながらビルド&テストして動作を確認

● Markdownを書きながらpandocでHTMLに変換しブラウザで表示

Page 20: Nagoya vim #1 about plugins

自動補完

● トリガキー(<C-n>/<C-p>)なしに補完を開始

● 独自の補完エンジンを実装したものが主流

● Neocomplete (neocomplcache)● vimscript + if_lua で実装

● 複数の入力ソースから候補を合成できる– 例) 編集中バッファ、tags、インクルードファイル、シンタック

ス、etc…● キャッシュファイルを利用して高速化● カスタマイズ対象が多い

● YouCompleteMe● 補完エンジンが C++ + if_python で実装されており高速

● バッファ補完 + ファイルパス補完が基本

● clang, jedi, OmniSharp 等はビルトインで対応されている

Page 21: Nagoya vim #1 about plugins

スニペット

● コードスニペットを入力するプラグイン● プレースホルダ間のジャンプ● スクリプトの評価結果の挿入

● neosnippet.vim● neocomplete と連携して自動で候補表示

● UltiSnips● if_python で実装

● YouCompleteMeと連携して自動で候補表示

Page 22: Nagoya vim #1 about plugins

シンタックスチェック

● コード編集中にエラーを左端のsign領域に表示

● ファイルタイプ毎に設定が用意されている

● Syntastic● Watchdogs

● QuickRun を利用

Page 23: Nagoya vim #1 about plugins

ステータスライン拡張

● ステータスラインをカラフルに表示する● 各種プラグインのバッファ専用の色付け

● vim-powerline● obsolete

● powerline● python を使って汎用的に実装されている

● airline

Page 24: Nagoya vim #1 about plugins

バージョン管理

● vim-fugitive● 編集中のバッファに対してgitのコマンドを適用できる

● index とのDiffを取って差分毎に git add -p 相当が可能

● Gitv● gitk を vim プラグインとして実装

● lawrencium● fugitiveのMercurial版

Page 25: Nagoya vim #1 about plugins

その他のプラグイン

● https://gist.github.com/sgur/6434642