From 36dea09be69092c3b843db4732ad6802836ba17f Mon Sep 17 00:00:00 2001 From: James Dixon Date: Wed, 11 Jan 2023 14:01:45 -0500 Subject: [PATCH] swap default vimrc to minimal one --- config/vim/.vim/vimrc | 608 +++------------------------------- config/vim/.vim/vimrc.min | 65 ---- config/vim/.vim/vimrc.plugins | 577 ++++++++++++++++++++++++++++++++ 3 files changed, 625 insertions(+), 625 deletions(-) delete mode 100644 config/vim/.vim/vimrc.min create mode 100644 config/vim/.vim/vimrc.plugins diff --git a/config/vim/.vim/vimrc b/config/vim/.vim/vimrc index edb4ab7..9228e68 100644 --- a/config/vim/.vim/vimrc +++ b/config/vim/.vim/vimrc @@ -1,577 +1,65 @@ -"__ _(_)_ __ ___ _ __ ___ " -"\ \ / / | '_ ` _ \| '__/ __|" -" \ V /| | | | | | | | | (__ " -" \_/ |_|_| |_| |_|_| \___|" +" +" minimal vimrc with no (extra) plugins +" -"================ -"General Settings -"================ -"{{{ -"source system defaults +"load system defaults if filereadable(expand('$VIMRUNTIME/defaults.vim')) - unlet! g:skip_defaults_vim - source $VIMRUNTIME/defaults.vim + unlet! g:skip_defaults_vim + source $VIMRUNTIME/defaults.vim endif -"encoding/format +"regular settings +"---------------- +" ui +set number +set ruler +set wildmenu +set showcmd +set showmatch + +" encoding/format set encoding=utf-8 set fileformats=unix,dos,mac -"tab/indent -set tabstop=4 -set softtabstop=4 -set shiftwidth=4 -set expandtab -set autoindent - -"status bar -set showcmd -set wildmenu -set ruler -set laststatus=2 - -"search -set incsearch +" searching set hlsearch +set incsearch set ignorecase set smartcase -"file/buffer -set autoread -set autowrite -set confirm +" indent +set shiftwidth=4 +set tabstop=4 +set softtabstop=4 +set autoindent -"cursor behaviour -set virtualedit=block -set backspace=indent,eol,start -set scrolloff=2 -set sidescrolloff=4 - -"window behaviour (ltr) -set splitbelow -set splitright - -"input/timeout +" key timeout values set esckeys -set timeoutlen=1000 "for mappings -set ttimeoutlen=20 "for keycodes +set ttimeoutlen=20 +set timeoutlen=1000 -"drawing -set lazyredraw -set regexpengine=1 -set redrawtime=10000 - -"display -set background=dark -set number -set wrap -set foldmethod=marker -set listchars=tab:→\ ,extends:›,precedes:‹,nbsp:·,space:·,trail:·,eol:¬ -" set list - -"syntax/filetype/matchit -syntax on +" allow syntax and filetype plugins +syntax enable filetype plugin indent on runtime macros/matchit.vim -"os/gui dependent settings -"--------------- -if has('win32') - let &runtimepath.=",$HOME/.vim" -endif - -if has("gui_running") - set guioptions -=m - set guioptions -=T - if has("gui_gtk2") - set guifont=Inconsolata\ 12 - elseif has("gui_macvim") - set guifont=Menlo\ Regular:h14 - elseif has("gui_win32") - set guifont=Consolas:h10 - " set guifont=Cascadia\ Code:h10 - - "start full-screened - augroup WINGUI - autocmd! GUIEnter * simalt ~x - augroup END - endif -endif - -"file cleanup -"------------ -"swap -let mySwapDir = expand("$HOME/.vim/.swap") -if !isdirectory(mySwapDir) - silent! call mkdir(mySwapDir, "p") -endif -let &directory=mySwapDir - -"undo -if has('persistent_undo') - let myUndoDir = expand("$HOME/.vim/.undo") - if !isdirectory(myUndoDir) - silent! call mkdir(myUndoDir, "p") - endif - let &undodir=myUndoDir - set undofile -endif - -"backup -if has('writebackup') - let myBackupDir = expand("$HOME/.vim/.backup") - if !isdirectory(myBackupDir) - silent! call mkdir(myBackupDir, "p") - endif - let &backupdir=myBackupDir - set backup -endif -"}}} - -"======== -"Keybinds -"======== -"{{{ -"leader key -let mapleader=' ' - -"---------------- -"regular keybinds -"---------------- - -"paste and search -nnoremap :noh :let @/ = "" -nnoremap i :set invpaste - -"toggles -nnoremap lb :call ToggleLineBreak() -nnoremap wr :call ToggleWrap() -nnoremap cc :call ToggleColorColumn() - -"dates -nnoremap ts "=strftime("%F %T%z") -nnoremap dt :r !date - -"rc files -nnoremap rc :vsplit $MYVIMRC -nnoremap so :source $MYVIMRC -nnoremap rcl :vsplit ~/.config/vimrc -nnoremap rcft :vsplit $HOME/.vim/after/ftplugin/ - -"windows -nnoremap cl :close - -"formatting tools -nnoremap =j :%!python -m json.tool - -"abbrevations -inoreabbrev #!! "#!/usr/bin/env" - -"--------------- -"plugin keybinds -"--------------- - -"netrw -nnoremap e :call ToggleNetrw() - -"vim-plug -nnoremap pi :source $MYVIMRC :PlugInstall -nnoremap pu :source $MYVIMRC :PlugUpdate -nnoremap pc :source $MYVIMRC :PlugClean - -"openbrowser -nnoremap ob :OpenBrowser -nnoremap obs :OpenBrowserSearch -nmap gx (openbrowser-smart-search) -vmap gx (openbrowser-smart-search) - -"ale -nnoremap at :ALEToggle -nmap af (ale_fix) -nmap aK (ale_hover) -nmap an (ale_next_wrap) -nmap ap (ale_previous_wrap) - -"lsp -function! s:on_lsp_buffer_enabled() abort - setlocal omnifunc=lsp#complete - setlocal signcolumn=yes - if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif - nmap gd (lsp-definition) - nmap gs (lsp-document-symbol-search) - nmap gS (lsp-workspace-symbol-search) - nmap gr (lsp-references) - nmap gi (lsp-implementation) - nmap gt (lsp-type-definition) - nmap [g (lsp-previous-diagnostic) - nmap ]g (lsp-next-diagnostic) - nmap gp (lsp-previous-diagnostic) - nmap gn (lsp-next-diagnostic) - nmap K (lsp-hover) - - nmap pdf (lsp-peek-definition) - nmap pdc (lsp-peek-declaration) - nmap pdi (lsp-peek-implementation) - nmap ca (lsp-code-action) - nmap cl (lsp-code-lens) - nmap rn (lsp-rename) - nmap ls (lsp-status) - nmap lt (lsp-stop-server) - nmap di (lsp-document-diagnostics) - nmap df (lsp-document-format) - - inoremap lsp#scroll(+4) - inoremap lsp#scroll(-4) - - " highlight lspReference ctermfg=red guifg=red ctermbg=green guibg=green - - " refer to doc to add more commands - " https://github.com/prabirshrestha/vim-lsp#supported-commands -endfunction - - -"vim-emmet -let g:user_emmet_leader_key = '' - -"git-gutter -nnoremap ggt :GitGutterToggle - -"vim-fugitive -nnoremap gw :Gwrite -nnoremap gl :Glog -nnoremap gs :Git -nnoremap gd :Gdiffsplit -nnoremap gp :Gpush -nnoremap ga :Git add % -nnoremap ga. :Git add . -nnoremap gc :Git commit - -"fzf -nnoremap f :GitFiles -nnoremap F :Files -nnoremap c :Commands -nnoremap b :Buffers -nnoremap h :Helptags -nnoremap m :Maps -nnoremap rg :Rg -"}}} - -"================== -"Plugins (vim-plug) -"================== -"{{{ -"vim-plug paths -let plugDir = expand("$HOME/.vim/autoload/plug.vim") -let pluginDir = expand("$HOME/.vim/plugged") -let plugRemote = "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" - -"ensure vim-plug is installed on VimEnter -if empty(glob(plugDir)) - silent execute "!curl -fLo " . shellescape(expand(plugDir)) . " --create-dirs " . shellescape(plugRemote) - autocmd VimEnter * PlugInstall --sync | source $MYVIMRC -endif - -"pre plugin settings -"------------------- -"(none for now) - -"load plugins -"------------ -call plug#begin(pluginDir) - Plug 'junegunn/vim-plug' - - " ==== quality of life ==== - "normal mode keybinds - Plug 'tpope/vim-commentary' - Plug 'tpope/vim-surround' - Plug 'tpope/vim-unimpaired' - "command mode keybinds - Plug 'tpope/vim-rsi' - Plug 'tpope/vim-eunuch' - Plug 'tpope/vim-repeat' - - " ==== external tools ==== - "git - Plug 'tpope/vim-fugitive' - Plug 'tpope/vim-rhubarb' - Plug 'tpope/vim-dispatch' - Plug 'airblade/vim-gitgutter' - "fzf - Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } - Plug 'junegunn/fzf.vim' - "browser plugins - Plug 'tyru/open-browser.vim' - Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} - "REPLs - " Plug 'jpalardy/vim-slime' - - " ==== specific language support ==== - "go - Plug 'fatih/vim-go' - "ruby - Plug 'vim-ruby/vim-ruby' - "html - Plug 'mattn/emmet-vim' - "markdown - Plug 'plasticboy/vim-markdown' - Plug 'godlygeek/tabular' - "toml - Plug 'cespare/vim-toml' - "sol - Plug 'tomlion/vim-solidity' - - " ==== general language support ==== - "linting and lsp - Plug 'dense-analysis/ale' - Plug 'prabirshrestha/vim-lsp' - Plug 'mattn/vim-lsp-settings' - - " ==== misc editor plugins ==== - Plug 'editorconfig/editorconfig-vim' - Plug 'flazz/vim-colorschemes' -call plug#end() - -"post plugin settings -"-------------------- -"netrw -let g:netrw_banner = 0 -let g:netrw_winsize = 24 -let g:netrw_liststyle = 3 -let g:netrw_preview = 1 -let g:netrw_alto = 0 -let g:netrw_usetab = 1 -let g:netrw_browsex_viewer = "xdg-open" -let g:NetrwIsOpen = 0 "for toggle function -let g:netrw_nogx = 1 - -"ale -let g:ale_linters = { -\ 'python': ['flake8', 'pylint'], -\ 'javascript': ['eslint'], -\ 'ruby': ['rubocop'], -\ 'markdown': ['mdl', 'write-good'] -\} - -let g:ale_fixers = { -\ '*': ['remove_trailing_lines', 'trim_whitespace'], -\ 'python': ['yapf', 'black'], -\ 'javascript': ['prettier', 'eslint'], -\ 'ruby': ['rubocop'], -\ 'css': ['prettier'], -\ 'scss': ['prettier'], -\ 'html': ['prettier'], -\ 'markdown': ['prettier'], -\ 'yaml': ['prettier'], -\ 'json': ['prettier'] -\} - -let g:ale_sign_error = 'W>' -let g:ale_sign_warning = 'E>' -let g:ale_lint_on_save = 1 -let g:ale_fix_on_save_ignore = 1 -highlight clear SignColumn - -"vim-lsp -let g:lsp_format_sync_timeout = 1000 -let g:lsp_diagnostics_enabled = 0 -let g:lsp_document_highlight_enabled = 0 -let g:lsp_settings_enable_suggestions = 0 - -"vim-lsp-settings specific configs -" let g:lsp_settings = { -" \ 'pyls-all': { -" \ 'workspace_config': { -" \ 'pyls': { -" \ 'configurationSources': ['flake8'] -" \ } -" \ } -" \ } -" \} - -" let g:lsp_settings_filetype_python = ['pyls-all', 'pyright-langserver', 'jedi-language-server'] - -"vim-markdown -let g:vim_markdown_folding_disabled = 1 -let g:vim_markdown_toc_autofit = 1 -let g:vim_markdown_conceal = 0 -let g:vim_markdown_frontmatter = 1 - - -"vim-slime -let g:slime_target = "tmux" -let g:slime_default_config = {"socket_name": get(split($TMUX, ","), 0), "target_pane": ":.1"} -" let g:slime_default_config = {"socket_name": "default", "target_pane": "{last}"} - -"}}} - -"======== -"Commands -"======== -"{{{ -"common typos and abbreviations -cnoremap w!! w !sudo tee % > /dev/null -command! W w !sudo tee % > /dev/null -command! Q q -command! WQ wq -command! Q1 q! - -"useful shortcut commands -command! Trim %s/\s\+$// -"}}} - -"========= -"Functions -"========= -"{{{ -"toggle functions -"---------------- -function! ToggleColorColumn() - if &cc == '' - set cc=80 - else - set cc= - endif -endfunction - -function! ToggleLineBreak() - if &lbr == '' - set fo+=t "Autowraps text with textwidth - set fo-=l "Wraps long lines in --insert-- mode - set lbr - else - set fo-=t - set fo+=l - set lbr! - endif -endfunction - -function! ToggleWrap() - if &wrap == '' - set wrap - else - set nowrap - endif -endfunction - -function! ToggleNetrw() "make netrw toggleable - if g:NetrwIsOpen - let i = bufnr("$") - while (i >= 1) - if (getbufvar(i, "&filetype") == "netrw") - silent exe "bwipeout " . i - endif - let i-=1 - endwhile - let g:NetrwIsOpen=0 - else - let g:NetrwIsOpen=1 - silent Lexplore - endif -endfunction -"}}} - -"============ -"Autocommands -"============ -"{{{ -if has("autocmd") - "language specific filetype functions (run by autocmds) - "------------------ - function FT_python() - setlocal autoindent - setlocal formatprg=yapf - iabbr false False - iabbr true True - - xnoremap r :'<,'>:w !python3 - endfunction - - function FT_ruby() - setlocal autoindent - setlocal formatprg=rubocop - endfunction - - function FT_go() - set noexpandtab - setlocal formatprg=gofmt - let g:go_auto_type_info = 1 - let g:go_imports_autosave = 1 - endfunction - - function FT_html() - syntax sync fromstart - endfunction - - function FT_markdown() - setlocal spell - endfunction - - function FT_halftab() - setlocal tabstop=2 softtabstop=2 shiftwidth=2 expandtab - endfunction - - "language specific autocmds - "-------------------------- - augroup language_ft_group - autocmd! - autocmd FileType python call FT_python() - autocmd FileType ruby,eruby call FT_ruby() - autocmd FileType go call FT_go() - autocmd FileType html call FT_html() - autocmd FileType markdown call FT_markdown() - autocmd FileType sh,ruby,bash,html,css,scss,javascript,json,toml,yaml call FT_halftab() - autocmd BufNewFile,BufRead *html*,*css*,*js* EmmetInstall - augroup END - - "lsp autocmds - "------------ - augroup lsp_install - autocmd! - autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() - augroup END - - augroup lsp_ft_group - autocmd! - " autoformat with LSP - " autocmd BufWritePre *.rs call execute('LspDocumentFormatSync') - augroup END - - "global autocmds - "----------------- - augroup global - autocmd! - "keep equal proportions when windows resized - autocmd VimResized * wincmd = - "save cursor position in a file - autocmd BufReadPost * if line("'\"") > 1 && line("'\"") - \ <= line("$") | exe "normal! g'\"" | endif - augroup END -endif -"}}} - -"============== -"Local settings -"============== -"{{{ -"source local vimrc -if filereadable(expand("~/.config/vimrc")) - source ~/.config/vimrc -endif -"}}} - -"colorschemes -" {{{ -" colorscheme 1989 -" colorscheme PaperColor -" colorscheme gruvbox -" colorscheme jellybeans -" colorscheme molokai -" colorscheme Benokai -" colorscheme Monokai -" colorscheme badwolf -" colorscheme wombat256 -" colorscheme yuejiu -" colorscheme wargrey -" colorscheme Tomorrow-Night-Bright -" colorscheme monokai-phoenix -" }}} +" autocmds +"--------- +augroup general + autocmd! + "keep equal proportions when windows resized + autocmd VimResized * wincmd = + "save cursor position in a file + autocmd BufReadPost * if line("'\"") > 1 && line("'\"") + \ <= line("$") | exe "normal! g'\"" | endif +augroup END + +augroup languages + autocmd! + autocmd BufNewFile,BufRead *.bash set syntax=sh + autocmd FileType python xnoremap r :'<,'>:w !python3 + autocmd FileType go set noexpandtab + autocmd FileType html :syntax sync fromstart + autocmd FileType html,javascript,css,json,yaml,sh + \ setlocal ts=2 sts=2 sw=2 expandtab +augroup END diff --git a/config/vim/.vim/vimrc.min b/config/vim/.vim/vimrc.min deleted file mode 100644 index 9228e68..0000000 --- a/config/vim/.vim/vimrc.min +++ /dev/null @@ -1,65 +0,0 @@ -" -" minimal vimrc with no (extra) plugins -" - -"load system defaults -if filereadable(expand('$VIMRUNTIME/defaults.vim')) - unlet! g:skip_defaults_vim - source $VIMRUNTIME/defaults.vim -endif - -"regular settings -"---------------- -" ui -set number -set ruler -set wildmenu -set showcmd -set showmatch - -" encoding/format -set encoding=utf-8 -set fileformats=unix,dos,mac - -" searching -set hlsearch -set incsearch -set ignorecase -set smartcase - -" indent -set shiftwidth=4 -set tabstop=4 -set softtabstop=4 -set autoindent - -" key timeout values -set esckeys -set ttimeoutlen=20 -set timeoutlen=1000 - -" allow syntax and filetype plugins -syntax enable -filetype plugin indent on -runtime macros/matchit.vim - -" autocmds -"--------- -augroup general - autocmd! - "keep equal proportions when windows resized - autocmd VimResized * wincmd = - "save cursor position in a file - autocmd BufReadPost * if line("'\"") > 1 && line("'\"") - \ <= line("$") | exe "normal! g'\"" | endif -augroup END - -augroup languages - autocmd! - autocmd BufNewFile,BufRead *.bash set syntax=sh - autocmd FileType python xnoremap r :'<,'>:w !python3 - autocmd FileType go set noexpandtab - autocmd FileType html :syntax sync fromstart - autocmd FileType html,javascript,css,json,yaml,sh - \ setlocal ts=2 sts=2 sw=2 expandtab -augroup END diff --git a/config/vim/.vim/vimrc.plugins b/config/vim/.vim/vimrc.plugins new file mode 100644 index 0000000..edb4ab7 --- /dev/null +++ b/config/vim/.vim/vimrc.plugins @@ -0,0 +1,577 @@ +"__ _(_)_ __ ___ _ __ ___ " +"\ \ / / | '_ ` _ \| '__/ __|" +" \ V /| | | | | | | | | (__ " +" \_/ |_|_| |_| |_|_| \___|" + +"================ +"General Settings +"================ +"{{{ +"source system defaults +if filereadable(expand('$VIMRUNTIME/defaults.vim')) + unlet! g:skip_defaults_vim + source $VIMRUNTIME/defaults.vim +endif + +"encoding/format +set encoding=utf-8 +set fileformats=unix,dos,mac + +"tab/indent +set tabstop=4 +set softtabstop=4 +set shiftwidth=4 +set expandtab +set autoindent + +"status bar +set showcmd +set wildmenu +set ruler +set laststatus=2 + +"search +set incsearch +set hlsearch +set ignorecase +set smartcase + +"file/buffer +set autoread +set autowrite +set confirm + +"cursor behaviour +set virtualedit=block +set backspace=indent,eol,start +set scrolloff=2 +set sidescrolloff=4 + +"window behaviour (ltr) +set splitbelow +set splitright + +"input/timeout +set esckeys +set timeoutlen=1000 "for mappings +set ttimeoutlen=20 "for keycodes + +"drawing +set lazyredraw +set regexpengine=1 +set redrawtime=10000 + +"display +set background=dark +set number +set wrap +set foldmethod=marker +set listchars=tab:→\ ,extends:›,precedes:‹,nbsp:·,space:·,trail:·,eol:¬ +" set list + +"syntax/filetype/matchit +syntax on +filetype plugin indent on +runtime macros/matchit.vim + +"os/gui dependent settings +"--------------- +if has('win32') + let &runtimepath.=",$HOME/.vim" +endif + +if has("gui_running") + set guioptions -=m + set guioptions -=T + if has("gui_gtk2") + set guifont=Inconsolata\ 12 + elseif has("gui_macvim") + set guifont=Menlo\ Regular:h14 + elseif has("gui_win32") + set guifont=Consolas:h10 + " set guifont=Cascadia\ Code:h10 + + "start full-screened + augroup WINGUI + autocmd! GUIEnter * simalt ~x + augroup END + endif +endif + +"file cleanup +"------------ +"swap +let mySwapDir = expand("$HOME/.vim/.swap") +if !isdirectory(mySwapDir) + silent! call mkdir(mySwapDir, "p") +endif +let &directory=mySwapDir + +"undo +if has('persistent_undo') + let myUndoDir = expand("$HOME/.vim/.undo") + if !isdirectory(myUndoDir) + silent! call mkdir(myUndoDir, "p") + endif + let &undodir=myUndoDir + set undofile +endif + +"backup +if has('writebackup') + let myBackupDir = expand("$HOME/.vim/.backup") + if !isdirectory(myBackupDir) + silent! call mkdir(myBackupDir, "p") + endif + let &backupdir=myBackupDir + set backup +endif +"}}} + +"======== +"Keybinds +"======== +"{{{ +"leader key +let mapleader=' ' + +"---------------- +"regular keybinds +"---------------- + +"paste and search +nnoremap :noh :let @/ = "" +nnoremap i :set invpaste + +"toggles +nnoremap lb :call ToggleLineBreak() +nnoremap wr :call ToggleWrap() +nnoremap cc :call ToggleColorColumn() + +"dates +nnoremap ts "=strftime("%F %T%z") +nnoremap dt :r !date + +"rc files +nnoremap rc :vsplit $MYVIMRC +nnoremap so :source $MYVIMRC +nnoremap rcl :vsplit ~/.config/vimrc +nnoremap rcft :vsplit $HOME/.vim/after/ftplugin/ + +"windows +nnoremap cl :close + +"formatting tools +nnoremap =j :%!python -m json.tool + +"abbrevations +inoreabbrev #!! "#!/usr/bin/env" + +"--------------- +"plugin keybinds +"--------------- + +"netrw +nnoremap e :call ToggleNetrw() + +"vim-plug +nnoremap pi :source $MYVIMRC :PlugInstall +nnoremap pu :source $MYVIMRC :PlugUpdate +nnoremap pc :source $MYVIMRC :PlugClean + +"openbrowser +nnoremap ob :OpenBrowser +nnoremap obs :OpenBrowserSearch +nmap gx (openbrowser-smart-search) +vmap gx (openbrowser-smart-search) + +"ale +nnoremap at :ALEToggle +nmap af (ale_fix) +nmap aK (ale_hover) +nmap an (ale_next_wrap) +nmap ap (ale_previous_wrap) + +"lsp +function! s:on_lsp_buffer_enabled() abort + setlocal omnifunc=lsp#complete + setlocal signcolumn=yes + if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif + nmap gd (lsp-definition) + nmap gs (lsp-document-symbol-search) + nmap gS (lsp-workspace-symbol-search) + nmap gr (lsp-references) + nmap gi (lsp-implementation) + nmap gt (lsp-type-definition) + nmap [g (lsp-previous-diagnostic) + nmap ]g (lsp-next-diagnostic) + nmap gp (lsp-previous-diagnostic) + nmap gn (lsp-next-diagnostic) + nmap K (lsp-hover) + + nmap pdf (lsp-peek-definition) + nmap pdc (lsp-peek-declaration) + nmap pdi (lsp-peek-implementation) + nmap ca (lsp-code-action) + nmap cl (lsp-code-lens) + nmap rn (lsp-rename) + nmap ls (lsp-status) + nmap lt (lsp-stop-server) + nmap di (lsp-document-diagnostics) + nmap df (lsp-document-format) + + inoremap lsp#scroll(+4) + inoremap lsp#scroll(-4) + + " highlight lspReference ctermfg=red guifg=red ctermbg=green guibg=green + + " refer to doc to add more commands + " https://github.com/prabirshrestha/vim-lsp#supported-commands +endfunction + + +"vim-emmet +let g:user_emmet_leader_key = '' + +"git-gutter +nnoremap ggt :GitGutterToggle + +"vim-fugitive +nnoremap gw :Gwrite +nnoremap gl :Glog +nnoremap gs :Git +nnoremap gd :Gdiffsplit +nnoremap gp :Gpush +nnoremap ga :Git add % +nnoremap ga. :Git add . +nnoremap gc :Git commit + +"fzf +nnoremap f :GitFiles +nnoremap F :Files +nnoremap c :Commands +nnoremap b :Buffers +nnoremap h :Helptags +nnoremap m :Maps +nnoremap rg :Rg +"}}} + +"================== +"Plugins (vim-plug) +"================== +"{{{ +"vim-plug paths +let plugDir = expand("$HOME/.vim/autoload/plug.vim") +let pluginDir = expand("$HOME/.vim/plugged") +let plugRemote = "https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim" + +"ensure vim-plug is installed on VimEnter +if empty(glob(plugDir)) + silent execute "!curl -fLo " . shellescape(expand(plugDir)) . " --create-dirs " . shellescape(plugRemote) + autocmd VimEnter * PlugInstall --sync | source $MYVIMRC +endif + +"pre plugin settings +"------------------- +"(none for now) + +"load plugins +"------------ +call plug#begin(pluginDir) + Plug 'junegunn/vim-plug' + + " ==== quality of life ==== + "normal mode keybinds + Plug 'tpope/vim-commentary' + Plug 'tpope/vim-surround' + Plug 'tpope/vim-unimpaired' + "command mode keybinds + Plug 'tpope/vim-rsi' + Plug 'tpope/vim-eunuch' + Plug 'tpope/vim-repeat' + + " ==== external tools ==== + "git + Plug 'tpope/vim-fugitive' + Plug 'tpope/vim-rhubarb' + Plug 'tpope/vim-dispatch' + Plug 'airblade/vim-gitgutter' + "fzf + Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } + Plug 'junegunn/fzf.vim' + "browser plugins + Plug 'tyru/open-browser.vim' + Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} + "REPLs + " Plug 'jpalardy/vim-slime' + + " ==== specific language support ==== + "go + Plug 'fatih/vim-go' + "ruby + Plug 'vim-ruby/vim-ruby' + "html + Plug 'mattn/emmet-vim' + "markdown + Plug 'plasticboy/vim-markdown' + Plug 'godlygeek/tabular' + "toml + Plug 'cespare/vim-toml' + "sol + Plug 'tomlion/vim-solidity' + + " ==== general language support ==== + "linting and lsp + Plug 'dense-analysis/ale' + Plug 'prabirshrestha/vim-lsp' + Plug 'mattn/vim-lsp-settings' + + " ==== misc editor plugins ==== + Plug 'editorconfig/editorconfig-vim' + Plug 'flazz/vim-colorschemes' +call plug#end() + +"post plugin settings +"-------------------- +"netrw +let g:netrw_banner = 0 +let g:netrw_winsize = 24 +let g:netrw_liststyle = 3 +let g:netrw_preview = 1 +let g:netrw_alto = 0 +let g:netrw_usetab = 1 +let g:netrw_browsex_viewer = "xdg-open" +let g:NetrwIsOpen = 0 "for toggle function +let g:netrw_nogx = 1 + +"ale +let g:ale_linters = { +\ 'python': ['flake8', 'pylint'], +\ 'javascript': ['eslint'], +\ 'ruby': ['rubocop'], +\ 'markdown': ['mdl', 'write-good'] +\} + +let g:ale_fixers = { +\ '*': ['remove_trailing_lines', 'trim_whitespace'], +\ 'python': ['yapf', 'black'], +\ 'javascript': ['prettier', 'eslint'], +\ 'ruby': ['rubocop'], +\ 'css': ['prettier'], +\ 'scss': ['prettier'], +\ 'html': ['prettier'], +\ 'markdown': ['prettier'], +\ 'yaml': ['prettier'], +\ 'json': ['prettier'] +\} + +let g:ale_sign_error = 'W>' +let g:ale_sign_warning = 'E>' +let g:ale_lint_on_save = 1 +let g:ale_fix_on_save_ignore = 1 +highlight clear SignColumn + +"vim-lsp +let g:lsp_format_sync_timeout = 1000 +let g:lsp_diagnostics_enabled = 0 +let g:lsp_document_highlight_enabled = 0 +let g:lsp_settings_enable_suggestions = 0 + +"vim-lsp-settings specific configs +" let g:lsp_settings = { +" \ 'pyls-all': { +" \ 'workspace_config': { +" \ 'pyls': { +" \ 'configurationSources': ['flake8'] +" \ } +" \ } +" \ } +" \} + +" let g:lsp_settings_filetype_python = ['pyls-all', 'pyright-langserver', 'jedi-language-server'] + +"vim-markdown +let g:vim_markdown_folding_disabled = 1 +let g:vim_markdown_toc_autofit = 1 +let g:vim_markdown_conceal = 0 +let g:vim_markdown_frontmatter = 1 + + +"vim-slime +let g:slime_target = "tmux" +let g:slime_default_config = {"socket_name": get(split($TMUX, ","), 0), "target_pane": ":.1"} +" let g:slime_default_config = {"socket_name": "default", "target_pane": "{last}"} + +"}}} + +"======== +"Commands +"======== +"{{{ +"common typos and abbreviations +cnoremap w!! w !sudo tee % > /dev/null +command! W w !sudo tee % > /dev/null +command! Q q +command! WQ wq +command! Q1 q! + +"useful shortcut commands +command! Trim %s/\s\+$// +"}}} + +"========= +"Functions +"========= +"{{{ +"toggle functions +"---------------- +function! ToggleColorColumn() + if &cc == '' + set cc=80 + else + set cc= + endif +endfunction + +function! ToggleLineBreak() + if &lbr == '' + set fo+=t "Autowraps text with textwidth + set fo-=l "Wraps long lines in --insert-- mode + set lbr + else + set fo-=t + set fo+=l + set lbr! + endif +endfunction + +function! ToggleWrap() + if &wrap == '' + set wrap + else + set nowrap + endif +endfunction + +function! ToggleNetrw() "make netrw toggleable + if g:NetrwIsOpen + let i = bufnr("$") + while (i >= 1) + if (getbufvar(i, "&filetype") == "netrw") + silent exe "bwipeout " . i + endif + let i-=1 + endwhile + let g:NetrwIsOpen=0 + else + let g:NetrwIsOpen=1 + silent Lexplore + endif +endfunction +"}}} + +"============ +"Autocommands +"============ +"{{{ +if has("autocmd") + "language specific filetype functions (run by autocmds) + "------------------ + function FT_python() + setlocal autoindent + setlocal formatprg=yapf + iabbr false False + iabbr true True + + xnoremap r :'<,'>:w !python3 + endfunction + + function FT_ruby() + setlocal autoindent + setlocal formatprg=rubocop + endfunction + + function FT_go() + set noexpandtab + setlocal formatprg=gofmt + let g:go_auto_type_info = 1 + let g:go_imports_autosave = 1 + endfunction + + function FT_html() + syntax sync fromstart + endfunction + + function FT_markdown() + setlocal spell + endfunction + + function FT_halftab() + setlocal tabstop=2 softtabstop=2 shiftwidth=2 expandtab + endfunction + + "language specific autocmds + "-------------------------- + augroup language_ft_group + autocmd! + autocmd FileType python call FT_python() + autocmd FileType ruby,eruby call FT_ruby() + autocmd FileType go call FT_go() + autocmd FileType html call FT_html() + autocmd FileType markdown call FT_markdown() + autocmd FileType sh,ruby,bash,html,css,scss,javascript,json,toml,yaml call FT_halftab() + autocmd BufNewFile,BufRead *html*,*css*,*js* EmmetInstall + augroup END + + "lsp autocmds + "------------ + augroup lsp_install + autocmd! + autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() + augroup END + + augroup lsp_ft_group + autocmd! + " autoformat with LSP + " autocmd BufWritePre *.rs call execute('LspDocumentFormatSync') + augroup END + + "global autocmds + "----------------- + augroup global + autocmd! + "keep equal proportions when windows resized + autocmd VimResized * wincmd = + "save cursor position in a file + autocmd BufReadPost * if line("'\"") > 1 && line("'\"") + \ <= line("$") | exe "normal! g'\"" | endif + augroup END +endif +"}}} + +"============== +"Local settings +"============== +"{{{ +"source local vimrc +if filereadable(expand("~/.config/vimrc")) + source ~/.config/vimrc +endif +"}}} + +"colorschemes +" {{{ +" colorscheme 1989 +" colorscheme PaperColor +" colorscheme gruvbox +" colorscheme jellybeans +" colorscheme molokai +" colorscheme Benokai +" colorscheme Monokai +" colorscheme badwolf +" colorscheme wombat256 +" colorscheme yuejiu +" colorscheme wargrey +" colorscheme Tomorrow-Night-Bright +" colorscheme monokai-phoenix +" }}}