From 570e143562b382d82b3e691cafe7bdf0f2d25160 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 15 Mar 2021 12:58:57 -0400 Subject: support vscode --- README.md | 16 +++++++- init.lua | 71 +++++++++++++++++---------------- lua/nv-vscode/init.vim | 105 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 36 deletions(-) create mode 100644 lua/nv-vscode/init.vim diff --git a/README.md b/README.md index a0e88554..d9cee445 100644 --- a/README.md +++ b/README.md @@ -22,19 +22,31 @@ cd ~ sudo rm -r neovim ``` +## VSCode support + +After installing the Neovim extension in VSCode + +Point the nvim path to your `nvim` binary + +Point your `init.vim` path to: + +```vim +$HOME/.config/nvim/lua/nv-vscode/init.vim +``` + ## TODO **HIGH PRIORITY** -- add vscode support - snippet support +- update whichkey bindings - add lots of lsp - react commenting - better autoimport - toggle virtual text diagnostics **LOW PRIORITY** +- improve VSCode support - move language servers not installed with npm to neovim local share location -- update whichkey bindings - more handsome/modern galaxyline - potentially custom colorscheme - look into autoinstall lsp diff --git a/init.lua b/init.lua index 918e0710..6823db04 100644 --- a/init.lua +++ b/init.lua @@ -1,37 +1,40 @@ --- General mappings -require('plugins') -require('keymappings') -require('settings') -require('colorscheme') +if vim.g.vscode then + vim.cmd('source ~/.config/nvim/lua/nv-vscode/init.vim') +else + -- General mappings + require('plugins') + require('keymappings') + require('settings') + require('colorscheme') --- Plugins -require('nv-colorizer') -require('nv-nvimtree') -require('nv-treesitter') -require('nv-galaxyline') -require('nv-barbar') -require('nv-gitsigns') -require('nv-nvim-autopairs') -require('nv-kommentary') -require('nv-quickscope') -require('nv-rnvimr') -require('nv-startify') -require('nv-telescope') -require('nv-floaterm') -require('nv-vim-rooter') -require('nv-lspkind') -require('nv-hop') -require('nv-compe') -require('nv-closetag') -require('nv-gitblame') + -- Plugins + require('nv-colorizer') + require('nv-nvimtree') + require('nv-treesitter') + require('nv-galaxyline') + require('nv-barbar') + require('nv-gitsigns') + require('nv-nvim-autopairs') + require('nv-kommentary') + require('nv-quickscope') + require('nv-rnvimr') + require('nv-startify') + require('nv-telescope') + require('nv-floaterm') + require('nv-vim-rooter') + require('nv-lspkind') + require('nv-hop') + require('nv-compe') + require('nv-closetag') + require('nv-gitblame') --- Which Key (Hope to replace with Lua plugin someday) -vim.cmd('source ~/.config/nvim/lua/nv-whichkey/init.vim') + -- Which Key (Hope to replace with Lua plugin someday) + vim.cmd('source ~/.config/nvim/lua/nv-whichkey/init.vim') --- LSP -require('lsp') -require('utils') -require('lsp.lua-ls') -require('lsp.bash-ls') -require('lsp.js-ts-ls') -vim.cmd('highlight default link gitblame SpecialComment') + -- LSP + require('lsp') + require('utils') + require('lsp.lua-ls') + require('lsp.bash-ls') + require('lsp.js-ts-ls') +end diff --git a/lua/nv-vscode/init.vim b/lua/nv-vscode/init.vim new file mode 100644 index 00000000..9ca19a3b --- /dev/null +++ b/lua/nv-vscode/init.vim @@ -0,0 +1,105 @@ +" 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(''), '[^. ]*$') + 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 split('h', ) +command! -complete=file -nargs=? Vsplit call split('v', ) +command! -complete=file -nargs=? New call split('h', '__vscode_new__') +command! -complete=file -nargs=? Vnew call split('v', '__vscode_new__') +command! -bang Only if == '!' | call closeOtherEditors() | else | call VSCodeNotify('workbench.action.joinAllGroups') | endif + +" Better Navigation +nnoremap :call VSCodeNotify('workbench.action.navigateDown') +xnoremap :call VSCodeNotify('workbench.action.navigateDown') +nnoremap :call VSCodeNotify('workbench.action.navigateUp') +xnoremap :call VSCodeNotify('workbench.action.navigateUp') +nnoremap :call VSCodeNotify('workbench.action.navigateLeft') +xnoremap :call VSCodeNotify('workbench.action.navigateLeft') +nnoremap :call VSCodeNotify('workbench.action.navigateRight') +xnoremap :call VSCodeNotify('workbench.action.navigateRight') + +nnoremap gr call VSCodeNotify('editor.action.goToReferences') + +" Bind C-/ to vscode commentary since calling from vscode produces double comments due to multiple cursors +xnoremap vscodeCommentary() +nnoremap vscodeCommentary() . '_' + +nnoremap _ :call VSCodeNotify('workbench.action.toggleEditorWidths') + +nnoremap :call VSCodeNotify('whichkey.show') +xnoremap :call openWhichKeyInVisualMode() + +xnoremap :call openVSCodeCommandsInVisualMode() + +xmap gc VSCodeCommentary +nmap gc VSCodeCommentary +omap gc VSCodeCommentary +nmap gcc VSCodeCommentaryLine -- cgit v1.2.3