dotfiles/dot_vimrc

547 lines
15 KiB
Plaintext
Raw Normal View History

2023-02-11 14:11:00 +01:00
" vim: fdm=marker ts=2 sts=2 sw=2
if has('python3')
silent! python3 1
endif
let mapleader = "\<Space>"
let maplocalleader = "\\"
map <Space> <Leader>
let g:elite_mode=1
source ~/.vim/local.vim
" Plugins {{{
call plug#begin('~/.vim/plugged')
"###########
" Utility
"###########
Plug '~/.fzf'
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } "{{{
let NERDTreeShowHidden=0
let NERDTreeMinimalUI = 1
let NERDTreeDirArrows = 1
"}}}
Plug 'preservim/tagbar', { 'on': 'TagbarToggle' } "{{{
"}}}
Plug 'lifepillar/vim-mucomplete' "{{{
let g:mucomplete#chains = {
\ 'default': ['c-p', 'omni'],
\ 'markdown': ['keyp', 'thes', 'spel', 'dict'],
\ 'tex': ['keyp', 'ulti', 'spel', 'thes', 'dict']
\ }
inoremap <silent> <expr> <plug>MyCR mucomplete#ultisnips#expand_snippet("\<cr>")
imap <cr> <plug>MyCR
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"
inoremap <silent> <plug>(MUcompleteFwdKey) <right>
imap <right> <plug>(MUcompleteCycFwd)
inoremap <silent> <plug>(MUcompleteBwdKey) <left>
imap <left> <plug>(MUcompleteCycBwd)
"}}}
"Plug 'sirver/ultisnips' "{{{
"let g:UltiSnipsSnippetDirectories =[$HOME.'/.vim/plugged/vim-snippets/UltiSnips']
"let g:UltiSnipsExpandTrigger = "<f9>" " Do not use <tab>
"let g:UltiSnipsListSnippets = "<f10>" " Do not use <tab>
"let g:UltiSnipsJumpForwardTrigger = "<c-b>" " Do not use <c-j>
""}}}
Plug 'junegunn/fzf.vim' "{{{
let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } }
let g:fzf_preview_window = ''
nnoremap <leader>e :Files<cr>
nnoremap <leader>E :History<cr>
nnoremap <leader>b :Buffer<cr>
nnoremap <leader>c :Commits<cr>
nnoremap <leader>s :Snippets<cr>
" nnoremap <leader>a :Ag<cr>
nnoremap <leader>g :Rg<cr>
nnoremap <leader>l :BLines<cr>
nnoremap <leader>L :Lines<cr>
nnoremap <leader>t :BTags<cr>
nnoremap <leader>T :Tags<cr>
nnoremap <leader>h :Helptags<cr>
"}}}
Plug 'junegunn/vim-easy-align' "{{{
xmap gl <Plug>(EasyAlign)
nmap gl <Plug>(EasyAlign)
"}}}
Plug 'easymotion/vim-easymotion' "{{{
let g:EasyMotion_do_mapping = 0
let g:EasyMotion_smartcase = 1
" map <Leader> <Plug>(easymotion-prefix)
nmap <Leader>s <Plug>(easymotion-overwin-f2)
map <Leader>w <Plug>(easymotion-bd-w)
nmap <Leader>w <Plug>(easymotion-overwin-w)
map <Leader>j <Plug>(easymotion-j)
map <Leader>k <Plug>(easymotion-k)
"}}}
Plug 'konfekt/fastfold' "{{{
nmap zuz <Plug>(FastFoldUpdate)
let g:fastfold_savehook = 1
let g:tex_fold_enabled = 1
let g:vimsyn_folding = 'af'
let g:javaScript_fold = 1
let g:perl_fold = 0
let g:php_folding = 0
" }}}
Plug 'tpope/vim-unimpaired' "{{{
"}}}
Plug 'mhinz/vim-grepper' "{{{
nnoremap <leader>g :Grepper -tool rg<cr>
nnoremap <leader>G :Grepper -tool ag<cr>
nmap gs <plug>(GrepperOperator)
xmap gs <plug>(GrepperOperator)
let g:grepper = {}
let g:grepper.tools = ['rg', 'ag', 'git', 'ack']
let g:grepper.jump = 1
let g:grepper.next_tool = '<leader>g'
let g:grepper.simple_prompt = 1
let g:grepper.quickfix = 0
"}}}
Plug 'tpope/vim-dispatch'
Plug 'tpope/vim-repeat'
Plug 'tpope/vim-surround'
Plug 'tpope/vim-eunuch'
Plug 'vasconcelloslf/vim-interestingwords' "{{{
" nnoremap <silent> <leader>k :call InterestingWords('n')<cr>
" nnoremap <silent> <leader>K :call UncolorAllWords()<cr>
" nnoremap <silent> n :call WordNavigation('forward')<cr>
" nnoremap <silent> N :call WordNavigation('backward')<cr>
"}}}
"#############################
" Generic Programming Support
"#############################
Plug 'honza/vim-snippets'
Plug 'jiangmiao/auto-pairs' "{{{
let g:AutoPairsShortcutFastWrap='<C-e>'
let g:AutoPairsMapSpace = 0
imap <silent> <expr> <space> pumvisible()
\ ? "<space>"
\ : "<c-r>=AutoPairsSpace()<cr>"
let g:AutoPairsMapCR = 0
let g:AutoPairsMapSpace = 0
imap <silent> <expr> <space> pumvisible()
\ ? "<space>"
\ : "<c-r>=AutoPairsSpace()<cr>"
inoremap <silent> <expr> <plug>UltiExpand
\ mucomplete#ultisnips#expand_snippet("\<cr>")
imap <plug>MyCR <plug>UltiExpand<plug>AutoPairsReturn
imap <cr> <plug>MyCR
"}}}
Plug 'ntpeters/vim-better-whitespace' "{{{
let g:better_whitespace_filetypes_blacklist=['mail', 'diff', 'gitcommit', 'unite', 'qf', 'help']
"}}}
Plug 'tpope/vim-commentary'
Plug 'cespare/vim-toml'
Plug 'AndrewRadev/splitjoin.vim'
Plug 'tobyS/vmustache'
Plug 'dense-analysis/ale' "{{{
let g:ale_sign_error = '✘'
let g:ale_sign_warning = '⚠'
highlight ALEErrorSign ctermbg=NONE ctermfg=red
highlight ALEWarningSign ctermbg=NONE ctermfg=yellow
let g:ale_lint_on_save = 1
let g:ale_fix_on_save = 1
let g:ale_lint_on_enter = 0
let g:ale_lint_on_text_changed = 'never'
set omnifunc=ale#completion#OmniFunc
let g:ale_linter_aliases = {'svelte': ['css', 'javascript']}
let g:ale_linters = {
\ 'javascript': ['standard'],
\ 'svelte': ['stylelint', 'eslint'],
\ 'go': ['go build', 'gometalinter']
\ }
let g:ale_fixers = {
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
\ 'javascript': ['prettier', 'eslint'],
\ 'svelte': ['eslint', 'prettier', 'prettier_standard'],
\ 'go': ['goimports']
\ }
let g:gometalinter_fast = ''
\ . ' --enable=vet'
\ . ' --enable=errcheck'
\ . ' --enable=ineffassign'
\ . ' --enable=goimports'
\ . ' --enable=misspell'
\ . ' --enable=lll --line-length=120'
let g:ale_go_gometalinter_options = '--disable-all --tests' . g:gometalinter_fast . ' --enable=golint'
"}}}
"#####################
" Markdown / Writing
"#####################
Plug 'dbmrq/vim-ditto' "{{{
" au FileType markdown,text,tex DittoOn
nmap <leader>di <Plug>ToggleDitto " Turn Ditto on and off
nmap =d <Plug>DittoNext " Jump to the next word
nmap -d <Plug>DittoPrev " Jump to the previous word
nmap +d <Plug>DittoGood " Ignore the word under the cursor
nmap _d <Plug>DittoBad " Stop ignoring the word under the cursor
nmap ]d <Plug>DittoMore " Show the next matches
nmap [d <Plug>DittoLess " Show the previous matches
"}}}
Plug 'kana/vim-textobj-user'
Plug 'reedes/vim-textobj-quote'
Plug 'reedes/vim-textobj-sentence'
Plug 'reedes/vim-wordy' "{{{
" let g:wordy_spell_dir = '~/.vim/spell/wordy'
"}}}
Plug 'reedes/vim-lexical' "{{{
let g:lexical#thesaurus = ['~/.vim/thesaurus/english.txt',]
let g:lexical#spellfile = ['~/.vim/spell/en.utf-8.add',]
let g:lexical#thesaurus_key = '<leader>t'
let g:lexical#dictionary_key = '<leader>k'
"}}}
Plug 'reedes/vim-litecorrect'
Plug 'reedes/vim-pencil' "{{{
let g:pencil#map#suspend_af = 'K'
"}}}
Plug 'tpope/vim-abolish'
Plug 'tpope/vim-markdown'
Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install' } "{{{
let g:mkdp_refresh_slow = 1
"}}}
Plug 'lervag/vimtex' "{{{
let g:tex_flavor = 'latex'
"}}}
"#####################
" Productivity
"#####################
Plug 'fcpg/vim-waikiki' "{{{
let g:waikiki_roots = ['~/doc/vimwiki/']
let g:waikiki_default_maps = 1
nn <Leader>ww :e ~/doc/vimwiki/index.md<cr>
"}}}
Plug 'alok/notational-fzf-vim' "{{{
let g:nv_search_paths = ['~/doc/zettelkasten', '~/doc/wiki']
"}}}
"#####################
" Git Support
"#####################
Plug 'tpope/vim-fugitive' "{{{
nnoremap <Leader>gs :Gstatus<CR>
nnoremap <Leader>gr :Gremove<CR>
nnoremap <Leader>gl :Glog<CR>
nnoremap <Leader>gb :Gblame<CR>
nnoremap <Leader>gm :Gmove
nnoremap <Leader>gp :Ggrep
nnoremap <Leader>gR :Gread<CR>
nnoremap <Leader>gg :Git
nnoremap <Leader>gd :Gdiff<CR>
"}}}
Plug 'junegunn/gv.vim'
Plug 'mhinz/vim-signify' "{{{
let g:signify_vcs_list = [ 'git' ]
let g:signify_disable_by_default = 0
let g:signify_realtime = 0
nmap <F10> <Plug>(SignifyToggle)
"}}}
"#########################
" Web Programming Support
"#########################
Plug 'pangloss/vim-javascript'
Plug 'mxw/vim-jsx'
Plug 'mattn/emmet-vim'
Plug 'othree/html5.vim'
Plug 'lumiliet/vim-twig'
Plug 'evanleck/vim-svelte'
Plug 'jparise/vim-graphql'
Plug 'ap/vim-css-color'
"#########################
" Language support
"#########################
Plug 'vim-perl/vim-perl'
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' } "{{{
let g:go_addtags_transform = "camelcase"
autocmd FileType go nmap MM <Plug>(go-build)
autocmd FileType go nmap LL <Plug>(go-run)
autocmd FileType go nmap TT <Plug>(go-test)
autocmd FileType go nmap <Leader>i <Plug>(go-info)
"}}}
"#########################
" Theme / Interface
"#########################
let g:lightline = {'colorscheme': 'powerline'}
Plug 'itchyny/lightline.vim' "{{{
let g:lightline = {
\ 'active': {
\ 'left': [ [ 'mode', 'paste' ],
\ [ 'gitbranch', 'readonly', 'filename', 'modified', 'pencil' ] ]
\ },
\ 'component_function': {
\ 'gitbranch': 'fugitive#statusline',
\ 'pencil': 'PencilMode'
\ },
\ }
"}}}
Plug 'morhetz/gruvbox'
call plug#end()
"}}}
" Vim sensible settings {{{
set nocompatible
set encoding=utf8
set lazyredraw
"Always show the status line
set laststatus=2
"Set incremental searching"
set incsearch
"highlighting of search matches
set hlsearch
"ignore case in search patterns
set ignorecase
"overwrite ignorecase if upper case chars
set smartcase
"Show line numbers
set number
"keep cursor in the same column
set nostartofline
"Write the old file out when switching between files.
set autowrite
"read file if changed outside
set autoread
"show line and column of cursor
set ruler
" Enable highlighting of the current line
" set cursorline
set wildmenu wildignorecase wildmode=list:longest,full
set history=1000
set completeopt+=menuone
set completeopt+=noselect
set cpt=.,w,b,t
" set completeopt+=noinsert
"Show command in bottom right portion of the screen
set showcmd
set noshowmode
set shortmess+=c
set belloff+=ctrlg
"Switch between buffers without saving
set hidden
set splitbelow
set splitright
set display+=lastline
"Enable code folding
" set foldenable foldmethod=syntax
"Ever notice a slight lag after typing the leader key + command?
"This lowers the timeout.
set timeoutlen=500 ttimeoutlen=50
"Hide mouse when typing
set mousehide
set mouse=a
"Tab stuff
set tabstop=4
set shiftwidth=4
set softtabstop=4
set smarttab
set expandtab
"Indent stuff
set smartindent
set autoindent
set breakindent
"Prefer a slightly higher line height
set linespace=3
set switchbuf=useopen
set updatetime=500
set synmaxcol=400
" Enable tab markers
let g:indentLine_char = '⦙'
"Better line wrapping
set nowrap
set formatoptions+=j
filetype plugin indent on
syntax on
" better backup, swap and undo storage
set noswapfile
set backup
set undofile
set backupdir=~/.vim/dirs/backup
set undodir=~/.vim/dirs/undo
set thesaurus=~/.vim/thesaurus/english.txt
set spellfile=~/.vim/spell/en.utf8.add
set spelllang=en_us
set diffopt+=algorithm:patience
set diffopt+=vertical
" hi SpellBad gui=underline guifg=red cterm=underline ctermfg=red
"}}}
" Theme and Styling {{{
if has('gui_running')
set guifont=BrutalistMono:h14
" Scrollbar junk
set guioptions=aAcei
set go-=T
set ballooneval
autocmd GUIEnter * set novisualbell t_vb=
endif
let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"
set termguicolors
let g:gruvbox_contrast_dark = 'hard'
let g:gruvbox_italic=0
colorscheme gruvbox
set background=dark
"}}}
" Filetype settings {{{
function! Prose()
call pencil#init({'wrap': 'hard', 'autoformat': 1})
call lexical#init()
call litecorrect#init()
call textobj#quote#init()
call textobj#sentence#init()
colorscheme pencil
DittoOn
" manual reformatting shortcuts
nnoremap <buffer> <silent> Q gqap
xnoremap <buffer> <silent> Q gq
nnoremap <buffer> <silent> <leader>Q vapJgqap
" force top correction on most recent misspelling
nnoremap <buffer> <c-s> [s1z=<c-o>
inoremap <buffer> <c-s> <c-g>u<Esc>[s1z=`]A<c-g>u
" replace common punctuation
iabbrev <buffer> --
iabbrev <buffer> --- —
iabbrev <buffer> << «
iabbrev <buffer> >> »
" open most folds
setlocal foldlevel=6
" replace typographical quotes (reedes/vim-textobj-quote)
map <silent> <buffer> <leader>qc <Plug>ReplaceWithCurly
map <silent> <buffer> <leader>qs <Plug>ReplaceWithStraight
" highlight words (reedes/vim-wordy)
noremap <silent> <buffer> <F8> :<C-u>NextWordy<cr>
xnoremap <silent> <buffer> <F8> :<C-u>NextWordy<cr>
inoremap <silent> <buffer> <F8> <C-o>:NextWordy<cr>
endfunction
augroup CustomFiletype
autocmd BufNewFile,BufRead *.md set filetype=markdown
autocmd FileType python,vim,yaml setlocal foldmethod=indent
autocmd FileType qf wincmd J
augroup END
:autocmd! BufNewFile,BufRead * setlocal nowrap
:autocmd! BufNewFile,BufRead *.txt,*.md,*.tex setlocal wrap
autocmd BufNewFile,BufRead ~/.mutt/temp/* set noautoindent filetype=mail wm=0 tw=78 nonumber digraph nolist nofen
autocmd BufNewFile,BufRead /dev/shm/gopass.* setlocal noswapfile nobackup noundofile
autocmd FileType help wincmd L
autocmd FileType fugitive wincmd L
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
" autocmd FileType markdown,mkd call Prose()
"}}}
" Mappings {{{
"allow deletion of previously entered data in insert mode
set backspace=indent,eol,start
" When pressing <Leader>cd switch to the directory of the open buffer
map <Leader>cd :cd %:p:h<CR>
"------ Disable Annoying Features ------
" Wtf is Ex Mode anyways?
nnoremap Q <nop>
" Annoying window
map q: :q
" Accidentally pressing Shift K will no longer open stupid man entry
noremap K <nop>
" Shortcut to close quickfix windows
nnoremap <silent> <leader>a :windo lcl\|ccl<CR>
"------ Buffer Navigation ------
" <Leader>q Closes the current buffer
nnoremap <silent> <Leader>q :bdelete<CR>
" replace ex mode map and use it for repeating 'q' macro
nnoremap Q @q
vnoremap Q :norm @q<cr>
" clear the search buffer when hitting return
nnoremap <silent> <CR> :nohlsearch<CR><CR>
if get(g:, 'elite_mode')
nnoremap <Up> :resize -2<CR>
nnoremap <Down> :resize +2<CR>
nnoremap <Left> :vertical resize -2<CR>
nnoremap <Right> :vertical resize +2<CR>
endif
" Easier in-file navigation with Tab and S-Tab
nnoremap <S-Tab> <C-U>
nnoremap <Tab> <C-D>
" Toggle all folds with F2
nnoremap <F2> zR
" nnoremap <F3> zM
nnoremap <F3> :PencilToggle<CR>
nnoremap <F4> :MUcompleteAutoToggle<CR>
nmap <F9> i<C-R>=strftime("%Y-%m-%d %H:%M")<CR><Esc>
imap <F9> <C-R>=strftime("%Y-%m-%d %H:%M")<CR>
map <C-t> :TagbarToggle<CR>
map <C-n> :NERDTreeToggle<CR>
" Easier split navigation
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
" switch tabs with Ctrl left and right
nnoremap <C-right> :tabnext<CR>
nnoremap <C-left> :tabprevious<CR>
" and whilst in insert mode
inoremap <C-right> <Esc>:tabnext<CR>
inoremap <C-left> <Esc>:tabprevious<CR>
"------ Text Editing Utilities ------
" <Leader>U = Deletes Unwanted empty lines
nmap <Leader>U :g/^$/d<CR>
" <Leader>R = Converts tabs to spaces in document
nmap <Leader>R :retab<CR>
" gq will wrap lines, so gQ will unwrap lines
nmap gQ VipJ
command! -nargs=0 Prose call Prose()
"}}}