Advertisement
Guest User

breakpoint toggler update

a guest
Mar 28th, 2018
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VIM 1.69 KB | None | 0 0
  1. fun! s:BreakpointInit()
  2.   sign define breakpoint text=● texthl=Breakpoint
  3.   let g:breakpoints = exists('g:breakpoints') ? (g:breakpoints) : {}
  4.   set signcolumn=yes
  5. endfun
  6. call s:BreakpointInit()
  7.  
  8. fun! BreakpointList()
  9.   redir @z
  10.   silent! exe "sign jump buffer=".bufnr('.')
  11.   let g:breakpoints = {}
  12.   redir END
  13.   for i in split(@z, "\n")
  14.     if match(i, 'line=') != -1
  15.       let g:breakpoints[matchstr(i, '\(line=\)\@<=\d\+')] = matchstr(i, '\(id=\)\@<=\d\+')
  16.     endif
  17.   endfor
  18.   return g:breakpoints
  19. endfun
  20.  
  21. fun! ToggleBreakpoint(...)
  22.   call BreakpointList()
  23.   let lnum = (a:0) ? (a:1) : (line('.'))
  24.  
  25.   if (index(keys(g:breakpoints), ''.lnum) == -1)
  26.     exe ":sign place ". lnum ." line=". lnum ." name=breakpoint file=". expand("%:p")
  27.   else
  28.     exe ":sign unplace ". g:breakpoints[lnum]
  29.   endif
  30. endfun
  31.  
  32. fun! s:BreakpointNextPrev(count)
  33.   let tmp = uniq(sort([line('.')] + keys(g:breakpoints)))
  34.   let i = index(tmp, (line('.'))) + a:count
  35.   exe tmp[i % len(tmp)]
  36. endfun
  37.  
  38. command! -count=1 BreakpointNext call s:BreakpointNextPrev(<count>)
  39. command! -count=1 BreakpointPrev call s:BreakpointNextPrev(-<count>)
  40.  
  41. fun! CaptureClickLineNr()
  42.   match Cursor /\%#./
  43.   let tmpcur = matchadd('Cursor', '\%#.')
  44.   let a:char = getchar()
  45.   call matchdelete(1)
  46.  
  47.   if v:mouse_col == 1
  48.     call ToggleBreakpoint(v:mouse_lnum)
  49.     return '"_yl'
  50.   else
  51.     return "\<LeftMouse>".a:char
  52.   endif
  53.   echo getcharmod()
  54. endfun
  55.  
  56. nnoremap <expr> <LeftMouse> CaptureClickLineNr()
  57. nnoremap <silent> <M-C-B> :call ToggleBreakpoint()<CR>
  58. nnoremap <silent> <Leader>brk :call ToggleBreakpoint()<CR>
  59. nnoremap <silent> <Leader>bp :BreakpointPrev<CR>
  60. nnoremap <silent> <Leader>bn :BreakpointNext<CR>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement