2021-05-09 17:22:16 -04:00

566 lines
13 KiB
VimL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"__ _(_)_ __ ___ _ __ ___ "
"\ \ / / | '_ ` _ \| '__/ __|"
" \ 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-E>'
"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>gf :GitFiles<CR>
nnoremap <leader>f :Files<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']}
" ==== 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']
\}
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
"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
"}}}
"========
"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
" }}}