运行 如果完整文件名不包含模式则自动命令

Run autocommand if full file name does not include pattern

每次保存 python 文件时,我都有一个 运行 flake8 的功能。但是,如果完整文件名(完整路径)包含 /.git/,我不希望该函数为 运行。我怎样才能做到这一点?我尝试了以下但没有成功:

au BufWritePost */[^git]/*.py call s:MyFlake8()

我会在 MyFlake8 顶部进行早期检查,如果不满足条件则退出。

function! MyFlake8()
  if expand("%:p") =~ "/\.git/"
    return
  endif

  echo "FLAKE8!"
endfunction
au BufWritePost *.py call s:MyFlake8()

负文件 glob 很难实现,但您可以通过设置 "ignore this" 标记的正 glob 和检查该标记的另一个全局命令(按此顺序!)来避免此问题:

au BufWritePost */.git/*.py let b:insideGit = 1
au BufWritePost *.py if ! exists('b:insideGit') | call s:MyFlake8() | endif