From f7756cae141f5922f3af233211c89a01e2df4cd4 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Wed, 31 Jul 2024 01:16:59 +0800 Subject: Update --- vim/init/keymaps.vim | 158 +++++++++++++++------------------------------------ 1 file changed, 46 insertions(+), 112 deletions(-) (limited to 'vim/init') diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index d94e7c0..37c0936 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim @@ -190,12 +190,53 @@ vnoremap Y "+y " Delete mark function! DeleteMark(mark) let mark = nr2char(a:mark) - if mark =~ '[a-z]' + if mark =~ '[a-Z]' execute "delmarks " . mark endif -endfunction +endfunc nnoremap dm :call DeleteMark(getchar()) + +" Usage: z' to fold lines not near marks, use v:count to set bound +" For example: 15z' +autocmd BufEnter * let b:unfold_marks = 0 +let g:mark_bound = 5 +function! ToggleFoldForMarks(bound) + let bound = a:bound ? a:bound : g:mark_bound + if !b:unfold_marks + mkview + setlocal foldmethod=manual + norm! zEgg + + let line_list = [] + for info in getmarklist(bufnr()) + if match(info.mark, "[a-z]") == 1 + call add(line_list, info.pos[1]) + endif + endfor + echo line_list + call uniq(sort(line_list, 'n')) + + for line in line_list + let foldstart = line('.') + let line_upper = line - bound + let line_lower = line + bound + if foldstart < (line_upper - 1) + exe foldstart..","..(line_upper-1).." fold" + endif + " Jump to lower bound of lineer + exe (line_lower + 1) + endfor + if line('.') < line('$') + norm! zfG + endif + else + loadview + endif + let b:unfold_marks = !b:unfold_marks +endfunction +nnoremap z' ":\call ToggleFoldForMarks(".v:count..")\" + "}}} " EDIT {{{ @@ -547,13 +588,13 @@ inoremap ( () inoremap [ [] inoremap { {} -vnoremap ' ``>la' vnoremap q ``>la" vnoremap ( ``>la) vnoremap [ ``>la] vnoremap { ``>la} -vnoremap ` ``>la` vnoremap Q ``>la」 +" vnoremap ' ``>la' +" vnoremap ` ``>la` function! AddSpaceForSelection() " If visual selection by lines, add empty space at top and bottom @@ -590,7 +631,7 @@ function! Redir(cmd) let output = system(matchstr(a:cmd, '^!\zs.*')) else redir => output - execute a:cmd + try | execute a:cmd | catch | return | redir END | endtry redir END endif enew @@ -656,110 +697,3 @@ nnoremap dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b nnoremap dt :r !date +\%H:\%mA " }}} -" Tmp: Compile {{{ - -" 编译运行 C/C++ 项目 -" 详细见:http://www.skywind.me/blog/archives/2084 -"---------------------------------------------------------------------- - -" 自动打开 quickfix window ,高度为 6 -let g:asyncrun_open = 6 - -" 任务结束时候响铃提醒 -let g:asyncrun_bell = 1 - -" 设置 F10 打开/关闭 Quickfix 窗口 -nnoremap :call asyncrun#quickfix_toggle(6) - -" F9 编译 C/C++ 文件 -nnoremap :AsyncRun gcc -Wall -O2 "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" - -" F5 运行文件 -nnoremap :call ExecuteFile() - -" F7 编译项目 -nnoremap :AsyncRun -cwd= make - -" F8 运行项目 -nnoremap :AsyncRun -cwd= -raw make run - -" F6 测试项目 -nnoremap :AsyncRun -cwd= -raw make test - -" 更新 cmake -nnoremap :AsyncRun -cwd= cmake . - -" Windows 下支持直接打开新 cmd 窗口运行 -if has('win32') || has('win64') - nnoremap :AsyncRun -cwd= -mode=4 make run -endif - - -" F5 运行当前文件:根据文件类型判断方法,并且输出到 quickfix 窗口 -"---------------------------------------------------------------------- -function! ExecuteFile() - let cmd = '' - if index(['c', 'cpp', 'rs', 'go'], &ft) >= 0 - " native 语言,把当前文件名去掉扩展名后作为可执行运行 - " 写全路径名是因为后面 -cwd=? 会改变运行时的当前路径,所以写全路径 - " 加双引号是为了避免路径中包含空格 - let cmd = '"$(VIM_FILEDIR)/$(VIM_FILENOEXT)"' - elseif &ft == 'python' - let $PYTHONUNBUFFERED=1 " 关闭 python 缓存,实时看到输出 - let cmd = 'python "$(VIM_FILEPATH)"' - elseif &ft == 'javascript' - let cmd = 'node "$(VIM_FILEPATH)"' - elseif &ft == 'perl' - let cmd = 'perl "$(VIM_FILEPATH)"' - elseif &ft == 'ruby' - let cmd = 'ruby "$(VIM_FILEPATH)"' - elseif &ft == 'php' - let cmd = 'php "$(VIM_FILEPATH)"' - elseif &ft == 'lua' - let cmd = 'lua "$(VIM_FILEPATH)"' - elseif &ft == 'zsh' - let cmd = 'zsh "$(VIM_FILEPATH)"' - elseif &ft == 'ps1' - let cmd = 'powershell -file "$(VIM_FILEPATH)"' - elseif &ft == 'vbs' - let cmd = 'cscript -nologo "$(VIM_FILEPATH)"' - elseif &ft == 'sh' - let cmd = 'bash "$(VIM_FILEPATH)"' - else - return - endif - " Windows 下打开新的窗口 (-mode=4) 运行程序,其他系统在 quickfix 运行 - " -raw: 输出内容直接显示到 quickfix window 不匹配 errorformat - " -save=2: 保存所有改动过的文件 - " -cwd=$(VIM_FILEDIR): 运行初始化目录为文件所在目录 - if has('win32') || has('win64') - exec 'AsyncRun -cwd=$(VIM_FILEDIR) -raw -save=2 -mode=4 '. cmd - else - exec 'AsyncRun -cwd=$(VIM_FILEDIR) -raw -save=2 -mode=0 '. cmd - endif -endfunc - - - -" F2 在项目目录下 Grep 光标下单词,默认 C/C++/Py/Js ,扩展名自己扩充 -" 支持 rg/grep/findstr ,其他类型可以自己扩充 -" 不是在当前目录 grep,而是会去到当前文件所属的项目目录 project root -" 下面进行 grep,这样能方便的对相关项目进行搜索 -"---------------------------------------------------------------------- -if executable('rg') - noremap :AsyncRun! -cwd= rg -n --no-heading - \ --color never -g *.h -g *.c* -g *.py -g *.js -g *.vim - \ "" -elseif has('win32') || has('win64') - noremap :AsyncRun! -cwd= findstr /n /s /C:"" - \ "\%CD\%\*.h" "\%CD\%\*.c*" "\%CD\%\*.py" "\%CD\%\*.js" - \ "\%CD\%\*.vim" - \ -else - noremap :AsyncRun! -cwd= grep -n -s -R - \ --include='*.h' --include='*.c*' --include='*.py' - \ --include='*.js' --include='*.vim' - \ '' -endif - -" }}} -- cgit v1.2.3-70-g09d2