如何在每个文件类型上运行自动命令,但是一个?

时间:2017-01-25 19:58:39

标签: vim autocommand

每当我更改缓冲区和检查时间时,我都会将vim设置为保存文件。问题是我使用Netrw并最终保存了Netrw缓冲区。我可以在除netrw之外的每种类型的文件上运行自动命令吗?

1 个答案:

答案 0 :(得分:0)

您可以在:if中使用autocmd来防范netrw文件。 e.g。

autocmd FileType * if &ft != 'netrw' | echo "do something" | endif

然而,这仍然是不对的。您已停止保存netrw缓冲区,但还有其他缓冲区不应保存。我建议检查'buftype'并查找以协议开头的文件,例如foo://

以下是使用此类方法的example of auto creating intermediary directories

" create parent directories
" https://stackoverflow.com/questions/4292733/vim-creating-parent-directories-on-save
function! s:MkNonExDir(file, buf)
    if empty(getbufvar(a:buf, '&buftype')) && a:file!~#'\v^\w+\:\/'
        let dir=fnamemodify(a:file, ':h')
        if !isdirectory(dir)
            call mkdir(dir, 'p')
        endif
    endif
endfunction
augroup BWCCreateDir
    autocmd!
    autocmd BufWritePre * :call s:MkNonExDir(expand('<afile>'), +expand('<abuf>'))
augroup END