:py import vim; vim.current.line="["+vim.current.line+"]"
我如何在当前文件的每一行执行此语句? >
相关:如何在Vim中使用Python?在stackoverflow
#1 楼
您可以使用自Vim 7.4起可用的pydo
命令,该手册描述了它比我更好的工作方式:对[range]中的每一行执行Python函数“ def _vim_pydo(line,linenr):{body}”,并将函数参数依次设置为每一行的text ,而无需尾随
号。该函数应返回一个字符串或无。如果返回字符串
,它将成为当前回合中该行的文本。 [range]的
默认值是整个文件:“ 1,$”。
对于您的示例,可以使用以下命令:
:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line
之所以有
linenr - 1
位,是因为vim.current.buffer
中的行被索引为0,但是Vim开始从1开始计数行。用于在一系列行上执行Python代码的自定义命令:command! -range=% BracketLines
\ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line
#2 楼
您可以使用vim.current.buffer
来获取当前缓冲区,这是一个可迭代的过程。您可以使用for
循环获取每一行。您可以通过分配它们来更改这些行;所以将它们放在一起,我们得到:
:py from vim import *
:py for i, line in enumerate(current.buffer): current.buffer[i] = '[%s]' % line
另请参阅
:help python-buffer
。
评论
自vim 7.4起可用。
– Kenorb
15年2月16日在15:31