Sanchayan Maity
4ebc8f3788
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>
743 lines
26 KiB
VimL
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
|