vim-config/plugin/keys.vim
2018-10-11 14:53:50 +08:00

166 lines
4.4 KiB
VimL

nnoremap <SPACE> <Nop>
let g:mapleader = ' '
" easy config
nmap <S-F9> :e $HOME/.vimrc<CR>
nmap <S-F10> :so $HOME/.vimrc<CR>
" Force saving files that require root permission
command! SUDOwrite :execute 'w !sudo tee > /dev/null %' | edit!
" Bubble single lines
nmap <silent> <C-S-Up> :m-2<CR>==
nmap <silent> <C-S-Down> :m+<CR>==
imap <silent> <C-S-Up> <Esc>:m-2<CR>==gi
imap <silent> <C-S-Down> <Esc>:m+<CR>==gi
" Bubble multiple lines
vmap <silent> <C-S-Up> :m-2<CR>gv=gv
vmap <silent> <C-S-Down> :m'>+<CR>gv=gv
" Indent lines using <Left> and <Right>
vmap <C-S-Right> >gv
nmap <C-S-Right> >>
imap <C-S-Right> <Esc>>>i
vmap <C-S-Left> <gv
nmap <C-S-Left> <<
imap <C-S-Left> <Esc><<i
" moving through location list items
" noremap <S-Up> :lprevious<CR>
" noremap <S-Down> :lnext<CR>
" moving through buffers
" noremap <S-Left> :bn<CR>
" noremap <S-Right> :bp<CR>
noremap <leader>bd <Esc>:bd<CR>
noremap <leader>wc <Esc>:bd<CR>
noremap <leader>bo <Esc>:Bufonly<CR>
" close preview
nmap <C-p> :pc<CR>
" Remap window commands
" map <leader>ws <Esc>:wincmd s<CR>
" map <leader>wv <Esc>:wincmd v<CR>
" map <leader>wc <Esc>:wincmd c<CR>
" map <leader>wn <Esc>:wincmd n<CR>
" map <leader>wo <Esc>:wincmd o<CR>
" map <leader>w+ <Esc>:wincmd _<CR>
" map <leader>w- <Esc>:wincmd <Bar><CR>
" map <leader>w= <Esc>:wincmd =<CR>
" nmap + :vertical resize +20<CR>
" nmap - :vertical resize -20<CR>
" map <C-S--> <Esc>:wincmd ><CR>
" map <C-Down> <Esc>:wincmd j<CR>
" map <C-j> <Esc>:wincmd j<CR>
" map <C-Up> <Esc>:wincmd k<CR>
" map <C-k> <Esc>:wincmd k<CR>
" map <C-Left> <Esc>:wincmd h<CR>
" map <C-h> <Esc>:wincmd h<CR>
" map <C-Right> <Esc>:wincmd l<CR>
" map <C-l> <Esc>:wincmd l<CR>
nnoremap <silent> <A-i> :wincmd K<CR>
nnoremap <silent> <A-k> :wincmd J<CR>
nnoremap <silent> <A-j> :wincmd H<CR>
nnoremap <silent> <A-l> :wincmd L<CR>
nnoremap <silent> <A-Up> :wincmd k<CR>
nnoremap <silent> <A-Down> :wincmd j<CR>
nnoremap <silent> <A-Left> :wincmd h<CR>
nnoremap <silent> <A-Right> :wincmd l<CR>
inoremap <silent> <A-Up> <Esc>:wincmd k<CR>
inoremap <silent> <A-Down> <Esc>:wincmd j<CR>
inoremap <silent> <A-Left> <Esc>:wincmd h<CR>
inoremap <silent> <A-Right> <Esc>:wincmd l<CR>
" tags
nmap <S-F3> :exec("tjump ".expand("<cword>"))<CR>
nmap <S-F4> :split<CR>:exec("tjump ".expand("<cword>"))<CR>
" trigger NERDTree, Tagbar $ Co.
nmap <leader>n <Esc>:NERDTreeToggle<CR>
nmap <leader>t <Esc>:TagbarToggle<CR>
" nmap <leader>f "zyaw :exe ":Ack ".@z.""<CR>
nmap <C-f> :CtrlP<CR>
nmap <C-t> :CtrlPTag<CR>
nmap <C-b> :CtrlPBuffer<CR>
" grep word under cursor
nnoremap <silent><leader>f :lgr! "\b<C-R><C-W>\b"<CR>:cw<CR>
" paste from system clipboard
inoremap <silent> <S-Insert> <ESC>:set paste<CR>"+p :set nopaste<CR>
" toggle spellcheck
nmap <silent> <S-F7> :setlocal spell! spelllang=en_us<CR>
" cursor jump
nnoremap <S-Up> 3k
inoremap <S-Up> <Esc>:-3<CR>i
vnoremap <S-Up> 3k
nnoremap <S-Down> 3j
inoremap <S-Down> <Esc>:+3<CR>i
vnoremap <S-Down> 3j
nnoremap <C-Up> 6k
inoremap <C-Up> <Esc>:-6<CR>i
vnoremap <C-Up> 6k
nnoremap <C-Down> 6j
inoremap <C-Down> <Esc>:+6<CR>i
vnoremap <C-Down> 6j
" scrolling
nnoremap <S-PageUp> 10<C-Y>
inoremap <S-PageUp> <Esc>10<C-Y>i
vnoremap <S-PageUp> 10<C-Y>
nnoremap <S-PageDown> 10<C-E>
inoremap <S-PageDown> <Esc>10<C-E>i
vnoremap <S-PageDown> 10<C-E>
" F keys
nmap <F2> :noh<CR>
imap <F2> <C-O>:noh<CR>
nmap <F3> :YcmCompleter GoToDeclaration<CR>
nmap <F4> :YcmCompleter GoTo<CR>
nmap <C-F4> :YcmCompleter GoTo<CR>:wincmd o<CR>
noremap <F5> :FufBuffer<CR>
nmap <F7> :call ManCurrentWord()<CR><CR>
nmap <F8> :call DevHelpCurrentWord()<CR><CR>
nnoremap <silent> <F10> :call NERDComment("n", "Toggle")<cr>
vnoremap <silent> <F10> <ESC>:call NERDComment("v", "Toggle")<cr>
" nmap <F4> <C-]>
" plugins etc
noremap <C-F> :NERDTreeToggle<CR>
noremap <C-B> :TagbarToggle<CR>
inoremap <C-B> <C-O>:TagbarToggle<CR>
" remap visual block
nnoremap <S-B> <c-v>
" write
noremap <C-s> :w<CR>
inoremap <C-s> <C-O>:w<CR>
" exit
noremap <C-q> :qa!<CR>
inoremap <C-q> <C-O>:qa!<CR>
" paste
nnoremap <C-V> "+gPl
vnoremap <C-V> :<C-U>call Paste("v")<CR>
inoremap <C-V> <C-O>:call Paste("i")<CR>
" select all
nnoremap <C-A> ggVG<CR>
inoremap <C-A> <C-O>:call Select()<CR>
" fzf
nnoremap <leader>ag :call fzf#vim#ag(expand('<cword>'), WithGitRoot())<CR>
nnoremap <leader>tg :call fzf#vim#tags(expand('<cword>'), {'options': '--exact --select-1 --exit-0'})<CR>
" gitgutter
nmap <leader>ggt <Esc>:GitGutterToggle<CR>
nmap <leader>nh <Plug>GitGutterNextHunk
nmap <leader>bh <Plug>GitGutterPrevHunk