【发布时间】:2020-03-08 00:13:55
【问题描述】:
我正在关注this tutorial 从 python 创建一个 vim 插件。我试图利用我获得的知识来访问当前缓冲区的第一行,所以我写道:
let s:plugin_root_dir = fnamemodify(resolve(expand('<sfile>:p')), ':h')
python3 << EOF
import sys
from os.path import normpath, join
import vim
plugin_root_dir = vim.eval('s:plugin_root_dir')
python_root_dir = normpath(join(plugin_root_dir, '..', 'python'))
sys.path.insert(0, python_root_dir)
import sample
EOF
在我的python文件中我写道:
import vim
vim.command("sign define gdlinterror text=✕")
vim.command("sign define gdlintwarning text=")
print(vim.current.buffer[0])
但是我收到以下错误:
Error detected while processing function provider#python3#Call:
line 18:
Error invoking 'python_execute' on channel 4 (python3-script-host):
Traceback (most recent call last):
File "<string>", line 7, in <module>
File "/home/chrismg/Projects/Python/sampleplugin/python/sample.py", line 5, in <module>
print(vim.current.buffer[0])
File "/home/chrismg/.local/lib/python3.6/site-packages/pynvim/api/buffer.py", line 45, in __ge
titem__
return self.request('nvim_buf_get_lines', i, i + 1, True)[0]
IndexError: list index out of range
因此,当我在 vim 中使用 :python3 尝试相同的命令时,令我惊讶的是它运行得非常好,但在 python 脚本中却不行。因此,当我检查vim.current.buffer 的len 时,我得到了0。我认为这是文件中的行数,在我的情况下是错误的,所以我开始想知道,这个python 脚本是否在缓冲区之前执行正在加载?这可以解释为什么存在索引越界错误。但是,我不知道缓冲区加载完成后如何运行 vim 插件。
非常感谢您对找出该做什么的任何帮助。谢谢!
【问题讨论】:
-
Autocommand
VimEnter在初始化并加载所有缓冲区后触发。 -
@phd 很好,但是一旦 VimEnter 完成,我该如何使用 python 脚本