Como abrir os arquivos * .dia como arquivos * .gz?

8

vim proj.dia fornece dados binários.

Se renomeado, o vim o abre descompactando:

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

Como fazer com que o .diaato seja o mesmo .gz?

Velkan
fonte

Respostas:

9

Se olharmos /usr/share/vim/vim80/plugin/gzip.vim, podemos ver como o plugin faz isso:

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

Existem outras extensões de arquivo aqui também (bzip2, xz etc.), mas as removi por uma questão de brevidade.

Para adicionar seus próprios comandos a isso, você pode adicioná-lo ao seu arquivo vimrc:

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

Precisamos adicionar a -S .diaopção para gzipler e gravar *.diaarquivos, em vez de *.gzarquivos. O mais próximo possível das plataformas mais comuns (Linux, {Free, Open} BSD, OSX) é compatível com essa opção, mas algumas não são (nesse caso, você precisará escrever um script de wrapper para mover o arquivo antes de descompactar e depois compressão).

Martin Tournoij
fonte