" vim: filetype=vim " ============================== " VIM-Plug - Plugin Manager " ============================== " ===== Vim Plugin Directory (Changes required for Windows user) let $vimplug_bundle='~/.local/share/vim/bundle' " let $vimplug_bundle='c:\_local\share\vim\bundle' " ===== List of used plugins call plug#begin($vimplug_bundle) " === Highlightings " --- Syntax highlighting for ps1 (PowerShell) Plug 'PProvost/vim-ps1' " --- For sxhkd config file Plug 'kovetskiy/sxhkd-vim' " --- For LaTeX Plug 'lervag/vimtex' " ====== " --- Goyo, simplified view for vim useful when writing long documents Plug 'junegunn/goyo.vim' " --- Line at the bottom of vim, just to make it look nice Plug 'itchyny/lightline.vim' " --- Comment a line in one press of a button (or 2 button) Plug 'tpope/vim-commentary' " === NERDTree " --- Navigate through files/folder while in vim Plug 'preservim/nerdtree' " --- Icon for nerdtree Plug 'ryanoasis/vim-devicons' " --- Tell everyone on discord that you use vim! " Plug 'hugolgst/vimsence' " ====== " -- Markdown preview, not really useful since it's only support github's md format. Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} " --- Auto complete with NCM2 (nvim-completion-manager) " Plug 'ncm2/ncm2' " Plug 'roxma/nvim-yarp' " - NCM2 sources " Plug 'ncm2/ncm2-jedi' " python " Plug 'ncm2/ncm2-racer' " rust " --- nvm built-in lsp Plug 'neovim/nvim-lspconfig' " --- Auto complete with DDC " Plug 'Shougo/ddc.vim', { 'branch': 'main' } " Plug 'vim-denops/denops.vim', { 'branch': 'main' } " " - DDC sources " Plug 'Shougo/ddc-around', { 'branch': 'main' } " Plug 'Shougo/ddc-nvim-lsp', { 'branch': 'main' } " " - DDC filters " Plug 'Shougo/ddc-matcher_head', { 'branch': 'main' } " Plug 'Shougo/ddc-sorter_rank', { 'branch': 'main' } " --- Auto complete with CMP Plug 'hrsh7th/cmp-nvim-lsp', { 'branch': 'main' } Plug 'hrsh7th/cmp-buffer', { 'branch': 'main' } Plug 'hrsh7th/cmp-path', { 'branch': 'main' } Plug 'hrsh7th/cmp-cmdline', { 'branch': 'main' } Plug 'hrsh7th/nvim-cmp', { 'branch': 'main' } " --- Indent visualization " Plug 'Yggdroot/indentLine' " --- sqlite " Plug 'lbrayner/dbext.vim' " --- Julia support Plug 'JuliaEditorSupport/julia-vim' " --- enhanced python highlighting Plug 'wookayin/semshi', {'do': ':UpdateRemotePlugins'} " --- For golang Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } " --- linting support Plug 'dense-analysis/ale' " --- For rust Plug 'rust-lang/rust.vim' Plug 'wakatime/vim-wakatime' Plug 'GutenYe/json5.vim' call plug#end() " ====================== " PlugIns Configuration " ====================== " --- deoplete " let g:deoplete#enable_at_startup = 1 " inoremap pumvisible() ? "\" : "\" " call deoplete#custom#option('ignore_sources', {'_': ['around', 'buffer']}) " " imap snipMateNextOrTrigger " " omnifuncs " augroup omnifuncs " autocmd! " autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS " autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags " autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS " autocmd FileType python setlocal omnifunc=pythoncomplete#Complete " autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags " augroup end " --- NCM2 " autocmd BufEnter * call ncm2#enable_for_buffer() " set completeopt=noinsert,menuone,noselect " " suppress the annoying 'match x of y', 'The only match' and 'Pattern not " " found' messages " set shortmess+=c " " CTRL-C doesn't trigger the InsertLeave autocmd . map to instead. " inoremap " " When the key is pressed while the popup menu is visible, it only " " hides the menu. Use this mapping to close the menu and also start a new " " line. " inoremap (pumvisible() ? "\\" : "\") " " Use to select the popup menu: " inoremap pumvisible() ? "\" : "\" " inoremap pumvisible() ? "\" : "\" " " wrap existing omnifunc " " Note that omnifunc does not run in background and may probably block the " " editor. If you don't want to be blocked by omnifunc too often, you could " " add 180ms delay before the omni wrapper: " " 'on_complete': ['ncm2#on_complete#delay', 180, " " \ 'ncm2#on_complete#omni', 'csscomplete#CompleteCSS'], " au User Ncm2Plugin call ncm2#register_source({ " \ 'name' : 'css', " \ 'priority': 9, " \ 'subscope_enable': 1, " \ 'scope': ['css','scss'], " \ 'mark': 'css', " \ 'word_pattern': '[\w\-]+', " \ 'complete_pattern': ':\s*', " \ 'on_complete': ['ncm2#on_complete#omni', 'csscomplete#CompleteCSS'], " \ }) " --- NERDTree let NERDTreeShowHidden=1 let NERDTreeMinimalUI = 1 " --- Snippet " let g:UltiSnipsExpandTrigger="" " let g:UltiSnipsJumpForwardTrigger="" " let g:UltiSnipsJumpBackwardTrigger="" " let g:UltiSnipsEditSplit="vertical" " --- lightline set laststatus=2 let g:lightline = { \'colorscheme': 'zi', \'active': { \ 'left': [ \ [ 'mode', 'paste' ], \ [ 'gitbranch', 'fugitive', 'readonly', 'filename', 'modified' ] \ ], \ 'right': [ \ [ 'lineinfo' ], \ [ 'percent' ], \ [ 'fileformat', 'fileencoding', 'filetype', ] \ ] \}, \'component': { \ 'lineinfo': ' %2l:%-2v%<', \ 'percent': '☰ %2p%%', \}, \'component_function': { \ 'gitbranch': 'FugitiveHead', \ 'fugitive': 'LightlineFugitive', \ 'filename': 'LightlineFilename' \}, \ } set noshowmode " function for lightline function! LightlineFugitive() if &ft !~? 'vimfiler' && exists('*FugitiveHead') return FugitiveHead() endif return '' endfunction function! LightlineFilename() let root = fnamemodify(get(b:, 'git_dir'), ':h') let path = expand('%:p') if path[:len(root)-1] ==# root return path[len(root)+1:] endif return expand('%') endfunction " no lightline on nerdtree augroup filetype_nerdtree au! au FileType nerdtree call s:disable_lightline_on_nerdtree() au WinEnter,BufWinEnter,TabEnter * call s:disable_lightline_on_nerdtree() augroup END fu s:disable_lightline_on_nerdtree() abort let nerdtree_winnr = index(map(range(1, winnr('$')), {_,v -> getbufvar(winbufnr(v), '&ft')}), 'nerdtree') + 1 call timer_start(0, {-> nerdtree_winnr && setwinvar(nerdtree_winnr, '&stl', '%#Normal#')}) endfu " --- Custom comments autocmd FileType xdefaults setlocal commentstring=!\ %s " --- Indent visualization let g:indentLine_setColors = 0 let g:indentLine_leadingSpaceEnabled = 1 let g:indentLine_leadingSpaceChar = '·' hi Conceal ctermfg=0 ctermbg=NONE " --- Python highlighting let g:python_highlight_all = 1 " --- DDC " " Customize global settings " " Use around source. " " https://github.com/Shougo/ddc-around " call ddc#custom#patch_global('sources', ['around', 'nvim-lsp']) " " Use matcher_head and sorter_rank. " " https://github.com/Shougo/ddc-matcher_head " " https://github.com/Shougo/ddc-sorter_rank " call ddc#custom#patch_global('sourceOptions', { " \ '_': { " \ 'matchers': ['matcher_head'], " \ 'sorters': ['sorter_rank']}, " \ }) " " Change source options " call ddc#custom#patch_global('sourceOptions', { " \ 'around': {'mark': 'A'}, " \ 'nvim-lsp': { 'mark': 'lsp', 'forceCompletionPattern': '\.|:|->' }, " \ }) " call ddc#custom#patch_global('sourceParams', { " \ 'around': {'maxSize': 500}, " \ 'nvim-lsp': { 'kindLabels': { 'Class': 'c' } }, " \ }) " " Customize settings on a filetype " call ddc#custom#patch_filetype(['rust'], 'sources', ['around', 'nvim-lsp']) " call ddc#custom#patch_filetype(['c', 'cpp'], 'sources', ['around', 'clangd']) " call ddc#custom#patch_filetype(['c', 'cpp'], 'sourceOptions', { " \ 'clangd': {'mark': 'C'}, " \ }) " call ddc#custom#patch_filetype('markdown', 'sourceParams', { " \ 'around': {'maxSize': 100}, " \ }) " " Mappings " " : completion. " inoremap " \ pumvisible() ? '' : " \ (col('.') <= 1 getline('.')[col('.') - 2] =~# '\s') ? " \ '' : ddc#manual_complete() " " : completion back. " inoremap pumvisible() ? '' : '' " " Use ddc. " call ddc#enable() " --- nvim-lsp lua << EOF local nvim_lsp = require'lspconfig' nvim_lsp.pyright.setup{} -- nvim_lsp.jedi_language_server.setup{} nvim_lsp.rust_analyzer.setup({ settings = { ["rust-analyzer"] = { assist = { importGranularity = "module", importPrefix = "by_self", }, cargo = { loadOutDirsFromCheck = true }, procMacro = { enable = true }, } } }) EOF " --- ale let g:ale_fixers = { \ "python": ["black"], \} let g:ale_linters = { \ "python": ["pflake8", "black"], \} " --- CMP lua <'] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [''] = cmp.mapping(function(fallback) if cmp.visible() and not cmp.confirm() then cmp.abort() else fallback() end end, {"i", "s"}), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif has_words_before() then cmp.complete() else fallback() -- The fallback function sends a already mapped key. In this case, it's probably ``. end end, { "i", "s" }), [""] = cmp.mapping(function() if cmp.visible() then cmp.select_prev_item() end end, { "i", "s" }), }), 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' }, }) }) -- Set configuration for specific filetype. cmp.setup.filetype('gitcommit', { sources = cmp.config.sources({ { name = 'cmp_git' }, -- You can specify the `cmp_git` source if you were installed it. }, { { name = 'buffer' }, }) }) -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline('/', { mapping = cmp.mapping.preset.cmdline(), sources = { { name = 'buffer' } } }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(':', { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = 'path' } }, { { name = 'cmdline' } }) }) -- Setup lspconfig. local capabilities = require('cmp_nvim_lsp').default_capabilities() -- Replace with each lsp server you've enabled. require('lspconfig')['pyright'].setup { capabilities = capabilities } EOF