dotfiles/nvim/init.vim

733 lines
26 KiB
VimL

" Specify a directory for plugins (for Neovim: ~/.local/share/nvim/plugged)
call plug#begin('~/.config/nvim/plugged')
" ----------------------------- Plugins --------------------------------------
" Automatically match structures as you type
Plug 'tpope/vim-endwise'
Plug 'jiangmiao/auto-pairs'
" Tab completion
Plug 'ervandew/supertab'
" EasyMotion
Plug 'easymotion/vim-easymotion'
Plug 'haya14busa/incsearch.vim'
Plug 'haya14busa/incsearch-easymotion.vim'
" Fuzzy search
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --bin' }
Plug 'junegunn/fzf.vim'
" Remove extraneous whitespace when edit mode is exited
Plug 'thirtythreeforty/lessspace.vim'
" Status bar mods
Plug 'vim-airline/vim-airline'
" Manage Project sessions
Plug 'thaerkh/vim-workspace'
" Commenter
Plug 'scrooloose/nerdcommenter'
" Theme
Plug 'sickill/vim-monokai'
Plug 'justinmk/vim-syntax-extra'
Plug 'octol/vim-cpp-enhanced-highlight'
" Autoload and read from dish if file changes
Plug 'tmux-plugins/vim-tmux-focus-events'
Plug 'wellle/tmux-complete.vim'
" For LaTeX support
Plug 'lervag/vimtex'
" For git support
Plug 'airblade/vim-gitgutter'
Plug 'tpope/vim-fugitive'
Plug 'junegunn/gv.vim'
Plug 'rhysd/git-messenger.vim'
Plug 'christoomey/vim-conflicted'
Plug 'rbong/vim-flog'
" For tmux yank
Plug 'vim-utils/vim-husk'
" Tags
Plug 'sk1418/QFGrep'
Plug 'steffanc/cscopemaps.vim', { 'for': 'c' }
Plug 'deoplete-plugins/deoplete-tag'
" GDB
Plug 'sakhnik/nvim-gdb', { 'do': ':UpdateRemotePlugins' }
" Lisp
Plug 'guns/vim-sexp', { 'for': [ 'scheme', 'lisp', 'clojure' ] }
Plug 'tpope/vim-sexp-mappings-for-regular-people', { 'for': [ 'scheme', 'lisp', 'clojure' ] }
Plug 'junegunn/rainbow_parentheses.vim', { 'for': [ 'scheme', 'lisp', 'clojure' ] }
Plug 'Olical/vim-scheme', { 'for': 'scheme', 'on': 'SchemeConnect' }
" Haskell
Plug 'ekmett/haskell-vim', { 'for': [ 'haskell', 'cabal' ] }
Plug 'ndmitchell/ghcid', { 'rtp': 'plugins/nvim' }
Plug 'Twinside/vim-hoogle', { 'for': 'haskell' }
Plug 'hspec/hspec.vim'
Plug 'zenzike/vim-haskell-unicode', { 'for': 'haskell' }
" For Nix
Plug 'LnL7/vim-nix', { 'for': 'nix' }
" For autocompletion
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
" For Python
Plug 'davidhalter/jedi-vim', { 'for': 'python' }
Plug 'zchee/deoplete-jedi', { 'for': 'python' }
Plug 'numirias/semshi', { 'for': 'python', 'do': ':UpdateRemotePlugins' }
" Autocomplete for Rust
Plug 'sebastianmarkow/deoplete-rust', { 'for': 'rust' }
Plug 'cespare/vim-toml', { 'for': 'rust' }
Plug 'rust-lang/rust.vim', { 'for': 'rust' }
Plug 'mhinz/vim-crates'
" Snippets
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
" Erlang Support
Plug 'vim-erlang/vim-erlang-tags', { 'for': 'erlang' }
Plug 'vim-erlang/vim-erlang-runtime', { 'for': 'erlang' }
Plug 'vim-erlang/vim-erlang-omnicomplete', { 'for': 'erlang' }
Plug 'vim-erlang/vim-erlang-compiler', { 'for': 'erlang' }
" Purescript
Plug 'purescript-contrib/purescript-vim'
Plug 'frigoeu/psc-ide-vim'
" Neo/Async stuff
Plug 'sbdchd/neoformat'
Plug 'neomake/neomake'
" Miscellaneous
Plug 'tpope/vim-surround'
Plug 'tpope/vim-repeat'
Plug 'tpope/vim-eunuch'
Plug 'tpope/vim-sleuth'
Plug 'editorconfig/editorconfig-vim'
Plug 'igankevich/mesonic'
Plug 'stefandtw/quickfix-reflector.vim'
Plug 'yuttie/comfortable-motion.vim'
Plug 'lifecrisis/vim-difforig'
Plug 'dag/vim-fish'
Plug 'pbrisbin/vim-syntax-shakespeare'
Plug 'lifepillar/pgsql.vim'
Plug 'mbbill/undotree'
Plug 'milkypostman/vim-togglelist'
Plug 'jpalardy/vim-slime'
Plug 'liuchengxu/vim-which-key'
Plug 'jceb/vim-orgmode'
Plug 'wellle/targets.vim'
Plug 'takac/vim-hardtime'
Plug 'junegunn/vim-easy-align'
" Initialize plugin system
call plug#end()
" ----------------------------- Settings -------------------------------------
" Set up leaders
let mapleader="\<SPACE>"
let maplocalleader=","
set colorcolumn=80 " Highlight 80th column
set laststatus=2 " Always show status bar
set updatetime=500 " Let plugins show effects after 500ms
set mouse-=a " Disable mouse click to go to position
set encoding=utf-8
set exrc " Allow loading local .nvimrc files
set secure " Disallow use of autocmd, shell and write in local rc
set showcmd " Show (partial) command in status line.
set showmatch " Show matching brackets.
set ruler " Show the line and column numbers of the cursor.
set number " Show the line numbers on the left side.
set formatoptions+=o " Continue comment marker in new lines.
set formatoptions+=j " Delete comment character when joining commented lines
set textwidth=80 " Hard-wrap long lines as you type them.
set softtabstop=4 " Finetunes the amount of white space to be added.
set tabstop=4 " Render TABs using this many spaces.
set shiftwidth=4 " Indentation amount for < and > commands.
set smarttab " Indent with tabs, align with spaces.
set expandtab " When on, uses space instead of tabs.
set autoindent " Copy indent from current line when starting a new line
set noerrorbells " No beeps.
set modeline " Enable modeline.
set linespace=0 " Set line-spacing to minimum.
set nojoinspaces " Prevents inserting two spaces after punctuation on a join (J)
set noshowmode " Because of neovim's cursor shape
set splitbelow " Horizontal split below current.
set splitright " Vertical split to right of current.
set nobackup " no backup files
set nowritebackup " only in case you don't want a backup file while editing
set noswapfile " no swap files
set foldmethod=syntax " Create folds based on files syntax
set nofoldenable " Open folds by default
" Wild menu
set wildmenu
set wildmode=list:longest,full
set wildoptions=pum
set pumblend=30
set wildignore+=.hg,.git,.svn " Version control
set wildignore+=*.aux,*.out,*.toc " LaTeX intermediate files
set wildignore+=*.jpg,*.bmp,*.gif,*.png,*.jpeg " binary images
set wildignore+=*.o " compiled object files
set wildignore+=*.sw? " Vim swap files
set wildignore+=*.luac " Lua byte code
set wildignore+=*.pyc " Python byte code
set wildignore+=*.orig " Merge resolution files
if !&scrolloff
set scrolloff=3 " Show next 3 lines while scrolling.
endif
if !&sidescrolloff
set sidescrolloff=5 " Show next 5 columns while side-scrolling.
endif
set nostartofline " Do not jump to first character with page commands.
set ignorecase " Make searching case insensitive
set smartcase " ... unless the query has capital letters.
set gdefault " Use 'g' flag by default with :s/foo/bar/.
set magic " Use 'magic' patterns (extended regular expressions).
set autoread " Autoload file if it changes on disk
set termguicolors " Enable colors for terminal
set fileformat=unix
set inccommand=split
set clipboard^=unnamed,unnamedplus
set backspace=indent,eol,start
set completeopt+=menu,noselect,preview,noinsert
" Required for vim-workspace
" See https://github.com/thaerkh/vim-workspace/issues/11
set sessionoptions-=blank
" Theme
colorscheme monokai
set background=dark
" --------------------------- Key Bindings -----------------------------------
" Use <C-L> to clear the highlighting of :set hlsearch.
if maparg('<C-L>', 'n') ==# ''
nnoremap <silent> <C-L> :nohlsearch<CR><C-L>
endif
" Remap escape keys to something usable on home row
inoremap jk <Esc>
cnoremap jk <C-C>
inoremap <Esc> <Nop>
cnoremap <Esc> <Nop>
" Use ; for commands.
nnoremap ; :
" Use Q to execute default register.
nnoremap Q <Nop>
" For Fuzzy
nnoremap <Leader>vf :GFiles<CR>
nnoremap <Leader>v? :GFiles?<CR>
nnoremap <Leader>vF :Files<CR>
nnoremap <Leader>vb :Buffers<CR>
nnoremap <Leader>vL :Lines<CR>
nnoremap <Leader>vl :BLines<CR>
nnoremap <Leader>vt :BTags<CR>
nnoremap <Leader>vT :Tags<CR>
nnoremap <Leader>vc :BCommits<CR>
nnoremap <Leader>vC :Commits<CR>
nnoremap <Leader>vch :History:<CR>
nnoremap <Leader>vsh :History/<CR>
nnoremap <Leader>vm :Commands<CR>
nnoremap <Leader>vo :Locate<SPACE>
nnoremap <Leader>vk :Maps<CR>
nnoremap <Leader>v/ :Rg<CR>
nnoremap <Leader>* :exe ':Rg ' . expand('<cword>')<CR>
" Quick buffer switching
nnoremap <Leader>b :ls<CR>:b<Space>
" Undo tree
nnoremap <Leader>u :UndotreeToggle<CR>
" Save
nnoremap <Leader>w <Esc>:w<CR>
" Search and Replace
nnoremap <Leader>sr :%s//g<Left><Left>
" Manage window splitting
nnoremap <Leader>sh <Esc>:sp<CR>
nnoremap <Leader>sv <Esc>:vsp<CR>
" Quit
nnoremap <Leader>x <Esc>:x<CR>
nnoremap <Leader>Q <Esc>:qa<CR>
" Terminal
nnoremap <Leader>te :vsp<CR> :terminal<CR>
nnoremap <Leader>tc :SlimeConfig<CR>
xmap <Leader>ts <Plug>SlimeRegionSend
nmap <Leader>ts <Plug>SlimeParagraphSend
" Tab navigation shortcuts
nnoremap <Leader>tn :bn<CR>
nnoremap <Leader>tp :bp<CR>
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
" Reload opened vim config file
nnoremap <Leader>vr :so %<CR>
" For git
nnoremap <Leader>gm :GitMessenger<CR>
nnoremap <Leader>gl :0Glog<CR>
nnoremap <Leader>gL :Glog<CR>
nnoremap <Leader>gd :Gdiff<CR>
nnoremap <Leader>gD :Gdiffsplit<CR>
nnoremap <Leader>gs :Gstatus<CR>
nnoremap <Leader>gc :Gcommit -v -q --signoff<CR>
nnoremap <Leader>gt :Gcommit -v -q --signoff %:p<CR>
nnoremap <Leader>gp :Git push<CR>
nnoremap <Leader>gu :Git push -u<SPACE>
nnoremap <Leader>gr :Git remote -v<CR>
nnoremap <Leader>gb :Git branch<SPACE>
nnoremap <Leader>go :Git checkout<SPACE>
nnoremap <Leader>g- :Git stash<CR>:e<CR>
nnoremap <Leader>g+ :Git stash pop<CR>:e<CR>
nnoremap <Leader>gf :exe ':Ggrep ' . expand('<cword>')<CR>
nnoremap <Leader>gF :Ggrep<SPACE>
nnoremap <Leader>gg :GGrep<SPACE>
" For gitgutter
nnoremap <Leader>ghn :GitGutterNextHunk<CR>
nnoremap <Leader>ghp :GitGutterPrevHunk<CR>
nnoremap <Leader>ghs :GitGutterStageHunk<CR>
nnoremap <Leader>ghu :GitGutterUndoHunk<CR>
nnoremap <Leader>ghr :GitGutterPreviewHunk<CR>
nnoremap <Leader>gqf :GitGutterQuickFix<CR>
nnoremap <Leader>ggf :GitGutterFold<CR>
" For Neomake/Neoformat
nnoremap <Leader>nm :Neomake<CR>
nnoremap <Leader>nc :NeomakeClean<CR>
nnoremap <Leader>ns :NeomakeSh<SPACE>
nnoremap <Leader>njl :NeomakeListJobs<CR>
nnoremap <Leader>nja :NeomakeCancelJobs<CR>
nnoremap <Leader>njc :NeomakeCancelJob<SPACE>
nnoremap <Leader>nf :Neoformat<CR>
" For workspace
nnoremap <Leader>sw :ToggleWorkspace<CR>
" Quickfix & Location list mappings
nnoremap <Leader>fn :cnext<CR>
nnoremap <Leader>fp :cprevious<CR>
nnoremap <Leader>fo :copen<CR>
nnoremap <Leader>fc :cclose<CR>
nnoremap <Leader>fs :vimgrep<SPACE>
nnoremap <Leader>ft :call ToggleQuickfixList()<CR>
nnoremap <Leader>ffn :lnext<CR>
nnoremap <Leader>ffp :lprevious<CR>
nnoremap <Leader>ffo :lopen<CR>
nnoremap <Leader>ffc :lclose<CR>
nnoremap <Leader>ffs :lvimgrep<SPACE>
nnoremap <Leader>fft :call ToggleLocationList()<CR>
" Key Bindings to help with terminal mode
:tnoremap jk <C-\><C-n>
" Key bindings to move between window splits
nnoremap gh <C-w>h
nnoremap gj <C-w>j
nnoremap gk <C-w>k
nnoremap gl <C-w>l
" Disable Arrow Keys
inoremap <Up> <NOP>
inoremap <Down> <NOP>
inoremap <Left> <NOP>
inoremap <Right> <NOP>
noremap <Up> <NOP>
noremap <Down> <NOP>
noremap <Left> <NOP>
noremap <Right> <NOP>
nnoremap <silent> <Leader> :<C-U>WhichKey '<Space>'<CR>
nnoremap <silent> <LocalLeader> :<C-U>WhichKey ','<CR>
map <Leader><Leader>c <Plug>(easymotion-bd-f)
nmap <Leader><Leader>c <Plug>(easymotion-overwin-f)
map <Leader><Leader>L <Plug>(easymotion-bd-jk)
nmap <Leader><Leader>L <Plug>(easymotion-overwin-line)
map <Leader><Leader>w <Plug>(easymotion-bd-w)
nmap <Leader><Leader>w <Plug>(easymotion-overwin-w)
noremap <silent><expr> / incsearch#go(<SID>incsearch_config())
noremap <silent><expr> ? incsearch#go(<SID>incsearch_config({'command': '?'}))
noremap <silent><expr> g/ incsearch#go(<SID>incsearch_config({'is_stay': 1}))
map <Leader>l <Plug>(easymotion-lineforward)
map <Leader>j <Plug>(easymotion-j)
map <Leader>k <Plug>(easymotion-k)
map <Leader>h <Plug>(easymotion-linebackward)
command! -bang -nargs=* GGrep
\ call fzf#vim#grep(
\ 'git grep --line-number '.shellescape(<q-args>), 0,
\ fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), <bang>0)
" --------------------------- Autocmd groups ---------------------------------
augroup vimplug_maps
au!
au FileType vim nmap <Leader>pg :PlugUpgrade<CR>
au FileType vim nmap <Leader>pd :PlugUpdate<CR>
au FileType vim nmap <Leader>pc :PlugClean<CR>
augroup END
augroup haskell_maps
au!
au FileType haskell nmap <Leader>ht :NeomakeSh stack exec -- fast-tags -R .<CR>
au FileType haskell nmap <Leader>hg :Ghcid<CR>
au FileType haskell nmap <Leader>hk :GhcidKill<CR>
au FileType haskell nmap <Leader>hc :HoogleClose<CR>
au FileType haskell nmap <Leader>ho :exe ':Hoogle ' . expand('<cword>')<CR>
au FileType haskell nmap <Leader>hi :exe ':HoogleInfo ' . expand('<cword>')<CR>
augroup END
augroup psc_ide_maps
au!
au FileType purescript nmap <buffer> <silent> <Leader>pt :<C-U>call Ptype(PgetKeyword(), v:true)<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pT :<C-U>call PaddTypeAnnotation(matchstr(getline(line(".")), '^\s*\zs\k\+\ze'))<CR>
au FileType purescript nmap <buffer> <silent> <Leader>ps :<C-U>call PapplySuggestion()<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pa :<C-U>call PaddTypeAnnotation()<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pi :<C-U>call PimportIdentifier(PgetKeyword())<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pr :<C-U>call Pload()<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pp :<C-U>call Ppursuit(PgetKeyword())<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pq :<C-U>call PaddImportQualifications()<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pQ :<C-U>call PremoveImportQualifications()<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pg :<C-U>call PgoToDefinition(PgetKeyword())<CR>
au FileType purescript nmap <buffer> <silent> <Leader>pc :<C-U>call PcaseSplit<SPACE>
augroup END
augroup c_maps
au!
au FileType c nmap <Leader>ct :NeomakeSh ctags -R .<CR>
au FileType c nmap <Leader>cu :NeomakeSh cscope -bqR<CR>
au FileType c nmap <Leader>cr :cs reset<CR>
au FileType c nmap <silent> <Leader>ss :call Cscope("s", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader>sg :call Cscope("g", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader>sd :call Cscope("d", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader>sc :call Cscope("c", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader>st :call Cscope("t", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader>se :call Cscope("e", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader>sf :call Cscope("f", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader>si :call Cscope("i", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader>sa :call Cscope("a", expand('<cword>'))<CR>
au FileType c nmap <silent> <Leader><Leader>ss :call CscopeQuery("s")<CR>
au FileType c nmap <silent> <Leader><Leader>sg :call CscopeQuery("g")<CR>
au FileType c nmap <silent> <Leader><Leader>sd :call CscopeQuery("d")<CR>
au FileType c nmap <silent> <Leader><Leader>sc :call CscopeQuery("c")<CR>
au FileType c nmap <silent> <Leader><Leader>st :call CscopeQuery("t")<CR>
au FileType c nmap <silent> <Leader><Leader>se :call CscopeQuery("e")<CR>
au FileType c nmap <silent> <Leader><Leader>sf :call CscopeQuery("f")<CR>
au FileType c nmap <silent> <Leader><Leader>si :call CscopeQuery("i")<CR>
au FileType c nmap <silent> <Leader><Leader>sa :call CscopeQuery("a")<CR>
augroup END
augroup rust_maps
au!
au FileType rust nmap <buffer> <Leader>rd <plug>DeopleteRustGoToDefinitionDefault
au FileType rust nmap <buffer> <Leader>rc <plug>DeopleteRustShowDocumentation
au FileType rust nmap <buffer> <Leader>rv <plug>DeopleteRustGoToDefinitionVSplit
au FileType rust nmap <buffer> <Leader>rh <plug>DeopleteRustGoToDefinitionSplit
au FileType rust nmap <buffer> <Leader>rt <plug>DeopleteRustGoToDefinitionTab
augroup END
augroup rainbow_lisp
autocmd!
autocmd FileType lisp,clojure,scheme RainbowParentheses
augroup END
augroup scheme_maps
au!
" Starts the REPL.
autocmd FileType scheme nnoremap <buffer> <Leader>rc :SchemeConnect<cr>
" Evaluates the outer most / top level form and jumps the cursor back to where it was.
autocmd FileType scheme nnoremap <buffer> <Leader>re :normal mscpaF<cr>`s
" Evaluates the entire file.
autocmd FileType scheme nnoremap <buffer> <Leader>rf :normal msggcpG<cr>`s
augroup END
" Toggles search highlighting off/on according to current mode. Source: http://blog.sanctum.geek.nz/vim-search-highlighting/
augroup toggle_search
autocmd!
autocmd InsertEnter * setlocal nohlsearch
autocmd InsertLeave * setlocal hlsearch
augroup END
" Close QF window if it is last window
augroup quickfix_close
au!
au WinEnter * if winnr('$') == 1 && &buftype == "quickfix"|q|endif
augroup END
" Taken from http://seenaburns.com/vim-setup-for-rust/
" Neomake
" Gross hack to stop Neomake running when exitting because it creates a zombie cargo check process
" which holds the lock and never exits. But then, if you only have QuitPre, closing one pane will
" disable neomake, so BufEnter reenables when you enter another buffer.
let s:quitting = 0
au QuitPre *.rs let s:quitting = 1
au BufEnter *.rs let s:quitting = 0
au BufWritePost *.rs if ! s:quitting | Neomake | else | echom "Neomake disabled"| endif
augroup terminal_job
au!
au TermOpen * setlocal statusline=%{b:terminal_job_id}
augroup END
augroup indentation_defaults
au!
au BufRead,BufNewFile *.c set noexpandtab
au BufRead,BufNewFile *.h set noexpandtab
au BufRead,BufNewFile Makefile* set noexpandtab
au BufNewFile,BufRead *.vim setlocal noet ts=4 sw=4 sts=4
au BufNewFile,BufRead *.txt setlocal noet ts=4 sw=4
autocmd BufNewFile,BufRead *.lua setlocal noet ts=4 sw=4 sts=4
autocmd BufNewFile,BufRead *.py setlocal tabstop=4 softtabstop=4 shiftwidth=4 textwidth=80 smarttab expandtab
autocmd FileType fstab,systemd set noexpandtab
autocmd FileType gitconfig,sh,toml set noexpandtab
autocmd BufRead,BufNewFile */gst-*/*.[ch] set et sw=2
autocmd BufRead,BufNewFile */gstreamer-*/*.[ch] set et sw=2
autocmd BufRead,BufNewFile */pulseaudio/*.[ch] set et sw=4 tw=128
autocmd BufRead,BufNewFile *.purs set et sw=2 sts=2 si
augroup END
augroup spell_check
au!
autocmd FileType gitcommit setlocal spell
autocmd BufRead,BufNewFile *.md,*.txt setlocal spell
augroup END
" Automatically resize the window
autocmd VimResized * wincmd =
" --------------------------- Plugin settings --------------------------------
let g:haskell_enable_quantification = 1 " to enable highlighting of `forall`
let g:haskell_enable_recursivedo = 1 " to enable highlighting of `mdo` and `rec`
let g:haskell_enable_arrowsyntax = 1 " to enable highlighting of `proc`
let g:haskell_enable_pattern_synonyms = 1 " to enable highlighting of `pattern`
let g:haskell_enable_typeroles = 1 " to enable highlighting of type roles
let g:haskell_enable_static_pointers = 1 " to enable highlighting of `static`
let g:haskell_backpack = 1 " to enable highlighting of backpack keywords
let g:haskell_classic_highlighting = 0
let g:haskell_indent_if = 3
let g:haskell_indent_case = 2
let g:haskell_indent_let = 4
let g:haskell_indent_where = 6
let g:haskell_indent_before_where = 2
let g:haskell_indent_after_bare_where = 2
let g:haskell_indent_do = 3
let g:haskell_indent_in = 1
let g:haskell_indent_guard = 2
let g:haskell_indent_case_alternative = 1
let g:cabal_indent_section = 2
let g:ghcid_command = 'stack exec -- ghcid'
let g:hoogle_search_bin = 'stack exec -- hoogle'
let g:hoogle_search_count = 30
" Use deoplete
let g:deoplete#enable_at_startup = 1
let g:deoplete#sources = {}
call deoplete#custom#source('_',
\ 'disabled_syntaxes', ['Comment', 'String'])
call deoplete#custom#option('sources', {
\ '_' : ['buffer', 'tag', 'around', 'file', 'member'],
\ 'rust': ['racer'],
\})
call deoplete#custom#option({
\ 'auto_complete_delay': 200,
\ 'auto_complete': v:true,
\ 'smart_case': v:true,
\ })
let g:deoplete#sources#rust#disable_keymap = 1
let g:deoplete#sources#rust#racer_binary=expand('$HOME/.cargo/bin/racer')
let g:deoplete#sources#rust#rust_source_path=expand('$HOME/GitSources/rust/src')
let g:rustfmt_autosave = 1
" Use airline
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#fnamemod = ':t'
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline#extensions#tabline#right_sep = ' '
let g:airline#extensions#tabline#right_alt_sep = '|'
let g:airline#extensions#tabline#formatter = 'default'
let g:airline_left_sep = ' '
let g:airline_left_alt_sep = '|'
let g:airline_right_sep = ' '
let g:airline_right_alt_sep = '|'
let g:airline#extensions#tabline#buffer_nr_show = 1
" Let vim-gitgutter do its thing on large files
let g:gitgutter_max_signs=1000
let g:gitgutter_map_keys = 0
let g:gitgutter_highlight_linenrs = 1
let g:gitgutter_preview_win_floating = 1
let g:gitgutter_use_location_list = 1
let g:gitgutter_sign_added = '+a'
let g:gitgutter_sign_modified = '+m'
let g:gitgutter_sign_removed = '-r'
let g:gitgutter_sign_removed_first_line = '^^'
let g:gitgutter_sign_modified_removed = 'mr'
" Neomake
" compile when I open a file, change text, leave insert mode, etc ...
call neomake#configure#automake({
\ 'TextChanged': {},
\ 'InsertLeave': {},
\ 'BufWritePost': {},
\ })
" When compilation is done, open the Location list or quickfix list
" Value of 2 preserves cursor position
let g:neomake_open_list = 2
let g:neomake_warning_sign = {'text': '?'}
let g:neomake_c_enabled_makers = ['gcc']
let g:neomake_c_gcc_maker = {
\ 'exe': 'gcc',
\ 'args': ['-Wall', '-Iinclude', '-Wextra', '-Weverything', '-pedantic', '-Wno-sign-conversion'],
\ }
" Automatically detect style file and apply style to formatting
let g:clang_format#detect_style_file = 1
" Additional trigger not required with deoplete
let g:tmuxcomplete#trigger = ''
" Required for vimtex
let g:vimtex_compiler_progname = 'nvr'
" Fix deoplete's tab behaviour
let g:SuperTabDefaultCompletionType = "<c-n>"
" For workspace
let g:workspace_session_directory = $HOME . '/.vim/session/'
let g:workspace_undodir = $HOME . '/.vim/undodir'
let g:workspace_autosave = 0
let g:workspace_autosave_ignore = ['gitcommit', 'qf', 'tagbar']
let g:workspace_session_disable_on_args = 1
" For comfortable motion
let g:comfortable_motion_scroll_down_key = "j"
let g:comfortable_motion_scroll_up_key = "k"
let g:toggle_list_no_mappings = 1
" Slime
let g:slime_target = "neovim"
let g:slime_no_mappings = 1
let g:slime_python_ipython = 1
let g:slime_dont_ask_default = 1
let g:slime_preserve_curpos = 0
let g:nvimgdb_config_override = {
\ 'key_next': 'n',
\ 'key_step': 's',
\ 'key_finish': 'f',
\ 'key_continue': 'c',
\ 'key_until': 'u',
\ 'key_breakpoint': 'b',
\ 'set_tkeymaps': "NvimGdbNoTKeymaps",
\ }
let g:mapleader = "\<Space>"
let g:maplocalleader = ','
let g:which_key_use_floating_win = 1
let g:cpp_class_scope_highlight = 1
let g:cpp_member_variable_highlight = 1
let g:cpp_class_decl_highlight = 1
let g:cpp_posix_standard = 1
let g:cpp_concepts_highlight = 1
let g:UltiSnipsExpandTrigger="<Tab>"
let g:UltiSnipsJumpForwardTrigger="<C-b>"
let g:UltiSnipsJumpBackwardTrigger="<C-z>"
let g:UltiSnipsEditSplit="vertical"
let g:hardtime_default_on = 1
let g:hardtime_ignore_quickfix = 1
let g:hardtime_maxcount = 3
let g:hardtime_allow_different_key = 1
let g:jedi#goto_command = "<Leader>jt"
let g:jedi#goto_assignments_command = "<Leader>ja"
let g:jedi#goto_definitions_command = "<Leader>jg"
let g:jedi#documentation_command = "<Leader>jd"
let g:jedi#usages_command = "<Leader>ju"
let g:jedi#completions_command = "<Tab>"
let g:jedi#rename_command = "<Leader>jr"
let g:jedi#auto_initialization = 1
let g:jedi#auto_vim_configuration = 0
let g:jedi#use_tabs_not_buffers = 1
let g:jedi#popup_on_dot = 1
let g:jedi#popup_select_first = 0
let g:jedi#smart_auto_mappings = 0
let g:jedi#show_call_signatures = "1"
let g:jedi#show_call_signatures_delay = 0
let g:jedi#show_call_signatures_modes = 'i'
let g:jedi#enable_speed_debugging = 0
let g:jedi#completions_enabled = 0
let g:netrw_banner = 0
let g:netrw_liststyle = 3
let g:netrw_browse_split = 4
let g:netrw_altv = 1
let g:netrw_winsize = 10
" ----------------------------- Functions ------------------------------------
" For CScope and Quickfix
" https://medium.com/@lakshmankumar12/quickfix-and-location-list-in-vim-ca0292ac894d
" https://medium.com/@lakshmankumar12/vim-and-cscope-5f4558c8a8b8
function! Cscope(oper, currword)
execute "normal mZ"
execute "set csqf=" . a:oper . "-"
execute "lcs find " a:oper . " " . a:currword
execute "lopen"
execute "wincmd p"
execute "normal `Z"
execute "set csqf="
endfunction
function! CscopeQuery(option)
call inputsave()
if a:option == "s"
let query = input('C Symbol: ')
elseif a:option == "g"
let query = input('Definition: ')
elseif a:option == "d"
let query = input('Functions called by: ')
elseif a:option == "c"
let query = input('Functions calling: ')
elseif a:option == "t"
let query = input('Text: ')
elseif a:option == "e"
let query = input('Egrep: ')
elseif a:option == "f"
let query = input('File: ')
elseif a:option == "i"
let query = input('Files #including: ')
elseif a:option == "a"
let query = input('Assignments to: ')
else
echo "Invalid option!"
return
endif
call inputrestore()
if query != ""
call Cscope(a:option, query)
else
echom "Cancelled Search!"
endif
endfunction
function! NvimGdbNoTKeymaps()
tnoremap <silent> <buffer> <Esc> <C-\><C-n>
endfunction
let $FZF_DEFAULT_OPTS='--layout=reverse'
let g:fzf_layout = { 'window': 'call FloatingFZF()' }
function! FloatingFZF()
let buf = nvim_create_buf(v:false, v:true)
let height = float2nr(&lines * 0.4)
let width = float2nr(&columns * 0.8)
let horizontal = float2nr((&columns - width) / 2)
let vertical = float2nr((&columns - width) / 2)
let opts = {
\ 'relative': 'editor',
\ 'row': vertical,
\ 'col': horizontal,
\ 'width': width,
\ 'height': height
\ }
" open the new window, floating, and enter to it
call nvim_open_win(buf, v:true, opts)
endfunction
function! s:incsearch_config(...) abort
return incsearch#util#deepextend(deepcopy({
\ 'modules': [incsearch#config#easymotion#module({'overwin': 1})],
\ 'keymap': {
\ "\<CR>": '<Over>(easymotion)'
\ },
\ 'is_expr': 0
\ }), get(a:, 1, {}))
endfunction