1*if_pyth.txt* For Vim version 8.2. Last change: 2021 Nov 12 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| 1911. Python X |python_x| 2012. Building with Python support |python-building| 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] << [trim] [{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 45If [endmarker] is omitted from after the "<<", a dot '.' must be used after 46{script}, like for the |:append| and |:insert| commands. Refer to 47|:let-heredoc| for more information. 48 49This form of the |:python| command is mainly useful for including python code 50in Vim scripts. 51 52Example: > 53 function! IcecreamInitialize() 54 python << EOF 55 class StrawberryIcecream: 56 def __call__(self): 57 print 'EAT ME' 58 EOF 59 endfunction 60 61To see what version of Python you have: > 62 :python print(sys.version) 63 64There is no need to import sys, it's done by default. 65 66 *python-environment* 67Environment variables set in Vim are not always available in Python. This 68depends on how Vim and Python were build. Also see 69https://docs.python.org/3/library/os.html#os.environ 70 71Note: Python is very sensitive to the indenting. Make sure the "class" line 72and "EOF" do not have any indent. 73 74 *:pydo* 75:[range]pydo {body} Execute Python function "def _vim_pydo(line, linenr): 76 {body}" for each line in the [range], with the 77 function arguments being set to the text of each line 78 in turn, without a trailing <EOL>, and the current 79 line number. The function should return a string or 80 None. If a string is returned, it becomes the text of 81 the line in the current turn. The default for [range] 82 is the whole file: "1,$". 83 84Examples: 85> 86 :pydo return "%s\t%d" % (line[::-1], len(line)) 87 :pydo if line: return "%4d: %s" % (linenr, line) 88< 89One can use `:pydo` in possible conjunction with `:py` to filter a range using 90python. For example: > 91 92 :py3 << EOF 93 needle = vim.eval('@a') 94 replacement = vim.eval('@b') 95 96 def py_vim_string_replace(str): 97 return str.replace(needle, replacement) 98 EOF 99 :'<,'>py3do return py_vim_string_replace(line) 100< 101 *:pyfile* *:pyf* 102:[range]pyf[ile] {file} 103 Execute the Python script in {file}. The whole 104 argument is used as a single file name. 105 106Both of these commands do essentially the same thing - they execute a piece of 107Python code, with the "current range" |python-range| set to the given line 108range. 109 110In the case of :python, the code to execute is in the command-line. 111In the case of :pyfile, the code to execute is the contents of the given file. 112 113Python commands cannot be used in the |sandbox|. 114 115To pass arguments you need to set sys.argv[] explicitly. Example: > 116 117 :python sys.argv = ["foo", "bar"] 118 :pyfile myscript.py 119 120Here are some examples *python-examples* > 121 122 :python from vim import * 123 :python from string import upper 124 :python current.line = upper(current.line) 125 :python print "Hello" 126 :python str = current.buffer[42] 127 128(Note that changes - like the imports - persist from one command to the next, 129just like in the Python interpreter.) 130 131============================================================================== 1322. The vim module *python-vim* 133 134Python code gets all of its access to vim (with one exception - see 135|python-output| below) via the "vim" module. The vim module implements two 136methods, three constants, and one error object. You need to import the vim 137module before using it: > 138 :python import vim 139 140Overview > 141 :py print "Hello" # displays a message 142 :py vim.command(cmd) # execute an Ex command 143 :py w = vim.windows[n] # gets window "n" 144 :py cw = vim.current.window # gets the current window 145 :py b = vim.buffers[n] # gets buffer "n" 146 :py cb = vim.current.buffer # gets the current buffer 147 :py w.height = lines # sets the window height 148 :py w.cursor = (row, col) # sets the window cursor position 149 :py pos = w.cursor # gets a tuple (row, col) 150 :py name = b.name # gets the buffer file name 151 :py line = b[n] # gets a line from the buffer 152 :py lines = b[n:m] # gets a list of lines 153 :py num = len(b) # gets the number of lines 154 :py b[n] = str # sets a line in the buffer 155 :py b[n:m] = [str1, str2, str3] # sets a number of lines at once 156 :py del b[n] # deletes a line 157 :py del b[n:m] # deletes a number of lines 158 159 160Methods of the "vim" module 161 162vim.command(str) *python-command* 163 Executes the vim (ex-mode) command str. Returns None. 164 Examples: > 165 :py vim.command("set tw=72") 166 :py vim.command("%s/aaa/bbb/g") 167< The following definition executes Normal mode commands: > 168 def normal(str): 169 vim.command("normal "+str) 170 # Note the use of single quotes to delimit a string containing 171 # double quotes 172 normal('"a2dd"aP') 173< *E659* 174 The ":python" command cannot be used recursively with Python 2.2 and 175 older. This only works with Python 2.3 and later: > 176 :py vim.command("python print 'Hello again Python'") 177 178vim.eval(str) *python-eval* 179 Evaluates the expression str using the vim internal expression 180 evaluator (see |expression|). Returns the expression result as: 181 - a string if the Vim expression evaluates to a string or number 182 - a list if the Vim expression evaluates to a Vim list 183 - a dictionary if the Vim expression evaluates to a Vim dictionary 184 Dictionaries and lists are recursively expanded. 185 Examples: > 186 :" value of the 'textwidth' option 187 :py text_width = vim.eval("&tw") 188 : 189 :" contents of the 'a' register 190 :py a_reg = vim.eval("@a") 191 : 192 :" Result is a string! Use string.atoi() to convert to a number. 193 :py str = vim.eval("12+12") 194 : 195 :py tagList = vim.eval('taglist("eval_expr")') 196< The latter will return a python list of python dicts, for instance: 197 [{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~ 198 'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}] ~ 199 200vim.bindeval(str) *python-bindeval* 201 Like |python-eval|, but returns special objects described in 202 |python-bindeval-objects|. These python objects let you modify (|List| 203 or |Dictionary|) or call (|Funcref|) vim objects. 204 205vim.strwidth(str) *python-strwidth* 206 Like |strwidth()|: returns number of display cells str occupies, tab 207 is counted as one cell. 208 209vim.foreach_rtp(callable) *python-foreach_rtp* 210 Call the given callable for each path in 'runtimepath' until either 211 callable returns something but None, the exception is raised or there 212 are no longer paths. If stopped in case callable returned non-None, 213 vim.foreach_rtp function returns the value returned by callable. 214 215vim.chdir(*args, **kwargs) *python-chdir* 216vim.fchdir(*args, **kwargs) *python-fchdir* 217 Run os.chdir or os.fchdir, then all appropriate vim stuff. 218 Note: you should not use these functions directly, use os.chdir and 219 os.fchdir instead. Behavior of vim.fchdir is undefined in case 220 os.fchdir does not exist. 221 222Error object of the "vim" module 223 224vim.error *python-error* 225 Upon encountering a Vim error, Python raises an exception of type 226 vim.error. 227 Example: > 228 try: 229 vim.command("put a") 230 except vim.error: 231 # nothing in register a 232 233Constants of the "vim" module 234 235 Note that these are not actually constants - you could reassign them. 236 But this is silly, as you would then lose access to the vim objects 237 to which the variables referred. 238 239vim.buffers *python-buffers* 240 A mapping object providing access to the list of vim buffers. The 241 object supports the following operations: > 242 :py b = vim.buffers[i] # Indexing (read-only) 243 :py b in vim.buffers # Membership test 244 :py n = len(vim.buffers) # Number of elements 245 :py for b in vim.buffers: # Iterating over buffer list 246< 247vim.windows *python-windows* 248 A sequence object providing access to the list of vim windows. The 249 object supports the following operations: > 250 :py w = vim.windows[i] # Indexing (read-only) 251 :py w in vim.windows # Membership test 252 :py n = len(vim.windows) # Number of elements 253 :py for w in vim.windows: # Sequential access 254< Note: vim.windows object always accesses current tab page. 255 |python-tabpage|.windows objects are bound to parent |python-tabpage| 256 object and always use windows from that tab page (or throw vim.error 257 in case tab page was deleted). You can keep a reference to both 258 without keeping a reference to vim module object or |python-tabpage|, 259 they will not lose their properties in this case. 260 261vim.tabpages *python-tabpages* 262 A sequence object providing access to the list of vim tab pages. The 263 object supports the following operations: > 264 :py t = vim.tabpages[i] # Indexing (read-only) 265 :py t in vim.tabpages # Membership test 266 :py n = len(vim.tabpages) # Number of elements 267 :py for t in vim.tabpages: # Sequential access 268< 269vim.current *python-current* 270 An object providing access (via specific attributes) to various 271 "current" objects available in vim: 272 vim.current.line The current line (RW) String 273 vim.current.buffer The current buffer (RW) Buffer 274 vim.current.window The current window (RW) Window 275 vim.current.tabpage The current tab page (RW) TabPage 276 vim.current.range The current line range (RO) Range 277 278 The last case deserves a little explanation. When the :python or 279 :pyfile command specifies a range, this range of lines becomes the 280 "current range". A range is a bit like a buffer, but with all access 281 restricted to a subset of lines. See |python-range| for more details. 282 283 Note: When assigning to vim.current.{buffer,window,tabpage} it expects 284 valid |python-buffer|, |python-window| or |python-tabpage| objects 285 respectively. Assigning triggers normal (with |autocommand|s) 286 switching to given buffer, window or tab page. It is the only way to 287 switch UI objects in python: you can't assign to 288 |python-tabpage|.window attribute. To switch without triggering 289 autocommands use > 290 py << EOF 291 saved_eventignore = vim.options['eventignore'] 292 vim.options['eventignore'] = 'all' 293 try: 294 vim.current.buffer = vim.buffers[2] # Switch to buffer 2 295 finally: 296 vim.options['eventignore'] = saved_eventignore 297 EOF 298< 299vim.vars *python-vars* 300vim.vvars *python-vvars* 301 Dictionary-like objects holding dictionaries with global (|g:|) and 302 vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`, 303 but faster. 304 305vim.options *python-options* 306 Object partly supporting mapping protocol (supports setting and 307 getting items) providing a read-write access to global options. 308 Note: unlike |:set| this provides access only to global options. You 309 cannot use this object to obtain or set local options' values or 310 access local-only options in any fashion. Raises KeyError if no global 311 option with such name exists (i.e. does not raise KeyError for 312 |global-local| options and global only options, but does for window- 313 and buffer-local ones). Use |python-buffer| objects to access to 314 buffer-local options and |python-window| objects to access to 315 window-local options. 316 317 Type of this object is available via "Options" attribute of vim 318 module. 319 320Output from Python *python-output* 321 Vim displays all Python code output in the Vim message area. Normal 322 output appears as information messages, and error output appears as 323 error messages. 324 325 In implementation terms, this means that all output to sys.stdout 326 (including the output from print statements) appears as information 327 messages, and all output to sys.stderr (including error tracebacks) 328 appears as error messages. 329 330 *python-input* 331 Input (via sys.stdin, including input() and raw_input()) is not 332 supported, and may cause the program to crash. This should probably be 333 fixed. 334 335 *python2-directory* *python3-directory* *pythonx-directory* 336Python 'runtimepath' handling *python-special-path* 337 338In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for 339the list of paths found in 'runtimepath': with this directory in sys.path and 340vim.path_hooks in sys.path_hooks python will try to load module from 341{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for 342each {rtp} found in 'runtimepath'. 343 344Implementation is similar to the following, but written in C: > 345 346 from imp import find_module, load_module 347 import vim 348 import sys 349 350 class VimModuleLoader(object): 351 def __init__(self, module): 352 self.module = module 353 354 def load_module(self, fullname, path=None): 355 return self.module 356 357 def _find_module(fullname, oldtail, path): 358 idx = oldtail.find('.') 359 if idx > 0: 360 name = oldtail[:idx] 361 tail = oldtail[idx+1:] 362 fmr = find_module(name, path) 363 module = load_module(fullname[:-len(oldtail)] + name, *fmr) 364 return _find_module(fullname, tail, module.__path__) 365 else: 366 fmr = find_module(fullname, path) 367 return load_module(fullname, *fmr) 368 369 # It uses vim module itself in place of VimPathFinder class: it does not 370 # matter for python which object has find_module function attached to as 371 # an attribute. 372 class VimPathFinder(object): 373 @classmethod 374 def find_module(cls, fullname, path=None): 375 try: 376 return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths())) 377 except ImportError: 378 return None 379 380 @classmethod 381 def load_module(cls, fullname, path=None): 382 return _find_module(fullname, fullname, path or vim._get_paths()) 383 384 def hook(path): 385 if path == vim.VIM_SPECIAL_PATH: 386 return VimPathFinder 387 else: 388 raise ImportError 389 390 sys.path_hooks.append(hook) 391 392vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH* 393 String constant used in conjunction with vim path hook. If path hook 394 installed by vim is requested to handle anything but path equal to 395 vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other 396 case it uses special loader. 397 398 Note: you must not use value of this constant directly, always use 399 vim.VIM_SPECIAL_PATH object. 400 401vim.find_module(...) *python-find_module* 402vim.path_hook(path) *python-path_hook* 403 Methods or objects used to implement path loading as described above. 404 You should not be using any of these directly except for vim.path_hook 405 in case you need to do something with sys.meta_path. It is not 406 guaranteed that any of the objects will exist in the future vim 407 versions. 408 409vim._get_paths *python-_get_paths* 410 Methods returning a list of paths which will be searched for by path 411 hook. You should not rely on this method being present in future 412 versions, but can use it for debugging. 413 414 It returns a list of {rtp}/python2 (or {rtp}/python3) and 415 {rtp}/pythonx directories for each {rtp} in 'runtimepath'. 416 417============================================================================== 4183. Buffer objects *python-buffer* 419 420Buffer objects represent vim buffers. You can obtain them in a number of ways: 421 - via vim.current.buffer (|python-current|) 422 - from indexing vim.buffers (|python-buffers|) 423 - from the "buffer" attribute of a window (|python-window|) 424 425Buffer objects have two read-only attributes - name - the full file name for 426the buffer, and number - the buffer number. They also have three methods 427(append, mark, and range; see below). 428 429You can also treat buffer objects as sequence objects. In this context, they 430act as if they were lists (yes, they are mutable) of strings, with each 431element being a line of the buffer. All of the usual sequence operations, 432including indexing, index assignment, slicing and slice assignment, work as 433you would expect. Note that the result of indexing (slicing) a buffer is a 434string (list of strings). This has one unusual consequence - b[:] is different 435from b. In particular, "b[:] = None" deletes the whole of the buffer, whereas 436"b = None" merely updates the variable b, with no effect on the buffer. 437 438Buffer indexes start at zero, as is normal in Python. This differs from vim 439line numbers, which start from 1. This is particularly relevant when dealing 440with marks (see below) which use vim line numbers. 441 442The buffer object attributes are: 443 b.vars Dictionary-like object used to access 444 |buffer-variable|s. 445 b.options Mapping object (supports item getting, setting and 446 deleting) that provides access to buffer-local options 447 and buffer-local values of |global-local| options. Use 448 |python-window|.options if option is window-local, 449 this object will raise KeyError. If option is 450 |global-local| and local value is missing getting it 451 will return None. 452 b.name String, RW. Contains buffer name (full path). 453 Note: when assigning to b.name |BufFilePre| and 454 |BufFilePost| autocommands are launched. 455 b.number Buffer number. Can be used as |python-buffers| key. 456 Read-only. 457 b.valid True or False. Buffer object becomes invalid when 458 corresponding buffer is wiped out. 459 460The buffer object methods are: 461 b.append(str) Append a line to the buffer 462 b.append(str, nr) Idem, below line "nr" 463 b.append(list) Append a list of lines to the buffer 464 Note that the option of supplying a list of strings to 465 the append method differs from the equivalent method 466 for Python's built-in list objects. 467 b.append(list, nr) Idem, below line "nr" 468 b.mark(name) Return a tuple (row,col) representing the position 469 of the named mark (can also get the []"<> marks) 470 b.range(s,e) Return a range object (see |python-range|) which 471 represents the part of the given buffer between line 472 numbers s and e |inclusive|. 473 474Note that when adding a line it must not contain a line break character '\n'. 475A trailing '\n' is allowed and ignored, so that you can do: > 476 :py b.append(f.readlines()) 477 478Buffer object type is available using "Buffer" attribute of vim module. 479 480Examples (assume b is the current buffer) > 481 :py print b.name # write the buffer file name 482 :py b[0] = "hello!!!" # replace the top line 483 :py b[:] = None # delete the whole buffer 484 :py del b[:] # delete the whole buffer 485 :py b[0:0] = [ "a line" ] # add a line at the top 486 :py del b[2] # delete a line (the third) 487 :py b.append("bottom") # add a line at the bottom 488 :py n = len(b) # number of lines 489 :py (row,col) = b.mark('a') # named mark 490 :py r = b.range(1,5) # a sub-range of the buffer 491 :py b.vars["foo"] = "bar" # assign b:foo variable 492 :py b.options["ff"] = "dos" # set fileformat 493 :py del b.options["ar"] # same as :set autoread< 494 495============================================================================== 4964. Range objects *python-range* 497 498Range objects represent a part of a vim buffer. You can obtain them in a 499number of ways: 500 - via vim.current.range (|python-current|) 501 - from a buffer's range() method (|python-buffer|) 502 503A range object is almost identical in operation to a buffer object. However, 504all operations are restricted to the lines within the range (this line range 505can, of course, change as a result of slice assignments, line deletions, or 506the range.append() method). 507 508The range object attributes are: 509 r.start Index of first line into the buffer 510 r.end Index of last line into the buffer 511 512The range object methods are: 513 r.append(str) Append a line to the range 514 r.append(str, nr) Idem, after line "nr" 515 r.append(list) Append a list of lines to the range 516 Note that the option of supplying a list of strings to 517 the append method differs from the equivalent method 518 for Python's built-in list objects. 519 r.append(list, nr) Idem, after line "nr" 520 521Range object type is available using "Range" attribute of vim module. 522 523Example (assume r is the current range): 524 # Send all lines in a range to the default printer 525 vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1)) 526 527============================================================================== 5285. Window objects *python-window* 529 530Window objects represent vim windows. You can obtain them in a number of ways: 531 - via vim.current.window (|python-current|) 532 - from indexing vim.windows (|python-windows|) 533 - from indexing "windows" attribute of a tab page (|python-tabpage|) 534 - from the "window" attribute of a tab page (|python-tabpage|) 535 536You can manipulate window objects only through their attributes. They have no 537methods, and no sequence or other interface. 538 539Window attributes are: 540 buffer (read-only) The buffer displayed in this window 541 cursor (read-write) The current cursor position in the window 542 This is a tuple, (row,col). 543 height (read-write) The window height, in rows 544 width (read-write) The window width, in columns 545 vars (read-only) The window |w:| variables. Attribute is 546 unassignable, but you can change window 547 variables this way 548 options (read-only) The window-local options. Attribute is 549 unassignable, but you can change window 550 options this way. Provides access only to 551 window-local options, for buffer-local use 552 |python-buffer| and for global ones use 553 |python-options|. If option is |global-local| 554 and local value is missing getting it will 555 return None. 556 number (read-only) Window number. The first window has number 1. 557 This is zero in case it cannot be determined 558 (e.g. when the window object belongs to other 559 tab page). 560 row, col (read-only) On-screen window position in display cells. 561 First position is zero. 562 tabpage (read-only) Window tab page. 563 valid (read-write) True or False. Window object becomes invalid 564 when corresponding window is closed. 565 566The height attribute is writable only if the screen is split horizontally. 567The width attribute is writable only if the screen is split vertically. 568 569Window object type is available using "Window" attribute of vim module. 570 571============================================================================== 5726. Tab page objects *python-tabpage* 573 574Tab page objects represent vim tab pages. You can obtain them in a number of 575ways: 576 - via vim.current.tabpage (|python-current|) 577 - from indexing vim.tabpages (|python-tabpages|) 578 579You can use this object to access tab page windows. They have no methods and 580no sequence or other interfaces. 581 582Tab page attributes are: 583 number The tab page number like the one returned by 584 |tabpagenr()|. 585 windows Like |python-windows|, but for current tab page. 586 vars The tab page |t:| variables. 587 window Current tabpage window. 588 valid True or False. Tab page object becomes invalid when 589 corresponding tab page is closed. 590 591TabPage object type is available using "TabPage" attribute of vim module. 592 593============================================================================== 5947. vim.bindeval objects *python-bindeval-objects* 595 596vim.Dictionary object *python-Dictionary* 597 Dictionary-like object providing access to vim |Dictionary| type. 598 Attributes: 599 Attribute Description ~ 600 locked One of *python-.locked* 601 Value Description ~ 602 zero Variable is not locked 603 vim.VAR_LOCKED Variable is locked, but can be unlocked 604 vim.VAR_FIXED Variable is locked and can't be unlocked 605 Read-write. You can unlock locked variable by assigning 606 `True` or `False` to this attribute. No recursive locking 607 is supported. 608 scope One of 609 Value Description ~ 610 zero Dictionary is not a scope one 611 vim.VAR_DEF_SCOPE |g:| or |l:| dictionary 612 vim.VAR_SCOPE Other scope dictionary, 613 see |internal-variables| 614 Methods (note: methods do not support keyword arguments): 615 Method Description ~ 616 keys() Returns a list with dictionary keys. 617 values() Returns a list with dictionary values. 618 items() Returns a list of 2-tuples with dictionary contents. 619 update(iterable), update(dictionary), update(**kwargs) 620 Adds keys to dictionary. 621 get(key[, default=None]) 622 Obtain key from dictionary, returning the default if it is 623 not present. 624 pop(key[, default]) 625 Remove specified key from dictionary and return 626 corresponding value. If key is not found and default is 627 given returns the default, otherwise raises KeyError. 628 popitem() 629 Remove random key from dictionary and return (key, value) 630 pair. 631 has_key(key) 632 Check whether dictionary contains specified key, similar 633 to `key in dict`. 634 635 __new__(), __new__(iterable), __new__(dictionary), __new__(update) 636 You can use `vim.Dictionary()` to create new vim 637 dictionaries. `d=vim.Dictionary(arg)` is the same as 638 `d=vim.bindeval('{}');d.update(arg)`. Without arguments 639 constructs empty dictionary. 640 641 Examples: > 642 d = vim.Dictionary(food="bar") # Constructor 643 d['a'] = 'b' # Item assignment 644 print d['a'] # getting item 645 d.update({'c': 'd'}) # .update(dictionary) 646 d.update(e='f') # .update(**kwargs) 647 d.update((('g', 'h'), ('i', 'j'))) # .update(iterable) 648 for key in d.keys(): # .keys() 649 for val in d.values(): # .values() 650 for key, val in d.items(): # .items() 651 print isinstance(d, vim.Dictionary) # True 652 for key in d: # Iteration over keys 653 class Dict(vim.Dictionary): # Subclassing 654< 655 Note: when iterating over keys you should not modify dictionary. 656 657vim.List object *python-List* 658 Sequence-like object providing access to vim |List| type. 659 Supports `.locked` attribute, see |python-.locked|. Also supports the 660 following methods: 661 Method Description ~ 662 extend(item) Add items to the list. 663 664 __new__(), __new__(iterable) 665 You can use `vim.List()` to create new vim lists. 666 `l=vim.List(iterable)` is the same as 667 `l=vim.bindeval('[]');l.extend(iterable)`. Without 668 arguments constructs empty list. 669 Examples: > 670 l = vim.List("abc") # Constructor, result: ['a', 'b', 'c'] 671 l.extend(['abc', 'def']) # .extend() method 672 print l[1:] # slicing 673 l[:0] = ['ghi', 'jkl'] # slice assignment 674 print l[0] # getting item 675 l[0] = 'mno' # assignment 676 for i in l: # iteration 677 print isinstance(l, vim.List) # True 678 class List(vim.List): # Subclassing 679 680vim.Function object *python-Function* 681 Function-like object, acting like vim |Funcref| object. Accepts special 682 keyword argument `self`, see |Dictionary-function|. You can also use 683 `vim.Function(name)` constructor, it is the same as 684 `vim.bindeval('function(%s)'%json.dumps(name))`. 685 686 Attributes (read-only): 687 Attribute Description ~ 688 name Function name. 689 args `None` or a |python-List| object with arguments. Note 690 that this is a copy of the arguments list, constructed 691 each time you request this attribute. Modifications made 692 to the list will be ignored (but not to the containers 693 inside argument list: this is like |copy()| and not 694 |deepcopy()|). 695 self `None` or a |python-Dictionary| object with self 696 dictionary. Note that explicit `self` keyword used when 697 calling resulting object overrides this attribute. 698 auto_rebind Boolean. True if partial created from this Python object 699 and stored in the Vim script dictionary should be 700 automatically rebound to the dictionary it is stored in 701 when this dictionary is indexed. Exposes Vim internal 702 difference between `dict.func` (auto_rebind=True) and 703 `function(dict.func,dict)` (auto_rebind=False). This 704 attribute makes no sense if `self` attribute is `None`. 705 706 Constructor additionally accepts `args`, `self` and `auto_rebind` 707 keywords. If `args` and/or `self` argument is given then it constructs 708 a partial, see |function()|. `auto_rebind` is only used when `self` 709 argument is given, otherwise it is assumed to be `True` regardless of 710 whether it was given or not. If `self` is given then it defaults to 711 `False`. 712 713 Examples: > 714 f = vim.Function('tr') # Constructor 715 print f('abc', 'a', 'b') # Calls tr('abc', 'a', 'b') 716 vim.command(''' 717 function DictFun() dict 718 return self 719 endfunction 720 ''') 721 f = vim.bindeval('function("DictFun")') 722 print f(self={}) # Like call('DictFun', [], {}) 723 print isinstance(f, vim.Function) # True 724 725 p = vim.Function('DictFun', self={}) 726 print f() 727 p = vim.Function('tr', args=['abc', 'a']) 728 print f('b') 729 730============================================================================== 7318. pyeval() and py3eval() Vim functions *python-pyeval* 732 733To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| 734functions to evaluate Python expressions and pass their values to Vim script. 735|pyxeval()| is also available. 736 737The Python value "None" is converted to v:none. 738 739============================================================================== 7409. Dynamic loading *python-dynamic* 741 742On MS-Windows and Unix the Python library can be loaded dynamically. The 743|:version| output then includes |+python/dyn| or |+python3/dyn|. 744 745This means that Vim will search for the Python DLL or shared library file only 746when needed. When you don't use the Python interface you don't need it, thus 747you can use Vim without this file. 748 749 750MS-Windows ~ 751 752To use the Python interface the Python DLL must be in your search path. In a 753console window type "path" to see what directories are used. The 'pythondll' 754or 'pythonthreedll' option can be also used to specify the Python DLL. 755 756The name of the DLL should match the Python version Vim was compiled with. 757Currently the name for Python 2 is "python27.dll", that is for Python 2.7. 758That is the default value for 'pythondll'. For Python 3 it is python36.dll 759(Python 3.6). To know for sure edit "gvim.exe" and search for 760"python\d*.dll\c". 761 762 763Unix ~ 764 765The 'pythondll' or 'pythonthreedll' option can be used to specify the Python 766shared library file instead of DYNAMIC_PYTHON_DLL or DYNAMIC_PYTHON3_DLL file 767what were specified at compile time. The version of the shared library must 768match the Python 2.x or Python 3 version Vim was compiled with. 769 770============================================================================== 77110. Python 3 *python3* 772 773 *:py3* *:python3* 774:[range]py3 {stmt} 775:[range]py3 << [trim] [{endmarker}] 776{script} 777{endmarker} 778 779:[range]python3 {stmt} 780:[range]python3 << [trim] [{endmarker}] 781{script} 782{endmarker} 783 The `:py3` and `:python3` commands work similar to `:python`. A 784 simple check if the `:py3` command is working: > 785 :py3 print("Hello") 786< 787 To see what version of Python you have: > 788 :py3 import sys 789 :py3 print(sys.version) 790< *:py3file* 791:[range]py3f[ile] {file} 792 The `:py3file` command works similar to `:pyfile`. 793 *:py3do* 794:[range]py3do {body} 795 The `:py3do` command works similar to `:pydo`. 796 797 798Vim can be built in four ways (:version output): 7991. No Python support (-python, -python3) 8002. Python 2 support only (+python or +python/dyn, -python3) 8013. Python 3 support only (-python, +python3 or +python3/dyn) 8024. Python 2 and 3 support (+python/dyn, +python3/dyn) 803 804Some more details on the special case 4: *python-2-and-3* 805 806When Python 2 and Python 3 are both supported they must be loaded dynamically. 807 808When doing this on Linux/Unix systems and importing global symbols, this leads 809to a crash when the second Python version is used. So either global symbols 810are loaded but only one Python version is activated, or no global symbols are 811loaded. The latter makes Python's "import" fail on libraries that expect the 812symbols to be provided by Vim. 813 *E836* *E837* 814Vim's configuration script makes a guess for all libraries based on one 815standard Python library (termios). If importing this library succeeds for 816both Python versions, then both will be made available in Vim at the same 817time. If not, only the version first used in a session will be enabled. 818When trying to use the other one you will get the E836 or E837 error message. 819 820Here Vim's behavior depends on the system in which it was configured. In a 821system where both versions of Python were configured with --enable-shared, 822both versions of Python will be activated at the same time. There will still 823be problems with other third party libraries that were not linked to 824libPython. 825 826To work around such problems there are these options: 8271. The problematic library is recompiled to link to the according 828 libpython.so. 8292. Vim is recompiled for only one Python version. 8303. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration. This 831 may crash Vim though. 832 833 *E880* 834Raising SystemExit exception in python isn't endorsed way to quit vim, use: > 835 :py vim.command("qall!") 836< 837 838 *has-python* 839You can test what Python version is available with: > 840 if has('python') 841 echo 'there is Python 2.x' 842 endif 843 if has('python3') 844 echo 'there is Python 3.x' 845 endif 846 847Note however, that when Python 2 and 3 are both available and loaded 848dynamically, these has() calls will try to load them. If only one can be 849loaded at a time, just checking if Python 2 or 3 are available will prevent 850the other one from being available. 851 852To avoid loading the dynamic library, only check if Vim was compiled with 853python support: > 854 if has('python_compiled') 855 echo 'compiled with Python 2.x support' 856 if has('python_dynamic') 857 echo 'Python 2.x dynamically loaded' 858 endif 859 endif 860 if has('python3_compiled') 861 echo 'compiled with Python 3.x support' 862 if has('python3_dynamic') 863 echo 'Python 3.x dynamically loaded' 864 endif 865 endif 866 867This also tells you whether Python is dynamically loaded, which will fail if 868the runtime library cannot be found. 869 870============================================================================== 87111. Python X *python_x* *pythonx* 872 873Because most python code can be written so that it works with python 2.6+ and 874python 3 the pyx* functions and commands have been written. They work exactly 875the same as the Python 2 and 3 variants, but select the Python version using 876the 'pyxversion' setting. 877 878You should set 'pyxversion' in your |.vimrc| to prefer Python 2 or Python 3 879for Python commands. If you change this setting at runtime you may risk that 880state of plugins (such as initialization) may be lost. 881 882If you want to use a module, you can put it in the {rtp}/pythonx directory. 883See |pythonx-directory|. 884 885 *:pyx* *:pythonx* 886The `:pyx` and `:pythonx` commands work similar to `:python`. A simple check 887if the `:pyx` command is working: > 888 :pyx print("Hello") 889 890To see what version of Python is being used: > 891 :pyx import sys 892 :pyx print(sys.version) 893< 894 *:pyxfile* *python_x-special-comments* 895The `:pyxfile` command works similar to `:pyfile`. However you can add one of 896these comments to force Vim using `:pyfile` or `:py3file`: > 897 #!/any string/python2 " Shebang. Must be the first line of the file. 898 #!/any string/python3 " Shebang. Must be the first line of the file. 899 # requires python 2.x " Maximum lines depend on 'modelines'. 900 # requires python 3.x " Maximum lines depend on 'modelines'. 901Unlike normal modelines, the bottom of the file is not checked. 902If none of them are found, the 'pyxversion' setting is used. 903 *W20* *W21* 904If Vim does not support the selected Python version a silent message will be 905printed. Use `:messages` to read them. 906 907 *:pyxdo* 908The `:pyxdo` command works similar to `:pydo`. 909 910 *has-pythonx* 911You can test if pyx* commands are available with: > 912 if has('pythonx') 913 echo 'pyx* commands are available. (Python ' . &pyx . ')' 914 endif 915 916When compiled with only one of |+python| or |+python3|, the has() returns 1. 917When compiled with both |+python| and |+python3|, the test depends on the 918'pyxversion' setting. If 'pyxversion' is 0, it tests Python 3 first, and if 919it is not available then Python 2. If 'pyxversion' is 2 or 3, it tests only 920Python 2 or 3 respectively. 921 922Note that for `has('pythonx')` to work it may try to dynamically load Python 3 923or 2. This may have side effects, especially when Vim can only load one of 924the two. 925 926If a user prefers Python 2 and want to fallback to Python 3, he needs to set 927'pyxversion' explicitly in his |.vimrc|. E.g.: > 928 if has('python') 929 set pyx=2 930 elseif has('python3') 931 set pyx=3 932 endif 933 934============================================================================== 93512. Building with Python support *python-building* 936 937A few hints for building with Python 2 or 3 support. 938 939UNIX 940 941See src/Makefile for how to enable including the Python interface. 942 943On Ubuntu you will want to install these packages for Python 2: 944 python 945 python-dev 946For Python 3: 947 python3 948 python3-dev 949For Python 3.6: 950 python3.6 951 python3.6-dev 952 953If you have more than one version of Python 3, you need to link python3 to the 954one you prefer, before running configure. 955 956============================================================================== 957 vim:tw=78:ts=8:noet:ft=help:norl: 958