1*if_pyth.txt* For Vim version 7.4. Last change: 2015 Nov 10 2 3 4 VIM REFERENCE MANUAL by Paul Moore 5 6 7The Python Interface to Vim *python* *Python* 8 91. Commands |python-commands| 102. The vim module |python-vim| 113. Buffer objects |python-buffer| 124. Range objects |python-range| 135. Window objects |python-window| 146. Tab page objects |python-tabpage| 157. vim.bindeval objects |python-bindeval-objects| 168. pyeval(), py3eval() Vim functions |python-pyeval| 179. Dynamic loading |python-dynamic| 1810. Python 3 |python3| 19 20{Vi does not have any of these commands} 21 22The Python 2.x interface is available only when Vim was compiled with the 23|+python| feature. 24The Python 3 interface is available only when Vim was compiled with the 25|+python3| feature. 26Both can be available at the same time, but read |python-2-and-3|. 27 28============================================================================== 291. Commands *python-commands* 30 31 *:python* *:py* *E263* *E264* *E887* 32:[range]py[thon] {stmt} 33 Execute Python statement {stmt}. A simple check if 34 the `:python` command is working: > 35 :python print "Hello" 36 37:[range]py[thon] << {endmarker} 38{script} 39{endmarker} 40 Execute Python script {script}. 41 Note: This command doesn't work when the Python 42 feature wasn't compiled in. To avoid errors, see 43 |script-here|. 44 45{endmarker} must NOT be preceded by any white space. If {endmarker} is 46omitted from after the "<<", a dot '.' must be used after {script}, like 47for the |:append| and |:insert| commands. 48This form of the |:python| command is mainly useful for including python code 49in Vim scripts. 50 51Example: > 52 function! IcecreamInitialize() 53 python << EOF 54 class StrawberryIcecream: 55 def __call__(self): 56 print 'EAT ME' 57 EOF 58 endfunction 59< 60Note: Python is very sensitive to the indenting. Make sure the "class" line 61and "EOF" do not have any indent. 62 63 *:pydo* 64:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr): 65 {body}" for each line in the [range], with the 66 function arguments being set to the text of each line 67 in turn, without a trailing <EOL>, and the current 68 line number. The function should return a string or 69 None. If a string is returned, it becomes the text of 70 the line in the current turn. The default for [range] 71 is the whole file: "1,$". 72 {not in Vi} 73 74Examples: 75> 76 :pydo return "%s\t%d" % (line[::-1], len(line)) 77 :pydo if line: return "%4d: %s" % (linenr, line) 78< 79 *:pyfile* *:pyf* 80:[range]pyf[ile] {file} 81 Execute the Python script in {file}. The whole 82 argument is used as a single file name. {not in Vi} 83 84Both of these commands do essentially the same thing - they execute a piece of 85Python code, with the "current range" |python-range| set to the given line 86range. 87 88In the case of :python, the code to execute is in the command-line. 89In the case of :pyfile, the code to execute is the contents of the given file. 90 91Python commands cannot be used in the |sandbox|. 92 93To pass arguments you need to set sys.argv[] explicitly. Example: > 94 95 :python import sys 96 :python sys.argv = ["foo", "bar"] 97 :pyfile myscript.py 98 99Here are some examples *python-examples* > 100 101 :python from vim import * 102 :python from string import upper 103 :python current.line = upper(current.line) 104 :python print "Hello" 105 :python str = current.buffer[42] 106 107(Note that changes - like the imports - persist from one command to the next, 108just like in the Python interpreter.) 109 110============================================================================== 1112. The vim module *python-vim* 112 113Python code gets all of its access to vim (with one exception - see 114|python-output| below) via the "vim" module. The vim module implements two 115methods, three constants, and one error object. You need to import the vim 116module before using it: > 117 :python import vim 118 119Overview > 120 :py print "Hello" # displays a message 121 :py vim.command(cmd) # execute an Ex command 122 :py w = vim.windows[n] # gets window "n" 123 :py cw = vim.current.window # gets the current window 124 :py b = vim.buffers[n] # gets buffer "n" 125 :py cb = vim.current.buffer # gets the current buffer 126 :py w.height = lines # sets the window height 127 :py w.cursor = (row, col) # sets the window cursor position 128 :py pos = w.cursor # gets a tuple (row, col) 129 :py name = b.name # gets the buffer file name 130 :py line = b[n] # gets a line from the buffer 131 :py lines = b[n:m] # gets a list of lines 132 :py num = len(b) # gets the number of lines 133 :py b[n] = str # sets a line in the buffer 134 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once 135 :py del b[n] # deletes a line 136 :py del b[n:m] # deletes a number of lines 137 138 139Methods of the "vim" module 140 141vim.command(str) *python-command* 142 Executes the vim (ex-mode) command str. Returns None. 143 Examples: > 144 :py vim.command("set tw=72") 145 :py vim.command("%s/aaa/bbb/g") 146< The following definition executes Normal mode commands: > 147 def normal(str): 148 vim.command("normal "+str) 149 # Note the use of single quotes to delimit a string containing 150 # double quotes 151 normal('"a2dd"aP') 152< *E659* 153 The ":python" command cannot be used recursively with Python 2.2 and 154 older. This only works with Python 2.3 and later: > 155 :py vim.command("python print 'Hello again Python'") 156 157vim.eval(str) *python-eval* 158 Evaluates the expression str using the vim internal expression 159 evaluator (see |expression|). Returns the expression result as: 160 - a string if the Vim expression evaluates to a string or number 161 - a list if the Vim expression evaluates to a Vim list 162 - a dictionary if the Vim expression evaluates to a Vim dictionary 163 Dictionaries and lists are recursively expanded. 164 Examples: > 165 :py text_width = vim.eval("&tw") 166 :py str = vim.eval("12+12") # NB result is a string! Use 167 # string.atoi() to convert to 168 # a number. 169 170 :py tagList = vim.eval('taglist("eval_expr")') 171< The latter will return a python list of python dicts, for instance: 172 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': 173 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] 174 175vim.bindeval(str) *python-bindeval* 176 Like |python-eval|, but returns special objects described in 177 |python-bindeval-objects|. These python objects let you modify (|List| 178 or |Dictionary|) or call (|Funcref|) vim objects. 179 180vim.strwidth(str) *python-strwidth* 181 Like |strwidth()|: returns number of display cells str occupies, tab 182 is counted as one cell. 183 184vim.foreach_rtp(callable) *python-foreach_rtp* 185 Call the given callable for each path in 'runtimepath' until either 186 callable returns something but None, the exception is raised or there 187 are no longer paths. If stopped in case callable returned non-None, 188 vim.foreach_rtp function returns the value returned by callable. 189 190vim.chdir(*args, **kwargs) *python-chdir* 191vim.fchdir(*args, **kwargs) *python-fchdir* 192 Run os.chdir or os.fchdir, then all appropriate vim stuff. 193 Note: you should not use these functions directly, use os.chdir and 194 os.fchdir instead. Behavior of vim.fchdir is undefined in case 195 os.fchdir does not exist. 196 197Error object of the "vim" module 198 199vim.error *python-error* 200 Upon encountering a Vim error, Python raises an exception of type 201 vim.error. 202 Example: > 203 try: 204 vim.command("put a") 205 except vim.error: 206 # nothing in register a 207 208Constants of the "vim" module 209 210 Note that these are not actually constants - you could reassign them. 211 But this is silly, as you would then lose access to the vim objects 212 to which the variables referred. 213 214vim.buffers *python-buffers* 215 A mapping object providing access to the list of vim buffers. The 216 object supports the following operations: > 217 :py b = vim.buffers[i] # Indexing (read-only) 218 :py b in vim.buffers # Membership test 219 :py n = len(vim.buffers) # Number of elements 220 :py for b in vim.buffers: # Iterating over buffer list 221< 222vim.windows *python-windows* 223 A sequence object providing access to the list of vim windows. The 224 object supports the following operations: > 225 :py w = vim.windows[i] # Indexing (read-only) 226 :py w in vim.windows # Membership test 227 :py n = len(vim.windows) # Number of elements 228 :py for w in vim.windows: # Sequential access 229< Note: vim.windows object always accesses current tab page. 230 |python-tabpage|.windows objects are bound to parent |python-tabpage| 231 object and always use windows from that tab page (or throw vim.error 232 in case tab page was deleted). You can keep a reference to both 233 without keeping a reference to vim module object or |python-tabpage|, 234 they will not lose their properties in this case. 235 236vim.tabpages *python-tabpages* 237 A sequence object providing access to the list of vim tab pages. The 238 object supports the following operations: > 239 :py t = vim.tabpages[i] # Indexing (read-only) 240 :py t in vim.tabpages # Membership test 241 :py n = len(vim.tabpages) # Number of elements 242 :py for t in vim.tabpages: # Sequential access 243< 244vim.current *python-current* 245 An object providing access (via specific attributes) to various 246 "current" objects available in vim: 247 vim.current.line The current line (RW) String 248 vim.current.buffer The current buffer (RW) Buffer 249 vim.current.window The current window (RW) Window 250 vim.current.tabpage The current tab page (RW) TabPage 251 vim.current.range The current line range (RO) Range 252 253 The last case deserves a little explanation. When the :python or 254 :pyfile command specifies a range, this range of lines becomes the 255 "current range". A range is a bit like a buffer, but with all access 256 restricted to a subset of lines. See |python-range| for more details. 257 258 Note: When assigning to vim.current.{buffer,window,tabpage} it expects 259 valid |python-buffer|, |python-window| or |python-tabpage| objects 260 respectively. Assigning triggers normal (with |autocommand|s) 261 switching to given buffer, window or tab page. It is the only way to 262 switch UI objects in python: you can't assign to 263 |python-tabpage|.window attribute. To switch without triggering 264 autocommands use > 265 py << EOF 266 saved_eventignore = vim.options['eventignore'] 267 vim.options['eventignore'] = 'all' 268 try: 269 vim.current.buffer = vim.buffers[2] # Switch to buffer 2 270 finally: 271 vim.options['eventignore'] = saved_eventignore 272 EOF 273< 274vim.vars *python-vars* 275vim.vvars *python-vvars* 276 Dictionary-like objects holding dictionaries with global (|g:|) and 277 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`, 278 but faster. 279 280vim.options *python-options* 281 Object partly supporting mapping protocol (supports setting and 282 getting items) providing a read-write access to global options. 283 Note: unlike |:set| this provides access only to global options. You 284 cannot use this object to obtain or set local options' values or 285 access local-only options in any fashion. Raises KeyError if no global 286 option with such name exists (i.e. does not raise KeyError for 287 |global-local| options and global only options, but does for window- 288 and buffer-local ones). Use |python-buffer| objects to access to 289 buffer-local options and |python-window| objects to access to 290 window-local options. 291 292 Type of this object is available via "Options" attribute of vim 293 module. 294 295Output from Python *python-output* 296 Vim displays all Python code output in the Vim message area. Normal 297 output appears as information messages, and error output appears as 298 error messages. 299 300 In implementation terms, this means that all output to sys.stdout 301 (including the output from print statements) appears as information 302 messages, and all output to sys.stderr (including error tracebacks) 303 appears as error messages. 304 305 *python-input* 306 Input (via sys.stdin, including input() and raw_input()) is not 307 supported, and may cause the program to crash. This should probably be 308 fixed. 309 310 *python2-directory* *python3-directory* *pythonx-directory* 311Python 'runtimepath' handling *python-special-path* 312 313In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for 314the list of paths found in 'runtimepath': with this directory in sys.path and 315vim.path_hooks in sys.path_hooks python will try to load module from 316{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for 317each {rtp} found in 'runtimepath'. 318 319Implementation is similar to the following, but written in C: > 320 321 from imp import find_module, load_module 322 import vim 323 import sys 324 325 class VimModuleLoader(object): 326 def __init__(self, module): 327 self.module = module 328 329 def load_module(self, fullname, path=None): 330 return self.module 331 332 def _find_module(fullname, oldtail, path): 333 idx = oldtail.find('.') 334 if idx > 0: 335 name = oldtail[:idx] 336 tail = oldtail[idx+1:] 337 fmr = find_module(name, path) 338 module = load_module(fullname[:-len(oldtail)] + name, *fmr) 339 return _find_module(fullname, tail, module.__path__) 340 else: 341 fmr = find_module(fullname, path) 342 return load_module(fullname, *fmr) 343 344 # It uses vim module itself in place of VimPathFinder class: it does not 345 # matter for python which object has find_module function attached to as 346 # an attribute. 347 class VimPathFinder(object): 348 @classmethod 349 def find_module(cls, fullname, path=None): 350 try: 351 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths())) 352 except ImportError: 353 return None 354 355 @classmethod 356 def load_module(cls, fullname, path=None): 357 return _find_module(fullname, fullname, path or vim._get_paths()) 358 359 def hook(path): 360 if path == vim.VIM_SPECIAL_PATH: 361 return VimPathFinder 362 else: 363 raise ImportError 364 365 sys.path_hooks.append(hook) 366 367vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH* 368 String constant used in conjunction with vim path hook. If path hook 369 installed by vim is requested to handle anything but path equal to 370 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other 371 case it uses special loader. 372 373 Note: you must not use value of this constant directly, always use 374 vim.VIM_SPECIAL_PATH object. 375 376vim.find_module(...) *python-find_module* 377vim.path_hook(path) *python-path_hook* 378 Methods or objects used to implement path loading as described above. 379 You should not be using any of these directly except for vim.path_hook 380 in case you need to do something with sys.meta_path. It is not 381 guaranteed that any of the objects will exist in the future vim 382 versions. 383 384vim._get_paths *python-_get_paths* 385 Methods returning a list of paths which will be searched for by path 386 hook. You should not rely on this method being present in future 387 versions, but can use it for debugging. 388 389 It returns a list of {rtp}/python2 (or {rtp}/python3) and 390 {rtp}/pythonx directories for each {rtp} in 'runtimepath'. 391 392============================================================================== 3933. Buffer objects *python-buffer* 394 395Buffer objects represent vim buffers. You can obtain them in a number of ways: 396 - via vim.current.buffer (|python-current|) 397 - from indexing vim.buffers (|python-buffers|) 398 - from the "buffer" attribute of a window (|python-window|) 399 400Buffer objects have two read-only attributes - name - the full file name for 401the buffer, and number - the buffer number. They also have three methods 402(append, mark, and range; see below). 403 404You can also treat buffer objects as sequence objects. In this context, they 405act as if they were lists (yes, they are mutable) of strings, with each 406element being a line of the buffer. All of the usual sequence operations, 407including indexing, index assignment, slicing and slice assignment, work as 408you would expect. Note that the result of indexing (slicing) a buffer is a 409string (list of strings). This has one unusual consequence - b[:] is different 410from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas 411"b = None" merely updates the variable b, with no effect on the buffer. 412 413Buffer indexes start at zero, as is normal in Python. This differs from vim 414line numbers, which start from 1. This is particularly relevant when dealing 415with marks (see below) which use vim line numbers. 416 417The buffer object attributes are: 418 b.vars Dictionary-like object used to access 419 |buffer-variable|s. 420 b.options Mapping object (supports item getting, setting and 421 deleting) that provides access to buffer-local options 422 and buffer-local values of |global-local| options. Use 423 |python-window|.options if option is window-local, 424 this object will raise KeyError. If option is 425 |global-local| and local value is missing getting it 426 will return None. 427 b.name String, RW. Contains buffer name (full path). 428 Note: when assigning to b.name |BufFilePre| and 429 |BufFilePost| autocommands are launched. 430 b.number Buffer number. Can be used as |python-buffers| key. 431 Read-only. 432 b.valid True or False. Buffer object becomes invalid when 433 corresponding buffer is wiped out. 434 435The buffer object methods are: 436 b.append(str) Append a line to the buffer 437 b.append(str, nr) Idem, below line "nr" 438 b.append(list) Append a list of lines to the buffer 439 Note that the option of supplying a list of strings to 440 the append method differs from the equivalent method 441 for Python's built-in list objects. 442 b.append(list, nr) Idem, below line "nr" 443 b.mark(name) Return a tuple (row,col) representing the position 444 of the named mark (can also get the []"<> marks) 445 b.range(s,e) Return a range object (see |python-range|) which 446 represents the part of the given buffer between line 447 numbers s and e |inclusive|. 448 449Note that when adding a line it must not contain a line break character '\n'. 450A trailing '\n' is allowed and ignored, so that you can do: > 451 :py b.append(f.readlines()) 452 453Buffer object type is available using "Buffer" attribute of vim module. 454 455Examples (assume b is the current buffer) > 456 :py print b.name # write the buffer file name 457 :py b[0] = "hello!!!" # replace the top line 458 :py b[:] = None # delete the whole buffer 459 :py del b[:] # delete the whole buffer 460 :py b[0:0] = [ "a line" ] # add a line at the top 461 :py del b[2] # delete a line (the third) 462 :py b.append("bottom") # add a line at the bottom 463 :py n = len(b) # number of lines 464 :py (row,col) = b.mark('a') # named mark 465 :py r = b.range(1,5) # a sub-range of the buffer 466 :py b.vars["foo"] = "bar" # assign b:foo variable 467 :py b.options["ff"] = "dos" # set fileformat 468 :py del b.options["ar"] # same as :set autoread< 469 470============================================================================== 4714. Range objects *python-range* 472 473Range objects represent a part of a vim buffer. You can obtain them in a 474number of ways: 475 - via vim.current.range (|python-current|) 476 - from a buffer's range() method (|python-buffer|) 477 478A range object is almost identical in operation to a buffer object. However, 479all operations are restricted to the lines within the range (this line range 480can, of course, change as a result of slice assignments, line deletions, or 481the range.append() method). 482 483The range object attributes are: 484 r.start Index of first line into the buffer 485 r.end Index of last line into the buffer 486 487The range object methods are: 488 r.append(str) Append a line to the range 489 r.append(str, nr) Idem, after line "nr" 490 r.append(list) Append a list of lines to the range 491 Note that the option of supplying a list of strings to 492 the append method differs from the equivalent method 493 for Python's built-in list objects. 494 r.append(list, nr) Idem, after line "nr" 495 496Range object type is available using "Range" attribute of vim module. 497 498Example (assume r is the current range): 499 # Send all lines in a range to the default printer 500 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1)) 501 502============================================================================== 5035. Window objects *python-window* 504 505Window objects represent vim windows. You can obtain them in a number of ways: 506 - via vim.current.window (|python-current|) 507 - from indexing vim.windows (|python-windows|) 508 - from indexing "windows" attribute of a tab page (|python-tabpage|) 509 - from the "window" attribute of a tab page (|python-tabpage|) 510 511You can manipulate window objects only through their attributes. They have no 512methods, and no sequence or other interface. 513 514Window attributes are: 515 buffer (read-only) The buffer displayed in this window 516 cursor (read-write) The current cursor position in the window 517 This is a tuple, (row,col). 518 height (read-write) The window height, in rows 519 width (read-write) The window width, in columns 520 vars (read-only) The window |w:| variables. Attribute is 521 unassignable, but you can change window 522 variables this way 523 options (read-only) The window-local options. Attribute is 524 unassignable, but you can change window 525 options this way. Provides access only to 526 window-local options, for buffer-local use 527 |python-buffer| and for global ones use 528 |python-options|. If option is |global-local| 529 and local value is missing getting it will 530 return None. 531 number (read-only) Window number. The first window has number 1. 532 This is zero in case it cannot be determined 533 (e.g. when the window object belongs to other 534 tab page). 535 row, col (read-only) On-screen window position in display cells. 536 First position is zero. 537 tabpage (read-only) Window tab page. 538 valid (read-write) True or False. Window object becomes invalid 539 when corresponding window is closed. 540 541The height attribute is writable only if the screen is split horizontally. 542The width attribute is writable only if the screen is split vertically. 543 544Window object type is available using "Window" attribute of vim module. 545 546============================================================================== 5476. Tab page objects *python-tabpage* 548 549Tab page objects represent vim tab pages. You can obtain them in a number of 550ways: 551 - via vim.current.tabpage (|python-current|) 552 - from indexing vim.tabpages (|python-tabpages|) 553 554You can use this object to access tab page windows. They have no methods and 555no sequence or other interfaces. 556 557Tab page attributes are: 558 number The tab page number like the one returned by 559 |tabpagenr()|. 560 windows Like |python-windows|, but for current tab page. 561 vars The tab page |t:| variables. 562 window Current tabpage window. 563 valid True or False. Tab page object becomes invalid when 564 corresponding tab page is closed. 565 566TabPage object type is available using "TabPage" attribute of vim module. 567 568============================================================================== 5697. vim.bindeval objects *python-bindeval-objects* 570 571vim.Dictionary object *python-Dictionary* 572 Dictionary-like object providing access to vim |Dictionary| type. 573 Attributes: 574 Attribute Description ~ 575 locked One of *python-.locked* 576 Value Description ~ 577 zero Variable is not locked 578 vim.VAR_LOCKED Variable is locked, but can be unlocked 579 vim.VAR_FIXED Variable is locked and can't be unlocked 580 Read-write. You can unlock locked variable by assigning 581 `True` or `False` to this attribute. No recursive locking 582 is supported. 583 scope One of 584 Value Description ~ 585 zero Dictionary is not a scope one 586 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary 587 vim.VAR_SCOPE Other scope dictionary, 588 see |internal-variables| 589 Methods (note: methods do not support keyword arguments): 590 Method Description ~ 591 keys() Returns a list with dictionary keys. 592 values() Returns a list with dictionary values. 593 items() Returns a list of 2-tuples with dictionary contents. 594 update(iterable), update(dictionary), update(**kwargs) 595 Adds keys to dictionary. 596 get(key[, default=None]) 597 Obtain key from dictionary, returning the default if it is 598 not present. 599 pop(key[, default]) 600 Remove specified key from dictionary and return 601 corresponding value. If key is not found and default is 602 given returns the default, otherwise raises KeyError. 603 popitem() 604 Remove random key from dictionary and return (key, value) 605 pair. 606 has_key(key) 607 Check whether dictionary contains specified key, similar 608 to `key in dict`. 609 610 __new__(), __new__(iterable), __new__(dictionary), __new__(update) 611 You can use `vim.Dictionary()` to create new vim 612 dictionaries. `d=vim.Dictionary(arg)` is the same as 613 `d=vim.bindeval('{}');d.update(arg)`. Without arguments 614 constructs empty dictionary. 615 616 Examples: > 617 d = vim.Dictionary(food="bar") # Constructor 618 d['a'] = 'b' # Item assignment 619 print d['a'] # getting item 620 d.update({'c': 'd'}) # .update(dictionary) 621 d.update(e='f') # .update(**kwargs) 622 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable) 623 for key in d.keys(): # .keys() 624 for val in d.values(): # .values() 625 for key, val in d.items(): # .items() 626 print isinstance(d, vim.Dictionary) # True 627 for key in d: # Iteration over keys 628 class Dict(vim.Dictionary): # Subclassing 629< 630 Note: when iterating over keys you should not modify dictionary. 631 632vim.List object *python-List* 633 Sequence-like object providing access to vim |List| type. 634 Supports `.locked` attribute, see |python-.locked|. Also supports the 635 following methods: 636 Method Description ~ 637 extend(item) Add items to the list. 638 639 __new__(), __new__(iterable) 640 You can use `vim.List()` to create new vim lists. 641 `l=vim.List(iterable)` is the same as 642 `l=vim.bindeval('[]');l.extend(iterable)`. Without 643 arguments constructs empty list. 644 Examples: > 645 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c'] 646 l.extend(['abc', 'def']) # .extend() method 647 print l[1:] # slicing 648 l[:0] = ['ghi', 'jkl'] # slice assignment 649 print l[0] # getting item 650 l[0] = 'mno' # assignment 651 for i in l: # iteration 652 print isinstance(l, vim.List) # True 653 class List(vim.List): # Subclassing 654 655vim.Function object *python-Function* 656 Function-like object, acting like vim |Funcref| object. Supports `.name` 657 attribute and is callable. Accepts special keyword argument `self`, see 658 |Dictionary-function|. You can also use `vim.Function(name)` constructor, 659 it is the same as `vim.bindeval('function(%s)'%json.dumps(name))`. 660 661 Examples: > 662 f = vim.Function('tr') # Constructor 663 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b') 664 vim.command(''' 665 function DictFun() dict 666 return self 667 endfunction 668 ''') 669 f = vim.bindeval('function("DictFun")') 670 print f(self={}) # Like call('DictFun', [], {}) 671 print isinstance(f, vim.Function) # True 672 673============================================================================== 6748. pyeval() and py3eval() Vim functions *python-pyeval* 675 676To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| 677functions to evaluate Python expressions and pass their values to VimL. 678 679============================================================================== 6809. Dynamic loading *python-dynamic* 681 682On MS-Windows and Unix the Python library can be loaded dynamically. The 683|:version| output then includes |+python/dyn| or |+python3/dyn|. 684 685This means that Vim will search for the Python DLL or shared library file only 686when needed. When you don't use the Python interface you don't need it, thus 687you can use Vim without this file. 688 689On MS-Windows to use the Python interface the Python DLL must be in your search 690path. In a console window type "path" to see what directories are used. 691 692The name of the DLL must match the Python version Vim was compiled with. 693Currently the name is "python24.dll". That is for Python 2.4. To know for 694sure edit "gvim.exe" and search for "python\d*.dll\c". 695 696On Unix the 'pythondll' or 'pythonthreedll' option can be used to specify the 697Python shared library file instead of DYNAMIC_PYTHON_DLL or 698DYNAMIC_PYTHON3_DLL file what were specified at compile time. The version of 699the shared library must match the Python 2.x or Python 3 version Vim was 700compiled with. 701 702============================================================================== 70310. Python 3 *python3* 704 705 *:py3* *:python3* 706The `:py3` and `:python3` commands work similar to `:python`. A simple check 707if the `:py3` command is working: > 708 :py3 print("Hello") 709< *:py3file* 710The `:py3file` command works similar to `:pyfile`. 711 *:py3do* *E863* 712The `:py3do` command works similar to `:pydo`. 713 714 715Vim can be built in four ways (:version output): 7161. No Python support (-python, -python3) 7172. Python 2 support only (+python or +python/dyn, -python3) 7183. Python 3 support only (-python, +python3 or +python3/dyn) 7194. Python 2 and 3 support (+python/dyn, +python3/dyn) 720 721Some more details on the special case 4: *python-2-and-3* 722 723When Python 2 and Python 3 are both supported they must be loaded dynamically. 724 725When doing this on Linux/Unix systems and importing global symbols, this leads 726to a crash when the second Python version is used. So either global symbols 727are loaded but only one Python version is activated, or no global symbols are 728loaded. The latter makes Python's "import" fail on libraries that expect the 729symbols to be provided by Vim. 730 *E836* *E837* 731Vim's configuration script makes a guess for all libraries based on one 732standard Python library (termios). If importing this library succeeds for 733both Python versions, then both will be made available in Vim at the same 734time. If not, only the version first used in a session will be enabled. 735When trying to use the other one you will get the E836 or E837 error message. 736 737Here Vim's behavior depends on the system in which it was configured. In a 738system where both versions of Python were configured with --enable-shared, 739both versions of Python will be activated at the same time. There will still 740be problems with other third party libraries that were not linked to 741libPython. 742 743To work around such problems there are these options: 7441. The problematic library is recompiled to link to the according 745 libpython.so. 7462. Vim is recompiled for only one Python version. 7473. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This 748 may crash Vim though. 749 750 *E880* 751Raising SystemExit exception in python isn't endorsed way to quit vim, use: > 752 :py vim.command("qall!") 753< 754 755 *has-python* 756You can test what Python version is available with: > 757 if has('python') 758 echo 'there is Python 2.x' 759 elseif has('python3') 760 echo 'there is Python 3.x' 761 endif 762 763Note however, that when Python 2 and 3 are both available and loaded 764dynamically, these has() calls will try to load them. If only one can be 765loaded at a time, just checking if Python 2 or 3 are available will prevent 766the other one from being available. 767 768============================================================================== 769 vim:tw=78:ts=8:ft=help:norl: 770