swap default vimrc to minimal one

This commit is contained in:
James Dixon 2023-01-11 14:01:45 -05:00
parent b86349a8ae
commit 36dea09be6
3 changed files with 625 additions and 625 deletions

View File

@ -1,577 +1,65 @@
"__ _(_)_ __ ___ _ __ ___ " "
"\ \ / / | '_ ` _ \| '__/ __|" " minimal vimrc with no (extra) plugins
" \ V /| | | | | | | | | (__ " "
" \_/ |_|_| |_| |_|_| \___|"
"================ "load system defaults
"General Settings
"================
"{{{
"source system defaults
if filereadable(expand('$VIMRUNTIME/defaults.vim')) if filereadable(expand('$VIMRUNTIME/defaults.vim'))
unlet! g:skip_defaults_vim unlet! g:skip_defaults_vim
source $VIMRUNTIME/defaults.vim source $VIMRUNTIME/defaults.vim
endif endif
"encoding/format "regular settings
"----------------
" ui
set number
set ruler
set wildmenu
set showcmd
set showmatch
" encoding/format
set encoding=utf-8 set encoding=utf-8
set fileformats=unix,dos,mac set fileformats=unix,dos,mac
"tab/indent " searching
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 hlsearch
set incsearch
set ignorecase set ignorecase
set smartcase set smartcase
"file/buffer " indent
set autoread set shiftwidth=4
set autowrite set tabstop=4
set confirm set softtabstop=4
set autoindent
"cursor behaviour " key timeout values
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 esckeys
set timeoutlen=1000 "for mappings set ttimeoutlen=20
set ttimeoutlen=20 "for keycodes set timeoutlen=1000
"drawing " allow syntax and filetype plugins
set lazyredraw syntax enable
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 filetype plugin indent on
runtime macros/matchit.vim runtime macros/matchit.vim
"os/gui dependent settings " autocmds
"--------------- "---------
if has('win32') augroup general
let &runtimepath.=",$HOME/.vim" autocmd!
endif "keep equal proportions when windows resized
autocmd VimResized * wincmd =
if has("gui_running") "save cursor position in a file
set guioptions -=m autocmd BufReadPost * if line("'\"") > 1 && line("'\"")
set guioptions -=T \ <= line("$") | exe "normal! g'\"" | endif
if has("gui_gtk2") augroup END
set guifont=Inconsolata\ 12
elseif has("gui_macvim") augroup languages
set guifont=Menlo\ Regular:h14 autocmd!
elseif has("gui_win32") autocmd BufNewFile,BufRead *.bash set syntax=sh
set guifont=Consolas:h10 autocmd FileType python xnoremap <leader>r <esc>:'<,'>:w !python3<CR>
" set guifont=Cascadia\ Code:h10 autocmd FileType go set noexpandtab
autocmd FileType html :syntax sync fromstart
"start full-screened autocmd FileType html,javascript,css,json,yaml,sh
augroup WINGUI \ setlocal ts=2 sts=2 sw=2 expandtab
autocmd! GUIEnter * simalt ~x augroup END
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 <silent><leader><space> :noh <BAR> :let @/ = ""<CR>
nnoremap <leader>i :set invpaste<CR>
"toggles
nnoremap <silent><leader>lb :call ToggleLineBreak()<CR>
nnoremap <silent><leader>wr :call ToggleWrap()<CR>
nnoremap <silent><leader>cc :call ToggleColorColumn()<CR>
"dates
nnoremap <leader>ts "=strftime("%F %T%z")<CR>
nnoremap <leader>dt :r !date<CR>
"rc files
nnoremap <leader>rc :vsplit $MYVIMRC<CR>
nnoremap <leader>so :source $MYVIMRC<CR>
nnoremap <leader>rcl :vsplit ~/.config/vimrc<CR>
nnoremap <leader>rcft :vsplit $HOME/.vim/after/ftplugin/<CR>
"windows
nnoremap <leader>cl :close<CR>
"formatting tools
nnoremap =j :%!python -m json.tool<CR>
"abbrevations
inoreabbrev <expr> #!! "#!/usr/bin/env"
"---------------
"plugin keybinds
"---------------
"netrw
nnoremap <silent><leader>e :call ToggleNetrw()<CR>
"vim-plug
nnoremap <leader>pi :source $MYVIMRC <BAR> :PlugInstall<CR>
nnoremap <leader>pu :source $MYVIMRC <BAR> :PlugUpdate<CR>
nnoremap <leader>pc :source $MYVIMRC <BAR> :PlugClean<CR>
"openbrowser
nnoremap <leader>ob :OpenBrowser
nnoremap <leader>obs :OpenBrowserSearch
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)
"ale
nnoremap <leader>at :ALEToggle<CR>
nmap <leader>af <Plug>(ale_fix)
nmap <leader>aK <Plug>(ale_hover)
nmap <leader>an <Plug>(ale_next_wrap)
nmap <leader>ap <Plug>(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 <buffer> gd <plug>(lsp-definition)
nmap <buffer> gs <plug>(lsp-document-symbol-search)
nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
nmap <buffer> gr <plug>(lsp-references)
nmap <buffer> gi <plug>(lsp-implementation)
nmap <buffer> gt <plug>(lsp-type-definition)
nmap <buffer> [g <plug>(lsp-previous-diagnostic)
nmap <buffer> ]g <plug>(lsp-next-diagnostic)
nmap <buffer> gp <plug>(lsp-previous-diagnostic)
nmap <buffer> gn <plug>(lsp-next-diagnostic)
nmap <buffer> K <plug>(lsp-hover)
nmap <buffer> <leader>pdf <plug>(lsp-peek-definition)
nmap <buffer> <leader>pdc <plug>(lsp-peek-declaration)
nmap <buffer> <leader>pdi <plug>(lsp-peek-implementation)
nmap <buffer> <leader>ca <plug>(lsp-code-action)
nmap <buffer> <leader>cl <plug>(lsp-code-lens)
nmap <buffer> <leader>rn <plug>(lsp-rename)
nmap <buffer> <leader>ls <plug>(lsp-status)
nmap <buffer> <leader>lt <plug>(lsp-stop-server)
nmap <buffer> <leader>di <plug>(lsp-document-diagnostics)
nmap <buffer> <leader>df <plug>(lsp-document-format)
inoremap <buffer> <expr><c-f> lsp#scroll(+4)
inoremap <buffer> <expr><c-d> 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 = '<C-I>'
"git-gutter
nnoremap <leader>ggt :GitGutterToggle<CR>
"vim-fugitive
nnoremap <leader>gw :Gwrite<CR>
nnoremap <leader>gl :Glog<CR>
nnoremap <leader>gs :Git<CR>
nnoremap <leader>gd :Gdiffsplit<CR>
nnoremap <leader>gp :Gpush<CR>
nnoremap <leader>ga :Git add %<CR>
nnoremap <leader>ga. :Git add .<CR>
nnoremap <leader>gc :Git commit<CR>
"fzf
nnoremap <leader>f :GitFiles<CR>
nnoremap <leader>F :Files<CR>
nnoremap <leader>c :Commands<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>h :Helptags<CR>
nnoremap <leader>m :Maps<CR>
nnoremap <leader>rg :Rg<CR>
"}}}
"==================
"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 <https://vi.stackexchange.com/questions/10988/toggle-explorer-window>
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 <leader>r <esc>:'<,'>:w !python3<CR>
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
" }}}

View File

@ -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 <leader>r <esc>:'<,'>:w !python3<CR>
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

View File

@ -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 <silent><leader><space> :noh <BAR> :let @/ = ""<CR>
nnoremap <leader>i :set invpaste<CR>
"toggles
nnoremap <silent><leader>lb :call ToggleLineBreak()<CR>
nnoremap <silent><leader>wr :call ToggleWrap()<CR>
nnoremap <silent><leader>cc :call ToggleColorColumn()<CR>
"dates
nnoremap <leader>ts "=strftime("%F %T%z")<CR>
nnoremap <leader>dt :r !date<CR>
"rc files
nnoremap <leader>rc :vsplit $MYVIMRC<CR>
nnoremap <leader>so :source $MYVIMRC<CR>
nnoremap <leader>rcl :vsplit ~/.config/vimrc<CR>
nnoremap <leader>rcft :vsplit $HOME/.vim/after/ftplugin/<CR>
"windows
nnoremap <leader>cl :close<CR>
"formatting tools
nnoremap =j :%!python -m json.tool<CR>
"abbrevations
inoreabbrev <expr> #!! "#!/usr/bin/env"
"---------------
"plugin keybinds
"---------------
"netrw
nnoremap <silent><leader>e :call ToggleNetrw()<CR>
"vim-plug
nnoremap <leader>pi :source $MYVIMRC <BAR> :PlugInstall<CR>
nnoremap <leader>pu :source $MYVIMRC <BAR> :PlugUpdate<CR>
nnoremap <leader>pc :source $MYVIMRC <BAR> :PlugClean<CR>
"openbrowser
nnoremap <leader>ob :OpenBrowser
nnoremap <leader>obs :OpenBrowserSearch
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)
"ale
nnoremap <leader>at :ALEToggle<CR>
nmap <leader>af <Plug>(ale_fix)
nmap <leader>aK <Plug>(ale_hover)
nmap <leader>an <Plug>(ale_next_wrap)
nmap <leader>ap <Plug>(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 <buffer> gd <plug>(lsp-definition)
nmap <buffer> gs <plug>(lsp-document-symbol-search)
nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
nmap <buffer> gr <plug>(lsp-references)
nmap <buffer> gi <plug>(lsp-implementation)
nmap <buffer> gt <plug>(lsp-type-definition)
nmap <buffer> [g <plug>(lsp-previous-diagnostic)
nmap <buffer> ]g <plug>(lsp-next-diagnostic)
nmap <buffer> gp <plug>(lsp-previous-diagnostic)
nmap <buffer> gn <plug>(lsp-next-diagnostic)
nmap <buffer> K <plug>(lsp-hover)
nmap <buffer> <leader>pdf <plug>(lsp-peek-definition)
nmap <buffer> <leader>pdc <plug>(lsp-peek-declaration)
nmap <buffer> <leader>pdi <plug>(lsp-peek-implementation)
nmap <buffer> <leader>ca <plug>(lsp-code-action)
nmap <buffer> <leader>cl <plug>(lsp-code-lens)
nmap <buffer> <leader>rn <plug>(lsp-rename)
nmap <buffer> <leader>ls <plug>(lsp-status)
nmap <buffer> <leader>lt <plug>(lsp-stop-server)
nmap <buffer> <leader>di <plug>(lsp-document-diagnostics)
nmap <buffer> <leader>df <plug>(lsp-document-format)
inoremap <buffer> <expr><c-f> lsp#scroll(+4)
inoremap <buffer> <expr><c-d> 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 = '<C-I>'
"git-gutter
nnoremap <leader>ggt :GitGutterToggle<CR>
"vim-fugitive
nnoremap <leader>gw :Gwrite<CR>
nnoremap <leader>gl :Glog<CR>
nnoremap <leader>gs :Git<CR>
nnoremap <leader>gd :Gdiffsplit<CR>
nnoremap <leader>gp :Gpush<CR>
nnoremap <leader>ga :Git add %<CR>
nnoremap <leader>ga. :Git add .<CR>
nnoremap <leader>gc :Git commit<CR>
"fzf
nnoremap <leader>f :GitFiles<CR>
nnoremap <leader>F :Files<CR>
nnoremap <leader>c :Commands<CR>
nnoremap <leader>b :Buffers<CR>
nnoremap <leader>h :Helptags<CR>
nnoremap <leader>m :Maps<CR>
nnoremap <leader>rg :Rg<CR>
"}}}
"==================
"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 <https://vi.stackexchange.com/questions/10988/toggle-explorer-window>
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 <leader>r <esc>:'<,'>:w !python3<CR>
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
" }}}