Last active
June 8, 2018 11:55
-
-
Save ctrngk/92138847f7e2558eca022ae5eb39b589 to your computer and use it in GitHub Desktop.
fold python hunter log files in vim
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| function! Hunter() | |
| " It takes 2 mins to fold 400k lines in my macbook air. | |
| function! ColBase() | |
| " determine column number (3rd col, code part) in the first (base) line | |
| call cursor(1, 1) | |
| let mypattern = '\v(.+:\d+\s+\w+\s+!\s+\zs)|(.+:\d+\s+\w+\s+\zs)' | |
| let [lnum, colbase] = searchpos(mypattern, 'n') | |
| return colbase | |
| endfunction | |
| function! Info(lnum) | |
| " determine the 3rd column position ( code part) | |
| call cursor(a:lnum, 1) | |
| let mypattern = '\v(.+:\d+\s+\w+\s+!\s+\zs)|(.+:\d+\s+\w+\s+\zs)' | |
| let [lnum, col_pos] = searchpos(mypattern, 'n') | |
| " dterminte the 3rd col indentation | |
| let indentlevel = (col_pos - w:colbase) / 3 | |
| let info = [col_pos, indentlevel] | |
| return info | |
| endfunction | |
| function! GetPotionFold(lnum) | |
| let info = Info(a:lnum) | |
| let colcode = info[0] | |
| let indentlevel = info[1] | |
| let current_content = getline(a:lnum) | |
| if current_content[colcode-1: colcode+1] ==# '=> ' | |
| let tmp = indentlevel + 1 | |
| return '>' . tmp | |
| endif | |
| if current_content[colcode-1: colcode+1] ==# '<= ' | |
| let tmp = indentlevel + 1 | |
| return tmp | |
| endif | |
| return indentlevel | |
| endfunction | |
| let w:colbase = ColBase() | |
| set foldmethod=expr | |
| set foldexpr=GetPotionFold(v:lnum) | |
| " change fold default color | |
| highlight Folded ctermbg=Black ctermfg=darkgray | |
| " render 3rd column color | |
| function! HunterColor() | |
| syntax include @Python syntax/python.vim | |
| syntax region pythonCode matchgroup=SnipPy start=/\v^.+:\d+\s+\w+\s+/ end=/$/ contains=@Python keepend | |
| hi SnipPy ctermfg=darkgray guifg=darkgray | |
| hi Snip1 ctermfg=darkred guifg=darkred gui=bold | |
| hi Snip2 ctermfg=lightred guifg=lightred | |
| match Snip1 /\v\<\=\s\w+:/ | |
| 2match Snip2 /\v\=\>\s\w+/ | |
| endfunction | |
| call HunterColor() | |
| " enable click | |
| " set mouse=a | |
| set foldcolumn=8 | |
| endfunction |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If it is a large file, color of python part may not be rendered. you need to redraw with ctrl-L