vim-config/plugin/keys.vim

453 lines
12 KiB
VimL
Raw Normal View History

2020-08-22 18:37:20 +00:00
nnoremap <SPACE> <Nop>
let g:mapleader = ' '
2020-10-18 17:45:39 +00:00
inoremap <C-u> <Esc>
2020-12-04 22:17:32 +00:00
nnoremap <C-,> :tabprevious<CR>
nnoremap <C-.> :tabnext<CR>
noremap <C-PageUp> gT
noremap <C-PageDown> gt
2020-10-11 22:05:01 +00:00
"
nnoremap <Leader>tk <C-w><C-]><C-w>T
2020-08-22 18:37:20 +00:00
" Quickly insert an empty new line without entering insert mode
nnoremap <Leader>o o<Esc>
nnoremap <Leader>O O<Esc>
2020-10-18 17:45:39 +00:00
" nnoremap <kPageUp> <PageUp>
" nnoremap <kPageDown> <PageDown>
" inoremap <kPageUp> <PageUp>
" inoremap <kPageDown> <PageDown>
2020-06-14 19:43:04 +00:00
" workman
2020-08-22 18:37:20 +00:00
noremap <C-K> <C-O>
noremap <Tab> <C-I>
2020-06-14 19:43:04 +00:00
noremap e j
noremap o k
noremap n h
noremap i l
2022-04-29 19:56:19 +00:00
vnoremap i l
2020-06-14 19:43:04 +00:00
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>
2020-08-22 18:37:20 +00:00
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
2020-06-14 19:43:04 +00:00
" get control-j back, so switch it with ctrl-n at qwerty position of j
2020-08-22 18:37:20 +00:00
" imap <c-n> <cr>
" cmap <c-n> <cr>
2020-06-14 19:43:04 +00:00
inoremap <c-j> <c-n>
cnoremap <c-j> <c-n>
2020-08-22 18:37:20 +00:00
" 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
2018-05-26 17:18:09 +00:00
" 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!
2020-08-22 18:37:20 +00:00
" TODO: C-S-o etc does not work
2018-05-26 17:18:09 +00:00
" Bubble single lines
nmap <silent> <C-S-Up> :m-2<CR>==
2020-08-22 18:37:20 +00:00
nmap <silent> <C-S-o> :m-2<CR>==
2018-05-26 17:18:09 +00:00
nmap <silent> <C-S-Down> :m+<CR>==
2020-08-22 18:37:20 +00:00
nmap <silent> <C-S-e> :m+<CR>==
2018-05-26 17:18:09 +00:00
imap <silent> <C-S-Up> <Esc>:m-2<CR>==gi
2020-08-22 18:37:20 +00:00
imap <silent> <C-S-o> <Esc>:m-2<CR>==gi
2018-05-26 17:18:09 +00:00
imap <silent> <C-S-Down> <Esc>:m+<CR>==gi
2020-08-22 18:37:20 +00:00
imap <silent> <C-S-e> <Esc>:m+<CR>==gi
2018-05-26 17:18:09 +00:00
" Bubble multiple lines
vmap <silent> <C-S-Up> :m-2<CR>gv=gv
2020-08-22 18:37:20 +00:00
vmap <silent> <C-S-o> :m-2<CR>gv=gv
2018-05-26 17:18:09 +00:00
vmap <silent> <C-S-Down> :m'>+<CR>gv=gv
2020-08-22 18:37:20 +00:00
vmap <silent> <C-S-e> :m'>+<CR>gv=gv
2018-05-26 17:18:09 +00:00
" 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
2020-08-22 18:37:20 +00:00
nmap <leader>pc <Esc>:pc<CR>
2018-05-26 17:18:09 +00:00
" 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>
2020-08-22 18:37:20 +00:00
"
" 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>
2020-10-11 11:50:17 +00:00
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>
2018-05-26 17:18:09 +00:00
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>
2020-08-22 18:37:20 +00:00
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>
2018-05-26 17:18:09 +00:00
" tags
nmap <S-F3> :exec("tjump ".expand("<cword>"))<CR>
nmap <S-F4> :split<CR>:exec("tjump ".expand("<cword>"))<CR>
" trigger NERDTree, Tagbar $ Co.
2020-10-11 11:50:17 +00:00
" nmap <leader>n <Esc>:NERDTreeToggle<CR>
" nmap <leader>t <Esc>:TagbarToggle<CR>
2018-05-26 17:18:09 +00:00
" 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
2020-08-22 18:37:20 +00:00
" 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
2020-06-14 19:43:04 +00:00
nnoremap <C-o> 6k
vnoremap <C-o> 6k
nnoremap <C-e> 6j
vnoremap <C-e> 6j
2018-05-26 17:18:09 +00:00
" scrolling
nnoremap <S-PageUp> 10<C-Y>
2020-10-18 17:45:39 +00:00
" inoremap <S-PageUp> <Esc>10<C-Y>i
2018-05-26 17:18:09 +00:00
vnoremap <S-PageUp> 10<C-Y>
nnoremap <S-PageDown> 10<C-E>
2020-10-18 17:45:39 +00:00
" inoremap <S-PageDown> <Esc>10<C-E>i
2018-05-26 17:18:09 +00:00
vnoremap <S-PageDown> 10<C-E>
2020-10-18 17:45:39 +00:00
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>
2020-08-22 18:37:20 +00:00
2020-10-18 17:45:39 +00:00
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>
2020-08-22 18:37:20 +00:00
2018-05-26 17:18:09 +00:00
" F keys
2020-10-11 11:50:17 +00:00
" nmap <F2> :noh<CR>
" imap <F2> <C-O>:noh<CR>
2018-05-26 17:18:09 +00:00
noremap <F5> :FufBuffer<CR>
nmap <F7> :call ManCurrentWord()<CR><CR>
2020-10-11 11:50:17 +00:00
" nmap <F8> :call DevHelpCurrentWord()<CR><CR>
2018-05-26 17:18:09 +00:00
" nmap <F4> <C-]>
" remap visual block
2020-08-22 18:37:20 +00:00
nnoremap <S-C> <c-v>
2018-05-26 17:18:09 +00:00
" write
noremap <C-s> :w<CR>
2020-12-04 22:17:32 +00:00
inoremap <C-s> <Esc>:w<CR>
2018-05-26 17:18:09 +00:00
" 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>
2020-10-11 11:50:17 +00:00
nnoremap <leader>cd :cd %:p:h<CR>:pwd<CR>
2022-07-27 16:13:09 +00:00
nnoremap <Leader>cc :call ToggleQuickFix()<CR>
2020-10-11 11:50:17 +00:00
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
2022-04-29 19:56:19 +00:00
if !exists('g:vscode')
2022-07-27 16:13:09 +00:00
" noremap <C-j> :Telescope file_browser<CR>
2020-10-11 11:50:17 +00:00
noremap <C-j> :NERDTreeToggle<CR>
" noremap <C-B> :TagbarToggle<CR>
inoremap <C-B> <C-O>:TagbarToggle<CR>
2022-04-29 19:56:19 +00:00
endif
2020-10-11 11:50:17 +00:00
" vista
nmap <F8> :Vista!!<CR>
" NERDComment
2022-04-29 19:56:19 +00:00
if !exists('g:vscode')
2020-10-11 11:50:17 +00:00
nnoremap <silent> <F10> :call NERDComment("n", "Toggle")<cr>
vnoremap <silent> <F10> <ESC>:call NERDComment("v", "Toggle")<cr>
2022-04-29 19:56:19 +00:00
endif
2020-10-11 11:50:17 +00:00
" YCM
2022-04-29 19:56:19 +00:00
if !exists('g:vscode')
2020-10-11 11:50:17 +00:00
nmap <C-F4> :YcmCompleter GoTo<CR>:wincmd o<CR>
2022-04-29 19:56:19 +00:00
endif
2020-10-11 11:50:17 +00:00
" vim-clap
2022-04-29 19:56:19 +00:00
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>
2022-07-27 16:13:09 +00:00
nmap <silent> <C-f> :call ComIfGit('lua require("telescope.builtin").git_files()', 'lua require("telescope.builtin").find_files()')<CR>
2022-04-29 19:56:19 +00:00
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>
2022-07-27 16:13:09 +00:00
nmap <silent> <C-f> :call ComIfGit('Clap gfiles', 'Clap files')<CR>
2022-04-29 19:56:19 +00:00
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
2020-10-11 11:50:17 +00:00
2022-04-29 19:56:19 +00:00
" tags
2020-10-11 22:05:01 +00:00
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>
2018-10-11 06:53:50 +00:00
" gitgutter
2022-04-29 19:56:19 +00:00
if !exists('g:vscode')
2018-10-11 06:53:50 +00:00
nmap <leader>ggt <Esc>:GitGutterToggle<CR>
2020-08-22 18:37:20 +00:00
nmap <leader>nh <Plug>(GitGutterNextHunk)
nmap <leader>bh <Plug>(GitGutterPrevHunk)
2020-10-11 11:50:17 +00:00
" 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)
2022-04-29 19:56:19 +00:00
endif
2020-10-11 11:50:17 +00:00
" fastfold
nmap zuz <Plug>(FastFoldUpdate)
2022-04-29 19:56:19 +00:00
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>
2022-07-27 16:13:09 +00:00
nnoremap <leader>ci :lua vim.lsp.buf.incoming_calls()<CR>
nnoremap <leader>co :lua vim.lsp.buf.outgoing_calls()<CR>
2022-04-29 19:56:19 +00:00
" 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