我如何 运行 对除一个文件类型之外的每个文件类型执行自动命令?
How do I run an autocommand on every filetype but one?
我已将 vim 设置为在更改缓冲区和检查时保存文件。问题是我使用 Netrw 并最终保存了 Netrw 缓冲区。我可以 运行 对除 netrw 之外的所有类型的文件执行自动命令吗?
您可以在 autocmd
中使用 :if
来防止 netrw 文件。例如
autocmd FileType * if &ft != 'netrw' | echo "do something" | endif
然而,这仍然不太正确。您已停止保存 netrw 缓冲区,但还有其他不应保存的缓冲区。我建议检查 'buftype'
并查找以协议开头的文件,例如foo://
.
这是一个使用这种方法的 example of auto creating intermediary directories:
" create parent directories
"
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
我已将 vim 设置为在更改缓冲区和检查时保存文件。问题是我使用 Netrw 并最终保存了 Netrw 缓冲区。我可以 运行 对除 netrw 之外的所有类型的文件执行自动命令吗?
您可以在 autocmd
中使用 :if
来防止 netrw 文件。例如
autocmd FileType * if &ft != 'netrw' | echo "do something" | endif
然而,这仍然不太正确。您已停止保存 netrw 缓冲区,但还有其他不应保存的缓冲区。我建议检查 'buftype'
并查找以协议开头的文件,例如foo://
.
这是一个使用这种方法的 example of auto creating intermediary directories:
" create parent directories
"
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