在Vim中设置缓冲区特定变量

8iwquhpp  于 2023-05-07  发布在  其他
关注(0)|答案(2)|浏览(135)

如果没有使用下面的autocmd定义局部变量,我将尝试将buffer-local变量设置为全局变量

au BufEnter * if !exists('b:Variable') | let b:Variable = g:Variable | endif

但是,B:变量没有被定义。我做错了什么?
编辑:重新措辞/澄清,B:文件中使用了变量。错误是b:Variable is not defined

67up9zun

67up9zun1#

首先,你的自动命令是正确的。应该可以的
我看到了它可能失败的一些原因:

  • g:变量未定义
  • 事件被禁用,请参阅:help eventignore(这不太可能)
  • 您的vim版本不支持autocommand-feature(这也不太可能)。:版本必须列出+autocmd。
  • 我的最爱:自动命令没有来源。您确定您的自动命令处于活动状态吗?

什么能
:verbose autocmd BufEnter
say?如果您的自动命令未列出,则它未处于活动状态。
或者尝试一些更简单的东西,并提供直接的反馈,看看BufEnter的自动命令是否正常工作。举个例子
:Au BufEnter * echom“已进入缓冲区”

iq0todco

iq0todco2#

实际上,BufReadPre并没有涵盖所有的情况--它只在 existing 文件被读入缓冲区时触发。要让autocmd也为新文件触发,可以像这样组合BufReadPreBufNew

augroup ale_linters
    autocmd!
    autocmd BufNew,BufReadPre * if !exists('b:ale_linters') | let b:ale_linters = 'all' | endif
augroup end

相关问题