📄 if_pyth.cnx
字号:
*if_pyth.txt* For Vim version 6.3. 最近更新:2004年6月 VIM REFERENCE MANUAL by Paul Moore (译者:lang2 http://vimcdoc.sf.net)Vim 的 Python 编程界面 *python* *Python*1. 命令 |python-commands|2. vim 模块 |python-vim|3. 缓冲对象 |python-buffer|4. 范围对象 |python-range|5. 窗口对象 |python-window|{Vi does not have any of these commands}Vim 的 Python 界面仅当 |+python| 特性被编译进 Vim 时才有效。==============================================================================1. 命令 *python-commands* *:python* *:py* *E205* *E263* *E264*:[range]py[thon] {stmt} 执行 Python 语句 {stmt}.:[range]py[thon] << {endmarker}{script}{endmarker} 执行 Python 脚本 {script}. Note: 此命令在没有编译进 Python 特性时无效。为了 避免这样的错误,参阅 |script-here|.{endmarker} 前面 不能 有任何空白字符。如果在 "<<" 之后省略了 {endmarker},在 {script} 之后一定要有一个点 '.'。这和 |:append| 及 |:insert| 命令的道理是一样的。这种形成的 |:python| 命令主要用于在 Vim 脚本中嵌入 Python 代码。例子: > function! IcecreamInitialize() python << EOF class StrawberryIcecream: def __call__(self): print 'EAT ME' EOF endfunction<Note: Python 对于缩进是非常敏感的。要确保 "class" 所在行及 "EOF" 没有任何缩进。 *:pyfile* *:pyf*:[range]pyf[ile] {file} 执行 {file} 文件中包含的 Python 脚本。整个 参数被用作一个文件名。 {not in Vi}这些命令根本上都差不多 - 它们都将当前范围 |python-range| 设定为指定的行范围,并对其执行 Python 代码。:python 的情况所执行的代码来自命令行。:pyfile 的情况所执行的代码来自一个指定的文件。Python 命令不能用于 |sandbox|。需要传递参数的话,你得使用 sys.argv[]。例如: > :python import sys :python sys.argv = ["foo", "bar"] :pyfile myscript.py下面是一些例子 *python-examples* > :python from vim import * :python from string import upper :python current.line = upper(current.line) :python print "Hello" :python str = current.buffer[42](Note 如同导入 (import) 模块一样,变动对后续命令持续有效。这和 Python 的解释程序是一样的。)==============================================================================2. vim 模块 *python-vim*Python 的代码所有对 Vim 的操作 (只有一个例外 - 看下面的 |python-output|) 都是通过 "vim" 模块来进行的。该模块包括两个方法,三个常量,以及一个异常对象。在使用它们之前你得先导入 (import) vim 模块。总揽 > print "Hello" # 显示信息 vim.command(cmd) # 执行 ex 命令 w = vim.windows[n] # 获取窗口 "n" cw = vim.current.window # 获取当前窗口 b = vim.buffers[n] # 获取缓冲 "n" cb = vim.current.buffer # 获取当前缓冲 w.height = lines # 设定窗口高度 w.cursor = (row, col) # 设定光标位置 pos = w.cursor # 获取 tuple (行, 列) name = b.name # 获取缓冲的文件名 line = b[n] # 获取缓冲内的一行 lines = b[n:m] # 获取数行 num = len(b) # 获取统计的行数 b[n] = str # sets a line in the buffer b[n:m] = [str1, str2, str3] # sets a number of lines at once del b[n] # 删除一行 del b[n:m] # 删除数行"vim" 模块中的方法vim.command(str) *python-command* 执行 vim (ex-模式) 命令 str. 无返回值. 例如: > vim.command("set tw=72") vim.command("%s/aaa/bbb/g")< 下面的定义可以执行普通模式命令: > def normal(str): vim.command("normal "+str) # Note the use of single quotes to delimit a string containing # double quotes normal('"a2dd"aP')<< *E659* ":python" 在 Python 2.2 及之前版本上不能嵌套使用。下面命令只对 Python 2.3 之后版本适用: > :python vim.command("python print 'Hello again Python'")vim.eval(str) *python-eval* 使用 vim 内部的表达式处理器来对表达式 str 求值。(参阅 |expression|). 返回结果的字符串。 例: > text_width = vim.eval("&tw") str = vim.eval("12+12") # NB result is a string! Use # string.atoi() to convert to # a number."vim" 模块中的异常对象 vim.error *python-error* 当遇到 Vim 的错误时,Python 引起一个 vim.error 类的异常。 例: > try: vim.command("put a") except vim.error: # nothing in register a"vim" 模块中的常量 Note 这些其实并非真正的常量 - 你还是可以对它们符值。但这好无意义,因为 你会丢失该 vim 对象本来代表的值。vim.buffers *python-buffers* A sequence 对象,用来提供对 vim 缓冲的操作。该对象支持以下操作: > b = vim.buffers[i] # Indexing (read-only) b in vim.buffers # 成员测试 n = len(vim.buffers) # 成员个数 for b in vim.buffers: # 顺序存取<vim.windows *python-windows* A sequence 对象,用来提供对 vim 窗口的操作。该对象支持以下操作: > w = vim.windows[i] # Indexing (read-only) w in vim.windows # 成员测试 n = len(vim.windows) # 成员个数 for w in vim.windows: # 顺序存取<vim.current *python-current* 一个用来提供对各种各样当前 "current" 对象进行操作的对象。它包括一些特定 的属性: vim.current.line 当前行(读写) 字串 vim.current.buffer 当前缓冲(只读) 缓冲 vim.current.window 当前窗口(只读) 窗口 vim.current.range 当前行范围(只读) 范围 最后一种情况需要一些额外的解释。当用 :python 或 :pyfile 命令指定一个 范围之后,该范围将成为 "当前范围"。一个范围就如同一个缓冲,只不过所 操作的对象界限于一个行的子集。请参阅 |python-range|。Python 的输出 *python-output* Vim 将所有 Python 代码的输出都显示在信息区。普通的输出会以一般信息 出现,错误会以出错信息出现. 用具体实现的属于来讲,这表示所有 sys.stdout (包括 print 语句的输出) 以一般信息形式出现,而所有 sys.stderr (包括 error tracebacks) 都会 被显示成出错信息。 *python-input* Vim 并不支持用 Python 来输入 (通过 sys.stdin, 包括 input() 和 raw_input())。这些调用可能会导致崩溃。可能以后会修正。==============================================================================3. 缓冲对象 *python-buffer*缓冲对象代表缓冲。你又一下这几种办法来获取缓冲的列表: - 通过 vim.current.buffer (|python-current|) - from indexing vim.buffers (|python-buffers|) - 通过一个窗口的 "buffer" 属性 (|python-window|)缓冲对象只有一个属性 -- 缓冲的文件全名。该对象还包括三个方法 (append, mark,及 range; 见下)。你也可以将缓冲对象视为顺序对象。这样的话,它们就可以被像一个字符串序列一样取存 (它们是可变的)。每一个元素是缓冲中的一行。所有的顺序存取操作,包括索引索引赋值,切片及切片赋值,等等,都可以被使用。Note 索引(切片)操作的结果是一个字符串(字符串序列)。这产生了一个意想不到的结果 - b[:] 和 b 是不同的。确切一些,"b[:] = None" 会清空整个缓冲,而 "b = None" 仅仅更新变量 b 的值,完全不会影响到缓冲。缓冲索引从 0 开始算起,这与通常的 Python 语法一致。但这和 Vim 的行号从 1 算起有分歧。这一点在处理标记 (见下) 是要特别留意,因为标记是以行号区分的。缓冲对象的方法有: b.append(str) 对缓冲附加一行 b.append(list) 对缓冲附加一系列行 Note append 方法可以带一个字符串序列作为参数,这和 Python 中对应的方法是不同的。 b.mark(name) 返回一个 tuple (行,列) 用来代表该位置上的一个有名的 标记 (也可以用于 []"<> 等标记) b.range(s,e) 返回一个范围对象 (参见 |python-range|) 用来代表指定 缓冲中行 s 与 行 e 之间的部分 (包含 s 和 e |inclusive|).例如 (假定 b 是当前缓冲) > print b.name # 输出缓冲的名字 b[0] = "hello!!!" # 替换最顶上的一行 b[:] = None # 删除整个缓冲 del b[:] # 删除整个缓冲 (同上) b[0:0] = [ "a line" ] # 在第一行前添加一行 del b[2] # 删除一行 (第三行) b.append("bottom") # 在缓冲结尾添加一行 n = len(b) # 总行数 (row,col) = b.mark('a') # 有名的标记 r = b.range(1,5) # 缓冲内的一个范围==============================================================================4. 范围对象 *python-range*范围对象代表一个 vim 缓冲内的一个部分。你可以用一下的方法之一来获取一个缓冲对象: - 通过 vim.current.range (|python-current|) - 通过一个缓冲的 range() 方法 (|python-buffer|)一个范围对象在操作上几乎合一个缓冲对象完全一样。不过,其操作的目标仅显于范围指定的行 (当然,这个行范围会随着切片赋值,行删除,或者 range.append() 等等操作而改变).范围对象的属性有: r.start 首行在缓冲内的索引 r.end 尾行在缓冲内的索引==============================================================================5. 窗口对象 *python-window*窗口对象代表一个 vim 窗口。你可以用一下几种方法来获取一个窗口对象: - 通过 vim.current.window (|python-current|) - 通过对 vim.windows 的索引操作 (|python-windows|)你只能通过窗口对象的属性来控制它。这些对象没有方法,也没有序列等其它界面。窗口的属性包括: buffer (只读) 窗口中显示的缓冲 cursor (读写) 窗口中的当前光标位置 这是一个 tuple, (行,列). height (读写) 行数表示的窗口高度 width (读写) 列数表示的窗口宽度height 属性只有当屏幕被水平分割时才可写。width 属性只有当屏幕被垂直分割时才可写。============================================================================== vim:tw=78:ts=8:ft=help:norl:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -