From e971b4711d06710ec59e681053f5973b911af85b Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Sat, 13 Jul 2024 01:04:26 +0800 Subject: Update --- vim/init/basic.vim | 12 +++++- vim/init/keymaps.vim | 107 ++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 85 insertions(+), 34 deletions(-) (limited to 'vim/init') diff --git a/vim/init/basic.vim b/vim/init/basic.vim index 42dab16..818e996 100644 --- a/vim/init/basic.vim +++ b/vim/init/basic.vim @@ -9,7 +9,7 @@ " Usage: type --- for foldmark augroup filetype_vim autocmd! - execute "autocmd FileType vim :inoreabbrev --- ----------------{".."{{" + execute "autocmd FileType vim :inoreabbrev --- ----------------{".."{{\" }"."}}" autocmd FileType vim setlocal foldmethod=marker foldlevel=0 augroup END @@ -35,6 +35,13 @@ filetype plugin indent on set autoread autocmd FocusGained,BufEnter .* checktime +" spell +set spell +set spellfile="/tmp/spell" + +" Custom sign from help page :h sign +sign define piet text=>> texthl=Search + " }}} " VISUAL ----------------{{{ @@ -79,8 +86,9 @@ set ttimeoutlen=50 " set updatetime=4000 " autocmd CursorHold * normal! m' -" TAB ----------------{{{ +" TAB and special Chars ----------------{{{ +set tabstop=8 set expandtab set softtabstop=-1 diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index 0132706..438f925 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim @@ -52,21 +52,6 @@ map pp :setlocal paste! nnoremap P :r !xsel -ob vnoremap Y :w !xsel -ib -" Switch CWD to the directory of the open buffer -nnoremap cd :cd %:p:h:pwd -" Switch CWD to root git directory -function! CdToGitRepo() - let l:git_dir = finddir('.git', escape(expand('%:p:h'), ' ') . ';') - let l:repo = fnameescape(fnamemodify(l:git_dir, ':h')) - execute "cd" l:repo -endfunction -nnoremap cdg :call CdToGitRepo():pwd - -" alias for cd -nnoremap cdd :cd -nnoremap cd.. :cd .. :pwd -nnoremap cd... :cd ../.. :pwd - " Move one line up and down nnoremap ddp nnoremap ddkP @@ -89,8 +74,7 @@ nnoremap ddkP " execute "set =\eh" " Spell -nnoremap sp ": echo spell "..(echo &spell ? "on" : "off").."" -nnoremap sp ": echo spell " +nnoremap sp :set spell!:set spell? nnoremap ss ]s nnoremap S [s @@ -102,7 +86,40 @@ vnoremap Tz :!trans -t zh-TW -b vnoremap Te :!trans -t en-US -b " }}} -" MOVE ----------------{{{ +" WORKING_DIR ----------------{{{ + +let g:last_path = execute("pwd") +augroup SaveLatestDir + au! + autocmd DirChangedPre * let g:last_path = split(execute('pwd'), "\n")[0] +augroup END + +" Switch CWD to the directory of the open buffer +nnoremap cd :cd %:p:h:pwd + +nnoremap cd :cd +nnoremap cdg :call CdToGitRepo():pwd +noremap :cd ..:pwd +noremap :call InCaseCdToLatestDir() + +" Switch CWD to root git directory +function! CdToGitRepo() + let l:git_dir = finddir('.git', escape(expand('%:p:h'), ' ') . ';') + let l:repo = fnameescape(fnamemodify(l:git_dir, ':h')) + execute "cd" l:repo +endfunction + +function! InCaseCdToLatestDir() + try + execute "norm! \" + catch + cd - + pwd + endtry +endfunction + +" }}} +" MOTION ----------------{{{ " j/k will move virtual lines (lines that wrap) noremap j (v:count == 0 ? 'gj' : 'j') @@ -371,7 +388,7 @@ endfunc " }}} " FOLD ----------------{{{ -" Set foldmethod +" Set fold options noremap fm :e'set foldmethod='..&foldmethod noremap fc :e'set foldcolumn='..&foldcolumn @@ -379,11 +396,26 @@ noremap fc :e'set foldcolumn='..&foldcolumn nnoremap zm zm:set foldlevel nnoremap zr zr:set foldlevel +" Fold all except selection +vnoremap zF :call UnfoldSelectionOnly() +" Resume +nnoremap zF :call ResumeFoldmethod()zv + +" Select current fold +xnoremap iz :silent!normal![zV]z + +" Use l to open fold +nnoremap l foldclosed('.') == -1 ? 'l' : 'zo' + +" Open fold in next line +nnoremap zo foldclosed('.') == -1 ? 'zjzo' : 'zo' +nnoremap zO foldclosed('.') == -1 ? 'zjzO' : 'zO' + " Fold file except selection -let g:original_foldmethod = "" +let b:original_foldmethod = "" function! UnfoldSelectionOnly() echo 'Unfold'..&foldmethod - let g:original_foldmethod = &foldmethod + let b:original_foldmethod = &foldmethod let &foldmethod = "manual" norm! zE execute "0,'<-1fold" @@ -391,17 +423,8 @@ function! UnfoldSelectionOnly() endfunction function! ResumeFoldmethod() norm! zE - let &foldmethod = g:original_foldmethod ? g:original_foldmethod : "indent" + let &foldmethod = empty(b:original_foldmethod) ? "indent" : b:original_foldmethod endfunc -vnoremap zF :call UnfoldSelectionOnly() -nnoremap zF :call ResumeFoldmethod() - -" Use l to open fold -nnoremap l foldclosed('.') == -1 ? 'l' : 'zo' - -" Open fold in next line -nnoremap zo foldclosed('.') == -1 ? 'zjzo' : 'zo' -nnoremap zO foldclosed('.') == -1 ? 'zjzO' : 'zO' " }}} " HIGHLIGHT ----------------{{{ @@ -449,14 +472,28 @@ vnoremap ( ``>la) vnoremap [ ``>la] vnoremap { ``>la} vnoremap ` ``>la` -vnoremap ``>la vnoremap Q ``>la」 +function! AddSpaceForSelection() + if line("'<") == line("'>") + call cursor('.', col("'<")) + execute "norm! i\" + call cursor('.', col("'>")+1) + execute "norm! a\" + else + '< norm! O + '> norm! o + endif +endfunction +vnoremap :call AddSpaceForSelection() + " }}} " QUICKFIX ----------------{{{ + nnoremap cn :cn nnoremap cp :cp nnoremap cw :cw 10 + " }}} " REDIRECTION_WITH_BUFFER ----------------{{{ @@ -518,6 +555,12 @@ vnoremap call ExpandSelectionBySearch('?') vnoremap call SubstituteBySearch() " }}} +" SIGN ----------------{{{ + +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 = '' -- cgit v1.2.3-70-g09d2