如果文件存在于 git repo 中,我可以使用哪些 vim API 和工具来禁用给定缓冲区的 vim swapfile(隐藏的恢复文件)?
在 git repos 中,我也想启用自动保存插件,因为我不必担心意外更改被保存。但对于 git repos 之外的其他缓冲区,我不希望自动保存意外修改文件,并且我想保留 vim 恢复文件。
我认为这是一个很好的插件编程任务,可以熟悉 vim 插件编程,但如果有人知道我应该采取什么方法,我将不胜感激
答案1
禁用交换文件
对于现有缓冲区,您可以:setlocal noswapfile
。这将删除任何现有缓冲区并关闭恢复。打开新缓冲区时,您也可以直接添加:noswapfile edit ...
检测 Git 存储库
如果你总是从 Git 根目录打开 Vim,那么这可以很简单isdirectory('.git')
。否则,你还必须检查父目录:
let gitDirspec = finddir('.git', '.;')
let isGitRepo = !empty(gitDirspec)
或者,vcscommand.vim 插件提供对各种修订控制系统类型(其中包括 Git)的检测:
let isGitRepo = VCSCommandGetVCSType('') ==? 'git'
连接起来
如果您有一个静态的 Git 存储库列表,则可以将路径直接放入:autocmd
文件规范模式中:
:autocmd BufNew,BufRead /path/to/repo1/**,/path/to/repo2/** setlocal noswapfile
为了运行检测,我们需要在每个打开的文件上运行自动命令:
:autocmd BufNew,BufRead * if VCSCommandGetVCSType('') ==? 'git' | setlocal noswapfile | endif