From b827b89821a04794e6dd16ae326c6e0bef35f067 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Sat, 20 Jul 2024 21:19:47 +0800 Subject: Update --- vim/init/keymaps.vim | 125 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 77 insertions(+), 48 deletions(-) (limited to 'vim/init') 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 @@ "====================================================================== " Only for key mapping "====================================================================== +" vim: sw=2 ts=2 foldmethod=marker foldmarker={{{,}}} " COMMON_MAPPING ----------------{{{ @@ -8,17 +9,17 @@ map / " Escape normal mode by -imap l +inoremap l " Search for selected test vnoremap * y/\V=escape(@",'/\') -" Set wrap +" Set wrap nnoremap W :set wrap! " Fast saving function! s:WriteOrEnterFileName() - if !empty(expand('%')) | w! | else | call feedkeys(":w ") | endif + if !empty(expand('%')) | write! | else | call feedkeys(":w ") | endif endfunction nmap w :call WriteOrEnterFileName() @@ -38,27 +39,9 @@ augroup vimrc_CRfix autocmd CmdwinEnter * nnoremap augroup END -" Open terminal -" nnoremap , :terminal ++noclose -vnoremap , :terminal - -" Paste register 0 -nnoremap "0p - -" Toggle paste mode on and off -map pp :setlocal paste! - -" Copy from system clipboard -nnoremap P :r !xsel -ob -vnoremap Y "+y - -" Move one line up and down -nnoremap ddp -nnoremap ddkP - " In case ALT key is not working -" execute "set =\e1" " execute "set =\e2" +" execute "set =\e1" " execute "set =\e3" " execute "set =\e4" " execute "set =\e5" @@ -81,8 +64,6 @@ nnoremap S [s " Show full path by default nnoremap 1 -nnoremap S S - " Translate by Google API vnoremap Tz :!trans -t zh-TW -b vnoremap Te :!trans -t en-US -b @@ -192,6 +173,27 @@ inoremap :tablast " }}} +" }}} +" REGISTER {{{ +" Paste register 0 +nnoremap "0p + +" Toggle paste mode on and off +map pp :setlocal paste! + +" Copy from system clipboard +nnoremap P :r !xsel -ob +vnoremap Y "+y +" }}} +" EDIT {{{ + +" Move one line up and down +nnoremap ddp +nnoremap ddkP + +" Clear current line +nnoremap S S + " }}} " MANAGE_VIMRC ----------------{{{ @@ -395,18 +397,22 @@ endfunc noremap fm :e'set foldmethod='..&foldmethod noremap fc :e'set foldcolumn='..&foldcolumn +nnoremap zi zizz + " Show fold level when it changes nnoremap zm zm:set foldlevel nnoremap zr zr:set foldlevel " Fold all except selection -vnoremap zF :call UnfoldSelectionOnly() +vnoremap zF :call ToggleUnfoldSelection() " Resume -nnoremap zF :call ResumeFoldmethod()zv +nnoremap zF :call ToggleUnfoldSelection()zv + +nnoremap \z :call GrayOutOtherFolds() " Select current fold -xnoremap az :silent!normal![zV]z -xnoremap iz :silent!normal![zjV]zk +xnoremap az :silent! keepjumps normal![zV]z +xnoremap iz :silent! keepjumps normal![zjV]zk " Use l to open fold nnoremap l foldclosed('.') == -1 ? 'l' : 'zo' @@ -415,29 +421,49 @@ nnoremap l foldclosed('.') == -1 ? 'l' : 'zo' nnoremap zo foldclosed('.') == -1 ? 'zjzo' : 'zo' nnoremap zO foldclosed('.') == -1 ? 'zjzO' : 'zO' +" Go to next fold and unfold nnoremap zJ zjzx nnoremap zK zkzx " Fold file except selection -let b:original_foldmethod = "" -function! UnfoldSelectionOnly() - echo 'Unfold'..&foldmethod - let b:original_foldmethod = &foldmethod - let &foldmethod = "manual" - norm! zE - execute "0,'<-1fold" - execute "'>+1,$fold" +autocmd BufEnter * let b:unfold_selection = 0 +function! ToggleUnfoldSelection() + if !b:unfold_selection + let b:unfold_selection = 1 + mkview + echo 'Unfold'..&foldmethod + + let &foldmethod = "manual" + norm! zE + execute "0,'<-1fold" + execute "'>+1,$fold" + else + let b:unfold_selection = 0 + loadview + endif +endfunction + +autocmd BufEnter * let b:clear_matches = 0 +function! GrayOutOtherFolds() + if b:clear_matches + let b:clear_matches = 0 + call clearmatches() + else + let b:clear_matches = 1 + let pos = getpos('.') + exe "norm! [zV]z\" + call matchadd('Folded', '\%<'.line("'<").'l') + call matchadd('Folded', '\%>'.line("'>").'l') + norm! zR + call setpos('.', pos) + endif endfunction -function! ResumeFoldmethod() - norm! zE - let &foldmethod = empty(b:original_foldmethod) ? "indent" : b:original_foldmethod -endfunc " }}} " HIGHLIGHT ----------------{{{ " Disable highlight when is pressed -map :noh +noremap :noh function! HiFile() let i = 1 @@ -454,7 +480,7 @@ endfunction function! GetHighlightGroupName() let l:syntaxID = synID(line('.'), col('.'), 1) let l:groupName = synIDattr(l:syntaxID, 'name') - echo "Highlight Group Name: " . l:groupName + echo l:groupName endfunction nnoremap H :call GetHighlightGroupName() @@ -485,9 +511,12 @@ vnoremap ` ``>la` vnoremap Q ``>la」 function! AddSpaceForSelection() + " If visual selection by lines, add empty space at top and bottom if line("'<") != line("'>") || (col("'<") == 1 && col("'>") == len(getline('.'))+1) - '< norm! O + '< norm! O | '> norm! o + exe "norm! "..(line("'<")-1).."GV"..(line("'>")+1).."G" + " Otherwise, add space at start and end column else call cursor('.', col("'<")) execute "norm! i\" @@ -543,7 +572,7 @@ autocmd Modechanged [vV\x16]*:* let g:search_not_in_register = 1 function! ExpandSelectionBySearch(sep) if g:search_not_in_register " Save current selection to register, and keep selection - execute 'norm ygv' + norm! ygv let g:search_not_in_register = 0 endif " Use register s to go to next search, counts/total is displayed in @@ -565,7 +594,7 @@ vnoremap call SubstituteBySearch() nnoremap si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p") nnoremap sI :exe ":sign unplace * file=" .. expand("%:p") -" }} +" }}} " GIT_TIG ----------------{{{ let g:tig_explorer_keymap_commit_split = '' @@ -575,7 +604,7 @@ nnoremap s TigStatus nnoremap b TigBlame " }}} -" Markdown items (temproray solution) ----------------{{{ +" Tmp: Markdown items (temproray solution) ----------------{{{ " Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX" " autocmd FileType markdown nnoremap i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }' @@ -584,14 +613,14 @@ nnoremap b TigBlame " Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] " " nnoremap x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }' " }}} -" Common system command ----------------{{{ +" Tmp: Common system command ----------------{{{ " Show date selector nnoremap dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null' nnoremap dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null' nnoremap dt :r !date +\%H:\%mA " }}} -" Compile ----------------{{{ +" Tmp: Compile ----------------{{{ " 编译运行 C/C++ 项目 " 详细见:http://www.skywind.me/blog/archives/2084 -- cgit v1.2.3-70-g09d2