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.vim125
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 @@
8map <space> / 9map <space> /
9 10
10" Escape normal mode by <C-c> 11" Escape normal mode by <C-c>
11imap <C-c> <Esc>l 12inoremap <C-c> <Esc>l
12 13
13" Search for selected test 14" Search for selected test
14vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR> 15vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR>
15" Set wrap
16 16
17" Set wrap
17nnoremap <leader>W :set wrap!<CR> 18nnoremap <leader>W :set wrap!<CR>
18 19
19" Fast saving 20" Fast saving
20function! s:WriteOrEnterFileName() 21function! s:WriteOrEnterFileName()
21 if !empty(expand('%')) | w! | else | call feedkeys(":w ") | endif 22 if !empty(expand('%')) | write! | else | call feedkeys(":w ") | endif
22endfunction 23endfunction
23nmap <leader>w :call <SID>WriteOrEnterFileName()<CR> 24nmap <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>
39augroup END 40augroup END
40 41
41" Open terminal
42" nnoremap <leader>, :terminal ++noclose<CR>
43vnoremap <leader>, :terminal<CR>
44
45" Paste register 0
46nnoremap <C-p> "0p
47
48" Toggle paste mode on and off
49map <leader>pp :setlocal paste!<CR>
50
51" Copy from system clipboard
52nnoremap <leader>P :r !xsel -ob<CR>
53vnoremap Y "+y
54
55" Move one line up and down
56nnoremap <C-j> ddp
57nnoremap <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
82nnoremap <C-g> 1<C-g> 65nnoremap <C-g> 1<C-g>
83 66
84nnoremap S S<ESC>
85
86" Translate by Google API 67" Translate by Google API
87vnoremap Tz :!trans -t zh-TW -b<CR> 68vnoremap Tz :!trans -t zh-TW -b<CR>
88vnoremap Te :!trans -t en-US -b<CR> 69vnoremap 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
179nnoremap <C-p> "0p
180
181" Toggle paste mode on and off
182map <leader>pp :setlocal paste!<CR>
183
184" Copy from system clipboard
185nnoremap <leader>P :r !xsel -ob<CR>
186vnoremap Y "+y
187" }}}
188" EDIT {{{
189
190" Move one line up and down
191nnoremap <C-j> ddp
192nnoremap <C-k> ddkP
193
194" Clear current line
195nnoremap S S<ESC>
196
197" }}}
196" MANAGE_VIMRC ----------------{{{ 198" MANAGE_VIMRC ----------------{{{
197 199
198" source .vimrc 200" source .vimrc
@@ -395,18 +397,22 @@ endfunc
395noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> 397noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR>
396noremap <leader><leader>fc :<C-\>e'set foldcolumn='..&foldcolumn<CR> 398noremap <leader><leader>fc :<C-\>e'set foldcolumn='..&foldcolumn<CR>
397 399
400nnoremap zi zizz
401
398" Show fold level when it changes 402" Show fold level when it changes
399nnoremap zm zm:set foldlevel<CR> 403nnoremap zm zm:set foldlevel<CR>
400nnoremap zr zr:set foldlevel<CR> 404nnoremap zr zr:set foldlevel<CR>
401 405
402" Fold all except selection 406" Fold all except selection
403vnoremap zF :<C-u>call UnfoldSelectionOnly()<CR> 407vnoremap zF :<C-u>call ToggleUnfoldSelection()<CR>
404" Resume 408" Resume
405nnoremap zF :<C-u>call ResumeFoldmethod()<CR>zv 409nnoremap zF :call ToggleUnfoldSelection()<CR>zv
410
411nnoremap \z :call GrayOutOtherFolds()<CR>
406 412
407" Select current fold 413" Select current fold
408xnoremap az :<C-U>silent!normal![zV]z<CR> 414xnoremap az :<C-U>silent! keepjumps normal![zV]z<CR>
409xnoremap iz :<C-U>silent!normal![zjV]zk<CR> 415xnoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR>
410 416
411" Use l to open fold 417" Use l to open fold
412nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo' 418nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo'
@@ -415,29 +421,49 @@ nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo'
415nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo' 421nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo'
416nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO' 422nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO'
417 423
424" Go to next fold and unfold
418nnoremap zJ zjzx 425nnoremap zJ zjzx
419nnoremap zK zkzx 426nnoremap zK zkzx
420 427
421" Fold file except selection 428" Fold file except selection
422let b:original_foldmethod = "" 429autocmd BufEnter * let b:unfold_selection = 0
423function! UnfoldSelectionOnly() 430function! 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
444endfunction
445
446autocmd BufEnter * let b:clear_matches = 0
447function! 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
430endfunction 460endfunction
431function! ResumeFoldmethod()
432 norm! zE
433 let &foldmethod = empty(b:original_foldmethod) ? "indent" : b:original_foldmethod
434endfunc
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
440map <silent> <leader><CR> :noh<CR> 466noremap <silent> <leader><CR> :noh<CR>
441 467
442function! HiFile() 468function! HiFile()
443 let i = 1 469 let i = 1
@@ -454,7 +480,7 @@ endfunction
454function! GetHighlightGroupName() 480function! 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
458endfunction 484endfunction
459nnoremap <leader>H :call GetHighlightGroupName()<CR> 485nnoremap <leader>H :call GetHighlightGroupName()<CR>
460 486
@@ -485,9 +511,12 @@ vnoremap ` <ESC>`<i`<ESC>`>la`<ESC>
485vnoremap Q <ESC>`<i「<ESC>`>la」<ESC> 511vnoremap Q <ESC>`<i「<ESC>`>la」<ESC>
486 512
487function! AddSpaceForSelection() 513function! 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
543function! ExpandSelectionBySearch(sep) 572function! 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>
565nnoremap <leader>si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p")<CR> 594nnoremap <leader>si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p")<CR>
566nnoremap <leader>sI :exe ":sign unplace * file=" .. expand("%:p")<CR> 595nnoremap <leader>sI :exe ":sign unplace * file=" .. expand("%:p")<CR>
567 596
568" }} 597" }}}
569" GIT_TIG ----------------{{{ 598" GIT_TIG ----------------{{{
570 599
571let g:tig_explorer_keymap_commit_split = '<C-s>' 600let g:tig_explorer_keymap_commit_split = '<C-s>'
@@ -575,7 +604,7 @@ nnoremap <C-t>s <Cmd>TigStatus<CR>
575nnoremap <C-t>b <Cmd>TigBlame<CR> 604nnoremap <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
589nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR> 618nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR>
590nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR> 619nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR>
591nnoremap <leader>dt :r !date +\%H:\%m<CR>A 620nnoremap <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