vim-config/plugin/keys.vim

453 lines
12 KiB
VimL

nnoremap <SPACE> <Nop>
let g:mapleader = ' '
inoremap <C-u> <Esc>
nnoremap <C-,> :tabprevious<CR>
nnoremap <C-.> :tabnext<CR>
noremap <C-PageUp> gT
noremap <C-PageDown> gt
"
nnoremap <Leader>tk <C-w><C-]><C-w>T
" Quickly insert an empty new line without entering insert mode
nnoremap <Leader>o o<Esc>
nnoremap <Leader>O O<Esc>
" nnoremap <kPageUp> <PageUp>
" nnoremap <kPageDown> <PageDown>
" inoremap <kPageUp> <PageUp>
" inoremap <kPageDown> <PageDown>
" workman
noremap <C-K> <C-O>
noremap <Tab> <C-I>
noremap e j
noremap o k
noremap n h
noremap i l
vnoremap i l
noremap k n
noremap h e
noremap l o
noremap f u
noremap u i
noremap E J
noremap O K
noremap N H
noremap I L
noremap K N
noremap H E
noremap L O
noremap F U
noremap U I
noremap ge gj
noremap go gk
noremap gn gh
noremap gl go
noremap gk gn
noremap gh ge
noremap gE gJ
noremap gN gH
noremap gK gN
noremap gH gE
noremap gL gO
nnoremap <silent> <c-w>e :wincmd j<cr>
nnoremap <silent> <c-w>o :wincmd k<cr>
nnoremap <silent> <c-w>n :wincmd h<cr>
nnoremap <silent> <c-w>i :wincmd l<cr>
nnoremap <silent> <c-w>k :wincmd n<cr>
nnoremap <silent> <c-w>l :wincmd o<cr>
vnoremap <c-n> B
vnoremap <c-i> W
nnoremap <c-n> B
nnoremap <c-i> W
vnoremap <A-n> b
vnoremap <A-i> w
nnoremap <A-n> b
nnoremap <A-i> w
" nnoremap <c-n>i e
" get control-j back, so switch it with ctrl-n at qwerty position of j
" imap <c-n> <cr>
" cmap <c-n> <cr>
inoremap <c-j> <c-n>
cnoremap <c-j> <c-n>
" jump word in visual mode -- TODO
" In insert or command mode, move normally by using Ctrl
inoremap <C-n> <Left>
inoremap <C-e> <Down>
inoremap <C-o> <Up>
inoremap <C-i> <Right>
cnoremap <C-n> <Left>
cnoremap <C-e> <Down>
cnoremap <C-o> <Up>
cnoremap <C-i> <Right>
inoremap <C-A-n> <C-Left>
inoremap <C-A-i> <C-Right>
inoremap <C-A-e> <Esc>:+3<CR>i
inoremap <C-A-o> <Esc>:-3<CR>i
" 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!
" TODO: C-S-o etc does not work
" Bubble single lines
nmap <silent> <C-S-Up> :m-2<CR>==
nmap <silent> <C-S-o> :m-2<CR>==
nmap <silent> <C-S-Down> :m+<CR>==
nmap <silent> <C-S-e> :m+<CR>==
imap <silent> <C-S-Up> <Esc>:m-2<CR>==gi
imap <silent> <C-S-o> <Esc>:m-2<CR>==gi
imap <silent> <C-S-Down> <Esc>:m+<CR>==gi
imap <silent> <C-S-e> <Esc>:m+<CR>==gi
" Bubble multiple lines
vmap <silent> <C-S-Up> :m-2<CR>gv=gv
vmap <silent> <C-S-o> :m-2<CR>gv=gv
vmap <silent> <C-S-Down> :m'>+<CR>gv=gv
vmap <silent> <C-S-e> :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 <leader>pc <Esc>: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-o> :wincmd k<CR>
" nnoremap <silent> <A-e> :wincmd j<CR>
" nnoremap <silent> <A-n> :wincmd h<CR>
" nnoremap <silent> <A-i> :wincmd l<CR>
" inoremap <silent> <A-o> <Esc>:wincmd k<CR>
" inoremap <silent> <A-e> <Esc>:wincmd j<CR>
" inoremap <silent> <A-n> <Esc>:wincmd h<CR>
" inoremap <silent> <A-i> <Esc>:wincmd l<CR>
nnoremap <silent> <C-A-o> :wincmd k<CR>
nnoremap <silent> <C-A-e> :wincmd j<CR>
nnoremap <silent> <C-A-n> :wincmd h<CR>
nnoremap <silent> <C-A-i> :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>
nnoremap <silent> <C-A-Up> :wincmd K<CR>
nnoremap <silent> <C-A-Down> :wincmd J<CR>
nnoremap <silent> <C-A-Left> :wincmd H<CR>
nnoremap <silent> <C-A-Right> :wincmd L<CR>
inoremap <silent> <C-A-Up> <Esc>:wincmd K<CR>
inoremap <silent> <C-A-Down> <Esc>:wincmd J<CR>
inoremap <silent> <C-A-Left> <Esc>:wincmd H<CR>
inoremap <silent> <C-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>
" 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 <A-Up> 3k
" inoremap <A-Up> <Esc>:-3<CR>i
" vnoremap <A-Up> 3k
" nnoremap <A-Down> 3j
" inoremap <A-Down> <Esc>:+3<CR>i
" vnoremap <A-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
nnoremap <A-o> 3k
vnoremap <A-o> 3k
nnoremap <A-e> 3j
vnoremap <A-e> 3j
nnoremap <C-o> 6k
vnoremap <C-o> 6k
nnoremap <C-e> 6j
vnoremap <C-e> 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>
nnoremap <A-p> 10<C-Y>
" inoremap <A-p> <Esc>10<C-Y>i
vnoremap <A-p> 10<C-Y>
nnoremap <A-u> 10<C-E>
" inoremap <A-u> <Esc>10<C-E>i
vnoremap <A-u> 10<C-E>
nnoremap <C-p> <C-u>
" inoremap <C-p> <Esc><C-u>i
vnoremap <C-p> <C-u>
nnoremap <C-u> <C-d>
" inoremap <C-u> <Esc><C-d>i
vnoremap <C-u> <C-d>
" half scroll up and down
noremap <C-A-p> <C-b>
noremap <C-A-u> <C-f>
map <C-d> <Nop>
" F keys
" nmap <F2> :noh<CR>
" imap <F2> <C-O>:noh<CR>
noremap <F5> :FufBuffer<CR>
nmap <F7> :call ManCurrentWord()<CR><CR>
" nmap <F8> :call DevHelpCurrentWord()<CR><CR>
" nmap <F4> <C-]>
" remap visual block
nnoremap <S-C> <c-v>
" write
noremap <C-s> :w<CR>
inoremap <C-s> <Esc>: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>
nnoremap <leader>cd :cd %:p:h<CR>:pwd<CR>
nnoremap <Leader>cc :call ToggleQuickFix()<CR>
function! ToggleQuickFix()
if empty(filter(getwininfo(), 'v:val.quickfix'))
copen
else
cclose
endif
endfunction
function! ToggleLocList()
if empty(filter(getwininfo(), 'v:val.loclist'))
lopen
else
lclose
endif
endfunction
nnoremap <silent> <F3> :call ToggleQuickFix()<CR>
nnoremap <silent> <F4> :call ToggleLocList()<CR>
" PLUGINS
" NERDTree
if !exists('g:vscode')
" noremap <C-j> :Telescope file_browser<CR>
noremap <C-j> :NERDTreeToggle<CR>
" noremap <C-B> :TagbarToggle<CR>
inoremap <C-B> <C-O>:TagbarToggle<CR>
endif
" vista
nmap <F8> :Vista!!<CR>
" NERDComment
if !exists('g:vscode')
nnoremap <silent> <F10> :call NERDComment("n", "Toggle")<cr>
vnoremap <silent> <F10> <ESC>:call NERDComment("v", "Toggle")<cr>
endif
" YCM
if !exists('g:vscode')
nmap <C-F4> :YcmCompleter GoTo<CR>:wincmd o<CR>
endif
" vim-clap
if !exists('g:vscode')
if has('nvim')
nnoremap <leader>ag <cmd>lua require('telescope.builtin').live_grep({ default_text = vim.fn.expand("<cword>") })<cr>
nnoremap <silent> <leader>tg <cmd>lua require('telescope.builtin').tags({ default_text = vim.fn.expand("<cword>") })<cr>
nmap <silent> <C-f> :call ComIfGit('lua require("telescope.builtin").git_files()', 'lua require("telescope.builtin").find_files()')<CR>
nmap <F1> <cmd>lua require('telescope.builtin').tags()<cr>
nmap <C-b> <cmd>lua require('telescope.builtin').buffers()<cr>
nmap <C-d> <cmd>lua require('telescope.builtin').diagnostics()<cr>
nmap <C-l> <cmd>lua require('telescope.builtin').lsp_document_symbols()<cr>
nnoremap <leader>ls <cmd>lua require('telescope.builtin').lsp_document_symbols({ default_text = vim.fn.expand("<cword>") })<cr>
else
nnoremap <leader>ag :Clap grep ++query=<cword><CR>
nnoremap <leader>dg :Clap dumb_jump ++query=<cword><CR>
" nnoremap <silent> <leader>tg :Clap proj_tags ++query=<cword><CR>
nmap <silent> <C-f> :call ComIfGit('Clap gfiles', 'Clap files')<CR>
nmap <F1> :Clap tags<CR>
nmap <F2> :Clap proj_tags<CR>
nmap <C-b> :Clap buffers<CR>
nnoremap <silent> <leader>tb :Clap proj_tags ++query=<cword><CR>
endif
endif
" tags
nnoremap <silent> <leader>tg :tag <C-R>=expand("<cword>")<CR><CR>
nnoremap <silent> <leader>tp :ptag <C-R>=expand("<cword>")<CR><CR>
nnoremap <silent> <leader>ts :ts <C-R>=expand("<cword>")<CR><CR>
" gitgutter
if !exists('g:vscode')
nmap <leader>ggt <Esc>:GitGutterToggle<CR>
nmap <leader>nh <Plug>(GitGutterNextHunk)
nmap <leader>bh <Plug>(GitGutterPrevHunk)
" tig
" let g:tig_explorer_keymap_edit = '<C-x>'
" let g:tig_explorer_keymap_tabedit = '<C-t>'
" let g:tig_explorer_keymap_split = '<C-s>'
" let g:tig_explorer_keymap_vsplit = '<C-v>'
" nnoremap <Leader>T :TigOpenCurrentFile<CR>
" nnoremap <Leader>t :TigOpenProjectRootDir<CR>
" nnoremap <Leader>g :TigGrep<CR>
" nnoremap <Leader>r :TigGrepResume<CR>
" vnoremap <Leader>g y:TigGrep<Space><C-R>"<CR>
" nnoremap <Leader>cg :<C-u>:TigGrep<Space><C-R><C-W><CR>
" nnoremap <Leader>b :TigBlame<CR>
" ghcup
" nnoremap <Leader>ghc :GHCup<CR>
" git gutter
omap <leader>ic <Plug>(GitGutterTextObjectInnerPending)
omap <leader>ac <Plug>(GitGutterTextObjectOuterPending)
xmap <leader>ic <Plug>(GitGutterTextObjectInnerVisual)
xmap <leader>ac <Plug>(GitGutterTextObjectOuterVisual)
endif
" fastfold
nmap zuz <Plug>(FastFoldUpdate)
if exists('g:vscode')
nnoremap <silent> T :call VSCodeNotify('editor.action.showHover')<CR>
nnoremap <silent> gd :call VSCodeNotify('editor.action.revealDefinition')<CR>
else
if has('nvim')
nnoremap <silent> T :lua vim.lsp.buf.hover()<CR>
nnoremap <silent> gd :lua vim.lsp.buf.definition()<CR>
nnoremap <leader>la :lua vim.lsp.buf.code_action()<CR>
nnoremap <leader>rn :lua vim.lsp.buf.rename()<CR>
nnoremap <leader>ci :lua vim.lsp.buf.incoming_calls()<CR>
nnoremap <leader>co :lua vim.lsp.buf.outgoing_calls()<CR>
" Vim Script
nnoremap <leader>xx <cmd>TroubleToggle<cr>
nnoremap <leader>xw <cmd>TroubleToggle workspace_diagnostics<cr>
nnoremap <leader>xd <cmd>TroubleToggle document_diagnostics<cr>
nnoremap <leader>xq <cmd>TroubleToggle quickfix<cr>
nnoremap <leader>xl <cmd>TroubleToggle loclist<cr>
nnoremap gR <cmd>TroubleToggle lsp_references<cr>
else
"LanguageClient-neovim
" Required for operations modifying multiple buffers like rename.
set hidden
nnoremap <leader>lc :call LanguageClient_contextMenu()<CR>
" Or map each action separately
nnoremap <silent> T :call LanguageClient#textDocument_hover()<CR>
nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
" nnoremap <silent> <F2> :call LanguageClient#textDocument_rename()<CR>
" nnoremap <leader>ld :call LanguageClient#textDocument_definition()<CR>
" nnoremap <leader>lr :call LanguageClient#textDocument_rename()<CR>
" nnoremap <leader>lf :call LanguageClient#textDocument_formatting()<CR>
" nnoremap <leader>lt :call LanguageClient#textDocument_typeDefinition()<CR>
" nnoremap <leader>lx :call LanguageClient#textDocument_references()<CR>
" nnoremap <leader>la :call LanguageClient_workspace_applyEdit()<CR>
" nnoremap <leader>lc :call LanguageClient#textDocument_completion()<CR>
" nnoremap <leader>lh :call LanguageClient#textDocument_hover()<CR>
nnoremap <leader>la :call LanguageClient#textDocument_codeAction()<CR>
nnoremap <leader>rn :call LanguageClient#textDocument_rename()<CR>
nnoremap <leader>ln <Plug>(lcn-diagnostics-next)
nnoremap <leader>lp <Plug>(lcn-diagnostics-prev)
endif
endif