SlideShare a Scribd company logo
1 of 25
Download to read offline
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

Vim = VM
Vim = VMVim = VM
Vim = VMShougo
 
Shougoの開発環境
Shougoの開発環境Shougoの開発環境
Shougoの開発環境Shougo
 
neovim = VM
neovim = VMneovim = VM
neovim = VMShougo
 
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
 
Packagist を旅してみる
Packagist を旅してみるPackagist を旅してみる
Packagist を旅してみるsters
 
汎用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 2020Koichiro 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でSPAMasashi Umezawa
 

What's hot (20)

Vim = VM
Vim = VMVim = VM
Vim = VM
 
Shougoの開発環境
Shougoの開発環境Shougoの開発環境
Shougoの開発環境
 
Bmd
BmdBmd
Bmd
 
neovim = VM
neovim = VMneovim = VM
neovim = VM
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
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に向けて
 
Happy status Coding
Happy status CodingHappy status Coding
Happy status Coding
 
Lt
LtLt
Lt
 
Packagist を旅してみる
Packagist を旅してみるPackagist を旅してみる
Packagist を旅してみる
 
汎用apiサーバの構築
汎用apiサーバの構築汎用apiサーバの構築
汎用apiサーバの構築
 
そろそろSublime Text 2を熱く語ろうと思う
そろそろSublime Text 2を熱く語ろうと思うそろそろSublime Text 2を熱く語ろうと思う
そろそろSublime Text 2を熱く語ろうと思う
 
Nodejsによるapiサーバ構築事例
Nodejsによるapiサーバ構築事例Nodejsによるapiサーバ構築事例
Nodejsによるapiサーバ構築事例
 
Ruby on FreeBSD 2020
Ruby on FreeBSD 2020Ruby on FreeBSD 2020
Ruby on FreeBSD 2020
 
俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない俺のGentooがこんなに可愛いわけがない
俺のGentooがこんなに可愛いわけがない
 
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
FreeBSD と xrdp と私 〜FreeBSD developerになるまで〜
 
SDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみるSDK for NFC Starter Kit(2) 使ってみる
SDK for NFC Starter Kit(2) 使ってみる
 
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜我が evil-mode を嫌いな理由 〜evil-mode の闇〜
我が evil-mode を嫌いな理由 〜evil-mode の闇〜
 
PHP With Windows binary
PHP With Windows binaryPHP With Windows binary
PHP With Windows binary
 
Tide - SmalltalkでSPA
Tide - SmalltalkでSPATide - SmalltalkでSPA
Tide - SmalltalkでSPA
 
Argosの紹介 #x86study
Argosの紹介 #x86studyArgosの紹介 #x86study
Argosの紹介 #x86study
 

Viewers also liked

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

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
 
すごいVimでhaskellを書こう@なごやまつり
すごいVimでhaskellを書こう@なごやまつりすごいVimでhaskellを書こう@なごやまつり
すごいVimでhaskellを書こう@なごやまつり
 
(初心者向け) Vim の機能紹介@nagoya.vim #1
(初心者向け) Vim の機能紹介@nagoya.vim #1(初心者向け) Vim の機能紹介@nagoya.vim #1
(初心者向け) Vim の機能紹介@nagoya.vim #1
 
Vim の開発環境
Vim の開発環境Vim の開発環境
Vim の開発環境
 
Using xvim with macvim
Using xvim with macvimUsing xvim with macvim
Using xvim with macvim
 
VimConf 2014 from deris0126
VimConf 2014 from deris0126VimConf 2014 from deris0126
VimConf 2014 from deris0126
 
Let's talk about neovim
Let's talk about neovimLet's talk about neovim
Let's talk about neovim
 
Auto closing parenthesis @vim conf2014
Auto closing parenthesis @vim conf2014Auto closing parenthesis @vim conf2014
Auto closing parenthesis @vim conf2014
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
 

Similar to Nagoya vim #1 about plugins

Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Takuya Ueda
 
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理gu4
 
Vim の話
Vim の話Vim の話
Vim の話cohama
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門Takashi Takizawa
 
20130316 プログラミング言語Go
20130316 プログラミング言語Go20130316 プログラミング言語Go
20130316 プログラミング言語GoYoshifumi Yamaguchi
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例fumoto kazuhiro
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドToru Tamaki
 
Al mininum 47redmine-2nd
Al mininum 47redmine-2ndAl mininum 47redmine-2nd
Al mininum 47redmine-2ndmikoto20000
 
20140926 mt cloud_handson_seminar
20140926 mt cloud_handson_seminar20140926 mt cloud_handson_seminar
20140926 mt cloud_handson_seminarSix Apart
 
MRTGの導入と運用
MRTGの導入と運用MRTGの導入と運用
MRTGの導入と運用kohei Yamamoto
 
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングサンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングYikei Lu
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdTaisuke Yamada
 
アクセス・ログ取得システム導入の考察(完全版)
アクセス・ログ取得システム導入の考察(完全版)アクセス・ログ取得システム導入の考察(完全版)
アクセス・ログ取得システム導入の考察(完全版)Fusion Reactor LLC
 

Similar to Nagoya vim #1 about plugins (20)

Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
「Vimrcリーディングに役立ちそうな」vimrcの設定とplugin管理
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
 
kyotovim#1
kyotovim#1kyotovim#1
kyotovim#1
 
Vim の話
Vim の話Vim の話
Vim の話
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
20130316 プログラミング言語Go
20130316 プログラミング言語Go20130316 プログラミング言語Go
20130316 プログラミング言語Go
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例ネットワークコマンド入力に対応したツール事例
ネットワークコマンド入力に対応したツール事例
 
Packerで自動化
Packerで自動化Packerで自動化
Packerで自動化
 
ソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルドソフトウェア工学2023 14 ビルド
ソフトウェア工学2023 14 ビルド
 
Plugman code-reading
Plugman code-readingPlugman code-reading
Plugman code-reading
 
Al mininum 47redmine-2nd
Al mininum 47redmine-2ndAl mininum 47redmine-2nd
Al mininum 47redmine-2nd
 
20140926 mt cloud_handson_seminar
20140926 mt cloud_handson_seminar20140926 mt cloud_handson_seminar
20140926 mt cloud_handson_seminar
 
MRTGの導入と運用
MRTGの導入と運用MRTGの導入と運用
MRTGの導入と運用
 
サンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミングサンドボックス化によるセキュアなプログラミング
サンドボックス化によるセキュアなプログラミング
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
アクセス・ログ取得システム導入の考察(完全版)
アクセス・ログ取得システム導入の考察(完全版)アクセス・ログ取得システム導入の考察(完全版)
アクセス・ログ取得システム導入の考察(完全版)
 

Nagoya vim #1 about plugins