dotfiles/nvim/init.vim
Sanchayan Maity 4ebc8f3788 nvim: init.vim: Use vim-unimpaired & improve bindings
unimpaired provides some helpful bindings so use that. Remove redundant
bindings like the ones for quickfix & location list due to use of
unimpaired. It also provides consistent bindings across the board.

While at it, reduce the use of leader key. The idea behind using leader
key everywhere was taken since we migrated from spacemacs, However, for
non-conflicting bindings it's better to have a hit as few keys as
possible, so remove leader from few of the earlier bindings.

To see list of all mappings, use '9verbose nmap <key>'.

Signed-off-by: Sanchayan Maity <maitysanchayan@gmail.com>
2019-12-30 16:29:11 +05:30

743 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 'tpope/vim-commentary'
" 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 'kovisoft/slimv', { 'for': [ 'scheme', 'lisp', 'clojure' ] }
" 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 'tpope/vim-unimpaired'
Plug 'editorconfig/editorconfig-vim'
Plug 'igankevich/mesonic'
Plug 'stefandtw/quickfix-reflector.vim'
Plug 'psliwka/vim-smoothie'
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 'godlygeek/tabular'
Plug 'Yggdroot/indentLine'
Plug 'HiPhish/awk-ward.nvim'
" 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=78 " 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 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 ff :GFiles<CR>
nnoremap f? :GFiles?<CR>
nnoremap fF :Files<CR>
nnoremap fb :Buffers<CR>
nnoremap fL :Lines<CR>
nnoremap fl :BLines<CR>
nnoremap ft :BTags<CR>
nnoremap fT :Tags<CR>
nnoremap fc :BCommits<CR>
nnoremap fC :Commits<CR>
nnoremap fch :History:<CR>
nnoremap fsh :History/<CR>
nnoremap fm :Commands<CR>
nnoremap fo :Locate<SPACE>
nnoremap fk :Maps<CR>
nnoremap f/ :Rg<CR>
nnoremap * :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>:q<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
" Reload opened vim config file
nnoremap <Leader>r :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 un :GitGutterNextHunk<CR>
nnoremap up :GitGutterPrevHunk<CR>
nnoremap us :GitGutterStageHunk<CR>
nnoremap ud :GitGutterUndoHunk<CR>
nnoremap ur :GitGutterPreviewHunk<CR>
nnoremap uq :GitGutterQuickFix<CR>
nnoremap uf :GitGutterFold<CR>
" For Neomake/Neoformat
nnoremap nm :Neomake<CR>
nnoremap nc :NeomakeClean<CR>
nnoremap ns :NeomakeSh<SPACE>
nnoremap njl :NeomakeListJobs<CR>
nnoremap nja :NeomakeCancelJobs<CR>
nnoremap njc :NeomakeCancelJob<SPACE>
nnoremap nf :Neoformat<CR>
" For workspace
nnoremap <Leader>sw :ToggleWorkspace<CR>
" Quickfix & Location list mappings
nnoremap qo :copen<CR>
nnoremap qc :cclose<CR>
nnoremap qs :vimgrep<SPACE>
nnoremap qt :call ToggleQuickfixList()<CR>
nnoremap Lo :lopen<CR>
nnoremap Lc :lclose<CR>
nnoremap Ls :lvimgrep<SPACE>
nnoremap Lt :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>
" Whick key
nnoremap <silent> <Leader> :<C-U>WhichKey '<Space>'<CR>
nnoremap <silent> <LocalLeader> :<C-U>WhichKey ','<CR>
" Bindings for easy motion
" Character motions
map <Leader><Leader>c <Plug>(easymotion-bd-f)
nmap <Leader><Leader>c <Plug>(easymotion-overwin-f)
" Line motions
map <Leader><Leader>L <Plug>(easymotion-bd-jk)
nmap <Leader><Leader>L <Plug>(easymotion-overwin-line)
" Word motions
map <Leader><Leader>w <Plug>(easymotion-bd-w)
nmap <Leader><Leader>w <Plug>(easymotion-overwin-w)
" Line motion jump
map <Leader>l <Plug>(easymotion-lineforward)
map <Leader>j <Plug>(easymotion-j)
map <Leader>k <Plug>(easymotion-k)
map <Leader>h <Plug>(easymotion-linebackward)
" Incremental search + easymotion
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}))
" Tag helpers
map <C-\> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :sp <CR>:exec("tag ".expand("<cword>"))<CR>
" Tabular helpers
vmap a= :Tabularize /=<CR>
vmap a; :Tabularize /::<CR>
vmap a- :Tabularize /-><CR>
vmap a: :Tabularize /:r1c1l0<CR>
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 pg :PlugUpgrade<CR>
au FileType vim nmap pd :PlugUpdate<CR>
au FileType vim nmap pc :PlugClean<CR>
augroup END
augroup haskell_maps
au!
au FileType haskell nmap <LocalLeader>t :NeomakeSh stack exec -- fast-tags -R .<CR>
au FileType haskell nmap <LocalLeader>g :Ghcid<CR>
au FileType haskell nmap <LocalLeader>k :GhcidKill<CR>
au FileType haskell nmap <LocalLeader>c :HoogleClose<CR>
au FileType haskell nmap <LocalLeader>o :exe ':Hoogle ' . expand('<cword>')<CR>
au FileType haskell nmap <LocalLeader>i :exe ':HoogleInfo ' . expand('<cword>')<CR>
au FileType haskell setlocal keywordprg=:Hoogle
augroup END
augroup purescript_maps
au!
au FileType purescript nmap <buffer> <silent> <LocalLeader>L :Plist<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>l :Pload<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>r :Prebuild<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>f :PaddClause<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>T :PaddType<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>a :Papply<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>c :Pcase<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>i :Pimport<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>q :PaddImportQualifications<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>g :Pgoto<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>p :Pursuit<CR>
au FileType purescript nmap <buffer> <silent> <LocalLeader>t :Ptype<CR>
au FileType purescript au BufWritePost <buffer> Prebuild
augroup END
augroup c_maps
au!
au FileType c nmap <LocalLeader>ct :NeomakeSh ctags -R .<CR>
au FileType c nmap <LocalLeader>cu :NeomakeSh cscope -bqR<CR>
au FileType c nmap <LocalLeader>cr :cs reset<CR>
au FileType c nmap <silent> <LocalLeader>s :call Cscope('0', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader>g :call Cscope('1', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader>d :call Cscope('2', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader>c :call Cscope('3', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader>t :call Cscope('4', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader>e :call Cscope('6', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader>f :call Cscope('7', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader>i :call Cscope('8', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader>a :call Cscope('9', expand('<cword>'))<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>s :call CscopeQuery('0')<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>g :call CscopeQuery('1')<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>d :call CscopeQuery('2')<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>c :call CscopeQuery('3')<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>t :call CscopeQuery('4')<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>e :call CscopeQuery('6')<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>f :call CscopeQuery('7')<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>i :call CscopeQuery('8')<CR>
au FileType c nmap <silent> <LocalLeader><LocalLeader>a :call CscopeQuery('9')<CR>
augroup END
augroup rust_maps
au!
au FileType rust nmap <buffer> gd <plug>DeopleteRustGoToDefinitionDefault
au FileType rust nmap <buffer> K <plug>DeopleteRustShowDocumentation
au FileType rust nmap <buffer> gv <plug>DeopleteRustGoToDefinitionVSplit
au FileType rust nmap <buffer> g- <plug>DeopleteRustGoToDefinitionSplit
au FileType rust nmap <buffer> gt <plug>DeopleteRustGoToDefinitionTab
augroup END
augroup rainbow_lisp
autocmd!
autocmd FileType lisp,clojure,scheme RainbowParentheses
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
au BufNewFile,BufRead *.lua setlocal noet ts=4 sw=4 sts=4
au BufNewFile,BufRead *.py setlocal tabstop=4 softtabstop=4 shiftwidth=4 textwidth=80 smarttab expandtab
au BufRead,BufNewFile */gst-*/*.[ch] set et sw=2
au BufRead,BufNewFile */gstreamer-*/*.[ch] set et sw=2
au BufRead,BufNewFile */pulseaudio/*.[ch] set et sw=4 tw=128
au BufRead,BufNewFile *.purs set et sw=2 sts=2 si
au FileType fstab,systemd set noexpandtab
au FileType gitconfig,sh,toml set noexpandtab
augroup END
augroup spell_check
au!
autocmd FileType gitcommit setlocal spell textwidth=72
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'],
\ 'purescript': ['buffer', 'omni'],
\})
call deoplete#custom#source('omni', 'functions', {
\ 'purescript': 'PSCIDEComplete',
\})
call deoplete#custom#var('omni', 'input_patterns', {
\ 'purescript': '\w*',
\})
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
" Toggle quickfix/location list
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:jedi#goto_command = "gt"
let g:jedi#goto_assignments_command = "ga"
let g:jedi#goto_definitions_command = "gd"
let g:jedi#documentation_command = "K"
let g:jedi#usages_command = "gu"
let g:jedi#completions_command = "<Tab>"
let g:jedi#rename_command = "gr"
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
" For SLIMV
let g:lisp_rainbow=1
" For Purescript
let g:psc_ide_auto_imports = 1
" ----------------------------- Functions ------------------------------------
function! Cscope(option, query)
let color = '{ x = $1; $1 = ""; z = $3; $3 = ""; printf "\033[34m%s\033[0m:\033[31m%s\033[0m\011\033[37m%s\033[0m\n", x,z,$0; }'
let opts = {
\ 'source': "cscope -dL" . a:option . " " . a:query . " | awk '" . color . "'",
\ 'options': ['--ansi', '--prompt', '> ',
\ '--multi', '--bind', 'alt-a:select-all,alt-d:deselect-all',
\ '--color', 'info:144,prompt:161,spinner:135,pointer:135,marker:118',
\ '--color', 'fg:252,bg:233,hl:67,fg+:252,bg+:235,hl+:81'],
\ 'down': '40%'
\ }
function! opts.sink(lines)
let data = split(a:lines)
let file = split(data[0], ":")
execute 'e ' . '+' . file[1] . ' ' . file[0]
endfunction
call fzf#run(opts)
endfunction
function! CscopeQuery(option)
call inputsave()
if a:option == '0'
let query = input('C Symbol: ')
elseif a:option == '1'
let query = input('Definition: ')
elseif a:option == '2'
let query = input('Functions called by: ')
elseif a:option == '3'
let query = input('Functions calling: ')
elseif a:option == '4'
let query = input('Text: ')
elseif a:option == '6'
let query = input('Egrep: ')
elseif a:option == '7'
let query = input('File: ')
elseif a:option == '8'
let query = input('Files #including: ')
elseif a:option == '9'
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