SlideShare a Scribd company logo
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 で実装されており高
スニペット
● コードスニペットを入力するプラグイン
●
プレースホルダ間のジャンプ
● スクリプトの評価結果の挿入
● 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版
その他のプラグイン
● https://gist.github.com/sgur/6434642

More Related Content

What's hot (19)

Vim = VM
Vim = VMVim = VM
Vim = VM
Shougo
 
Shougoの開発環境
Shougoの開発環境Shougoの開発環境
Shougoの開発環境
Shougo
 
Bmd
BmdBmd
Bmd
Yuichiro Naito
 
neovim = VM
neovim = VMneovim = VM
neovim = VM
Shougo
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
Masashi Umezawa
 
Contao Open Source CMS / Contao 3.3に向けて
Contao Open Source CMS / Contao 3.3に向けてContao Open Source CMS / Contao 3.3に向けて
Contao Open Source CMS / Contao 3.3に向けて
Takahiro Kambe
 
汎用apiサーバの構築
汎用apiサーバの構築汎用apiサーバの構築
汎用apiサーバの構築
Hidetoshi Mori
 
そろそろSublime Text 2を熱く語ろうと思う
そろそろSublime Text 2を熱く語ろうと思うそろそろSublime Text 2を熱く語ろうと思う
そろそろSublime Text 2を熱く語ろうと思う
Tadayuki Onishi
 
Nodejsによるapiサーバ構築事例
Nodejsによるapiサーバ構築事例Nodejsによるapiサーバ構築事例
Nodejsによるapiサーバ構築事例
Hidetoshi Mori
 
Ruby on FreeBSD 2020
Ruby on FreeBSD 2020Ruby on FreeBSD 2020
Ruby on FreeBSD 2020
Koichiro Iwao
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない
Takuto Matsuu
 
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
Koichiro Iwao
 
SDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみるSDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみる
Hirokuma Ueno
 
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
Shougo
 
Tide - SmalltalkでSPA
Tide - SmalltalkでSPATide - SmalltalkでSPA
Tide - SmalltalkでSPA
Masashi Umezawa
 
Vim = VM
Vim = VMVim = VM
Vim = VM
Shougo
 
Shougoの開発環境
Shougoの開発環境Shougoの開発環境
Shougoの開発環境
Shougo
 
neovim = VM
neovim = VMneovim = VM
neovim = VM
Shougo
 
Contao Open Source CMS / Contao 3.3に向けて
Contao Open Source CMS / Contao 3.3に向けてContao Open Source CMS / Contao 3.3に向けて
Contao Open Source CMS / Contao 3.3に向けて
Takahiro Kambe
 
汎用apiサーバの構築
汎用apiサーバの構築汎用apiサーバの構築
汎用apiサーバの構築
Hidetoshi Mori
 
そろそろSublime Text 2を熱く語ろうと思う
そろそろSublime Text 2を熱く語ろうと思うそろそろSublime Text 2を熱く語ろうと思う
そろそろSublime Text 2を熱く語ろうと思う
Tadayuki Onishi
 
Nodejsによるapiサーバ構築事例
Nodejsによるapiサーバ構築事例Nodejsによるapiサーバ構築事例
Nodejsによるapiサーバ構築事例
Hidetoshi Mori
 
Ruby on FreeBSD 2020
Ruby on FreeBSD 2020Ruby on FreeBSD 2020
Ruby on FreeBSD 2020
Koichiro Iwao
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない
Takuto Matsuu
 
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
Koichiro Iwao
 
SDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみるSDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみる
Hirokuma Ueno
 
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
Shougo
 
Tide - SmalltalkでSPA
Tide - SmalltalkでSPATide - SmalltalkでSPA
Tide - SmalltalkでSPA
Masashi Umezawa
 

Viewers also liked (9)

Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1
cohama
 
すごいVimでhaskellを書こう@なごやまつり
すごいVimでhaskellを書こう@なごやまつりすごいVimでhaskellを書こう@なごやまつり
すごいVimでhaskellを書こう@なごやまつり
cohama
 
(初心者向け) Vim の機能紹介@nagoya.vim #1
(初心者向け) Vim の機能紹介@nagoya.vim #1(初心者向け) Vim の機能紹介@nagoya.vim #1
(初心者向け) Vim の機能紹介@nagoya.vim #1
cohama
 
Vim の開発環境
Vim の開発環境Vim の開発環境
Vim の開発環境
eagletmt
 
Using xvim with macvim
Using xvim with macvimUsing xvim with macvim
Using xvim with macvim
pebble8888
 
VimConf 2014 from deris0126
VimConf 2014 from deris0126VimConf 2014 from deris0126
VimConf 2014 from deris0126
deris0126
 
