Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fun! s:BreakpointInit()
- sign define breakpoint text=● texthl=Breakpoint
- let g:breakpoints = exists('g:breakpoints') ? (g:breakpoints) : {}
- set signcolumn=yes
- endfun
- call s:BreakpointInit()
- fun! BreakpointList()
- redir @z
- silent! exe "sign jump buffer=".bufnr('.')
- let g:breakpoints = {}
- redir END
- for i in split(@z, "\n")
- if match(i, 'line=') != -1
- let g:breakpoints[matchstr(i, '\(line=\)\@<=\d\+')] = matchstr(i, '\(id=\)\@<=\d\+')
- endif
- endfor
- return g:breakpoints
- endfun
- fun! ToggleBreakpoint(...)
- call BreakpointList()
- let lnum = (a:0) ? (a:1) : (line('.'))
- if (index(keys(g:breakpoints), ''.lnum) == -1)
- exe ":sign place ". lnum ." line=". lnum ." name=breakpoint file=". expand("%:p")
- else
- exe ":sign unplace ". g:breakpoints[lnum]
- endif
- endfun
- fun! s:BreakpointNextPrev(count)
- let tmp = uniq(sort([line('.')] + keys(g:breakpoints)))
- let i = index(tmp, (line('.'))) + a:count
- exe tmp[i % len(tmp)]
- endfun
- command! -count=1 BreakpointNext call s:BreakpointNextPrev(<count>)
- command! -count=1 BreakpointPrev call s:BreakpointNextPrev(-<count>)
- fun! CaptureClickLineNr()
- match Cursor /\%#./
- let tmpcur = matchadd('Cursor', '\%#.')
- let a:char = getchar()
- call matchdelete(1)
- if v:mouse_col == 1
- call ToggleBreakpoint(v:mouse_lnum)
- return '"_yl'
- else
- return "\<LeftMouse>".a:char
- endif
- echo getcharmod()
- endfun
- nnoremap <expr> <LeftMouse> CaptureClickLineNr()
- nnoremap <silent> <M-C-B> :call ToggleBreakpoint()<CR>
- nnoremap <silent> <Leader>brk :call ToggleBreakpoint()<CR>
- nnoremap <silent> <Leader>bp :BreakpointPrev<CR>
- nnoremap <silent> <Leader>bn :BreakpointNext<CR>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement