reading ghc core files in vim

John Meacham john at repetae.net
Fri Jul 23 22:05:37 EDT 2004


I have found the following filetype plugin for vim to be incredibly
useful when reading core files. unfortunatly the translation is one-way,
so if you are in the habit of editing core and feeding it back into ghc,
you will be disapointed, but for the (more common?) case of reading core
to determine what optimizations have been performed, this is quite nice.


you can also copy 
haskell.vim to ~/.vim/syntax/ghc_core.vim 
to get basic color syntax highlighting.


Is there a way to tell ghc to format core files assuming the screen is
very wide? the code ends up in a small ribbon along the right side of
the screen at pretty low nesting depths making it harder to read..
        John

--- add to ~/.vim/filetype.vim

if exists("did_load_filetypes")
    finish
endif
augroup filetypedetect
    au! BufNewFile,BufRead *.hsc setfiletype haskell
    au! BufNewFile,BufRead *.as setfiletype haskell
    au! BufNewFile,BufRead *.pappy setfiletype haskell
    au! BufNewFile,BufRead *.las setfiletype haskell
    au! BufNewFile,BufRead *.hcr setfiletype ghc_core
augroup END

--- ghc_core.vim, place in ~/.vim/ftplugins

if exists("s:loaded_ghc_core")
	finish
endif
let s:loaded_ghc_core = 1

augroup GhcCore
	autocmd BufReadPost *.hcr cal s:GhcCoretoUTF8()
	"autocmd BufWritePre *.hcr cal s:UTF8toGhcCore()
       " autocmd BufWritePost *.hcr cal s:GhcCoretoUTF8()
augroup END

function s:UTF8toGhcCore() 
        " we can't do this reversably
endfunction

function s:GhcCoretoUTF8()

	silent %s/ZL/(/eg
	silent %s/ZR/)/eg
	silent %s/ZM/[/eg
	silent %s/ZN/]/eg
	silent %s/ZC/:/eg
	silent %s/ZZ/Z/eg
	silent %s/zz/z/eg 
	silent %s/za/&/eg 
	silent %s/zb/|/eg 
	silent %s/zc/^/eg 
	silent %s/zd/$/eg 
	silent %s/ze/=/eg 
	silent %s/zg/>/eg 
	silent %s/zh/#/eg 
	silent %s/zi/./eg 
	silent %s/zl/</eg 
	silent %s/zm/-/eg 
	silent %s/zn/!/eg 
	silent %s/zp/+/eg 
	silent %s/zq/'/eg 
	silent %s/zr/\\/eg 
	silent %s/zs/\//eg 
	silent %s/zt/*/eg 
	silent %s/zu/_/eg 
	silent %s/zv/%/eg 
	silent %s/Z0T/()/eg 
	silent %s/Z2T/(,)/eg 
	silent %s/Z3T/(,,)/eg 
	silent %s/Z4T/(,,,)/eg 
	silent %s/Z5T/(,,,,)/eg 
	silent %s/Z6T/(,,,,,)/eg 
	silent %s/Z1H/(# #)/eg 
	silent %s/Z2H/(#,#)/eg 
	silent %s/Z3H/(#,,#)/eg 
	silent %s/Z4H/(#,,,#)/eg 
	silent %s/Z5H/(#,,,,#)/eg 
	silent %s/Z6H/(#,,,,,#)/eg 

        " these are debatable, but make things less cluttered.
	silent %s/GHC\.Prim\.//eg 
	silent %s/GHC\.Base\.//eg 
	silent %s/GHC\.IOBase\.//eg 

endfunction

do GhcCore BufRead

-- 
John Meacham - ⑆repetae.net⑆john⑈ 


More information about the Glasgow-haskell-users mailing list