Merge branch 'KaoriYa'
[MacVim/KaoriYa.git] / runtime / doc / if_pyth.jax
bloba12cfcba33ccd1953085e4f8660f5321fb4a151d
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|
16 {Vi にはこれらのコマンドはない}
18 Pythonインターフェイスは、Vimが|+python|機能付きでコンパイルされたときのみ利用
19 できます。
21 ==============================================================================
22 1. コマンド                                         *python-commands*
24                                                         *:python* *:py*
25 :[range]py[thon] {stmt}
26                         Pythonのステートメント{stmt}を実行します。
28 :[range]py[thon] << {endmarker}
29 {script}
30 {endmarker}
31                         Pythonのスクリプト{script}を実行します。
32                         Note: このコマンドはPython用の機能を含めてコンパイルさ
33                         れていないときは機能しない。エラーを抑制するには
34                         |script-here|を参照してください。
36 {endmarker}の前に空白を置かないでください。"<<"の後に{endmarker}省略した時は
37 |:append|や|:insert|のように'.'が使われます。
38 この形の|:python|コマンドはVimスクリプトにPythonコードを埋め込むのに特に便利で
39 す。
41 例: >
42         function! IcecreamInitialize()
43         python << EOF
44         class StrawberryIcecreame:
45                 def __call__(self):
46                         print 'EAT ME'
47         EOF
48         endfunction
50 Note: Pythonはインデントに関して非常に繊細です。"class"の行と"EOF"の行はまった
51 くインデントしないでください。
53                                                         *:pyfile* *:pyf*
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[] を使って設定してください。例: >
68         :python import sys
69         :python sys.argv = ["foo", "bar"]
70         :pyfile myscript.py
72 いくつか例を挙げます                                      *python-examples*  >
74         :python from vim import *
75         :python from string import upper
76         :python current.line = upper(current.line)
77         :python print "Hello"
78         :python str = current.buffer[42]
80 (変更 - importsなど - は、Pythonインタープリタと同様に、次のコマンドに引き
81 継がれます。)
83 ==============================================================================
84 2. vimモジュール                                     *python-vim*
86 Pythonコードは、vimモジュールを通して、vimに自由にアクセスすることができます
87 (ただひとつの例外を除いて - 以下の|python-output|を参照)。vimモジュールは2つ
88 のメソッド、3つの定数、そして1つのエラーオブジェクトを実装しています。これを
89 使うにはvimモジュールをimportする必要があります。 >
90         :python import vim
92 概要 >
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]                  # 数行を削除する
112 "vim"モジュールのメソッド
114 vim.command(str)                                        *python-command*
115         vim(exモード)のコマンドstrを実行します。戻り値はありません。
116         例: >
117             :py vim.command("set tw=72")
118             :py vim.command("%s/aaa/bbb/g")
119 <       ノーマルモードのコマンドを実行するには、次の定義が使われます: >
120                 def normal(str):
121                         vim.command("normal "+str)
122                 # '...'は、2重引用符を含む文字列の境界に使われることに注意。
123                 normal('"a2dd"aP')
124 <                                                       *E659*
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|を参照)。戻り値は、
131         次の通り:
132         - Vimの式を評価した結果が文字列か数値ならば文字列
133         - Vimの式を評価した結果がリストならばリスト
134         - Vimの式を評価した結果がVimの辞書ならば辞書
135         辞書とリストは再帰的に展開されます。
136         例: >
137             :py text_width = vim.eval("&tw")
138             :py str = vim.eval("12+12")         # 結果は文字列であることに注意!
139                                                 # 数に変換するには、
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'}]
147 "vim"モジュールのエラーオブジェクト
149 vim.error                                               *python-error*
150         vimのエラーに遭遇したとき、Pythonは型vim.errorの例外を発生させます。
151         例: >
152                 try:
153                         vim.command("put a")
154                 except vim.error:
155                         # レジスタaが空
157 モジュール"vim"の定数
158         モジュール"vim"の定数は、実際には定数ではありません。よって代入し直す
159         ことができます。しかし、それは馬鹿げたことです。その変数が参照している
160         vimオブジェクトへのアクセスができなくなってしまうからです。
162 vim.buffers                                             *python-buffers*
163         一連のvimバッファへのアクセスを提供するシーケンスオブジェクト。
164         次の操作がサポートされています: >
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内で使える様々な"現在の"オブジェクトへの、(特定の属性を通した)
180         アクセスを提供するオブジェクト: >
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         標準出力はインフォメーションメッセージとして、エラー出力はエラーメッ
195         セージとして表示されます。
197         実装のレベルでいうと、sys.stdout(printステートメントによる出力も含む)
198         に向けられる全ての出力が、インフォメーションメッセージとしてvimに表示
199         され、sys.stderr(エラートレースバックを含む)に向けられる全ての出力が、
200         エラーメッセージとしてvimに表示されています。
202                                                         *python-input*
203         入力(sys.stdinを通した入力、input()、raw_input()を含む)はサポートされ
204         ず、プログラムをクラッシュさせる可能性があります。これはたぶん修正され
205         るべき問題です。
207 ==============================================================================
208 3. バッファオブジェクト                                   *python-buffer*
210 バッファオブジェクトは、vimのバッファを表します。バッファオブジェクトを取得す
211 るはいくつかの方法があります:
212         - vim.current.bufferを介して (|python-current|)
213         - vim.buffersのインデックス化から (|python-buffers|)
214         - ウィンドウの"buffer"属性から (|python-window|)
216 バッファオブジェクトは、そのバッファの完全なファイル名を読み取り専用属性(name)
217 として持っています。バッファオブジェクトは3つのメソッドを持っています(append、
218 mark、range。以下参照)。
220 バッファオブジェクトは、シークエンスオブジェクトとして扱うこともできます。この
221 文脈では、バッファオブジェクトは文字列のリスト(そう、これはmutableです)のよう
222 に振舞います。各要素はバッファの行です。有用なシークエンス操作の全て、つまり、
223 インデックス操作、インデックスによる代入、スライシング、スライスへの代入が期待
224 通りに機能します。バッファのインデックス操作(スライシング)の結果は、文字列(文
225 字列のリスト)であることを注意しておきます。これはひとつの例外的な結果をもたら
226 します - b[:]はbとは異なるのです。特に、"b[:] = None"はバッファの全てを削除す
227 るが、"b = None"は変数bを更新するだけで、バッファには何の影響も与えません。
229 バッファのインデックスは、Pythonでは普通はゼロから始まります。これは、1から始
230 まるvimの行番号と異なります。これは、特にvimの行番号を使うmarks(以下を参照)を
231 扱う際に問題となります。
233 バッファオブジェクトのメソッドは次の通りです:
234         b.append(str)   バッファに行を追加
235         b.append(list)  バッファに一連の行を追加
236                         appendメソッドに文字列のリストを与えるオプションは、
237                         Python組込みのリストオブジェクトの等価なメソッド
238                         とは違うことに注意してください
239         b.mark(name)    名前付きマークの位置を示す(row,col)の組を返す
240                         (これは[]"<> marksでも得られる)
241         b.range(s,e)    与えられたバッファのs行目からe行目(s行とe行も含む
242                         |inclusive|)を示すレンジオブジェクト(|python-range|を
243                         参照)を返す
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")          # 最後に行を追加
257         :py n = len(b)                  # 行数
258         :py (row,col) = b.mark('a')     # 名前付きマーク
259         :py r = b.range(1,5)            # バッファの部分範囲
261 ==============================================================================
262 4. レンジオブジェクト                                    *python-range*
264 レンジオブジェクトは、vimバッファの一部分を表します。レンジオブジェクトを取得
265 するにはいくつかの方法があります:
266         - vim.current.rangeを介して (|python-current|)
267         - バッファのrange()メソッドから (|python-buffer|)
269 レンジオブジェクトの操作は、バッファオブジェクトのそれとほとんど同じです。
270 しかし、全ての操作は範囲内の行に制限されます(もちろん、行の範囲は部分の割当て、
271 行の削除、あるいはrange.append()メソッドによって変更できます)。
273 レンジオブジェクトの属性:
274         r.start         選択範囲でのバッファ内の最初の行。
275         r.end           選択範囲でのバッファ内の最後の行。
277 レンジオブジェクトのメソッド:
278         r.append(str)   その範囲に行を追加する
279         r.append(list)  その範囲にリストで与えられた複数行を追加する。
280                         これはPythonのリストオブジェクトに対する操作とは異な
281                         ることに注意してください。
284 バッファと違い、レンジは"name"属性を持たず、また、mark()、range()メソッドも持
285 ちません。そのかわり、レンジは範囲の最後に行を付け加えるappend()メソッドを持ち
286 ます。
288 ==============================================================================
289 5. ウィンドウオブジェクト                          *python-window*
291 ウィンドウオブジェクトは、vimのウィンドウを表現します。ウィンドウオブジェクト
292 を取得するには、いくつかの方法があります:
293         - vim.current.windowを介して (|python-current|)
294         - vim.windowsのインデックス化から (|python-windows|)
296 ウィンドウオブジェクトは、それらの属性を通してのみ操作できます。これらはメソッ
297 ドを持たず、シークエンスも他のインターフェイスもありません。
299 ウィンドウの属性:
300         buffer (読取り専用)  そのウィンドウに表示されているバッファ
301         cursor (読み書き)   そのウィンドウの現在のカーソルの位置
302                                 これは(row,col)の組で表される
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"とタイプすると、どのディレクトリが検索パスとな
319 るか表示することができる。
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: