" setup boilerplate to make this file usable with vim -Nu {{{ scriptencoding utf-8 execute 'source' expand( ':p:h' ) . '/minimal_vimrc' set noequalalways let mapleader = ',' let maplocalleader = "\" " }}} " Custom Layout {{{ function! s:CustomiseUI() let wins = g:vimspector_session_windows " Close the Variables window if has( 'nvim' ) " No win_execute in neovim call win_gotoid( wins.variables ) quit else call win_execute( wins.variables, 'q' ) endif " Put the stack trace at the top of the "left bar" (rotate) call win_gotoid( wins.stack_trace ) wincmd r " Make the left column at least 70 chars 70wincmd | " Make the code window at least 80 chars call win_gotoid( wins.code ) 80wincmd | " Make the output window 10 lines high and right at the top of the screen call win_gotoid( wins.output ) 10wincmd _ wincmd K endfunction function s:SetUpTerminal() if !has_key( g:vimspector_session_windows, 'terminal' ) " There's a neovim bug which means that this doesn't work in neovim return endif let terminal_win = g:vimspector_session_windows.terminal " Make the terminal window at most 80 columns wide, ensuring there is enough " sapce for our code window (80 columns) and the left bar (70 columns) " Padding is 2 for the 2 vertical split markers and 2 for the sign column in " the code window. let left_bar = 70 let code = 80 let padding = 4 let cols = max( [ min( [ &columns - left_bar - code - padding, 80 ] ), 10 ] ) call win_gotoid( terminal_win ) execute cols . 'wincmd |' endfunction function! s:CustomiseWinBar() call win_gotoid( g:vimspector_session_windows.code) aunmenu WinBar nnoremenu WinBar.▷\ ᶠ⁵ :call vimspector#Continue() nnoremenu WinBar.↷\ ᶠ¹⁰ :call vimspector#StepOver() nnoremenu WinBar.↓\ ᶠ¹¹ :call vimspector#StepInto() nnoremenu WinBar.↑\ ˢᶠ¹¹ :call vimspector#StepOut() nnoremenu WinBar.❘❘\ ᶠ⁶ :call vimspector#Pause() nnoremenu WinBar.□\ ˢᶠ⁵ :call vimspector#Stop() nnoremenu WinBar.⟲\ ᶜˢᶠ⁵ :call vimspector#Restart() nnoremenu WinBar.✕\ ᶠ⁸ :call vimspector#Reset() endfunction augroup TestUICustomistaion autocmd! autocmd User VimspectorUICreated call s:CustomiseUI() autocmd User VimspectorTerminalOpened call s:SetUpTerminal() autocmd User VimspectorUICreated call s:CustomiseWinBar() augroup END " }}} " Custom sign priority {{{ let g:vimspector_sign_priority = { \ 'vimspectorBP': 3, \ 'vimspectorBPCond': 2, \ 'vimspectorBPDisabled': 1, \ 'vimspectorPC': 999, \ } " }}} " Custom mappings while debuggins {{{ let s:mapped = {} function! s:OnJumpToFrame() abort if has_key( s:mapped, string( bufnr() ) ) return endif nmap dn VimspectorStepOver nmap ds VimspectorStepInto nmap df VimspectorStepOut nmap dc VimspectorContinue nmap di VimspectorBalloonEval xmap di VimspectorBalloonEval let s:mapped[ string( bufnr() ) ] = { 'modifiable': &modifiable } setlocal nomodifiable endfunction function! s:OnDebugEnd() abort let original_buf = bufnr() let hidden = &hidden try set hidden for bufnr in keys( s:mapped ) try execute 'noautocmd buffer' bufnr silent! nunmap dn silent! nunmap ds silent! nunmap df silent! nunmap dc silent! nunmap di silent! xunmap di let &l:modifiable = s:mapped[ bufnr ][ 'modifiable' ] endtry endfor finally execute 'noautocmd buffer' original_buf let &hidden = hidden endtry let s:mapped = {} endfunction augroup TestCustomMappings au! autocmd User VimspectorJumpedToFrame call s:OnJumpToFrame() autocmd User VimspectorDebugEnded call s:OnDebugEnd() augroup END " }}} " Custom mappings for special buffers {{{ let g:vimspector_mappings = { \ 'stack_trace': {}, \ 'variables': { \ 'set_value': [ '', '', 'C' ], \ } \ } " }}} " vim: foldmethod=marker