この記事は、Vim Advent Calendar 2012の21日目の記事となる。昨日(20日目)はchikatoike氏のVimGolfでハイスコアを取ったらトップの人のコメントが見れた話 - ゆり日記だった。
なんやかんやの間に「今年」も残すところあと10日(何……だと……?)。そろそろ今年1年の締めくくり、行く年に感謝を来る年に期待を。そう、Vimのpluginにもね。
以下、私が今年1年世話になったVim pluginを10個紹介する。明日(22日)から1日1個試していけば、丁度今年中に全pluginを確認出来るという寸法である。
なお、各pluginの紹介文の最後には、そのpluginを導入する為の:NeoBundle
コマンドを記述している(ただしneobundle.vim以外)ので、気になるpluginが在ったら是非利用して頂きたい。
因みに、タイトルはこのWEBサービスやアプリ達に感謝しなければ年を越せない!僕が今年使い倒した2012年のベストを全部ご紹介! | バンクーバーのうぇぶ屋のパクりである。
neobundle.vim
neobundle.vimはVimのpluginを管理するpluginだ。
昨今のVim pluginには複数ファイルに渡る大規模な物が増えてきた。いや、例え小規模であろうとドキュメントを用意した途端にファイルは複数になる。古き良きVimオリジナルのplugin管理(所定のフォルダにファイルを突っ込む)は単純だが、その管理コストは膨大だ。導入はまだ良い。削除はどうする?そのpluginを構成するファイルを一つずつちまちま消していくのか?更新は?10のpluginを導入しているなら、10の公開ページで更新を目視確認してダウンロード、「このファイルはこのフォルダ、そのファイルはあのフォルダ」と手でコピーしていくのか?
そこでneobundle.vim。pluginの導入、更新、削除コストを大幅に小さくしてくれる。
neobundle.vim自体の導入は簡単。neobundle.vim自体を導入するフォルダを作り、そこにShougo/neobundle.vim ・ GitHubのautoload,docフォルダとそれらのフォルダ内のファイルをコピー(README.mdに在るようにgit clone
するか、ページ上方の"ZIP"リンクから圧縮ファイルを入手しそれを展開する)。なお、neobundle.vimはGit(場合によってはそれ以外のVCSも)が必要なので、前もってインストールしておく必要が有る。後は以下をあなたの.vimrcに追記すればよい。
set nocompatible
if has('vim_starting')
set runtimepath+=(neobundle.vim導入先フォルダ)
endif
call neobundle#rc(expand('(plugin導入先フォルダ)'))
" ここに:NeoBundleコマンドを列挙していく(後述)
filetype plugin indent on
新規にpluginを導入するには:NeoBundle
と:NeoBundleInstall
を使う。
導入したいplugin名を:NeoBundle
で指定し、:NeoBundleInstall
でインストールする。
例えば、vim.orgに公開されている"A"及び"B"というpluginを導入する場合は以下の3コマンドを行う。
:NeoBundle 'A' " Aを導入しますよ、という宣言
:NeoBundle 'B' " Bを導入しますよ、という宣言
:NeoBundleInstall " 今まで:NeoBundleされてきたpluginを全てダウンロード&インストール
昨今増えてきたGitHub上で公開されているpluginは、:NeoBundle
の引数を'(開発者名)/(plugin名)'の形式で記述する事で導入出来る。
導入したpluginが気に入り、継続して使っていきたいと思ったならば、.vimrcでneobundle#rc()
を:call
した後にそのplugin用の:NeoBundle
コマンドを追記すればよい。
pluginの削除には:NeoBundleClean
を用いる。
先ず.vimrcから削除したいplugin用の:NeoBundle
を削除、次いで起動したVimで:NeoBundleClean
を行う。
なお、:NeoBundleClean
しない限り、プラグインのファイルは読み込まれなくなるだけで物理的に削除される訳ではないので、:NeoBundle
行の削除(コメントアウト)は一時的にそのpluginを無効化する手段としても有用である。
pluginの更新には:NeoBundleUpdate
を用いる。
:NeoBundleUpdate
を行うと、現在導入されている(=:NeoBundle
されている)全pluginの更新を自動判別、古ければ自動更新される。
neobundle.vim単独でも使う事は出来るが、後述するvimprocと併用する事を薦める。同時インストール/更新、コマンドプロンプトウィンドウの表示を抑制する事が出来るようになる。
eregex.vim
Vimの検索では正規表現を使う事が出来る。しかしその正規表現にはVim独特な部分が多く、Perl等で正規表現を学んだ者には絶え間ない苦痛を与える事となる(特に"\"の必要な機会の多さといったら!)。
eregex.vimを導入する事で、Perl/Ruby風の正規表現を使う事が出来るようになる。
とは言え、Vimの検索/置換処理をそのまま置き換えたりする訳ではなく、専用のコマンドを提供するだけなので注意が必要である。
Vimのコマンドとeregex.vimで提供されるコマンドの対応は次の通り。
Vim | eregex.vim |
---|---|
/ | :M/ |
:substitute | :S |
:global | :G |
:NeoBundle
コマンド
:NeoBundle 'othree/eregex.vim'
excitetranslate-vim
VISUAL modeで選択した範囲の文章をエキサイト 翻訳で翻訳、その結果を新規ウィンドウに表示するpluginだ。
グローバル化が叫ばれる昨今、英語の能力の重要性は日増しに高まっている。日本語話者の肩身は狭くなるばかりだ。幸い、web上にはオンライン機械翻訳ツールが公開されているので、それを利用する事で自分の英語スキルを(ある程度は)カバーする事が出来る。
このpluginを導入し、翻訳したい文章を選択した上で:Excitetranslate
。英語の文章を日本語に、或いは日本語の文章を英語に翻訳した結果を確認出来る。
なお、このpluginを利用する為には、別にwebapi-vimというpluginも必要である。
:NeoBundle
コマンド
:NeoBundle 'mattn/excitetranslate-vim', {'depends': 'mattn/webapi-vim'}
open-browser.vim
今はweb全盛時代である。URLが書かれたテキストファイルに触れる機会も多い。そうなると当然、「ファイル中に書かれたURLに素早くアクセスしたい」という欲求が発生する。open-browser.vimはそれを叶えてくれるpluginだ。
例えば以下のkey mappingをしておけば、カーソル下のURLが指すwebページを既定のブラウザで開く事が出来る。
nmap gW <Plug>(openbrowser-open)
:NeoBundle
コマンド
:NeoBundle 'tyru/open-browser.vim'
qtmplsel.vim
新規ファイルを作った際に、そのファイルのテンプレートとなる内容を半自動入力出来るようにするpluginだ。
新規のファイルを作る時に、必ず入力する内容という物は無いだろうか。例えばHTML文書であれば<html>
,<head>
,<title>
,<script>
,<link>
,<body>
……これらを毎回入力するのは手間であるし、何よりも時間の無駄だ。
任意のフォルダにテンプレートの内容を記したファイルを格納し、以下の設定を行えば利用可能になる。新規ファイルの編集を開始した際に、そのfiletypeに関連づけられた拡張子を付けられたテンプレートが一覧表示される。
let g:qts_templatedir='(テンプレートファイル格納先フォルダ)'
テンプレート入力用pluginは幾つも在るが、qtmplsel.vimが秀でているのは、1つのfiletypeに複数のテンプレートを登録出来る点だ。例えば一概に「HTML文書」と言っても、そのバージョンでテンプレートとしたい内容は異なる。HTML5用、XHTML1.1用、HTML4.1Strict用……など、複数のテンプレートを用意し、適切に使い分ける事が可能だ。
:NeoBundle
コマンド
:NeoBundle 'qtmplsel.vim'
str2htmlentity.vim
選択範囲中の特定の文字を、HTMLの文字実体参照に変換したり、またその逆に文字実体参照を実際の文字へ逆変換出来るようにする。
HTML文章中では、特定の文字を記述する事が出来ない。例えば「<」や「&」等がそれに当たる。ではそれらを使いたい場合にはどうするかというと、その文字を示す特定のキーワードを替わりに記述する事になる。先程の例だとそれぞれ「<」「&」となる。
変換を行いたい範囲を選択した後に、:Str2HtmlEntity
で文字参照へ、:Entity2HtmlString
でその逆の変換を行う。
これもまた、当blogの記述で重宝しているpluginである。
vim-alignta
文字列の整形を簡単に行えるようにするplugin。
プレーンテキストといえど、整形し読みやすくする気遣いは必要である。
例えば、以下のようなリストを、
Chrome http://www.google.co.jp/intl/ja/chrome/browser/ Firefox http://www.mozilla.jp/firefox/ Internet Explorer http://windows.microsoft.com/ja-JP/internet-explorer/download-ie Opera http://jp.opera.com/ Safari http://www.apple.com/jp/safari/
以下のように読みやすく綺麗に並べたいとする。
Chrome http://www.google.co.jp/intl/ja/chrome/browser/ Firefox http://www.mozilla.jp/firefox/ Internet Explorer http://windows.microsoft.com/ja-JP/internet-explorer/download-ie Opera http://jp.opera.com/ Safari http://www.apple.com/jp/safari/
1行ずつ手作業で空白文字を追加していく事も勿論可能だが、このpluginを使えば、範囲選択後に以下のコマンド1つで簡単に位置を揃える事が出来る。
:'<,'>Alignta http.*$
:NeoBundle
コマンド
:NeoBundle 'h1mesuke/vim-alignta'
vimproc
Vimで非同期処理を可能とするplugin。
非同期処理とは簡単にいえば、「複数の処理を同時に行う」事である。前述したneobundle.vim等で真価を発揮する、縁の下の力持ちである。
:NeoBundle
コマンド
:NeoBundle 'Shougo/vimproc'
vim-ref
Vim上から任意のドキュメントを参照出来るようにするplugin。
特に各プログラミング言語のリファレンスマニュアルの参照に有効であるが、プログラマでない人にも、任意のテキストブラウザを導入の上で、添付されているwebdictを用いると有用であろう(:help ref-webdict
)。
例えばテキストファイル中の英単語の意味をオンラインの辞書で調べたり……;-P
:NeoBundle
コマンド
:NeoBundle 'thinca/vim-ref'
vim-surround
「()」や「""」などの、「文字列を囲う記号」の操作を可能とするpluginである。
例えば、「"Vim is the best text editor."」の両端の「"」記号を消すには、NORMAL mode下で対象の文字列内の何処かにカーソルを移動させて「ds"」、「()」に変更する事場合は「cs"(」とする。
Vimには文字列塊(1単語、1段落など)を1つの単位として扱えるtext objectと呼ばれる機能が在るが、その特殊な拡張である。
記号の他、HTMLの要素(タグ)にも対応している。当blogでは、記事中の文章を出来るだけHTMLでマークアップする事を心がけており、原稿をただのテキストとして入力した後、このpluginの力を使ってマークアップを行っている。
:NeoBundle
コマンド
:NeoBundle 'kana/vim-surround'
今年の残り日数に合わせ10個に絞ったが、正直まだまだ沢山のpluginにお世話になっている。
また、Vimを使う出来るだけ多くの人に役立つように、特定用途(具体的にはプログラミング)にのみ特化したpluginは候補から省いた。それでもややプログラミング用途に寄っている気はするが……
使っている全てのpluginに「今年はお世話になりました。来年もよろしくお願いします。」という感謝を。
さて、来年はどんな素晴らしいVim pluginとの出会いがあるのかなぁ?