266 lines
7.1 KiB
VimL
Executable File
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
|