Created
October 19, 2022 02:17
-
-
Save elulcao/9c974e395ecc533be4ae928ba102d95f to your computer and use it in GitHub Desktop.
neovim init configuration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" vim-bootstrap 2022-08-30 02:14:37 | |
"***************************************************************************** | |
"" Vim-Plug core | |
"***************************************************************************** | |
let vimplug_exists=expand('~/.config/nvim/autoload/plug.vim') | |
if has('win32')&&!has('win64') | |
let curl_exists=expand('C:\Windows\Sysnative\curl.exe') | |
else | |
let curl_exists=expand('curl') | |
endif | |
let g:vim_bootstrap_langs = "go,python" | |
let g:vim_bootstrap_editor = "nvim" | |
let g:vim_bootstrap_theme = "dracula" | |
let g:vim_bootstrap_frams = "" | |
if !filereadable(vimplug_exists) | |
if !executable(curl_exists) | |
echoerr "You have to install curl or first install vim-plug yourself!" | |
execute "q!" | |
endif | |
echo "Installing Vim-Plug..." | |
echo "" | |
silent exec "!"curl_exists" -fLo " . shellescape(vimplug_exists) . " --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" | |
let g:not_finish_vimplug = "yes" | |
autocmd VimEnter * PlugInstall | |
endif | |
" Required: | |
call plug#begin(expand('~/.config/nvim/plugged')) | |
"***************************************************************************** | |
"" Prepare for plugins | |
"***************************************************************************** | |
let g:make = 'gmake' | |
if exists('make') | |
let g:make = 'make' | |
endif | |
"***************************************************************************** | |
"" Plug install packages | |
"***************************************************************************** | |
Plug 'scrooloose/nerdtree' | |
Plug 'tpope/vim-commentary' | |
Plug 'tpope/vim-fugitive' | |
Plug 'vim-airline/vim-airline' | |
Plug 'vim-airline/vim-airline-themes' | |
Plug 'airblade/vim-gitgutter' | |
Plug 'vim-scripts/grep.vim' | |
Plug 'vim-scripts/CSApprox' | |
Plug 'Raimondi/delimitMate' | |
Plug 'majutsushi/tagbar' | |
Plug 'dense-analysis/ale' | |
Plug 'Yggdroot/indentLine' | |
Plug 'editor-bootstrap/vim-bootstrap-updater' | |
Plug 'tpope/vim-rhubarb' " required by fugitive to :Gbrowse | |
Plug 'xolox/vim-misc' | |
Plug 'xolox/vim-session' | |
Plug 'SirVer/ultisnips' | |
Plug 'honza/vim-snippets' | |
Plug 'dracula/vim', { 'as': 'dracula' } | |
Plug 'pedrohdz/vim-yaml-folds' | |
Plug 'ryanoasis/vim-devicons' | |
Plug 'dhruvasagar/vim-zoom' | |
Plug 'github/copilot.vim' | |
Plug 'schickling/vim-bufonly' | |
Plug 'folke/which-key.nvim' | |
Plug 'akinsho/toggleterm.nvim' | |
Plug 'vimwiki/vimwiki' | |
Plug 'Shougo/vimproc.vim', {'do': g:make} | |
Plug 'davidhalter/jedi-vim' | |
Plug 'raimon49/requirements.txt.vim', {'for': 'requirements'} | |
Plug 'fatih/vim-go', {'do': ':GoInstallBinaries'} | |
Plug 'frazrepo/vim-rainbow' | |
Plug 'wadackel/vim-dogrun' | |
Plug 'mrk21/yaml-vim' | |
Plug 'google/vim-maktaba' | |
Plug 'google/vim-codefmt' | |
Plug 'google/vim-glaive' | |
Plug 'drewtempelmeyer/palenight.vim' | |
if isdirectory('/usr/local/opt/fzf') | |
Plug '/usr/local/opt/fzf' | Plug 'junegunn/fzf.vim' | |
else | |
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } | |
Plug 'junegunn/fzf.vim' | |
endif | |
" Include user's extra bundle | |
if filereadable(expand("~/.config/nvim/local_bundles.vim")) | |
source ~/.config/nvim/local_bundles.vim | |
endif | |
call plug#end() | |
" Required: | |
filetype plugin indent on | |
"***************************************************************************** | |
"" Basic Setup | |
"*****************************************************************************" | |
syntax on | |
colorscheme dracula | |
" Encoding | |
set encoding=utf-8 | |
set fileencoding=utf-8 | |
set fileencodings=utf-8 | |
set ttyfast | |
" Fix backspace indent | |
set backspace=indent,eol,start | |
" Tabs. May be overridden by autocmd rules | |
set tabstop=4 | |
set softtabstop=0 | |
set shiftwidth=4 | |
set expandtab | |
" Enable hidden buffers | |
set hidden | |
" Searching | |
set hlsearch | |
set incsearch | |
set ignorecase | |
set smartcase | |
set ff=unix | |
set ffs=unix,mac | |
set colorcolumn=79,99 " Mark at 80 characters" | |
set cursorline " Highlight the current line" | |
set modifiable | |
if exists('$SHELL') | |
set shell=$SHELL | |
else | |
set shell=/bin/sh | |
endif | |
" Map leader to , | |
let mapleader=',' | |
let no_buffers_menu=1 | |
" session management | |
let g:session_directory = "~/.config/nvim/session" | |
let g:session_autoload = "no" | |
let g:session_autosave = "yes" | |
let g:session_command_aliases = 1 | |
" copilot | |
let g:copilot_enabled = 1 | |
let g:copilot_filetypes = { | |
\ '*': v:true, } | |
" dracula | |
let g:dracula_colorterm = 0 | |
" snippets | |
let g:UltiSnipsExpandTrigger="<tab>" | |
let g:UltiSnipsJumpForwardTrigger="<tab>" | |
let g:UltiSnipsJumpBackwardTrigger="<c-b>" | |
let g:UltiSnipsEditSplit="vertical" | |
" ale | |
let g:ale_linters = {} | |
" Tagbar | |
let g:tagbar_autofocus = 1 | |
" go | |
function! s:build_go_files() | |
let l:file = expand('%') | |
if l:file =~# '^\f\+_test\.go$' | |
call go#test#Test(0, 1) | |
elseif l:file =~# '^\f\+\.go$' | |
call go#cmd#Build(0) | |
endif | |
endfunction | |
let g:go_list_type = "quickfix" | |
let g:go_fmt_command = "goimports" | |
let g:go_fmt_fail_silently = 1 | |
let g:go_fmt_autosave = 1 | |
let g:go_fmt_command = "goimports" | |
let g:go_highlight_types = 1 | |
let g:go_highlight_fields = 1 | |
let g:go_highlight_functions = 1 | |
let g:go_highlight_methods = 1 | |
let g:go_highlight_operators = 1 | |
let g:go_highlight_build_constraints = 1 | |
let g:go_highlight_structs = 1 | |
let g:go_highlight_generate_tags = 1 | |
let g:go_highlight_space_tab_error = 0 | |
let g:go_highlight_array_whitespace_error = 0 | |
let g:go_highlight_trailing_whitespace_error = 0 | |
let g:go_highlight_extra_types = 1 | |
" python | |
let python_highlight_all = 1 | |
let g:jedi#popup_on_dot = 0 | |
let g:jedi#goto_assignments_command = "<leader>g" | |
let g:jedi#goto_definitions_command = "<leader>d" | |
let g:jedi#documentation_command = "K" | |
let g:jedi#usages_command = "<leader>n" | |
let g:jedi#rename_command = "<leader>r" | |
let g:jedi#show_call_signatures = "0" | |
let g:jedi#completions_command = "<C-Space>" | |
let g:jedi#smart_auto_mappings = 0 | |
" vim-airline | |
let g:airline_powerline_fonts = 1 | |
let g:airline#extensions#virtualenv#enabled = 1 | |
if !exists('g:airline_symbols') | |
let g:airline_symbols = {} | |
endif | |
if !exists('g:airline_powerline_fonts') | |
let g:airline#extensions#tabline#left_sep = ' ' | |
let g:airline#extensions#tabline#left_alt_sep = '|' | |
let g:airline_left_sep = '▶' | |
let g:airline_left_alt_sep = '»' | |
let g:airline_right_sep = '◀' | |
let g:airline_right_alt_sep = '«' | |
let g:airline#extensions#branch#prefix = '⤴' "➔, ➥, ⎇ | |
let g:airline#extensions#readonly#symbol = '⊘' | |
let g:airline#extensions#linecolumn#prefix = '¶' | |
let g:airline#extensions#paste#symbol = 'ρ' | |
let g:airline_symbols.linenr = '␊' | |
let g:airline_symbols.branch = '⎇' | |
let g:airline_symbols.paste = 'ρ' | |
let g:airline_symbols.paste = 'Þ' | |
let g:airline_symbols.paste = '∥' | |
let g:airline_symbols.whitespace = 'Ξ' | |
else | |
let g:airline#extensions#tabline#left_sep = '' | |
let g:airline#extensions#tabline#left_alt_sep = '' | |
" powerline symbols | |
let g:airline_left_sep = '' | |
let g:airline_left_alt_sep = '' | |
let g:airline_right_sep = '' | |
let g:airline_right_alt_sep = '' | |
let g:airline_symbols.branch = '' | |
let g:airline_symbols.readonly = '' | |
let g:airline_symbols.linenr = '' | |
endif | |
"***************************************************************************** | |
"" Visual Settings | |
"***************************************************************************** | |
set ruler | |
set number " Show line numbers" | |
set relativenumber " File is numbered relative to the cursor’s current position" | |
set smarttab " Enable smart-tabs" | |
set autoread | |
set termguicolors | |
" Better command line completion | |
set wildmenu | |
" mouse support | |
set mouse=a | |
set mousemodel=popup | |
set t_Co=256 | |
set guioptions=egmrti | |
set gfn=Monospace\ 10 | |
if has("gui_running") | |
if has("gui_mac") || has("gui_macvim") | |
set guifont=Menlo:h12 | |
set transparency=7 | |
endif | |
else | |
let g:CSApprox_loaded = 1 | |
" IndentLine | |
let g:indentLine_enabled = 1 | |
let g:indentLine_concealcursor = '' | |
let g:indentLine_char = '┆' | |
let g:indentLine_faster = 1 | |
endif | |
" Disable the blinking cursor. | |
set gcr=a:blinkon0 | |
au TermEnter * setlocal scrolloff=0 | |
au TermLeave * setlocal scrolloff=3 | |
" Status bar | |
set laststatus=2 | |
set showmode | |
" Use modeline overrides | |
set modeline | |
set modelines=10 | |
set title | |
set titleold="Terminal" | |
set titlestring=%F | |
set statusline=%F%m%r%h%w%=(%{&ff}/%Y)\ (line\ %l\/%L,\ col\ %c)\ | |
" Search mappings: These will make it so that going to the next one in a | |
" search will center on the line it's found in. | |
nnoremap n nzzzv | |
nnoremap N Nzzzv | |
if exists("*fugitive#statusline") | |
set statusline+=%{fugitive#statusline()} | |
endif | |
" vim-airline | |
let g:airline_theme = 'powerlineish' | |
let g:airline#extensions#branch#enabled = 1 | |
let g:airline#extensions#ale#enabled = 1 | |
let g:airline#extensions#tabline#enabled = 1 | |
let g:airline#extensions#tagbar#enabled = 1 | |
let g:airline_skip_empty_sections = 1 | |
" vimwiki | |
let g:vimwiki_list = [{'path': '~/Documents/vimwiki/', | |
\ 'syntax': 'markdown', 'ext': '.wiki'}] | |
"***************************************************************************** | |
"" Abbreviations | |
"***************************************************************************** | |
" no one is really happy until you have this shortcuts | |
cnoreabbrev W! w! | |
cnoreabbrev Q! q! | |
cnoreabbrev Qall! qall! | |
cnoreabbrev Wq wq | |
cnoreabbrev Wa wa | |
cnoreabbrev wQ wq | |
cnoreabbrev WQ wq | |
cnoreabbrev W w | |
cnoreabbrev Q q | |
cnoreabbrev Qall qall | |
" NERDTree configuration | |
let g:nerdtree_tabs_focus_on_files = 1 | |
let g:NERDTreeShowHidden = 1 | |
let g:NERDTreeChDirMode = 2 | |
let g:NERDTreeIgnore = ['\.DS_Store$', 'node_modules', '\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__', '\.swp$'] | |
let g:NERDTreeSortOrder = ['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$'] | |
let g:NERDTreeShowBookmarks = 1 | |
let g:NERDTreeMapOpenInTabSilent = '<RightMouse>' | |
let g:NERDTreeWinSize = 50 | |
let g:NERDTreeQuitOnOpen = 0 " Automatically close NERDTree when you open a file" | |
let g:NERDTreeNaturalSort = 1 " Autocmd vimenter * NERDTree" | |
let g:NERDTreeKeepTreeInNewTab = 1 | |
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite,*node_modules/ | |
" grep.vim | |
nnoremap <silent> <leader>f :Rgrep<CR> | |
let Grep_Default_Options = '-IR' | |
let Grep_Skip_Files = '*.log *.db' | |
let Grep_Skip_Dirs = '.git node_modules' | |
" terminal emulation | |
nnoremap <silent> <leader>sh :terminal<CR> | |
" F[0-9] map | |
nnoremap <silent> <F3> :NERDTree<CR> | |
nnoremap <silent> <F4> :NERDTreeFind<CR> | |
nnoremap <silent> <F5> :NERDTreeToggle<CR> | |
nnoremap <silent> <F6> :BufOnly<CR> | |
nnoremap <silent> <F7> :TagbarToggle<CR> | |
nnoremap <silent> <F8> :set nonumber! norelativenumber!<CR> | |
nnoremap <silent> <F9> :set invpaste paste?<CR> | |
"***************************************************************************** | |
"" Commands | |
"***************************************************************************** | |
" remove trailing whitespaces | |
command! FixWhitespace :%s/\s\+$//e | |
"***************************************************************************** | |
"" Functions | |
"***************************************************************************** | |
if !exists('*s:setupWrapping') | |
function s:setupWrapping() | |
set wrap | |
set wm=2 | |
set textwidth=79 | |
endfunction | |
endif | |
"***************************************************************************** | |
"" Autocmd Rules | |
"***************************************************************************** | |
" The PC is fast enough, do syntax highlight syncing from start unless 200 lines | |
augroup vimrc-sync-fromstart | |
autocmd! | |
autocmd BufEnter * :syntax sync maxlines=200 | |
augroup END | |
" Remember cursor position | |
augroup vimrc-remember-cursor-position | |
autocmd! | |
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif | |
augroup END | |
" txt | |
augroup vimrc-wrapping | |
autocmd! | |
autocmd BufRead,BufNewFile *.txt call s:setupWrapping() | |
augroup END | |
" make/cmake | |
augroup vimrc-make-cmake | |
autocmd! | |
autocmd FileType make setlocal noexpandtab | |
autocmd BufNewFile,BufRead CMakeLists.txt setlocal filetype=cmake | |
augroup END | |
augroup vimrc-trailing-whitespace | |
autocmd! | |
autocmd BufWritePre * :%s/\s\+$//e | |
augroup END | |
"***************************************************************************** | |
"" Mappings | |
"***************************************************************************** | |
" Split | |
noremap <Leader>h :<C-u>split<CR> | |
noremap <Leader>v :<C-u>vsplit<CR> | |
" Git | |
noremap <Leader>ga :Gwrite<CR> | |
noremap <Leader>gc :Git commit --verbose<CR> | |
noremap <Leader>gsh :Git push<CR> | |
noremap <Leader>gll :Git pull<CR> | |
noremap <Leader>gs :Git<CR> | |
noremap <Leader>gb :Git blame<CR> | |
noremap <Leader>gd :Gvdiffsplit<CR> | |
noremap <Leader>gr :GRemove<CR> | |
" session management | |
nnoremap <leader>so :OpenSession<Space> | |
nnoremap <leader>ss :SaveSession<Space> | |
nnoremap <leader>sd :DeleteSession<CR> | |
nnoremap <leader>sc :CloseSession<CR> | |
" Tabs | |
nnoremap <Tab> gt | |
nnoremap <S-Tab> gT | |
nnoremap <silent> <S-t> :tabnew<CR> | |
" Set working directory | |
nnoremap <leader>. :lcd %:p:h<CR> | |
" Opens an edit command with the path of the currently edited file filled in | |
noremap <Leader>e :e <C-R>=expand("%:p:h") . "/" <CR> | |
" Opens a tab edit command with the path of the currently edited file filled | |
noremap <Leader>te :tabe <C-R>=expand("%:p:h") . "/" <CR> | |
" fzf.vim | |
set wildmode=list:longest,list:full | |
set wildignore+=*.o,*.obj,.git,*.rbc,*.pyc,__pycache__ | |
let $FZF_DEFAULT_COMMAND = "find * -path '*/\.*' -prune -o -path 'node_modules/**' -prune -o -path 'target/**' -prune -o -path 'dist/**' -prune -o -type f -print -o -type l -print 2> /dev/null" | |
" The Silver Searcher | |
if executable('ag') | |
let $FZF_DEFAULT_COMMAND = 'ag --hidden --ignore .git -g ""' | |
set grepprg=ag\ --nogroup\ --nocolor | |
endif | |
" ripgrep | |
if executable('rg') | |
let $FZF_DEFAULT_COMMAND = 'rg --files --hidden --follow --glob "!.git/*"' | |
set grepprg=rg\ --vimgrep | |
command! -bang -nargs=* Find call fzf#vim#grep('rg --column --line-number --no-heading --fixed-strings --ignore-case --hidden --follow --glob "!.git/*" --color "always" '.shellescape(<q-args>).'| tr -d "\017"', 1, <bang>0) | |
endif | |
cnoremap <C-P> <C-R>=expand("%:p:h") . "/" <CR> | |
nnoremap <silent> <leader>b :Buffers<CR> | |
nnoremap <silent> <leader>e :FZF -m<CR> | |
"Recovery commands from history through FZF | |
nmap <leader>y :History:<CR> | |
" Disable visualbell | |
set noerrorbells visualbell t_vb= | |
if has('autocmd') | |
autocmd GUIEnter * set visualbell t_vb= | |
endif | |
" Copy/Paste/Cut | |
if has('clipboard') | |
if has('unnamedplus') " When possible use + register for copy-paste | |
set clipboard=unnamed,unnamedplus | |
else " On mac and Windows, use * register for copy-paste | |
set clipboard=unnamed | |
endif | |
endif | |
noremap YY "+y<CR> | |
noremap <leader>p "+gP<CR> | |
noremap XX "+x<CR> | |
if has('macunix') | |
" pbcopy for OSX copy/paste | |
vmap <C-x> :!pbcopy<CR> | |
vmap <C-c> :w !pbcopy<CR><CR> | |
endif | |
" Buffer nav | |
noremap <leader>z :bp<CR> | |
noremap <leader>q :bp<CR> | |
noremap <leader>x :bn<CR> | |
noremap <leader>w :bn<CR> | |
" Close buffer | |
noremap <leader>c :bd<CR> | |
" Clean search (highlight) | |
nnoremap <silent> <leader><space> :noh<cr> | |
" Switching windows | |
noremap <C-h> <C-w>h | |
noremap <C-j> <C-w>j | |
noremap <C-k> <C-w>k | |
noremap <C-l> <C-w>l | |
" Vmap for maintain Visual Mode after shifting > and < | |
vmap < <gv | |
vmap > >gv | |
" Move visual block | |
vnoremap J :m '>+1<CR>gv=gv | |
vnoremap K :m '<-2<CR>gv=gv | |
" Open current line on GitHub | |
nnoremap <Leader>o :GBrowse<CR> | |
"***************************************************************************** | |
"" Custom configs | |
"***************************************************************************** | |
" space by language | |
autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 | |
augroup completion_preview_close | |
autocmd! | |
if v:version > 703 || v:version == 703 && has('patch598') | |
autocmd CompleteDone * if !&previewwindow && &completeopt =~ 'preview' | silent! pclose | endif | |
endif | |
augroup END | |
augroup go | |
au! | |
au Filetype go command! -bang A call go#alternate#Switch(<bang>0, 'edit') | |
au Filetype go command! -bang AV call go#alternate#Switch(<bang>0, 'vsplit') | |
au Filetype go command! -bang AS call go#alternate#Switch(<bang>0, 'split') | |
au Filetype go command! -bang AT call go#alternate#Switch(<bang>0, 'tabe') | |
au FileType go nmap <Leader>dd <Plug>(go-def-vertical) | |
au FileType go nmap <Leader>dv <Plug>(go-doc-vertical) | |
au FileType go nmap <Leader>db <Plug>(go-doc-browser) | |
au FileType go nmap <leader>r <Plug>(go-run) | |
au FileType go nmap <leader>t <Plug>(go-test) | |
au FileType go nmap <Leader>gt <Plug>(go-coverage-toggle) | |
au FileType go nmap <Leader>i <Plug>(go-info) | |
au FileType go nmap <silent> <Leader>l <Plug>(go-metalinter) | |
au FileType go nmap <C-g> :GoDecls<cr> | |
au FileType go nmap <leader>dr :GoDeclsDir<cr> | |
au FileType go imap <C-g> <esc>:<C-u>GoDecls<cr> | |
au FileType go imap <leader>dr <esc>:<C-u>GoDeclsDir<cr> | |
au FileType go nmap <leader>rb :<C-u>call <SID>build_go_files()<CR> | |
augroup END | |
" ale | |
:call extend(g:ale_linters, { | |
\"go": ['golint', 'go vet'], }) | |
" python | |
augroup vimrc-python | |
autocmd! | |
autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=8 colorcolumn=79 | |
\ cinwords=if,elif,else,for,while,try,except,finally,def,class,with | |
\ cinwords=if,elif,else,for,while,try,except,finally,def,class,with | |
augroup END | |
" ale | |
:call extend(g:ale_linters, { | |
\'python': ['flake8'], }) | |
"***************************************************************************** | |
" | |
"***************************************************************************** | |
" Include user's local vim config | |
if filereadable(expand("~/.config/nvim/local_init.vim")) | |
source ~/.config/nvim/local_init.vim | |
endif | |
"***************************************************************************** | |
" Format files | |
com! FormatJSON %!python -m json.tool |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment