Pythonを用いてVimを拡張してみよう
翻訳校正:村上雅章・野崎裕子
テキストエディタVimはPythonのスクリプティングもサポートしている。Pythonを使ってVimに独自の機能を追加する方法をご紹介する。
新たなテキストファイルをオープンし、そのファイル名をpyextend.vimとする--目的の関数をこのファイルに記述した後、それをvimエディタにロードするために「ソーシング」を行うことになる。該当コードが出来上がったのであれば、.vimrc(Windowsの場合は_vimrc)ファイルでそれをインクルードすることによって、VimまたはgVimのセッション開始時に必ずロードされるようにすることができる。
pyextend.vimに以下のコードを記述してほしい。
function! GetHTML()
python << EOF
import vim, BeautifulSoup, urllib
handle = urllib.urlopen(vim.current.line)
soup = BeautifulSoup.BeautifulSoup(handle.read())
vim.current.buffer[:] = soup.prettify().split('\n')
EOF
endfunction
このコードには多くの処理が含まれているため、1行ずつ説明していきたい。
function! GetHTML()
1行目では、GetHTMLというVimscriptの関数を定義している。この関数は引数を受け取らない。Vimでは、関数名は必ず大文字で開始しなければならない。functionの後の!記号は、GetHTMLという名前の関数が既に存在していた場合にそれを上書きするようVimに指示するためのものである。
python << EOF
この行では、"EOF"のみからなる行がくるまで、VimscriptではなくPythonのコードが記述されていると解釈するようVimに指示している。
import vim, BeautifulSoup, urllib
ここで、使用する3つのモジュールをインポートしている。vimモジュールはVimウィンドウとその内容にアクセスするためのものであり、BeautifulSoupはHTML解析に使用するライブラリであり、urllibはウェブページをダウンロードするために使用するライブラリである。
handle = urllib.urlopen(vim.current.line)
handleという変数を作成し、ウェブページへのコネクションをオープンするためのファイルハンドルをそこに代入する。そして、ウェブページのアドレスは、Vimウィンドウ内の現在行に記述されている内容そのものであるとして扱われる。
soup = BeautifulSoup.BeautifulSoup(handle.read())
ファイルハンドルから読み込み、その内容でBeautifulSoupのインスタンスを生成する。
vim.current.buffer[:] = soup.prettify().split('\n')
vim.current.bufferは、Vim上で現在作業を行っているファイル中の行を保持しているリストである。スライス記法([:])を用いることで、その内容全体を、ウェブページのHTML形式のソースで置き換えている。
EOF
独立行にEOFとだけ記述することで、Vimに対してPythonコードの終了を指示している。
endfunction
その後、関数定義を終了させる。
pyextend.vimファイルを保存し、新たなウィンドウをオープンする(または、新たな分割画面をオープンするためにVimコマンドの:newを入力する)。次に、:source pyextend.vimと入力することで新たな関数をソーシングする。エラーがあった場合にはインデントをチェックしてほしい。Pythonのコードは、組み込まれた場合であってもインデントが意味を持つからである。
この関数をテストするには、任意のウェブサイトのアドレス(http://から始めることを忘れないように)を入力した後、そのアドレスのある行にカーソルを置いた状態でコマンドモードから:call GetHTML()を入力する。これで、バッファが該当ページのソースで置き換えられるはずだ。
例えばアドレスをhttp://www.builderau.com.au/とした場合、結果は以下のようになるはずである。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
By developers, for developers - Builder AU
</title>
VimをPythonスクリプティングを用いて拡張することによってさまざまなことが可能になる。詳細については、Vimモジュールのドキュメント(英語)に目を通してほしい。
この記事は海外CNET Networks発のニュースをシーネットネットワークスジャパン編集部が日本向けに編集したものです。海外CNET Networksの記事へ
- 5人の推薦記事
- 0人がクリップ
-
ソーシャルブックマーク(-)
- トラックバック(0)
- 昨日のトップ記事
- 2日前
- 3日前
- 6日前
- 7日前
- ホワイトペーパー
- 企画特集
今なら無料! IBMの「グリーンIT化診断」
ただのERPだけじゃもう足りない!
グリーンデータセンターの新潮流
情報大洪水時代を生き抜くソリューション
Green Enterprise
REAL IT COOL PROJECT
仲間と情報を共有・公開する楽しみ方は?
Touch Diamond VS iPhone 3G
価格から質へと変わるアウトソーシング市場
国内シェアNo1
Techno Exchange
グローバル競争に金融不安……
局所冷却に注目。
NECのグリーンITの本気度「PUEは1.58」
IT技術者はもっと幸せになれる!
- 運用管理こそ業務の背骨
- Web2.0時代におけるセキュリティ上の課題
- なぜ、ERP 導入は敷居が高いのか?
- ERP,CRMのレスポンスの遅さを劇的改善!
- MicrosoftもOracleもDWH市場に参入!
- データバックアップで事業継続力を向上!
- 解約率わずか1%のホスティングサービス
- エンタープライズサーチ特集!
- 所有から利用へ。拡大するiDC市場
- 市場のニーズに応えた帳票ソリューション
- 話題のタグ
CSS 3のボックスレイアウトでコンテンツを画面の中央に配置する
ローカルへのデータの保存を可能にするDOM Storage
iPhoneアプリ開発苦労話ベスト3―伝説の開発者に訊く(その1)
あなたの知らないPKI(2)--PKIのコア要素/電子証明書と認証局
不況に強いITを目指す--不況時に高い需要が望める分野はこれだ
最初からXenを組み込んだPCが出荷される:Xenプロジェクト創始者の将来予測