0

我用 vim 打开一个文件,缓冲区 id( bufnr()) 是2,然后我PreviewJupyterMD在 Vim 命令行中运行一个函数call PreviewJupyterMD()

函数体如下:

function! PreviewJupyterMD()
    " creat a md file and load file name to a variable l:md_file
    ...
    ...
    exec "edit" . l:md_file
    let b:created_for_jupyter = 1
    autocmd BufUnload <buffer> call MDCleanUp()
endfunction

所以我所做的是使用edit打开一个新文件并将其加载到缓冲区 3(我也检查了它bufnr())。并在缓冲区 3 中添加一个局部变量。然后当我关闭 Vim 时,我想要MDCleanUp缓冲区 3 的 vim 运行函数。

如果MDCleanUp从磁盘中删除该缓冲区的文件,则检查缓冲区是否有变量:

function! MDCleanUp()
    if exists("b:created_for_jupyter")
        call delete(expand("<afile>:p"))
    endif
    " below 2 line use to know this function run on which buffer
    echom bufnr()
    sleep 4
endfunction

实际行为MDCleanUp运行了两次,但所有输出消息echom bufnr()都是 2,输出 2 两次!

你能给我一些关于为什么输出的说明或建议:

2
2

以及如何让它成为:

2
3

提前致谢!

4

0 回答 0