Let's talk about neovim
Let's talk about neovimLet's talk about neovim
Let's talk about neovim
Shougo
 
Auto closing parenthesis @vim conf2014
Auto closing parenthesis @vim conf2014Auto closing parenthesis @vim conf2014
Auto closing parenthesis @vim conf2014
cohama
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
Sugoi Kanari
 
Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1Vim script と vimrc の正しい書き方@nagoya.vim #1
Vim script と vimrc の正しい書き方@nagoya.vim #1
cohama
 
すごいVimでhaskellを書こう@なごやまつり
すごいVimでhaskellを書こう@なごやまつりすごいVimでhaskellを書こう@なごやまつり
すごいVimでhaskellを書こう@なごやまつり
cohama
 
(初心者向け) Vim の機能紹介@nagoya.vim #1
(初心者向け) Vim の機能紹介@nagoya.vim #1(初心者向け) Vim の機能紹介@nagoya.vim #1
(初心者向け) Vim の機能紹介@nagoya.vim #1
cohama
 
Vim の開発環境
Vim の開発環境Vim の開発環境
Vim の開発環境
eagletmt
 
Using xvim with macvim
Using xvim with macvimUsing xvim with macvim
Using xvim with macvim
pebble8888
 
VimConf 2014 from deris0126
VimConf 2014 from deris0126VimConf 2014 from deris0126
VimConf 2014 from deris0126
deris0126
 
Let's talk about neovim
Let's talk about neovimLet's talk about neovim
Let's talk about neovim
Shougo
 
Auto closing parenthesis @vim conf2014
Auto closing parenthesis @vim conf2014Auto closing parenthesis @vim conf2014
Auto closing parenthesis @vim conf2014
cohama
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
Sugoi Kanari
 

Similar to Nagoya vim #1 about plugins (20)

「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
gu4
 
Tdd vim
Tdd vimTdd vim
Tdd vim
Tak Nishikori
 
「Vim初心者によるVim入門@haman29」
「Vim初心者によるVim入門@haman29」「Vim初心者によるVim入門@haman29」
「Vim初心者によるVim入門@haman29」
Kyohei Hamada
 
おすすめVimプラグインまとめ
おすすめVimプラグインまとめおすすめVimプラグインまとめ
おすすめVimプラグインまとめ
Shun Iwase
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて
Yuta Ogura
 
Vimのpluginを書く
Vimのpluginを書くVimのpluginを書く
Vimのpluginを書く
Sachirou Inoue
 
Vimプラグインを使おう
Vimプラグインを使おうVimプラグインを使おう
Vimプラグインを使おう
Hideaki Miyake
 
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
deris0126
 
Vim入門 20130210
Vim入門 20130210Vim入門 20130210
Vim入門 20130210
marony
 
Vimから見たemacs
Vimから見たemacsVimから見たemacs
Vimから見たemacs
Shougo
 
「とても小さいVim」vim tiny
「とても小さいVim」vim tiny「とても小さいVim」vim tiny
「とても小さいVim」vim tiny
gu4
 
壱から始めるVim超入門
壱から始めるVim超入門壱から始めるVim超入門
壱から始めるVim超入門
smokey monkey
 
Vim の話
Vim の話Vim の話
Vim の話
cohama
 
DevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vimDevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vim
t9md
 
易しいVim
易しいVim易しいVim
易しいVim
asuka y
 
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
gu4
 
「Vim初心者によるVim入門@haman29」
「Vim初心者によるVim入門@haman29」「Vim初心者によるVim入門@haman29」
「Vim初心者によるVim入門@haman29」
Kyohei Hamada
 
おすすめVimプラグインまとめ
おすすめVimプラグインまとめおすすめVimプラグインまとめ
おすすめVimプラグインまとめ
Shun Iwase
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて
Yuta Ogura
 
Vimプラグインを使おう
Vimプラグインを使おうVimプラグインを使おう
Vimプラグインを使おう
Hideaki Miyake
 
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
deris0126
 
Vim入門 20130210
Vim入門 20130210Vim入門 20130210
Vim入門 20130210
marony
 
Vimから見たemacs
Vimから見たemacsVimから見たemacs
Vimから見たemacs
Shougo
 
「とても小さいVim」vim tiny
「とても小さいVim」vim tiny「とても小さいVim」vim tiny
「とても小さいVim」vim tiny
gu4
 
壱から始めるVim超入門
壱から始めるVim超入門壱から始めるVim超入門
壱から始めるVim超入門
smokey monkey
 
Vim の話
Vim の話Vim の話
Vim の話
cohama
 
DevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vimDevEnv Tryit.vim Phrase.vim
DevEnv Tryit.vim Phrase.vim
t9md
 
易しいVim
易しいVim易しいVim
易しいVim
asuka y
 

Nagoya vim #1 about plugins