Sanchayan Maity
fcb1ea960e
Try to use same bindings for common operations like jump to definition and other code navigation operations across languages.
746 lines
27 KiB
VimL
746 lines
27 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 '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 '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=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 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)
|
|
|
|
map <C-\> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>
|
|
map <A-]> :sp <CR>:exec("tag ".expand("<cword>"))<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 <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>
|
|
au FileType haskell setlocal keywordprg=:Hoogle
|
|
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('0', expand('<cword>'))<CR>
|
|
au FileType c nmap <silent> <Leader>sg :call Cscope('1', expand('<cword>'))<CR>
|
|
au FileType c nmap <silent> <Leader>sd :call Cscope('2', expand('<cword>'))<CR>
|
|
au FileType c nmap <silent> <Leader>sc :call Cscope('3', expand('<cword>'))<CR>
|
|
au FileType c nmap <silent> <Leader>st :call Cscope('4', expand('<cword>'))<CR>
|
|
au FileType c nmap <silent> <Leader>se :call Cscope('6', expand('<cword>'))<CR>
|
|
au FileType c nmap <silent> <Leader>sf :call Cscope('7', expand('<cword>'))<CR>
|
|
au FileType c nmap <silent> <Leader>si :call Cscope('8', expand('<cword>'))<CR>
|
|
au FileType c nmap <silent> <Leader>sa :call Cscope('9', expand('<cword>'))<CR>
|
|
|
|
au FileType c nmap <silent> <Leader><Leader>ss :call CscopeQuery('0')<CR>
|
|
au FileType c nmap <silent> <Leader><Leader>sg :call CscopeQuery('1')<CR>
|
|
au FileType c nmap <silent> <Leader><Leader>sd :call CscopeQuery('2')<CR>
|
|
au FileType c nmap <silent> <Leader><Leader>sc :call CscopeQuery('3')<CR>
|
|
au FileType c nmap <silent> <Leader><Leader>st :call CscopeQuery('4')<CR>
|
|
au FileType c nmap <silent> <Leader><Leader>se :call CscopeQuery('6')<CR>
|
|
au FileType c nmap <silent> <Leader><Leader>sf :call CscopeQuery('7')<CR>
|
|
au FileType c nmap <silent> <Leader><Leader>si :call CscopeQuery('8')<CR>
|
|
au FileType c nmap <silent> <Leader><Leader>sa :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> gh <plug>DeopleteRustGoToDefinitionSplit
|
|
au FileType rust nmap <buffer> gt <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 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'],
|
|
\})
|
|
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 = "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
|
|
|
|
" ----------------------------- 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
|