diff options
| -rw-r--r-- | vimscript/functions.vim | 0 | ||||
| -rw-r--r-- | vimscript/nv-commentary/init.vim | 11 | ||||
| -rw-r--r-- | vimscript/nv-vscode/init.vim | 109 | ||||
| -rw-r--r-- | vimscript/nv-whichkey/init.vim | 222 | 
4 files changed, 342 insertions, 0 deletions
| diff --git a/vimscript/functions.vim b/vimscript/functions.vim new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/vimscript/functions.vim diff --git a/vimscript/nv-commentary/init.vim b/vimscript/nv-commentary/init.vim new file mode 100644 index 00000000..284e6286 --- /dev/null +++ b/vimscript/nv-commentary/init.vim @@ -0,0 +1,11 @@ +function! Comment() +  if (mode() == "n" ) +    execute "Commentary" +  else     +    execute "'<,'>Commentary" +  endif + endfunction +vnoremap <silent> <space>/ :call Comment() +"autocmd! BufRead,BufNewFile *.{jsx,jx,js} setlocal filetype=javascript.jsx +autocmd FileType javascriptreact setlocal commentstring={/*\ %s\ */} + diff --git a/vimscript/nv-vscode/init.vim b/vimscript/nv-vscode/init.vim new file mode 100644 index 00000000..746d189d --- /dev/null +++ b/vimscript/nv-vscode/init.vim @@ -0,0 +1,109 @@ +" TODO there is a more contemporary version of this file +" TODO Also some of it is redundant +"VSCode +function! s:split(...) abort +    let direction = a:1 +    let file = a:2 +    call VSCodeCall(direction == 'h' ? 'workbench.action.splitEditorDown' : 'workbench.action.splitEditorRight') +    if file != '' +        call VSCodeExtensionNotify('open-file', expand(file), 'all') +    endif +endfunction + +function! s:splitNew(...) +    let file = a:2 +    call s:split(a:1, file == '' ? '__vscode_new__' : file) +endfunction + +function! s:closeOtherEditors() +    call VSCodeNotify('workbench.action.closeEditorsInOtherGroups') +    call VSCodeNotify('workbench.action.closeOtherEditors') +endfunction + +function! s:manageEditorSize(...) +    let count = a:1 +    let to = a:2 +    for i in range(1, count ? count : 1) +        call VSCodeNotify(to == 'increase' ? 'workbench.action.increaseViewSize' : 'workbench.action.decreaseViewSize') +    endfor +endfunction + +function! s:vscodeCommentary(...) abort +    if !a:0 +        let &operatorfunc = matchstr(expand('<sfile>'), '[^. ]*$') +        return 'g@' +    elseif a:0 > 1 +        let [line1, line2] = [a:1, a:2] +    else +        let [line1, line2] = [line("'["), line("']")] +    endif + +    call VSCodeCallRange("editor.action.commentLine", line1, line2, 0) +endfunction + +function! s:openVSCodeCommandsInVisualMode() +    normal! gv +    let visualmode = visualmode() +    if visualmode == "V" +        let startLine = line("v") +        let endLine = line(".") +        call VSCodeNotifyRange("workbench.action.showCommands", startLine, endLine, 1) +    else +        let startPos = getpos("v") +        let endPos = getpos(".") +        call VSCodeNotifyRangePos("workbench.action.showCommands", startPos[1], endPos[1], startPos[2], endPos[2], 1) +    endif +endfunction + +function! s:openWhichKeyInVisualMode() +    normal! gv +    let visualmode = visualmode() +    if visualmode == "V" +        let startLine = line("v") +        let endLine = line(".") +        call VSCodeNotifyRange("whichkey.show", startLine, endLine, 1) +    else +        let startPos = getpos("v") +        let endPos = getpos(".") +        call VSCodeNotifyRangePos("whichkey.show", startPos[1], endPos[1], startPos[2], endPos[2], 1) +    endif +endfunction + + +command! -complete=file -nargs=? Split call <SID>split('h', <q-args>) +command! -complete=file -nargs=? Vsplit call <SID>split('v', <q-args>) +command! -complete=file -nargs=? New call <SID>split('h', '__vscode_new__') +command! -complete=file -nargs=? Vnew call <SID>split('v', '__vscode_new__') +command! -bang Only if <q-bang> == '!' | call <SID>closeOtherEditors() | else | call VSCodeNotify('workbench.action.joinAllGroups') | endif + +" Better Navigation +nnoremap <silent> <C-j> :call VSCodeNotify('workbench.action.navigateDown')<CR> +xnoremap <silent> <C-j> :call VSCodeNotify('workbench.action.navigateDown')<CR> +nnoremap <silent> <C-k> :call VSCodeNotify('workbench.action.navigateUp')<CR> +xnoremap <silent> <C-k> :call VSCodeNotify('workbench.action.navigateUp')<CR> +nnoremap <silent> <C-h> :call VSCodeNotify('workbench.action.navigateLeft')<CR> +xnoremap <silent> <C-h> :call VSCodeNotify('workbench.action.navigateLeft')<CR> +nnoremap <silent> <C-l> :call VSCodeNotify('workbench.action.navigateRight')<CR> +xnoremap <silent> <C-l> :call VSCodeNotify('workbench.action.navigateRight')<CR> + +nnoremap gr <Cmd>call VSCodeNotify('editor.action.goToReferences')<CR> + +" Bind C-/ to vscode commentary since calling from vscode produces double comments due to multiple cursors +xnoremap <expr> <C-/> <SID>vscodeCommentary() +nnoremap <expr> <C-/> <SID>vscodeCommentary() . '_' + +nnoremap <silent> <C-w>_ :<C-u>call VSCodeNotify('workbench.action.toggleEditorWidths')<CR> + +nnoremap <silent> <Space> :call VSCodeNotify('whichkey.show')<CR> +xnoremap <silent> <Space> :<C-u>call <SID>openWhichKeyInVisualMode()<CR> + +xnoremap <silent> <C-P> :<C-u>call <SID>openVSCodeCommandsInVisualMode()<CR> + +xmap gc  <Plug>VSCodeCommentary +nmap gc  <Plug>VSCodeCommentary +omap gc  <Plug>VSCodeCommentary +nmap gcc <Plug>VSCodeCommentaryLine + +" Simulate same TAB behavior in VSCode +  nmap <Tab> :Tabnext<CR> +  nmap <S-Tab> :Tabprev<CR> diff --git a/vimscript/nv-whichkey/init.vim b/vimscript/nv-whichkey/init.vim new file mode 100644 index 00000000..f0e80987 --- /dev/null +++ b/vimscript/nv-whichkey/init.vim @@ -0,0 +1,222 @@ +" Leader Key Maps + +" Timeout +let g:which_key_timeout = 100 + +let g:which_key_display_names = {'<CR>': '↵', '<TAB>': '⇆'} + +" Map leader to which_key +nnoremap <silent> <leader> :silent <c-u> :silent WhichKey '<Space>'<CR> +vnoremap <silent> <leader> :silent <c-u> :silent WhichKeyVisual '<Space>'<CR> + +let g:which_key_map =  {} +let g:which_key_sep = '→' + +" Not a fan of floating windows for this +let g:which_key_use_floating_win = 0 +let g:which_key_max_size = 0 + +" Hide status line +autocmd! FileType which_key +autocmd  FileType which_key set laststatus=0 noshowmode noruler +  \| autocmd BufLeave <buffer> set laststatus=2 noshowmode ruler + + +" Single mappings +" let g:which_key_map['/'] = [ ':call Comment()'                                 , 'comment' ] +" let g:which_key_map['/'] = { 'name' : 'comment' } + +let g:which_key_map['/'] = [ ':call Comment()'                                 , 'comment' ] +"let g:which_key_map['/'] = 'which_key_ignore' +let g:which_key_map['?'] = [ ':NvimTreeFindFile'                               , 'find current file' ] +let g:which_key_map['e'] = [ ':NvimTreeToggle'                                 , 'explorer' ] +let g:which_key_map['f'] = [ ':Telescope find_files'                           , 'find files' ] +let g:which_key_map['h'] = [ '<C-W>s'                                          , 'split below'] +let g:which_key_map['m'] = [ ':MarkdownPreviewToggle'                          , 'markdown preview'] +let g:which_key_map['n'] = [ ':let @/ = ""'                                    , 'no highlight' ] +let g:which_key_map['r'] = [ ':RnvimrToggle'                                   , 'ranger' ] +" TODO create entire treesitter section +let g:which_key_map['T'] = [ ':TSHighlightCapturesUnderCursor'                 , 'treesitter highlight' ] +let g:which_key_map['v'] = [ '<C-W>v'                                          , 'split right'] +" Add Zen mode, play nice with status line +" let g:which_key_map['z'] = [ 'Goyo'                                            , 'zen' ] + +" Group mappings + +" a is for actions +let g:which_key_map.a = { +      \ 'name' : '+actions' , +      \ 'c' : [':ColorizerToggle'        , 'colorizer'], +      \ 'e' : [':CocCommand explorer'    , 'explorer'], +      \ 'h' : [':let @/ = ""'            , 'remove search highlight'], +      \ 'l' : [':Bracey'                 , 'start live server'], +      \ 'L' : [':BraceyStop'             , 'stop live server'], +      \ 'n' : [':set nonumber!'          , 'line-numbers'], +      \ 's' : [':s/\%V\(.*\)\%V/"\1"/'   , 'surround'], +      \ 'r' : [':set norelativenumber!'  , 'relative line nums'], +      \ 't' : [':FloatermToggle'         , 'terminal'], +      \ 'v' : [':Codi'                   , 'virtual repl on'], +      \ 'V' : [':Codi!'                  , 'virtual repl off'], +      \ 'w' : [':StripWhitespace'        , 'strip whitespace'], +      \ } + +" b is for buffer +let g:which_key_map.b = { +      \ 'name' : '+buffer' , +      \ '>' : [':BufferMoveNext'        , 'move next'], +      \ '<' : [':BufferMovePrevious'    , 'move prev'], +      \ 'b' : [':BufferPick'            , 'pick buffer'], +      \ 'd' : [':Bdelete'               , 'delete-buffer'], +      \ 'n' : ['bnext'                  , 'next-buffer'], +      \ 'p' : ['bprevious'              , 'previous-buffer'], +      \ '?' : ['Buffers'                , 'fzf-buffer'], +      \ } + + +" F is for fold +let g:which_key_map.F = { +    \ 'name': '+fold', +    \ 'O' : [':set foldlevel=20', 'open all'], +    \ 'C' : [':set foldlevel=0', 'close all'], +    \ 'c' : [':foldclose', 'close'], +    \ 'o' : [':foldopen', 'open'], +    \ '1' : [':set foldlevel=1', 'level1'], +    \ '2' : [':set foldlevel=2', 'level2'], +    \ '3' : [':set foldlevel=3', 'level3'], +    \ '4' : [':set foldlevel=4', 'level4'], +    \ '5' : [':set foldlevel=5', 'level5'], +    \ '6' : [':set foldlevel=6', 'level6'] +    \ } + +" s is for search powered by telescope +let g:which_key_map.s = { +      \ 'name' : '+search' , +      \ '.' : [':Telescope filetypes'                   , 'filetypes'], +      \ 'B' : [':Telescope git_branches'                , 'git branches'], +      \ 'd' : [':Telescope lsp_document_diagnostics'    , 'document_diagnostics'], +      \ 'D' : [':Telescope lsp_workspace_diagnostics'   , 'workspace_diagnostics'], +      \ 'f' : [':Telescope find_files'                  , 'files'], +      \ 'h' : [':Telescope command_history'             , 'history'], +      \ 'i' : [':Telescope media_files'                 , 'media files'], +      \ 'm' : [':Telescope marks'                       , 'marks'], +      \ 'M' : [':Telescope man_pages'                   , 'man_pages'], +      \ 'o' : [':Telescope vim_options'                 , 'vim_options'], +      \ 't' : [':Telescope live_grep'                   , 'text'], +      \ 'r' : [':Telescope registers'                   , 'registers'], +      \ 'w' : [':Telescope file_browser'                , 'buf_fuz_find'], +      \ 'u' : [':Telescope colorscheme'                 , 'colorschemes'], +      \ } +      " \ 'A' : [':Telescope builtin'                     , 'all'], +      " \ 's' : [':Telescope git_status'                  , 'git_status'], +      " \ 'b' : [':Telescope buffers'                     , 'buffers'], +      " \ ';' : [':Telescope commands'                    , 'commands'], +      " \ 'a' : [':Telescope lsp_code_actions'            , 'code_actions'], +      " \ 'c' : [':Telescope git_commits'                 , 'git_commits'], +      " \ 'C' : [':Telescope git_bcommits'                , 'git_bcommits'], +      " \ 'g' : [':Telescope tags'                        , 'tags'], +      " \ 'F' : [':Telescope git_files'                   , 'git_files'], +      " \ 'G' : [':Telescope current_buffer_tags'         , 'buffer_tags'], +      " \ 'k' : [':Telescope keymaps'                     , 'keymaps'], +      " \ 'H' : [':Telescope help_tags'                   , 'help_tags'], +      " \ 'l' : [':Telescope loclist'                     , 'loclist'], +      " \ 'O' : [':Telescope oldfiles'                    , 'oldfiles'], +      " \ 'p' : [':Telescope fd'                          , 'fd'], +      " \ 'S' : [':Telescope grep_string'                 , 'grep_string'], +      " \ 'y' : [':Telescope symbols'                     , 'symbols'], +      " \ 'Y' : [':Telescope lsp_workspace_symbols'       , 'lsp_workspace_symbols'], +      " \ 'R' : [':Telescope reloader'                    , 'reloader'], +      " \ 'z' : [':Telescope current_buffer_fuzzy_find'   , 'buf_fuz_find'], +      " \ 'P' : [':Telescope spell_suggest'               , 'spell_suggest'], + +let g:which_key_map.S = { +      \ 'name' : '+Session' , +      \ 'c' : [':SClose'          , 'Close Session']  , +      \ 'd' : [':SDelete'         , 'Delete Session'] , +      \ 'l' : [':SLoad'           , 'Load Session']     , +      \ 's' : [':Startify'        , 'Start Page']     , +      \ 'S' : [':SSave'           , 'Save Session']   , +      \ } + +" g is for git +let g:which_key_map.g = { +      \ 'name' : '+git' , +      \ 'b' : [':GitBlameToggle'                   , 'blame'], +      \ 'B' : [':GBrowse'                          , 'browse'], +      \ 'd' : [':Git diff'                         , 'diff'], +      \ 'i' : [':Gist -b'                          , 'post gist'], +      \ 'l' : [':Git log'                          , 'log'], +      \ 'S' : [':Gstatus'                          , 'status'], +      \ } +      " set these up for git signs +      "     ['n ]c'] = { expr = true, "&diff ? ']c' : '<cmd>lua require\"gitsigns\".next_hunk()<CR>'"}, +      "     ['n [c'] = { expr = true, "&diff ? '[c' : '<cmd>lua require\"gitsigns\".prev_hunk()<CR>'"}, + +      "     ['n <leader>hs'] = '<cmd>lua require"gitsigns".stage_hunk()<CR>', +      "     ['n <leader>hu'] = '<cmd>lua require"gitsigns".undo_stage_hunk()<CR>', +      "     ['n <leader>hr'] = '<cmd>lua require"gitsigns".reset_hunk()<CR>', +      "     ['n <leader>hR'] = '<cmd>lua require"gitsigns".reset_buffer()<CR>', +      "     ['n <leader>hp'] = '<cmd>lua require"gitsigns".preview_hunk()<CR>', +      "     ['n <leader>hb'] = '<cmd>lua require"gitsigns".blame_line()<CR>', +      " \ 'p' : [':Git push'                         , 'push'], +      " \ 'P' : [':Git pull'                         , 'pull'], +      " \ 'g' : [':GGrep'                            , 'git grep'], +      " \ 'D' : [':Gdiffsplit'                       , 'diff split'], +      " \ 'c' : [':Git commit'                       , 'commit'], +      " \ 'A' : [':CocCommand fzf-preview.GitStatus' , 'actions'], +      " \ 'a' : [':Git add .'                        , 'add all'], +      " \ 'A' : [':Git add %'                        , 'add current'], +      " \ 'S' : [':!git status'                      , 'status'], + +let g:which_key_map.G = { +      \ 'name' : '+gist' , +      \ 'b' : [':Gist -b'                          , 'post gist browser'], +      \ 'd' : [':Gist -d'                          , 'delete gist'], +      \ 'e' : [':Gist -e'                          , 'edit gist'], +      \ 'l' : [':Gist -l'                          , 'list public gists'], +      \ 's' : [':Gist -ls'                         , 'list starred gists'], +      \ 'm' : [':Gist -m'                          , 'post gist all buffers'], +      \ 'p' : [':Gist -P'                          , 'post public gist '], +      \ 'P' : [':Gist -p'                          , 'post private gist '], +      \ } +      " \ 'a' : [':Gist -a'                          , 'post gist anon'], + +" l is for language server protocol +let g:which_key_map.l = { +      \ 'name' : '+lsp' , +      \ 'a' : [':Lspsaga code_action'                , 'code action'], +      \ 'A' : [':Lspsaga range_code_action'          , 'selected action'], +      \ 'd' : [':Telescope lsp_document_diagnostics' , 'document diagnostics'], +      \ 'D' : [':Telescope lsp_workspace_diagnostics', 'workspace diagnostics'], +      \ 'f' : [':LspFormatting'                      , 'format'], +      \ 'H' : [':Lspsaga signature_help'             , 'signature_help'], +      \ 'I' : [':LspInfo'                            , 'lsp info'], +      \ 'l' : [':Lspsaga lsp_finder'                 , 'lsp finder'], +      \ 'L' : [':Lspsaga show_line_diagnostics'      , 'line_diagnostics'], +      \ 'o' : [':Vista!!'                            , 'outline'], +      \ 'p' : [':Lspsaga preview_definition'         , 'preview definition'], +      \ 'q' : [':Telescope quickfix'                 , 'quickfix'], +      \ 'r' : [':LspRename'                          , 'rename'], +      \ 'T' : [':LspTypeDefinition'                  , 'type defintion'], +      \ 'x' : [':cclose'                             , 'close quickfix'], +      \ 's' : [':Telescope lsp_document_symbols'     , 'document symbols'], +      \ 'S' : [':Telescope lsp_workspace_symbols'    , 'workspace symbols'], +      \ } + +" t is for terminal +let g:which_key_map.t = { +      \ 'name' : '+terminal' , +      \ ';' : [':FloatermNew --wintype=normal --height=6'       , 'terminal'], +      \ 'f' : [':FloatermNew fzf'                               , 'fzf'], +      \ 'g' : [':FloatermNew lazygit'                           , 'git'], +      \ 'd' : [':FloatermNew lazydocker'                        , 'docker'], +      \ 'n' : [':FloatermNew node'                              , 'node'], +      \ 'N' : [':FloatermNew nnn'                               , 'nnn'], +      \ 'p' : [':FloatermNew python'                            , 'python'], +      \ 'm' : [':FloatermNew lazynpm'                           , 'npm'], +      \ 't' : [':FloatermToggle'                                , 'toggle'], +      \ 'y' : [':FloatermNew ytop'                              , 'ytop'], +      \ 'u' : [':FloatermNew ncdu'                              , 'ncdu'], +      \ } +      " \ 'r' : [':FloatermNew ranger'                            , 'ranger'], + +call which_key#register('<Space>', "g:which_key_map") | 
