aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim/init/keymaps.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/init/keymaps.vim')
-rw-r--r--vim/init/keymaps.vim181
1 files changed, 62 insertions, 119 deletions
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim
index 3360a53..f7098a6 100644
--- a/vim/init/keymaps.vim
+++ b/vim/init/keymaps.vim
@@ -2,28 +2,13 @@
2" 2"
3" Only for key mapping 3" Only for key mapping
4" 4"
5" COMMON_MAPPING
6" MANAGE_VIMRC
7" MOVING_WITH_READLINE
8" INSERT_SURROUNDING
9" JUMP_TO_TABS_WITH_ALT
10" MANAGE_TABS
11" MANAGE_BUFFERS
12" MANAGE_WINDOWS
13" FOLDING
14" SURROURD_WITH_CHAR
15" REDIRECTION_WITH_BUFFER
16" QUICK_SUBSTITUTE
17" GIT_TIG
18" 终端支持 5" 终端支持
19" 编译运行 6" 编译运行
20" 7"
21"====================================================================== 8"======================================================================
22" vim: set ts=4 sw=4 tw=78 noet : 9" vim: set ts=4 sw=4 tw=78 noet :
23 10
24"---------------------------------------------------------------------- 11" COMMON_MAPPING ----------------{{{
25" COMMON_MAPPING
26"----------------------------------------------------------------------
27 12
28" Space for searching 13" Space for searching
29map <space> / 14map <space> /
@@ -135,18 +120,13 @@ nnoremap <leader>so V:so<CR>
135nnoremap <leader><leader>so :source ~/.vimrc<CR> 120nnoremap <leader><leader>so :source ~/.vimrc<CR>
136vnoremap so :source<CR> 121vnoremap so :source<CR>
137 122
138 123" }}}
139"---------------------------------------------------------------------- 124" MANAGE_VIMRC ----------------{{{
140" MANAGE_VIMRC
141"----------------------------------------------------------------------
142nnoremap <leader>e :scriptnames<space> 125nnoremap <leader>e :scriptnames<space>
143nnoremap <leader>ee :edit $MYVIMRC<CR> 126nnoremap <leader>ee :edit $MYVIMRC<CR>
144autocmd! BUFWRITEPOST $MYVIMRC source $MYVIMRC 127autocmd! BUFWRITEPOST $MYVIMRC source $MYVIMRC
145 128" }}}
146 129" MOVING_WITH_READLINE ----------------{{{
147"----------------------------------------------------------------------
148" MOVING_WITH_READLINE
149"----------------------------------------------------------------------
150inoremap <C-f> <Right> 130inoremap <C-f> <Right>
151inoremap <C-b> <Left> 131inoremap <C-b> <Left>
152inoremap <C-a> <C-o>0 132inoremap <C-a> <C-o>0
@@ -178,19 +158,15 @@ noremap <m-j> gj
178noremap <m-k> gk 158noremap <m-k> gk
179inoremap <m-j> <c-\><c-o>gj 159inoremap <m-j> <c-\><c-o>gj
180inoremap <m-k> <c-\><c-o>gk 160inoremap <m-k> <c-\><c-o>gk
181 161" }}}
182"---------------------------------------------------------------------- 162" INSERT_SURROUNDING ----------------{{{
183" INSERT_SURROUNDING
184"----------------------------------------------------------------------
185inoremap ' ''<Left> 163inoremap ' ''<Left>
186inoremap " ""<Left> 164inoremap " ""<Left>
187inoremap ( ()<Left> 165inoremap ( ()<Left>
188inoremap [ []<Left> 166inoremap [ []<Left>
189inoremap { {}<Left> 167inoremap { {}<Left>
190 168" }}}
191"---------------------------------------------------------------------- 169" JUMP_TO_TABS_WITH_ALT ----------------{{{
192" JUMP_TO_TABS_WITH_ALT
193"----------------------------------------------------------------------
194noremap <silent><A-1> :tabn 1<CR> 170noremap <silent><A-1> :tabn 1<CR>
195noremap <silent><A-2> :tabn 2<CR> 171noremap <silent><A-2> :tabn 2<CR>
196noremap <silent><M-3> :tabn 3<CR> 172noremap <silent><M-3> :tabn 3<CR>
@@ -209,11 +185,8 @@ inoremap <silent><M-6> <Esc>:tabn 6<CR>
209inoremap <silent><M-7> <Esc>:tabn 7<CR> 185inoremap <silent><M-7> <Esc>:tabn 7<CR>
210inoremap <silent><M-8> <Esc>:tabn 8<CR> 186inoremap <silent><M-8> <Esc>:tabn 8<CR>
211inoremap <silent><M-9> <Esc>:tablast<CR> 187inoremap <silent><M-9> <Esc>:tablast<CR>
212 188" }}}
213 189" MANAGE_TABS ----------------{{{
214"----------------------------------------------------------------------
215" MANAGE_TABS
216"----------------------------------------------------------------------
217 190
218" Useful mappings for managing tabs 191" Useful mappings for managing tabs
219map <leader>tn :tabnew<CR> 192map <leader>tn :tabnew<CR>
@@ -246,11 +219,8 @@ function! Tab_MoveRight()
246 exec 'tabmove '.l:tabnr 219 exec 'tabmove '.l:tabnr
247 endif 220 endif
248endfunc 221endfunc
249 222" }}}
250 223" MANAGE_BUFFERS ----------------{{{
251"----------------------------------------------------------------------
252" MANAGE_BUFFERS
253"----------------------------------------------------------------------
254 224
255" Open a new buffer 225" Open a new buffer
256nmap <leader><leader>b :enew<CR> 226nmap <leader><leader>b :enew<CR>
@@ -294,18 +264,43 @@ function! s:SwitchDiffForGitHEAD()
294endfunction 264endfunction
295com! SwitchDiffForGitHEAD call s:SwitchDiffForGitHEAD() 265com! SwitchDiffForGitHEAD call s:SwitchDiffForGitHEAD()
296nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR> 266nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR>
297 267" }}}
298 268" MANAGE_WINDOWS ----------------{{{
299"----------------------------------------------------------------------
300" MANAGE_WINDOWS
301"----------------------------------------------------------------------
302nnoremap <leader><leader>sb :windo set scrollbind!<CR> 269nnoremap <leader><leader>sb :windo set scrollbind!<CR>
303 270
304 271" 窗口切换:ALT+SHIFT+hjkl
305"---------------------------------------------------------------------- 272" 传统的 CTRL+hjkl 移动窗口不适用于 vim 8.1 的终端模式,CTRL+hjkl 在
306" FOLDING 273" bash/zsh 及带文本界面的程序中都是重要键位需要保留,不能 tnoremap 的
307"---------------------------------------------------------------------- 274"----------------------------------------------------------------------
275noremap <m-H> <c-w>h
276noremap <m-L> <c-w>l
277noremap <m-J> <c-w>j
278noremap <m-K> <c-w>k
279inoremap <m-H> <esc><c-w>h
280inoremap <m-L> <esc><c-w>l
281inoremap <m-J> <esc><c-w>j
282inoremap <m-K> <esc><c-w>k
308 283
284if has('terminal') && exists(':terminal') == 2 && has('patch-8.1.1')
285 " vim 8.1 支持 termwinkey ,不需要把 terminal 切换成 normal 模式
286 " 设置 termwinkey 为 CTRL 加减号(GVIM),有些终端下是 CTRL+?
287 " 后面四个键位是搭配 termwinkey 的,如果 termwinkey 更改,也要改
288 set termwinkey=<c-_>
289 tnoremap <m-H> <c-_>h
290 tnoremap <m-L> <c-_>l
291 tnoremap <m-J> <c-_>j
292 tnoremap <m-K> <c-_>k
293 tnoremap <m-q> <c-\><c-n>
294elseif has('nvim')
295 " neovim 没有 termwinkey 支持,必须把 terminal 切换回 normal 模式
296 tnoremap <m-H> <c-\><c-n><c-w>h
297 tnoremap <m-L> <c-\><c-n><c-w>l
298 tnoremap <m-J> <c-\><c-n><c-w>j
299 tnoremap <m-K> <c-\><c-n><c-w>k
300 tnoremap <m-q> <c-\><c-n>
301endif
302" }}}
303" FOLDING ----------------{{{
309" Set foldmethod 304" Set foldmethod
310noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> 305noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR>
311 306
@@ -317,11 +312,8 @@ nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo'
317" Open fold in next line 312" Open fold in next line
318nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo' 313nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo'
319nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO' 314nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO'
320 315" }}}
321 316" SURROURD_WITH_CHAR ----------------{{{
322"----------------------------------------------------------------------
323" SURROURD_WITH_CHAR
324"----------------------------------------------------------------------
325vnoremap S sa 317vnoremap S sa
326vnoremap ' <ESC>`<i'<ESC>`>la'<ESC> 318vnoremap ' <ESC>`<i'<ESC>`>la'<ESC>
327vnoremap q <ESC>`<i"<ESC>`>la"<ESC> 319vnoremap q <ESC>`<i"<ESC>`>la"<ESC>
@@ -331,11 +323,9 @@ vnoremap { <ESC>`<i{<ESC>`>la}<ESC>
331vnoremap ` <ESC>`<i`<ESC>`>la`<ESC> 323vnoremap ` <ESC>`<i`<ESC>`>la`<ESC>
332vnoremap <space> <ESC>`<i<space><ESC>`>la<space><ESC> 324vnoremap <space> <ESC>`<i<space><ESC>`>la<space><ESC>
333vnoremap Q <ESC>`<i「<ESC>`>la」<ESC> 325vnoremap Q <ESC>`<i「<ESC>`>la」<ESC>
326" }}}
327" REDIRECTION_WITH_BUFFER ----------------{{{
334 328
335
336"----------------------------------------------------------------------
337" REDIRECTION_WITH_BUFFER
338"----------------------------------------------------------------------
339" Usage: 329" Usage:
340" :Redir hi ............. show the full output of command ':hi' in a scratch window 330" :Redir hi ............. show the full output of command ':hi' in a scratch window
341" :Redir !ls -al ........ show the full output of command ':!ls -al' in a scratch window 331" :Redir !ls -al ........ show the full output of command ':!ls -al' in a scratch window
@@ -362,12 +352,10 @@ endfunction
362 352
363command! -nargs=1 -complete=command Redir silent call Redir(<q-args>) 353command! -nargs=1 -complete=command Redir silent call Redir(<q-args>)
364nnoremap <leader>rr :Redir<space> 354nnoremap <leader>rr :Redir<space>
355" }}}
356" QUICK_SUBSTITUTE ----------------{{{
365 357
366 358" Usage: Press <TAB> n times for area, and <CR> for substitute
367"----------------------------------------------------------------------
368" QUICK_SUBSTITUTE
369" Press <TAB> n times for area, and <CR> for substitute
370"----------------------------------------------------------------------
371 359
372" substitute across file 360" substitute across file
373vnoremap <leader>s y:%s//<C-R>0/g<LEFT><LEFT> 361vnoremap <leader>s y:%s//<C-R>0/g<LEFT><LEFT>
@@ -395,21 +383,16 @@ vnoremap <TAB> <Cmd>call ExpandSelectionBySearch('/')<CR>
395vnoremap <S-TAB> <Cmd>call ExpandSelectionBySearch('?')<CR> 383vnoremap <S-TAB> <Cmd>call ExpandSelectionBySearch('?')<CR>
396vnoremap <CR> <Cmd>call SubstituteBySearch()<CR> 384vnoremap <CR> <Cmd>call SubstituteBySearch()<CR>
397 385
398 386" }}}
399"---------------------------------------------------------------------- 387" GIT_TIG ----------------{{{
400" GIT_TIG
401"----------------------------------------------------------------------
402let g:tig_explorer_keymap_commit_split = '<C-s>' 388let g:tig_explorer_keymap_commit_split = '<C-s>'
403let g:tig_explorer_keymap_commit_vsplit = '<C-v>' 389let g:tig_explorer_keymap_commit_vsplit = '<C-v>'
404nnoremap <C-t> <Cmd>Tig<CR> 390nnoremap <C-t> <Cmd>Tig<CR>
405nnoremap <C-t>s <Cmd>TigStatus<CR> 391nnoremap <C-t>s <Cmd>TigStatus<CR>
406nnoremap <C-t>b <Cmd>TigBlame<CR> 392nnoremap <C-t>b <Cmd>TigBlame<CR>
407nnoremap <C-t>d :vertical TigOpenFileWithCommit <C-R>+ % 0<CR> 393nnoremap <C-t>d :vertical TigOpenFileWithCommit <C-R>+ % 0<CR>
408 394" }}}
409 395" Markdown items (temproray solution) ----------------{{{
410"----------------------------------------------------------------------
411" Markdown items (temproray solution)
412"----------------------------------------------------------------------
413 396
414" Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX" 397" Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX"
415" autocmd FileType markdown nnoremap <buffer> <leader>i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }'<CR><CR> 398" autocmd FileType markdown nnoremap <buffer> <leader>i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }'<CR><CR>
@@ -417,53 +400,14 @@ nnoremap <C-t>d :vertical TigOpenFileWithCommit <C-R>+ % 0<CR>
417 400
418" Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] " 401" Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] "
419" nnoremap <leader>x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }'<CR><CR> 402" nnoremap <leader>x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }'<CR><CR>
420 403" }}}
421 404" Common system command ----------------{{{
422"----------------------------------------------------------------------
423" Common command
424"----------------------------------------------------------------------
425" Show date selector 405" Show date selector
426nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR> 406nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR>
427nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR> 407nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR>
428nnoremap <leader>dt :r !date +\%H:\%m<CR>A 408nnoremap <leader>dt :r !date +\%H:\%m<CR>A
429 409" }}}
430 410" Compile ----------------{{{
431"----------------------------------------------------------------------
432" 窗口切换:ALT+SHIFT+hjkl
433" 传统的 CTRL+hjkl 移动窗口不适用于 vim 8.1 的终端模式,CTRL+hjkl 在
434" bash/zsh 及带文本界面的程序中都是重要键位需要保留,不能 tnoremap 的
435"----------------------------------------------------------------------
436noremap <m-H> <c-w>h
437noremap <m-L> <c-w>l
438noremap <m-J> <c-w>j
439noremap <m-K> <c-w>k
440inoremap <m-H> <esc><c-w>h
441inoremap <m-L> <esc><c-w>l
442inoremap <m-J> <esc><c-w>j
443inoremap <m-K> <esc><c-w>k
444
445if has('terminal') && exists(':terminal') == 2 && has('patch-8.1.1')
446 " vim 8.1 支持 termwinkey ,不需要把 terminal 切换成 normal 模式
447 " 设置 termwinkey 为 CTRL 加减号(GVIM),有些终端下是 CTRL+?
448 " 后面四个键位是搭配 termwinkey 的,如果 termwinkey 更改,也要改
449 set termwinkey=<c-_>
450 tnoremap <m-H> <c-_>h
451 tnoremap <m-L> <c-_>l
452 tnoremap <m-J> <c-_>j
453 tnoremap <m-K> <c-_>k
454 tnoremap <m-q> <c-\><c-n>
455elseif has('nvim')
456 " neovim 没有 termwinkey 支持,必须把 terminal 切换回 normal 模式
457 tnoremap <m-H> <c-\><c-n><c-w>h
458 tnoremap <m-L> <c-\><c-n><c-w>l
459 tnoremap <m-J> <c-\><c-n><c-w>j
460 tnoremap <m-K> <c-\><c-n><c-w>k
461 tnoremap <m-q> <c-\><c-n>
462endif
463
464
465
466"----------------------------------------------------------------------
467" 编译运行 C/C++ 项目 411" 编译运行 C/C++ 项目
468" 详细见:http://www.skywind.me/blog/archives/2084 412" 详细见:http://www.skywind.me/blog/archives/2084
469"---------------------------------------------------------------------- 413"----------------------------------------------------------------------
@@ -501,7 +445,6 @@ if has('win32') || has('win64')
501endif 445endif
502 446
503 447
504"----------------------------------------------------------------------
505" F5 运行当前文件:根据文件类型判断方法,并且输出到 quickfix 窗口 448" F5 运行当前文件:根据文件类型判断方法,并且输出到 quickfix 窗口
506"---------------------------------------------------------------------- 449"----------------------------------------------------------------------
507function! ExecuteFile() 450function! ExecuteFile()
@@ -548,7 +491,6 @@ endfunc
548 491
549 492
550 493
551"----------------------------------------------------------------------
552" F2 在项目目录下 Grep 光标下单词,默认 C/C++/Py/Js ,扩展名自己扩充 494" F2 在项目目录下 Grep 光标下单词,默认 C/C++/Py/Js ,扩展名自己扩充
553" 支持 rg/grep/findstr ,其他类型可以自己扩充 495" 支持 rg/grep/findstr ,其他类型可以自己扩充
554" 不是在当前目录 grep,而是会去到当前文件所属的项目目录 project root 496" 不是在当前目录 grep,而是会去到当前文件所属的项目目录 project root
@@ -569,3 +511,4 @@ else
569 \ --include='*.js' --include='*.vim' 511 \ --include='*.js' --include='*.vim'
570 \ '<root>' <CR> 512 \ '<root>' <CR>
571endif 513endif
514" }}}