10

vim proj.dia gives binary data.

If renamed, vim opens it by unzipping:

$ mv proj.dia proj.dia.gz
$ vim proj.dia.gz

How to make the .dia act the same as .gz?

chicks
  • 332
  • 1
  • 5
  • 13
Velkan
  • 215
  • 1
  • 6

1 Answers1

10

If we look at /usr/share/vim/vim80/plugin/gzip.vim we can see how the plugin does this:

augroup gzip
  " Remove all gzip autocommands
  au!

  " Enable editing of gzipped files.
  " The functions are defined in autoload/gzip.vim.
  "
  " Set binary mode before reading the file.
  " Use "gzip -d", gunzip isn't always available.
  autocmd BufReadPre,FileReadPre      *.gz,*.bz2,*.Z,*.lzma,*.xz,*.lz setlocal bin
  autocmd BufReadPost,FileReadPost    *.gz  call gzip#read("gzip -dn")
  autocmd BufWritePost,FileWritePost  *.gz  call gzip#write("gzip")
  autocmd FileAppendPre               *.gz  call gzip#appre("gzip -dn")
  autocmd FileAppendPost              *.gz  call gzip#write("gzip")
augroup END

There are other file extensions here as well (bzip2, xz, etc.) but I removed those for brevity's sake.

To add your own commands to this, you can add this to your vimrc file:

augroup gzip_local
    autocmd!
    autocmd BufReadPre,FileReadPre     *.dia setlocal bin
    autocmd BufReadPost,FileReadPost   *.dia call gzip#read("gzip -dn -S .dia")
    autocmd BufWritePost,FileWritePost *.dia call gzip#write("gzip -S .dia")
    autocmd FileAppendPre              *.dia call gzip#appre("gzip -dn -S .dia")
    autocmd FileAppendPost             *.dia call gzip#write("gzip -S .dia")
augroup END

We need to add the -S .dia option to get gzip to read and write to *.dia files, rather than *.gz files. As near as I can see most common platforms (Linux, {Free,Open}BSD, OSX) support this option, but some may not (in which case you'll have to write a wrapper script to move the file before decompressing and after compressing).

Martin Tournoij
  • 62,054
  • 25
  • 192
  • 271