diff options
Diffstat (limited to 'vim/init/keymaps.vim')
-rw-r--r-- | vim/init/keymaps.vim | 125 |
1 files changed, 77 insertions, 48 deletions
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index 5639e11..1a5e88a 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim | |||
@@ -1,6 +1,7 @@ | |||
1 | "====================================================================== | 1 | "====================================================================== |
2 | " Only for key mapping | 2 | " Only for key mapping |
3 | "====================================================================== | 3 | "====================================================================== |
4 | " vim: sw=2 ts=2 foldmethod=marker foldmarker={{{,}}} | ||
4 | 5 | ||
5 | " COMMON_MAPPING ----------------{{{ | 6 | " COMMON_MAPPING ----------------{{{ |
6 | 7 | ||
@@ -8,17 +9,17 @@ | |||
8 | map <space> / | 9 | map <space> / |
9 | 10 | ||
10 | " Escape normal mode by <C-c> | 11 | " Escape normal mode by <C-c> |
11 | imap <C-c> <Esc>l | 12 | inoremap <C-c> <Esc>l |
12 | 13 | ||
13 | " Search for selected test | 14 | " Search for selected test |
14 | vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR> | 15 | vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR> |
15 | " Set wrap | ||
16 | 16 | ||
17 | " Set wrap | ||
17 | nnoremap <leader>W :set wrap!<CR> | 18 | nnoremap <leader>W :set wrap!<CR> |
18 | 19 | ||
19 | " Fast saving | 20 | " Fast saving |
20 | function! s:WriteOrEnterFileName() | 21 | function! s:WriteOrEnterFileName() |
21 | if !empty(expand('%')) | w! | else | call feedkeys(":w ") | endif | 22 | if !empty(expand('%')) | write! | else | call feedkeys(":w ") | endif |
22 | endfunction | 23 | endfunction |
23 | nmap <leader>w :call <SID>WriteOrEnterFileName()<CR> | 24 | nmap <leader>w :call <SID>WriteOrEnterFileName()<CR> |
24 | 25 | ||
@@ -38,27 +39,9 @@ augroup vimrc_CRfix | |||
38 | autocmd CmdwinEnter * nnoremap <buffer> <C-c> <C-c> | 39 | autocmd CmdwinEnter * nnoremap <buffer> <C-c> <C-c> |
39 | augroup END | 40 | augroup END |
40 | 41 | ||
41 | " Open terminal | ||
42 | " nnoremap <leader>, :terminal ++noclose<CR> | ||
43 | vnoremap <leader>, :terminal<CR> | ||
44 | |||
45 | " Paste register 0 | ||
46 | nnoremap <C-p> "0p | ||
47 | |||
48 | " Toggle paste mode on and off | ||
49 | map <leader>pp :setlocal paste!<CR> | ||
50 | |||
51 | " Copy from system clipboard | ||
52 | nnoremap <leader>P :r !xsel -ob<CR> | ||
53 | vnoremap Y "+y | ||
54 | |||
55 | " Move one line up and down | ||
56 | nnoremap <C-j> ddp | ||
57 | nnoremap <C-k> ddkP | ||
58 | |||
59 | " In case ALT key is not working | 42 | " In case ALT key is not working |
60 | " execute "set <M-1>=\e1" | ||
61 | " execute "set <M-2>=\e2" | 43 | " execute "set <M-2>=\e2" |
44 | " execute "set <M-1>=\e1" | ||
62 | " execute "set <M-3>=\e3" | 45 | " execute "set <M-3>=\e3" |
63 | " execute "set <M-4>=\e4" | 46 | " execute "set <M-4>=\e4" |
64 | " execute "set <M-5>=\e5" | 47 | " execute "set <M-5>=\e5" |
@@ -81,8 +64,6 @@ nnoremap <leader>S [s | |||
81 | " Show full path by default | 64 | " Show full path by default |
82 | nnoremap <C-g> 1<C-g> | 65 | nnoremap <C-g> 1<C-g> |
83 | 66 | ||
84 | nnoremap S S<ESC> | ||
85 | |||
86 | " Translate by Google API | 67 | " Translate by Google API |
87 | vnoremap Tz :!trans -t zh-TW -b<CR> | 68 | vnoremap Tz :!trans -t zh-TW -b<CR> |
88 | vnoremap Te :!trans -t en-US -b<CR> | 69 | vnoremap Te :!trans -t en-US -b<CR> |
@@ -193,6 +174,27 @@ inoremap <silent><M-9> <Esc>:tablast<CR> | |||
193 | " }}} | 174 | " }}} |
194 | 175 | ||
195 | " }}} | 176 | " }}} |
177 | " REGISTER {{{ | ||
178 | " Paste register 0 | ||
179 | nnoremap <C-p> "0p | ||
180 | |||
181 | " Toggle paste mode on and off | ||
182 | map <leader>pp :setlocal paste!<CR> | ||
183 | |||
184 | " Copy from system clipboard | ||
185 | nnoremap <leader>P :r !xsel -ob<CR> | ||
186 | vnoremap Y "+y | ||
187 | " }}} | ||
188 | " EDIT {{{ | ||
189 | |||
190 | " Move one line up and down | ||
191 | nnoremap <C-j> ddp | ||
192 | nnoremap <C-k> ddkP | ||
193 | |||
194 | " Clear current line | ||
195 | nnoremap S S<ESC> | ||
196 | |||
197 | " }}} | ||
196 | " MANAGE_VIMRC ----------------{{{ | 198 | " MANAGE_VIMRC ----------------{{{ |
197 | 199 | ||
198 | " source .vimrc | 200 | " source .vimrc |
@@ -395,18 +397,22 @@ endfunc | |||
395 | noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> | 397 | noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> |
396 | noremap <leader><leader>fc :<C-\>e'set foldcolumn='..&foldcolumn<CR> | 398 | noremap <leader><leader>fc :<C-\>e'set foldcolumn='..&foldcolumn<CR> |
397 | 399 | ||
400 | nnoremap zi zizz | ||
401 | |||
398 | " Show fold level when it changes | 402 | " Show fold level when it changes |
399 | nnoremap zm zm:set foldlevel<CR> | 403 | nnoremap zm zm:set foldlevel<CR> |
400 | nnoremap zr zr:set foldlevel<CR> | 404 | nnoremap zr zr:set foldlevel<CR> |
401 | 405 | ||
402 | " Fold all except selection | 406 | " Fold all except selection |
403 | vnoremap zF :<C-u>call UnfoldSelectionOnly()<CR> | 407 | vnoremap zF :<C-u>call ToggleUnfoldSelection()<CR> |
404 | " Resume | 408 | " Resume |
405 | nnoremap zF :<C-u>call ResumeFoldmethod()<CR>zv | 409 | nnoremap zF :call ToggleUnfoldSelection()<CR>zv |
410 | |||
411 | nnoremap \z :call GrayOutOtherFolds()<CR> | ||
406 | 412 | ||
407 | " Select current fold | 413 | " Select current fold |
408 | xnoremap az :<C-U>silent!normal![zV]z<CR> | 414 | xnoremap az :<C-U>silent! keepjumps normal![zV]z<CR> |
409 | xnoremap iz :<C-U>silent!normal![zjV]zk<CR> | 415 | xnoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR> |
410 | 416 | ||
411 | " Use l to open fold | 417 | " Use l to open fold |
412 | nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo' | 418 | nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo' |
@@ -415,29 +421,49 @@ nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo' | |||
415 | nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo' | 421 | nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo' |
416 | nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO' | 422 | nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO' |
417 | 423 | ||
424 | " Go to next fold and unfold | ||
418 | nnoremap zJ zjzx | 425 | nnoremap zJ zjzx |
419 | nnoremap zK zkzx | 426 | nnoremap zK zkzx |
420 | 427 | ||
421 | " Fold file except selection | 428 | " Fold file except selection |
422 | let b:original_foldmethod = "" | 429 | autocmd BufEnter * let b:unfold_selection = 0 |
423 | function! UnfoldSelectionOnly() | 430 | function! ToggleUnfoldSelection() |
424 | echo 'Unfold'..&foldmethod | 431 | if !b:unfold_selection |
425 | let b:original_foldmethod = &foldmethod | 432 | let b:unfold_selection = 1 |
426 | let &foldmethod = "manual" | 433 | mkview |
427 | norm! zE | 434 | echo 'Unfold'..&foldmethod |
428 | execute "0,'<-1fold" | 435 | |
429 | execute "'>+1,$fold" | 436 | let &foldmethod = "manual" |
437 | norm! zE | ||
438 | execute "0,'<-1fold" | ||
439 | execute "'>+1,$fold" | ||
440 | else | ||
441 | let b:unfold_selection = 0 | ||
442 | loadview | ||
443 | endif | ||
444 | endfunction | ||
445 | |||
446 | autocmd BufEnter * let b:clear_matches = 0 | ||
447 | function! GrayOutOtherFolds() | ||
448 | if b:clear_matches | ||
449 | let b:clear_matches = 0 | ||
450 | call clearmatches() | ||
451 | else | ||
452 | let b:clear_matches = 1 | ||
453 | let pos = getpos('.') | ||
454 | exe "norm! [zV]z\<C-c>" | ||
455 | call matchadd('Folded', '\%<'.line("'<").'l') | ||
456 | call matchadd('Folded', '\%>'.line("'>").'l') | ||
457 | norm! zR | ||
458 | call setpos('.', pos) | ||
459 | endif | ||
430 | endfunction | 460 | endfunction |
431 | function! ResumeFoldmethod() | ||
432 | norm! zE | ||
433 | let &foldmethod = empty(b:original_foldmethod) ? "indent" : b:original_foldmethod | ||
434 | endfunc | ||
435 | 461 | ||
436 | " }}} | 462 | " }}} |
437 | " HIGHLIGHT ----------------{{{ | 463 | " HIGHLIGHT ----------------{{{ |
438 | 464 | ||
439 | " Disable highlight when <leader><CR> is pressed | 465 | " Disable highlight when <leader><CR> is pressed |
440 | map <silent> <leader><CR> :noh<CR> | 466 | noremap <silent> <leader><CR> :noh<CR> |
441 | 467 | ||
442 | function! HiFile() | 468 | function! HiFile() |
443 | let i = 1 | 469 | let i = 1 |
@@ -454,7 +480,7 @@ endfunction | |||
454 | function! GetHighlightGroupName() | 480 | function! GetHighlightGroupName() |
455 | let l:syntaxID = synID(line('.'), col('.'), 1) | 481 | let l:syntaxID = synID(line('.'), col('.'), 1) |
456 | let l:groupName = synIDattr(l:syntaxID, 'name') | 482 | let l:groupName = synIDattr(l:syntaxID, 'name') |
457 | echo "Highlight Group Name: " . l:groupName | 483 | echo l:groupName |
458 | endfunction | 484 | endfunction |
459 | nnoremap <leader>H :call GetHighlightGroupName()<CR> | 485 | nnoremap <leader>H :call GetHighlightGroupName()<CR> |
460 | 486 | ||
@@ -485,9 +511,12 @@ vnoremap ` <ESC>`<i`<ESC>`>la`<ESC> | |||
485 | vnoremap Q <ESC>`<i「<ESC>`>la」<ESC> | 511 | vnoremap Q <ESC>`<i「<ESC>`>la」<ESC> |
486 | 512 | ||
487 | function! AddSpaceForSelection() | 513 | function! AddSpaceForSelection() |
514 | " If visual selection by lines, add empty space at top and bottom | ||
488 | if line("'<") != line("'>") || (col("'<") == 1 && col("'>") == len(getline('.'))+1) | 515 | if line("'<") != line("'>") || (col("'<") == 1 && col("'>") == len(getline('.'))+1) |
489 | '< norm! O | 516 | '< norm! O | |
490 | '> norm! o | 517 | '> norm! o |
518 | exe "norm! "..(line("'<")-1).."GV"..(line("'>")+1).."G" | ||
519 | " Otherwise, add space at start and end column | ||
491 | else | 520 | else |
492 | call cursor('.', col("'<")) | 521 | call cursor('.', col("'<")) |
493 | execute "norm! i\<space>" | 522 | execute "norm! i\<space>" |
@@ -543,7 +572,7 @@ autocmd Modechanged [vV\x16]*:* let g:search_not_in_register = 1 | |||
543 | function! ExpandSelectionBySearch(sep) | 572 | function! ExpandSelectionBySearch(sep) |
544 | if g:search_not_in_register | 573 | if g:search_not_in_register |
545 | " Save current selection to register, and keep selection | 574 | " Save current selection to register, and keep selection |
546 | execute 'norm ygv' | 575 | norm! ygv |
547 | let g:search_not_in_register = 0 | 576 | let g:search_not_in_register = 0 |
548 | endif | 577 | endif |
549 | " Use register s to go to next search, counts/total is displayed in | 578 | " Use register s to go to next search, counts/total is displayed in |
@@ -565,7 +594,7 @@ vnoremap <CR> <Cmd>call SubstituteBySearch()<CR> | |||
565 | nnoremap <leader>si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p")<CR> | 594 | nnoremap <leader>si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p")<CR> |
566 | nnoremap <leader>sI :exe ":sign unplace * file=" .. expand("%:p")<CR> | 595 | nnoremap <leader>sI :exe ":sign unplace * file=" .. expand("%:p")<CR> |
567 | 596 | ||
568 | " }} | 597 | " }}} |
569 | " GIT_TIG ----------------{{{ | 598 | " GIT_TIG ----------------{{{ |
570 | 599 | ||
571 | let g:tig_explorer_keymap_commit_split = '<C-s>' | 600 | let g:tig_explorer_keymap_commit_split = '<C-s>' |
@@ -575,7 +604,7 @@ nnoremap <C-t>s <Cmd>TigStatus<CR> | |||
575 | nnoremap <C-t>b <Cmd>TigBlame<CR> | 604 | nnoremap <C-t>b <Cmd>TigBlame<CR> |
576 | 605 | ||
577 | " }}} | 606 | " }}} |
578 | " Markdown items (temproray solution) ----------------{{{ | 607 | " Tmp: Markdown items (temproray solution) ----------------{{{ |
579 | 608 | ||
580 | " Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX" | 609 | " Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX" |
581 | " autocmd FileType markdown nnoremap <buffer> <leader>i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }'<CR><CR> | 610 | " autocmd FileType markdown nnoremap <buffer> <leader>i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }'<CR><CR> |
@@ -584,14 +613,14 @@ nnoremap <C-t>b <Cmd>TigBlame<CR> | |||
584 | " Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] " | 613 | " Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] " |
585 | " nnoremap <leader>x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }'<CR><CR> | 614 | " nnoremap <leader>x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }'<CR><CR> |
586 | " }}} | 615 | " }}} |
587 | " Common system command ----------------{{{ | 616 | " Tmp: Common system command ----------------{{{ |
588 | " Show date selector | 617 | " Show date selector |
589 | nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR> | 618 | nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR> |
590 | nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR> | 619 | nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR> |
591 | nnoremap <leader>dt :r !date +\%H:\%m<CR>A | 620 | nnoremap <leader>dt :r !date +\%H:\%m<CR>A |
592 | 621 | ||
593 | " }}} | 622 | " }}} |
594 | " Compile ----------------{{{ | 623 | " Tmp: Compile ----------------{{{ |
595 | 624 | ||
596 | " 编译运行 C/C++ 项目 | 625 | " 编译运行 C/C++ 项目 |
597 | " 详细见:http://www.skywind.me/blog/archives/2084 | 626 | " 详细见:http://www.skywind.me/blog/archives/2084 |