Vim:运行 来自_not_根文件的项目?

Vim: Running project from _not_ root file?

如果我在项目的根文件main.py中,我可以按F9执行它,因为有一行大致像

map <buffer> <F9> :w<CR>:exec "!python3 " . %<CR>

在我的.vimrc.

但是,该项目被分割成多个文件,我不想每次都:b1只是为了运行它。

我尝试了以下方法。 来自不同的文件

let b:pyProjectRoot=main.py

然后将我的 .vimrc 中的行更改为

map <buffer> <F9> :w<CR>:exec "!python3 " . b:pyProjectRoot<CR>

但是由于某些原因,vim 无法识别局部缓冲区变量 b:pyProjectRoot

为什么会这样?我该如何解决?

let b:pyProjectRoot=main.py

表示“将字典main的成员py的值赋给缓冲区变量pyProjectRoot”。

正确的形式是:

let b:pyProjectRoot = "main.py"

意思是“将字符串main.py分配给缓冲区变量pyProjectRoot”。

或者,您可以定义一个环境变量:

let $PY_PROJECT_ROOT

并在不连接的情况下使用它:

nnoremap <buffer> <F9> :w\|!python3 $PY_PROJECT_ROOT<CR>

但您应该考虑使用 make(和 :help :make)或类似的东西。