Skip to content

Instantly share code, notes, and snippets.

@pencilcheck
Created August 4, 2013 17:31
Show Gist options
  • Save pencilcheck/6151095 to your computer and use it in GitHub Desktop.
Save pencilcheck/6151095 to your computer and use it in GitHub Desktop.
" Syntax Info {{{
function! GetSynInfo()
let stack = synstack(line("."), col("."))
let info = ""
for synid in reverse(stack)
if strlen(info)
let info .= " < "
endif
let syn = GetSynDict(synid)
let info .= GetSynInfoString(syn)
endfor
return info
endfunction
function! GetSynInfoString(syndict)
if a:syndict["syn"] != a:syndict["hi"]
let add_hi = a:syndict["hi"]." "
else
let add_hi = ""
endif
return a:syndict["syn"]." (".add_hi."fg=".a:syndict["fg"]." bg=".a:syndict["bg"].")"
endfunction
function! GetHereSynId(trans)
return synID(line("."), col("."), a:trans)
endfunction
function! GetSynDict(synid)
let hiid = synIDtrans(a:synid)
let syn = synIDattr(a:synid, "name")
let hi = synIDattr(hiid, "name")
let fg = synIDattr(hiid, "fg")
let bg = synIDattr(hiid, "bg")
return {"syn":syn, "hi":hi, "fg":fg, "bg":bg}
endfunction
nnoremap g<C-h> :echo GetSynInfo()<CR>
" }}}
" Ruby Folding {{{
function! RubyMethodFold(line)
let stack = synstack(a:line, (match(a:line, '^\s*\zs'))+1)
for synid in stack
let syn = GetSynDict(synid)
if GetSynInfoString(syn) == 'rubyMethodBlock'
return 1
endif
endfor
return 0
endfunction
set foldexpr=RubyMethodFold(v:lnum)
set foldmethod=expr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment