dotfiles/.vimrc

266 lines
7.1 KiB
VimL
Executable File

set showcmd
set encoding=utf8
set expandtab
set textwidth=0
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set backspace=indent,eol,start
set incsearch
set nohlsearch
set ignorecase
set smartcase
set ruler
set wildmenu
set commentstring=\ #\ %s
set shiftround
set number
set relativenumber
set scrolloff=1
set matchpairs+=<:>
set cmdheight=2
set lazyredraw
set undofile
syntax enable
filetype plugin on
set background=dark
" set foldcolumn=2
let mapleader="'"
let maplocalleader="["
command! Dir :e %:p:h
" key mappings --------------------- {{{
" visual line movement --------------------- {{{
" move vertically by visual line unless a count is specified
nnoremap <expr> j (v:count == 0 ? 'gj' : 'j')
nnoremap <expr> k (v:count == 0 ? 'gk' : 'k')
" Move to the beginning/end of the line
nnoremap B ^
nnoremap E $
nnoremap ^ <nop>
nnoremap $ <nop>
vnoremap B ^
vnoremap E $
vnoremap ^ <nop>
vnoremap $ <nop>
" }}}
" vimrc shortcuts --------------------- {{{
" These two lines are shortcuts for editing
" and sourcing my vimrc from any session
nnoremap <leader>ev :split $MYVIMRC<cr>
nnoremap <leader>sv :source $MYVIMRC<cr>
" }}}
" readline-like bindings -------------------- {{{
inoremap <c-d> <esc>ddi
inoremap <c-a> <esc>I
inoremap <c-e> <esc>A
inoremap <c-k> <esc>lDa
" move the increment keybinding to +
nnoremap + <c-a>
" move the decrement keybinding to -
nnoremap - <c-x>
" }}}
" misc bindings -------------------- {{{
" paste the current clipboard onto the cursor's line and keep the clipboard
" contents the same
nnoremap yp Vpyy
" search for the yanked contents in the default (") register
nnoremap g/ q/p<Enter>
nnoremap gF <C-W>gf
nnoremap gw <C-W>
" space to run 'q' macro
nnoremap <Space> @q
" repeat the last macro used
nnoremap Q @@
" capitalize previously typed word
inoremap ;u <esc>bveUea
" shortcut to exit insert mode
inoremap jk <esc>
vnoremap jk <esc>
cnoremap jk <esc>
" Cycle through buffers
nnoremap <C-n> :bnext!<CR>:redraw<CR>:ls<CR>
nnoremap <C-p> :bprevious!<CR>:redraw<CR>:ls<CR>
nnoremap <C-q> :buffers<CR>:bdelete<Space>
nnoremap <C-o> :buffers<CR>:buffer<Space>
" toggle tagbar
nnoremap <C-t> :TagbarToggle<CR>
" Follow tag
nnoremap g] <C-]>
" Jump back to previous location after following tag
nnoremap g[ :pop<CR>
" load previous session
nnoremap gS :call LoadSession()<CR>
" build
nnoremap gm :make
" }}}
" }}}
" netrw -------------------- {{{
let g:netrw_liststyle=3
let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+'
let g:netrw_winsize=200
let g:netrw_altv = 1
" }}}
" File settings -------------------- {{{
" Vimscript file settings -------------------- {{{
augroup vim_file
autocmd!
autocmd FileType vim setlocal foldmethod=marker
autocmd FileType vim setlocal foldenable
autocmd FileType vim setlocal foldlevelstart=0
autocmd FileType vim nnoremap <buffer> <localleader>c I" <esc>^
augroup END
" }}}
" Conf file settings -------------------- {{{
augroup conf_file
autocmd!
autocmd FileType conf nnoremap <buffer> <localleader>c I# <esc>^
autocmd FileType conf nnoremap <buffer> <localleader>uc B2x <esc>^
" autocmd FileType conf nnoremap <buffer> <localleader>b FlipBoolean
augroup END
" }}}
" Python file settings -------------------- {{{
augroup python_file
autocmd!
autocmd FileType python nnoremap <buffer> <localleader>c I# <esc>^
autocmd FileType python nnoremap <buffer> <localleader>uc ^2x^
autocmd FileType python nnoremap <buffer> <localleader>r :call RunScript()<CR>
augroup END
" }}}
" Shell script file settings -------------------- {{{
augroup shell_file
autocmd!
autocmd FileType sh nnoremap <buffer> <localleader>c I# <esc>^
autocmd FileType sh nnoremap <buffer> <localleader>uc ^2x^
augroup END
" }}}
" Make file settings -------------------- {{{
augroup make_file
autocmd!
autocmd FileType make setlocal noexpandtab
augroup END
" }}}
" Rust file settings -------------------- {{{
augroup rust_file
autocmd!
autocmd FileType rust nnoremap <buffer> <localleader>c I// <esc>^
autocmd FileType rust nnoremap <buffer> <localleader>uc ^3x^
autocmd FileType rust nnoremap <buffer> gb :make build<CR>
autocmd FileType rust nnoremap <buffer> <localleader>/ :execute "noautocmd vimgrep /" .expand("<cword>") ."/j src/**/*.rs" <Bar> cw<CR>
augroup END
" }}}
" Java file settings -------------------- {{{
augroup java_file
autocmd!
autocmd BufNewFile *.java call CreateJavaFile()
autocmd FileType java nnoremap <buffer> <localleader>c I// <esc>^
autocmd FileType java nnoremap <buffer> <localleader>uc ^3x^
augroup END
" }}}
" JSP file settings -------------------- {{{
augroup jsp_file
autocmd!
autocmd FileType jsp nnoremap <buffer> <localleader>c I<%-- <esc>A --%><esc>^
autocmd FileType jsp nnoremap <buffer> <localleader>uc ^5x$4hD
augroup END
" }}}
" Gradle file settings -------------------- {{{
augroup gradle_file
autocmd!
autocmd BufNewFile,BufRead *.gradle setlocal filetype=groovy
augroup END
" }}}
" Perl file settings -------------------- {{{
augroup perl_file
autocmd!
autocmd FileType perl nnoremap <buffer> <localleader>c I# <esc>^
autocmd FileType perl nnoremap <buffer> <localleader>uc ^2x^
autocmd FileType perl nnoremap <buffer> <localleader>r :call RunScript()<CR>
augroup END
" }}}
" Quickfix settings -------------------- {{{
augroup quickfix_file
autocmd!
autocmd FileType qf nnoremap <buffer> <localleader>q :cclose<CR>
augroup END
" }}}
" }}}
" session management --------------------- {{{
function! MakeSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
if (filewritable(b:sessiondir) != 2)
exe 'silent !mkdir -p ' b:sessiondir
redraw!
endif
let b:filename = b:sessiondir . '/session.vim'
exe "mksession! " . b:filename
endfunction
function! LoadSession()
let b:sessiondir = $HOME . "/.vim/sessions" . getcwd()
let b:sessionfile = b:sessiondir . "/session.vim"
if (filereadable(b:sessionfile))
exe 'source ' b:sessionfile
else
echo "No session loaded."
endif
endfunction
" Adding automatons for when entering or leaving Vim
if(argc() == 0)
au VimEnter * nested :call LoadSession()
endif
au VimLeave * :call MakeSession()
" }}}
" LanguageServer
set runtimepath+=~/.vim/pack/plugins/start/LanguageClient-neovim
set hidden
let g:LanguageClient_autoStart = 0
let g:LanguageClient_serverCommands = {
\ 'rust': ['rustup', 'run', 'nightly', 'rls'],
\ 'elixir': ['/home/dev/language-servers/elixir-ls/rel']
\ }
nnoremap <leader>lcs :LanguageClientStart<CR>
nnoremap <silent> K :call LanguageClient#textDocument_hover()<CR>
nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
nnoremap <silent> <F2> :call LanguageClient#textDocument_rename()<CR>
" completion
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr> pumvisible() ? "\<C-y>\<cr>" : "\<cr>"
" Put these lines at the very end of your vimrc file.
"
" Load all plugins now.
" Plugins need to be added to runtimepath before helptags can be generated.
packloadall
" Load all of the helptags now, after plugins have been loaded.
" All messages and errors will be ignored.
silent! helptags ALL