diff --git a/dot_config/nvim/cmp_init.vim b/dot_config/nvim/cmp_init.vim new file mode 100644 index 0000000..ea5978c --- /dev/null +++ b/dot_config/nvim/cmp_init.vim @@ -0,0 +1,268 @@ +" Automatically install vim plug +let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim' +if empty(glob(data_dir . '/autoload/plug.vim')) + silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' + autocmd VimEnter * PlugInstall --sync | source $MYVIMRC +endif + +call plug#begin() +" Color Schemes +Plug 'rafi/awesome-vim-colorschemes' +Plug 'mhartington/oceanic-next' +Plug 'morhetz/gruvbox' +Plug 'joshdick/onedark.vim' + +Plug 'vim-test/vim-test' +Plug 'tpope/vim-commentary' +Plug 'tpope/vim-surround' +Plug 'sheerun/vim-polyglot' +Plug 'airblade/vim-gitgutter' +Plug 'tpope/vim-fugitive' +Plug 'mhinz/vim-signify' +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +Plug 'skywind3000/asyncrun.vim' +Plug 'jiangmiao/auto-pairs' +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } +Plug 'junegunn/fzf.vim' +" LSP resources +Plug 'neovim/nvim-lspconfig' +Plug 'williamboman/nvim-lsp-installer' +Plug 'hrsh7th/cmp-nvim-lsp' +Plug 'hrsh7th/cmp-buffer' +Plug 'hrsh7th/cmp-path' +Plug 'hrsh7th/cmp-cmdline' +Plug 'hrsh7th/nvim-cmp' + +" For vsnip users. +Plug 'hrsh7th/cmp-vsnip' +Plug 'hrsh7th/vim-vsnip' + +" For luasnip users. +" Plug 'L3MON4D3/LuaSnip' +" Plug 'saadparwaiz1/cmp_luasnip' + +" For ultisnips users. +" Plug 'SirVer/ultisnips' +" Plug 'quangnguyen30192/cmp-nvim-ultisnips' + +" For snippy users. +" Plug 'dcampos/nvim-snippy' +" Plug 'dcampos/cmp-snippy' + +Plug 'ms-jpq/chadtree', {'branch': 'chad', 'do': 'python3 -m chadtree deps'} +Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " We recommend updating the parsers on update + +call plug#end() + +set completeopt=menu,menuone,noselect + +" Set leader to comma +let mapleader="," + +" Set to open tree +nnoremap CHADopen + +lua <'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }), + [''] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }), + [''] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }), + [''] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `` mapping. + [''] = cmp.mapping({ + i = cmp.mapping.abort(), + c = cmp.mapping.close(), + }), + [''] = cmp.mapping.confirm({ select = true }), + }, + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'vsnip' }, -- For vsnip users. + -- { name = 'luasnip' }, -- For luasnip users. + -- { name = 'ultisnips' }, -- For ultisnips users. + -- { name = 'snippy' }, -- For snippy users. + }, { + { name = 'buffer' }, + }) + }) + + -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). + cmp.setup.cmdline('/', { + sources = { + { name = 'buffer' } + } + }) + + -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). + cmp.setup.cmdline(':', { + sources = cmp.config.sources({ + { name = 'path' } + }, { + { name = 'cmdline' } + }) + }) + -- Use an on_attach function to only map the following keys + -- after the language server attaches to the current buffer + local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + -- Enable completion triggered by + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + + -- See `:help vim.lsp.*` for documentation on any of the below functions + buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) + buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) + buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) + buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) + buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) + + end + + local capabilities = require('cmp_nvim_lsp').update_capabilities(vim.lsp.protocol.make_client_capabilities()) + lsp_installer.on_server_ready(function(server) + + -- (optional) Customize the options passed to the server + -- if server.name == "tsserver" then + -- opts.root_dir = function() ... end + -- end + + -- This setup() function is exactly the same as lspconfig's setup function. + -- Refer to https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md + server:setup {capabilities = capabilities, on_attach = on_attach} + end) +EOF + +map :Files + +let g:cpp_class_scope_highlight = 1 +let g:cpp_member_variable_highlight = 1 +let g:cpp_class_decl_highlight = 1 +let g:cpp_posix_standard = 1 +let g:cpp_experimental_template_highlight = 1 + +let g:airline#extensions#tabline#enabled = 1 +let g:airline#extensions#tabline#buffer_nr_show = 1 +let g:airline_powerline_fonts = 1 +let g:airline_theme='tomorrow' +let g:airline_solarized_bg='dark' +let g:airline#extensions#hunks#enabled=1 +let g:airline#extensions#branch#enabled=1 + +" Quick edit init.vim +nnoremap v :n $MYVIMRC + +" For vim-test: these Ctrl mappings work well when Caps Lock is mapped to Ctrl +nmap t :TestNearest +nmap t :TestFile +nmap t :TestSuite +nmap t :TestLast +nmap t :TestVisit +let test#strategy = "asyncrun" + +" Reloads vimrc after saving but keep cursor position +if !exists('*ReloadVimrc') + fun! ReloadVimrc() + let save_cursor = getcurpos() + source $MYVIMRC + call setpos('.', save_cursor) + endfun +endif +autocmd! BufWritePost $MYVIMRC call ReloadVimrc() + +set background=dark +" Or if you have Neovim >= 0.1.5 +if (has("termguicolors")) + set termguicolors +endif + +" Theme +syntax enable +" colorscheme gruvbox +colorscheme onedark +"colorscheme OceanicNext + +" Navigate buffers like tabs (gt & gT) +nnoremap gb :bnext +nnoremap gB :bprevious + +" TextEdit might fail if hidden is not set. +set hidden +set number + +set tabstop=4 +set shiftwidth=4 +set softtabstop=4 +set expandtab +set smarttab + +" Some servers have issues with backup files, see #649. +set nobackup +set nowritebackup + +" Give more space for displaying messages. +set cmdheight=2 + +" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable +" delays and poor user experience. +set updatetime=1000 + +" Don't pass messages to |ins-completion-menu|. +set shortmess+=c + +" Always show the signcolumn, otherwise it would shift the text each time +" diagnostics appear/become resolved. +if has("patch-8.1.1564") + " Recently vim can merge signcolumn and number column into one + set signcolumn=number +else + set signcolumn=yes +endif + +" Set termdebug +let g:termdebug_wide=1 + diff --git a/dot_config/nvim/coc_init.vim b/dot_config/nvim/coc_init.vim index b482aac..d9857de 100644 --- a/dot_config/nvim/coc_init.vim +++ b/dot_config/nvim/coc_init.vim @@ -8,22 +8,27 @@ if empty(glob(data_dir . '/autoload/plug.vim')) endif call plug#begin() +" Color Schemes +Plug 'rafi/awesome-vim-colorschemes' +Plug 'mhartington/oceanic-next' +Plug 'morhetz/gruvbox' +Plug 'joshdick/onedark.vim' + Plug 'vim-test/vim-test' Plug 'tpope/vim-commentary' Plug 'sheerun/vim-polyglot' -Plug 'mhartington/oceanic-next' Plug 'airblade/vim-gitgutter' Plug 'tpope/vim-fugitive' Plug 'mhinz/vim-signify' Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' -Plug 'morhetz/gruvbox' -Plug 'peitalin/vim-jsx-typescript' -Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'skywind3000/asyncrun.vim' Plug 'jiangmiao/auto-pairs' Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' +" LSP Resources +Plug 'peitalin/vim-jsx-typescript' +Plug 'neoclide/coc.nvim', {'branch': 'release'} call plug#end() map :Files @@ -74,7 +79,6 @@ autocmd! BufWritePost $MYVIMRC call ReloadVimrc() command! -nargs=0 Prettier :CocCommand prettier.formatFile -set background=dark " Or if you have Neovim >= 0.1.5 if (has("termguicolors")) set termguicolors @@ -82,6 +86,9 @@ endif " Theme syntax enable +set background=dark +"colorscheme OceanicNext +"colorscheme onedark colorscheme gruvbox " TextEdit might fail if hidden is not set. diff --git a/dot_config/nvim/coq_init.vim b/dot_config/nvim/coq_init.vim new file mode 100644 index 0000000..93fe19e --- /dev/null +++ b/dot_config/nvim/coq_init.vim @@ -0,0 +1,216 @@ +" Automatically install vim plug +let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim' +if empty(glob(data_dir . '/autoload/plug.vim')) + silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' + autocmd VimEnter * PlugInstall --sync | source $MYVIMRC +endif + +set completeopt=menu,menuone,noselect + +call plug#begin() +" Color Schemes +Plug 'rafi/awesome-vim-colorschemes' +Plug 'mhartington/oceanic-next' +Plug 'morhetz/gruvbox' +Plug 'joshdick/onedark.vim' + +Plug 'vim-test/vim-test' +Plug 'tpope/vim-commentary' +Plug 'tpope/vim-surround' +Plug 'airblade/vim-gitgutter' +Plug 'tpope/vim-fugitive' +Plug 'mhinz/vim-signify' +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' +Plug 'skywind3000/asyncrun.vim' +Plug 'jiangmiao/auto-pairs' +Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } +Plug 'junegunn/fzf.vim' +" Highlighting and File Navigation +Plug 'ms-jpq/chadtree', {'branch': 'chad', 'do': 'python3 -m chadtree deps'} +Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} " We recommend updating the parsers on update +Plug 'sheerun/vim-polyglot' +" LSP resources +Plug 'neovim/nvim-lspconfig' +Plug 'williamboman/nvim-lsp-installer' +Plug 'ms-jpq/coq_nvim', {'branch': 'coq'} +Plug 'ms-jpq/coq.artifacts', {'branch': 'artifacts'} +call plug#end() + +" Set leader to comma +let mapleader="," + +set omnifunc=v:lua.vim.lsp.omnifunc + +" Set to open tree +nnoremap CHADopen + +lua << EOF +vim.g.coq_settings = { + auto_start = 'shut-up', + ['keymap.jump_to_mark'] = '', + ['display.icons.mode'] = 'none', + ['clients.third_party.enabled'] = false, +} + +require'nvim-treesitter.configs'.setup { + ensure_installed = { "zig", "python", "c", "bash", "json" }, -- one of "all", "maintained" (parsers with maintainers), or a list of languages + sync_install = false, -- install languages synchronously (only applied to `ensure_installed`) + ignore_install = { "javascript" }, -- List of parsers to ignore installing + highlight = { + enable = true, -- false will disable the whole extension + -- disable = { "c", "rust" }, -- list of language that will be disabled + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, +} + +local nvim_lsp = require('lspconfig') +local coc = require "coq" -- add this +local lsp_installer = require("nvim-lsp-installer") + +-- Use an on_attach function to only map the following keys +-- after the language server attaches to the current buffer +local on_attach = function(client, bufnr) + local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end + local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end + + -- Enable completion triggered by + buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + local opts = { noremap=true, silent=true } + + -- See `:help vim.lsp.*` for documentation on any of the below functions + buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) + buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) + buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) + buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) + buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) + buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) + buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) + buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) + buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) + buf_set_keymap('n', 'e', 'lua vim.lsp.diagnostic.show_line_diagnostics()', opts) + buf_set_keymap('n', '[d', 'lua vim.lsp.diagnostic.goto_prev()', opts) + buf_set_keymap('n', ']d', 'lua vim.lsp.diagnostic.goto_next()', opts) + buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + buf_set_keymap('n', 'f', 'lua vim.lsp.buf.formatting()', opts) + +end + +-- Register a handler that will be called for all installed servers. +-- Alternatively, you may also register handlers on specific server instances instead (see example below). +lsp_installer.on_server_ready(function(server) + + -- (optional) Customize the options passed to the server + -- local opts = {} + -- if server.name == "tsserver" then + -- opts.root_dir = function() ... end + -- end + + -- This setup() function is exactly the same as lspconfig's setup function. + -- Refer to https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md + + -- Without coq.nvim: + -- server:setup(opts) + + -- With coq.nvim: + server:setup(coq.lsp_ensure_capabilities{on_attach = on_attach}) +end) +EOF + +map :Files + +let g:cpp_class_scope_highlight = 1 +let g:cpp_member_variable_highlight = 1 +let g:cpp_class_decl_highlight = 1 +let g:cpp_posix_standard = 1 +let g:cpp_experimental_template_highlight = 1 + +let g:airline#extensions#tabline#enabled = 1 +let g:airline#extensions#tabline#buffer_nr_show = 1 +let g:airline_powerline_fonts = 1 +let g:airline_theme='tomorrow' +let g:airline_solarized_bg='dark' +let g:airline#extensions#hunks#enabled=1 +let g:airline#extensions#branch#enabled=1 + +" Quick edit init.vim +nnoremap v :n $MYVIMRC + +" For vim-test: these Ctrl mappings work well when Caps Lock is mapped to Ctrl +nmap t :TestNearest +nmap t :TestFile +nmap t :TestSuite +nmap t :TestLast +nmap t :TestVisit +let test#strategy = "asyncrun" + +" Reloads vimrc after saving but keep cursor position +if !exists('*ReloadVimrc') + fun! ReloadVimrc() + let save_cursor = getcurpos() + source $MYVIMRC + call setpos('.', save_cursor) + endfun +endif +autocmd! BufWritePost $MYVIMRC call ReloadVimrc() + +" Or if you have Neovim >= 0.1.5 +if (has("termguicolors")) + set termguicolors +endif + +" Theme +set t_Co=256 +syntax enable +set background=dark +colorscheme onedark + +" Navigate buffers like tabs (gt & gT) +nnoremap gb :bnext +nnoremap gB :bprevious + +" TextEdit might fail if hidden is not set. +set hidden +set number + +set tabstop=4 +set shiftwidth=4 +set softtabstop=4 +set expandtab +set smarttab + +" Some servers have issues with backup files, see #649. +set nobackup +set nowritebackup + +" Give more space for displaying messages. +set cmdheight=2 + +" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable +" delays and poor user experience. +set updatetime=1000 + +" Don't pass messages to |ins-completion-menu|. +set shortmess+=c + +" Always show the signcolumn, otherwise it would shift the text each time +" diagnostics appear/become resolved. +if has("patch-8.1.1564") + " Recently vim can merge signcolumn and number column into one + set signcolumn=number +else + set signcolumn=yes +endif + +" Set termdebug +let g:termdebug_wide=1 + diff --git a/dot_zshrc b/dot_zshrc index 33a21a4..d25eb46 100644 --- a/dot_zshrc +++ b/dot_zshrc @@ -108,6 +108,12 @@ export EDITOR="nvim" nvimc() { nvim -u ~/.config/nvim/coc_init.vim $1 } +nvimq() { + nvim -u ~/.config/nvim/coq_init.vim $1 +} +nvimp() { + nvim -u ~/.config/nvim/cmp_init.vim $1 +} [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh