1 *if_pyth.txt* For Vim バージョン 7.1. Last change: 2006 Apr 30
4 VIM REFERENCE MANUAL by Paul Moore
7 VimのPythonインターフェイス *python* *Python*
9 1. コマンド |python-commands|
10 2. vimモジュール |python-vim|
11 3. バッファオブジェクト |python-buffer|
12 4. レンジオブジェクト |python-range|
13 5. ウィンドウオブジェクト |python-window|
14 6. 動的ローディング |python-dynamic|
18 Pythonインターフェイスは、Vimが|+python|機能付きでコンパイルされたときのみ利用
21 ==============================================================================
22 1. コマンド *python-commands*
25 :[range]py[thon] {stmt}
26 Pythonのステートメント{stmt}を実行します。
28 :[range]py[thon] << {endmarker}
31 Pythonのスクリプト{script}を実行します。
32 Note: このコマンドはPython用の機能を含めてコンパイルさ
33 れていないときは機能しない。エラーを抑制するには
34 |script-here|を参照してください。
36 {endmarker}の前に空白を置かないでください。"<<"の後に{endmarker}省略した時は
37 |:append|や|:insert|のように'.'が使われます。
38 この形の|:python|コマンドはVimスクリプトにPythonコードを埋め込むのに特に便利で
42 function! IcecreamInitialize()
44 class StrawberryIcecreame:
50 Note: Pythonはインデントに関して非常に繊細です。"class"の行と"EOF"の行はまった
54 :[range]pyf[ile] {file}
55 {file}内のPythonスクリプトを実行します。引数はそのまま
56 一つのファイル名として使われます。{Vi にはない}
58 これら2つのコマンドは、本質的には同じことを行う - つまり、Pythonのコードを、
59 与えられた"現在の範囲"|python-range|に対して実行する。
61 :pythonの場合には、実行されるコードはコマンドラインで与えられたものです。
62 :pyfileの場合には、実行されるコードは与えられたファイルの中身です。
64 Pythonのコマンドは|sandbox|の中では使えません。
66 引数を渡すためには明示的に sys.argv[] を使って設定してください。例: >
69 :python sys.argv = ["foo", "bar"]
72 いくつか例を挙げます *python-examples* >
74 :python from vim import *
75 :python from string import upper
76 :python current.line = upper(current.line)
78 :python str = current.buffer[42]
80 (変更 - importsなど - は、Pythonインタープリタと同様に、次のコマンドに引き
83 ==============================================================================
84 2. vimモジュール *python-vim*
86 Pythonコードは、vimモジュールを通して、vimに自由にアクセスすることができます
87 (ただひとつの例外を除いて - 以下の|python-output|を参照)。vimモジュールは2つ
88 のメソッド、3つの定数、そして1つのエラーオブジェクトを実装しています。これを
89 使うにはvimモジュールをimportする必要があります。 >
93 :py print "Hello" # メッセージを表示
94 :py vim.command(cmd) # exコマンドを実行
95 :py w = vim.windows[n] # ウィンドウ"n"を得る
96 :py cw = vim.current.window # 現在のウィンドウを得る
97 :py b = vim.buffers[n] # バッファ"n"を得る
98 :py cb = vim.current.buffer # 現在のバッファを得る
99 :py w.height = lines # ウィンドウの高さを設定する
100 :py w.cursor = (row, col) # ウィンドウのカーソル位置を設定する
101 :py pos = w.cursor # (row, col)の組を得る
102 :py name = b.name # バッファのファイル名を得る
103 :py line = b[n] # バッファから1行を得る
104 :py lines = b[n:m] # バッファから一連の行を得る
105 :py num = len(b) # 行数を得る
106 :py b[n] = str # バッファ内の1行を設定する
107 :py b[n:m] = [str1, str2, str3] # 1度に数行を設定する
108 :py del b[n] # 1行を削除する
109 :py del b[n:m] # 数行を削除する
114 vim.command(str) *python-command*
115 vim(exモード)のコマンドstrを実行します。戻り値はありません。
117 :py vim.command("set tw=72")
118 :py vim.command("%s/aaa/bbb/g")
119 < ノーマルモードのコマンドを実行するには、次の定義が使われます: >
121 vim.command("normal "+str)
122 # '...'は、2重引用符を含む文字列の境界に使われることに注意。
125 ":python"コマンドは、Python 2.2かそれより古いものでは再帰的に使えませ
126 ん。Python 2.3 かそれより新しものを使ってください。 >
127 :py vim.command("python print 'Hello again Python'")
129 vim.eval(str) *python-eval*
130 vim内の式評価を使って、式を評価します(|expression|を参照)。戻り値は、
132 - Vimの式を評価した結果が文字列か数値ならば文字列
133 - Vimの式を評価した結果がリストならばリスト
134 - Vimの式を評価した結果がVimの辞書ならば辞書
137 :py text_width = vim.eval("&tw")
138 :py str = vim.eval("12+12") # 結果は文字列であることに注意!
140 # string.atoi()を使うこと。
142 :py tagList = vim.eval('taglist("eval_expr")')
143 < 最後のコマンドはPython辞書のPythonリストを返します。例:
144 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
145 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
149 vim.error *python-error*
150 vimのエラーに遭遇したとき、Pythonは型vim.errorの例外を発生させます。
158 モジュール"vim"の定数は、実際には定数ではありません。よって代入し直す
159 ことができます。しかし、それは馬鹿げたことです。その変数が参照している
160 vimオブジェクトへのアクセスができなくなってしまうからです。
162 vim.buffers *python-buffers*
163 一連のvimバッファへのアクセスを提供するシーケンスオブジェクト。
165 :py b = vim.buffers[i] # インデックス化する (読取り専用)
166 :py b in vim.buffers # メンバかどうか調べる
167 :py n = len(vim.buffers) # 要素の個数
168 :py for b in vim.buffers: # シーケンシャルアクセス
170 vim.windows *python-windows*
171 一連のvimウィンドウへのアクセスを提供するシーケンスオブジェクト。
172 このオブジェクトは次の操作をサポートしています: >
173 :py w = vim.windows[i] # インデックス化する (読取り専用)
174 :py w in vim.windows # メンバかどうか調べる
175 :py n = len(vim.windows) # 要素の個数
176 :py for w in vim.windows: # シーケンシャルアクセス
178 vim.current *python-current*
179 vim内で使える様々な"現在の"オブジェクトへの、(特定の属性を通した)
181 vim.current.line 現在の行 (RW) String
182 vim.current.buffer 現在のバッファ (RO) Buffer
183 vim.current.window 現在のウィンドウ (RO) Window
184 vim.current.range 現在の行の範囲 (RO) Range
186 最後のものに関しては、若干の説明が必要でしょう。:python、:pyfileコマン
187 ドで、範囲が指定された場合、この行の範囲は、"現在の範囲"として扱われま
188 す。範囲はバッファに少し似ていますが、全てのアクセスは行のサブセットに
189 制限されます。詳細は|python-range|を参照してください。
192 Pythonからの出力 *python-output*
193 Pythonコードからの全ての出力は、Vimのメッセージエリアに表示されます。
194 標準出力はインフォメーションメッセージとして、エラー出力はエラーメッ
197 実装のレベルでいうと、sys.stdout(printステートメントによる出力も含む)
198 に向けられる全ての出力が、インフォメーションメッセージとしてvimに表示
199 され、sys.stderr(エラートレースバックを含む)に向けられる全ての出力が、
200 エラーメッセージとしてvimに表示されています。
203 入力(sys.stdinを通した入力、input()、raw_input()を含む)はサポートされ
204 ず、プログラムをクラッシュさせる可能性があります。これはたぶん修正され
207 ==============================================================================
208 3. バッファオブジェクト *python-buffer*
210 バッファオブジェクトは、vimのバッファを表します。バッファオブジェクトを取得す
212 - vim.current.bufferを介して (|python-current|)
213 - vim.buffersのインデックス化から (|python-buffers|)
214 - ウィンドウの"buffer"属性から (|python-window|)
216 バッファオブジェクトは、そのバッファの完全なファイル名を読み取り専用属性(name)
217 として持っています。バッファオブジェクトは3つのメソッドを持っています(append、
220 バッファオブジェクトは、シークエンスオブジェクトとして扱うこともできます。この
221 文脈では、バッファオブジェクトは文字列のリスト(そう、これはmutableです)のよう
222 に振舞います。各要素はバッファの行です。有用なシークエンス操作の全て、つまり、
223 インデックス操作、インデックスによる代入、スライシング、スライスへの代入が期待
224 通りに機能します。バッファのインデックス操作(スライシング)の結果は、文字列(文
225 字列のリスト)であることを注意しておきます。これはひとつの例外的な結果をもたら
226 します - b[:]はbとは異なるのです。特に、"b[:] = None"はバッファの全てを削除す
227 るが、"b = None"は変数bを更新するだけで、バッファには何の影響も与えません。
229 バッファのインデックスは、Pythonでは普通はゼロから始まります。これは、1から始
230 まるvimの行番号と異なります。これは、特にvimの行番号を使うmarks(以下を参照)を
233 バッファオブジェクトのメソッドは次の通りです:
234 b.append(str) バッファに行を追加
235 b.append(list) バッファに一連の行を追加
236 appendメソッドに文字列のリストを与えるオプションは、
237 Python組込みのリストオブジェクトの等価なメソッド
239 b.mark(name) 名前付きマークの位置を示す(row,col)の組を返す
240 (これは[]"<> marksでも得られる)
241 b.range(s,e) 与えられたバッファのs行目からe行目(s行とe行も含む
242 |inclusive|)を示すレンジオブジェクト(|python-range|を
245 Note 行を追加するときは、その行に改行文字'\n'が含まれてはなりません。末尾の
246 '\n'は許されますが、無視されます。そのため次のようなことができます: >
247 :py b.append(f.readlines())
249 例 (bは現在のバッファに割り当てられているとします) >
250 :py print b.name # バッファのファイル名を出力
251 :py b[0] = "hello!!!" # 先頭の行を置換
252 :py b[:] = None # 全てのバッファを削除
253 :py del b[:] # 全てのバッファを削除
254 :py b[0:0] = "add a line" # 先頭に行を追加
255 :py del b[2] # 行を削除 (3番目)
256 :py b.append("bottom") # 最後に行を追加
258 :py (row,col) = b.mark('a') # 名前付きマーク
259 :py r = b.range(1,5) # バッファの部分範囲
261 ==============================================================================
262 4. レンジオブジェクト *python-range*
264 レンジオブジェクトは、vimバッファの一部分を表します。レンジオブジェクトを取得
266 - vim.current.rangeを介して (|python-current|)
267 - バッファのrange()メソッドから (|python-buffer|)
269 レンジオブジェクトの操作は、バッファオブジェクトのそれとほとんど同じです。
270 しかし、全ての操作は範囲内の行に制限されます(もちろん、行の範囲は部分の割当て、
271 行の削除、あるいはrange.append()メソッドによって変更できます)。
274 r.start 選択範囲でのバッファ内の最初の行。
275 r.end 選択範囲でのバッファ内の最後の行。
278 r.append(str) その範囲に行を追加する
279 r.append(list) その範囲にリストで与えられた複数行を追加する。
280 これはPythonのリストオブジェクトに対する操作とは異な
284 バッファと違い、レンジは"name"属性を持たず、また、mark()、range()メソッドも持
285 ちません。そのかわり、レンジは範囲の最後に行を付け加えるappend()メソッドを持ち
288 ==============================================================================
289 5. ウィンドウオブジェクト *python-window*
291 ウィンドウオブジェクトは、vimのウィンドウを表現します。ウィンドウオブジェクト
292 を取得するには、いくつかの方法があります:
293 - vim.current.windowを介して (|python-current|)
294 - vim.windowsのインデックス化から (|python-windows|)
296 ウィンドウオブジェクトは、それらの属性を通してのみ操作できます。これらはメソッ
297 ドを持たず、シークエンスも他のインターフェイスもありません。
300 buffer (読取り専用) そのウィンドウに表示されているバッファ
301 cursor (読み書き) そのウィンドウの現在のカーソルの位置
303 height (読み書き) ウィンドウの高さ、行の数で
304 width (読み書き) ウインドウの幅、列の数で
305 heightはスクリーンが水平方向に分割されているときのみ書き込み可能です。
306 widthはスクリーンが垂直方向に分割されているときのみ書き込み可能です。
308 ==============================================================================
309 6. 動的ローディング *python-dynamic*
311 MS-WindowsではPythonライブラリを動的に読み込むことが可能である。これを行うと
312 |:version|の出力に|+python/dyn|が含まれるようになる。
314 この場合、Vimは必要なときだけPythonのDLLファイルを検索する。Pythonインターフェ
315 イスを使わないときはDLLを必要としないので、DLLなしでVimを使うことができる。
317 Pythonインターフェイスを使うにはPythonのDLLが検索パス内に存在しなければならな
318 い。コンソールウィンドウで"path"とタイプすると、どのディレクトリが検索パスとな
321 DLLの名前はVimをコンパイルした時のPythonのバージョンに一致しなければならない。
322 現在その名前は"python24.dll"である。これはPython2.4用である。これを確かめるに
323 は、"gvim.exe"を開き、"python\d*.dll\c"を検索する。
325 ==============================================================================
326 vim:tw=78:ts=8:ft=help:norl: