"***************************************************************************** "" Vim-Plug core "***************************************************************************** let vimplug_exists=expand('~/.config/nvim/autoload/plug.vim') let curl_exists=expand('curl') let g:vim_bootstrap_langs = "html,javascript,lua,php,python" let g:vim_bootstrap_editor = "nvim" " nvim or vim let g:vim_bootstrap_theme = "molokai" 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')) "***************************************************************************** "" Plug install packages "***************************************************************************** " file management Plug 'scrooloose/nerdtree' Plug 'jistr/vim-nerdtree-tabs' " coding comments "Plug 'tpope/vim-commentary' " git management "Plug 'tpope/vim-fugitive' Plug 'airblade/vim-gitgutter' " better status line Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' " grep tools "Plug 'vim-scripts/grep.vim' " translates gvim colorschemes to work better in terminal "Plug 'vim-scripts/CSApprox' " quote, bracket, paren completion Plug 'Raimondi/delimitMate' " displays code outline in sidebar "Plug 'majutsushi/tagbar' " asynchronous lint engine "Plug 'dense-analysis/ale' " indent visualization Plug 'Yggdroot/indentLine' " bootstrap support "Plug 'editor-bootstrap/vim-bootstrap-updater' "Autoreload files when changed externally Plug 'TheZoq2/neovim-auto-autoread' set autoread autocmd VimEnter * if exists(':AutoreadLoop') | AutoreadLoop | endif Plug 'tpope/vim-rhubarb' " required by fugitive to :GBrowse Plug 'tomasr/molokai' " colorscheme 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 let g:make = 'gmake' if exists('make') let g:make = 'make' endif Plug 'Shougo/vimproc.vim', {'do': g:make} "" Vim-Session Plug 'xolox/vim-misc' Plug 'xolox/vim-session' "" Snippets "Plug 'SirVer/ultisnips' "Plug 'honza/vim-snippets' "***************************************************************************** "" Custom bundles "***************************************************************************** " markdown Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'} Plug 'MeanderingProgrammer/render-markdown.nvim' " html "Plug 'hail2u/vim-css3-syntax' "Plug 'gko/vim-coloresque' " annoying in non-html "Plug 'tpope/vim-haml' "Plug 'mattn/emmet-vim' " javascript "Plug 'jelera/vim-javascript-syntax' " lua "Plug 'xolox/vim-lua-ftplugin' "Plug 'xolox/vim-lua-inspect' " php "Plug 'phpactor/phpactor', {'for': 'php', 'do': 'composer install --no-dev -o'} "Plug 'stephpy/vim-php-cs-fixer' " python "" Python Bundle "Plug 'davidhalter/jedi-vim' "Plug 'raimon49/requirements.txt.vim', {'for': 'requirements'} "***************************************************************************** "" Additional Plugins (Advanced) "***************************************************************************** " fzf - Fuzzy finder for files, buffers, and more Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' } Plug 'junegunn/fzf.vim' let g:fzf_layout = { 'down': '~40%' } let g:fzf_preview_window = 'right:60%' let g:fzf_action = { \ 'ctrl-t': 'tab split', \ 'ctrl-x': 'split', \ 'ctrl-v': 'vsplit' \ } "***************************************************************************** "***************************************************************************** "" 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 "*****************************************************************************" "" Encoding set encoding=utf-8 set fileencoding=utf-8 set fileencodings=utf-8 "" 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 "" Map leader to , let mapleader=',' "" Enable hidden buffers set hidden "" Searching set hlsearch set incsearch set ignorecase set smartcase set fileformats=unix,dos,mac if exists('$SHELL') set shell=$SHELL else set shell=/bin/sh endif " session management let g:session_directory = "~/.config/nvim/session" let g:session_autoload = "no" let g:session_autosave = "no" let g:session_command_aliases = 1 "***************************************************************************** "" Visual Settings "***************************************************************************** syntax on set ruler set number let no_buffers_menu=1 colorscheme molokai " Better command line completion set wildmenu " mouse support set mouse= set mousemodel=popup set t_Co=256 set gfn=Monospace\ 10 "set guioptions=egmrti 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 "" 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 "***************************************************************************** "" 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:NERDTreeChDirMode=2 let g:NERDTreeIgnore=['node_modules','\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__'] let g:NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$'] let g:NERDTreeShowBookmarks=1 let g:nerdtree_tabs_focus_on_files=1 let g:NERDTreeMapOpenInTabSilent = '' let g:NERDTreeWinSize = 50 set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite,*node_modules/ nnoremap :NERDTreeFind nnoremap :NERDTreeToggle " grep.vim nnoremap f :Rgrep let Grep_Default_Options = '-IR' let Grep_Skip_Files = '*.log *.db' let Grep_Skip_Dirs = '.git node_modules' " terminal emulation nnoremap sh :terminal "***************************************************************************** "" 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 set autoread "***************************************************************************** "" Mappings "***************************************************************************** "" Split noremap h :split noremap v :vsplit "" Git noremap ga :Gwrite noremap gc :Git commit --verbose noremap gsh :Git push noremap gll :Git pull noremap gs :Git noremap gb :Git blame noremap gd :Gvdiffsplit noremap gr :GRemove " session management nnoremap so :OpenSession nnoremap ss :SaveSession nnoremap sd :DeleteSession nnoremap sc :CloseSession "" Tabs nnoremap gt nnoremap gT nnoremap :tabnew "" Set working directory nnoremap . :lcd %:p:h "" Opens an edit command with the path of the currently edited file filled in noremap e :e =expand("%:p:h") . "/" "" Opens a tab edit command with the path of the currently edited file filled noremap te :tabe =expand("%:p:h") . "/" "" 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().'| tr -d "\017"', 1, 0) endif cnoremap =expand("%:p:h") . "/" nnoremap b :Buffers nnoremap e :FZF -m "Recovery commands from history through FZF nmap y :History: " snippets let g:UltiSnipsExpandTrigger="" let g:UltiSnipsJumpForwardTrigger="" let g:UltiSnipsJumpBackwardTrigger="" let g:UltiSnipsEditSplit="vertical" " ale let g:ale_linters = {} " Tagbar nmap :TagbarToggle let g:tagbar_autofocus = 1 " Disable visualbell set noerrorbells visualbell t_vb= if has('autocmd') autocmd GUIEnter * set visualbell t_vb= endif "" Copy/Paste/Cut if has('unnamedplus') set clipboard=unnamed,unnamedplus endif noremap YY "+y noremap p "+gP noremap XX "+x if has('macunix') " pbcopy for OSX copy/paste vmap :!pbcopy vmap :w !pbcopy endif "" Buffer nav noremap z :bp noremap q :bp noremap x :bn noremap w :bn "" Close buffer noremap c :bd "" Clean search (highlight) nnoremap :noh "" Switching windows noremap j noremap k noremap l noremap h "" Vmap for maintain Visual Mode after shifting > and < vmap < >gv "" Move visual block vnoremap J :m '>+1gv=gv vnoremap K :m '<-2gv=gv "" Open current line on GitHub nnoremap o :.GBrowse "***************************************************************************** "" Custom configs "***************************************************************************** " html " for html files, 2 spaces autocmd Filetype html setlocal ts=2 sw=2 expandtab " javascript let g:javascript_enable_domhtmlcss = 1 " vim-javascript augroup vimrc-javascript autocmd! autocmd FileType javascript setl tabstop=4|setl shiftwidth=4|setl expandtab softtabstop=4 augroup END " lua " php " Phpactor plugin " Include use statement nmap u :call phpactor#UseAdd() " Invoke the context menu nmap mm :call phpactor#ContextMenu() " Invoke the navigation menu nmap nn :call phpactor#Navigate() " Goto definition of class or class member under the cursor nmap oo :call phpactor#GotoDefinition() nmap oh :call phpactor#GotoDefinition('hsplit') nmap ov :call phpactor#GotoDefinition('vsplit') nmap ot :call phpactor#GotoDefinition('tabnew') " Show brief information about the symbol under the cursor nmap K :call phpactor#Hover() " Transform the classes in the current file nmap tt :call phpactor#Transform() " Generate a new class (replacing the current file) nmap cc :call phpactor#ClassNew() " Extract expression (normal mode) nmap ee :call phpactor#ExtractExpression(v:false) " Extract expression from selection vmap ee :call phpactor#ExtractExpression(v:true) " Extract method from selection vmap em :call phpactor#ExtractMethod() " python " vim-python augroup vimrc-python autocmd! autocmd FileType python setlocal expandtab shiftwidth=4 tabstop=8 colorcolumn=79 \ formatoptions+=croq softtabstop=4 \ cinwords=if,elif,else,for,while,try,except,finally,def,class,with augroup END " jedi-vim let g:jedi#popup_on_dot = 0 let g:jedi#goto_assignments_command = "g" let g:jedi#goto_definitions_command = "d" let g:jedi#documentation_command = "K" let g:jedi#usages_command = "n" let g:jedi#rename_command = "r" let g:jedi#show_call_signatures = "0" let g:jedi#completions_command = "" let g:jedi#smart_auto_mappings = 0 " ale :call extend(g:ale_linters, { \'python': ['flake8'], }) " vim-airline let g:airline#extensions#virtualenv#enabled = 1 " Syntax highlight let python_highlight_all = 1 "***************************************************************************** "***************************************************************************** "" Include user's local vim config if filereadable(expand("~/.config/nvim/local_init.vim")) source ~/.config/nvim/local_init.vim endif "***************************************************************************** "" Convenience variables "***************************************************************************** " vim-airline 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 " Seemless clipboard integration set clipboard+=unnamedplus " Treesitter config for markdown " Treesitter config for markdown lua << EOF -- Check if the module exists before trying to require it local status_ok, configs = pcall(require, "nvim-treesitter.configs") if status_ok then configs.setup { ensure_installed = { "markdown", "markdown_inline", "vim", "lua", "python" }, highlight = { enable = true, additional_vim_regex_highlighting = false, }, } end EOF