547 lines
15 KiB
Plaintext
547 lines
15 KiB
Plaintext
" 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()
|
||
"}}}
|