diff options
| author | Hsieh Chin Fan <pham@topo.tw> | 2024-07-31 01:16:59 +0800 |
|---|---|---|
| committer | Hsieh Chin Fan <pham@topo.tw> | 2024-07-31 01:16:59 +0800 |
| commit | f7756cae141f5922f3af233211c89a01e2df4cd4 (patch) | |
| tree | 93a470ca30fe2836cb9256fb3c8b4d653398ab88 | |
| parent | 8c3ba4ddd852cd1915d595ac1fcae3cb065e3ea4 (diff) | |
Update
| -rw-r--r-- | vim/init/keymaps.vim | 158 | ||||
| -rw-r--r-- | vim/mini.lua | 3 |
2 files changed, 48 insertions, 113 deletions
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 | |||
| 190 | " Delete mark | 190 | " Delete mark |
| 191 | function! DeleteMark(mark) | 191 | function! DeleteMark(mark) |
| 192 | let mark = nr2char(a:mark) | 192 | let mark = nr2char(a:mark) |
| 193 | if mark =~ '[a-z]' | 193 | if mark =~ '[a-Z]' |
| 194 | execute "delmarks " . mark | 194 | execute "delmarks " . mark |
| 195 | endif | 195 | endif |
| 196 | endfunction | 196 | endfunc |
| 197 | nnoremap dm :call DeleteMark(getchar())<CR> | 197 | nnoremap dm :call DeleteMark(getchar())<CR> |
| 198 | 198 | ||
| 199 | |||
| 200 | " Usage: z' to fold lines not near marks, use v:count to set bound | ||
| 201 | " For example: 15z' | ||
| 202 | autocmd BufEnter * let b:unfold_marks = 0 | ||
| 203 | let g:mark_bound = 5 | ||
| 204 | function! ToggleFoldForMarks(bound) | ||
| 205 | let bound = a:bound ? a:bound : g:mark_bound | ||
| 206 | if !b:unfold_marks | ||
| 207 | mkview | ||
| 208 | setlocal foldmethod=manual | ||
| 209 | norm! zEgg | ||
| 210 | |||
| 211 | let line_list = [] | ||
| 212 | for info in getmarklist(bufnr()) | ||
| 213 | if match(info.mark, "[a-z]") == 1 | ||
| 214 | call add(line_list, info.pos[1]) | ||
| 215 | endif | ||
| 216 | endfor | ||
| 217 | echo line_list | ||
| 218 | call uniq(sort(line_list, 'n')) | ||
| 219 | |||
| 220 | for line in line_list | ||
| 221 | let foldstart = line('.') | ||
| 222 | let line_upper = line - bound | ||
| 223 | let line_lower = line + bound | ||
| 224 | if foldstart < (line_upper - 1) | ||
| 225 | exe foldstart..","..(line_upper-1).." fold" | ||
| 226 | endif | ||
| 227 | " Jump to lower bound of lineer | ||
| 228 | exe (line_lower + 1) | ||
| 229 | endfor | ||
| 230 | if line('.') < line('$') | ||
| 231 | norm! zfG | ||
| 232 | endif | ||
| 233 | else | ||
| 234 | loadview | ||
| 235 | endif | ||
| 236 | let b:unfold_marks = !b:unfold_marks | ||
| 237 | endfunction | ||
| 238 | nnoremap <expr> z' ":\<C-u>call ToggleFoldForMarks(".v:count..")\<CR>" | ||
| 239 | |||
| 199 | "}}} | 240 | "}}} |
| 200 | " EDIT {{{ | 241 | " EDIT {{{ |
| 201 | 242 | ||
| @@ -547,13 +588,13 @@ inoremap ( ()<Left> | |||
| 547 | inoremap [ []<Left> | 588 | inoremap [ []<Left> |
| 548 | inoremap { {}<Left> | 589 | inoremap { {}<Left> |
| 549 | 590 | ||
| 550 | vnoremap ' <ESC>`<i'<ESC>`>la'<ESC> | ||
| 551 | vnoremap q <ESC>`<i"<ESC>`>la"<ESC> | 591 | vnoremap q <ESC>`<i"<ESC>`>la"<ESC> |
| 552 | vnoremap ( <ESC>`<i(<ESC>`>la)<ESC> | 592 | vnoremap ( <ESC>`<i(<ESC>`>la)<ESC> |
| 553 | vnoremap [ <ESC>`<i[<ESC>`>la]<ESC> | 593 | vnoremap [ <ESC>`<i[<ESC>`>la]<ESC> |
| 554 | vnoremap { <ESC>`<i{<ESC>`>la}<ESC> | 594 | vnoremap { <ESC>`<i{<ESC>`>la}<ESC> |
| 555 | vnoremap ` <ESC>`<i`<ESC>`>la`<ESC> | ||
| 556 | vnoremap Q <ESC>`<i「<ESC>`>la」<ESC> | 595 | vnoremap Q <ESC>`<i「<ESC>`>la」<ESC> |
| 596 | " vnoremap ' <ESC>`<i'<ESC>`>la'<ESC> | ||
| 597 | " vnoremap ` <ESC>`<i`<ESC>`>la`<ESC> | ||
| 557 | 598 | ||
| 558 | function! AddSpaceForSelection() | 599 | function! AddSpaceForSelection() |
| 559 | " If visual selection by lines, add empty space at top and bottom | 600 | " If visual selection by lines, add empty space at top and bottom |
| @@ -590,7 +631,7 @@ function! Redir(cmd) | |||
| 590 | let output = system(matchstr(a:cmd, '^!\zs.*')) | 631 | let output = system(matchstr(a:cmd, '^!\zs.*')) |
| 591 | else | 632 | else |
| 592 | redir => output | 633 | redir => output |
| 593 | execute a:cmd | 634 | try | execute a:cmd | catch | return | redir END | endtry |
| 594 | redir END | 635 | redir END |
| 595 | endif | 636 | endif |
| 596 | enew | 637 | enew |
| @@ -656,110 +697,3 @@ nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b | |||
| 656 | nnoremap <leader>dt :r !date +\%H:\%m<CR>A | 697 | nnoremap <leader>dt :r !date +\%H:\%m<CR>A |
| 657 | 698 | ||
| 658 | " }}} | 699 | " }}} |
| 659 | " Tmp: Compile {{{ | ||
| 660 | |||
| 661 | " 编译运行 C/C++ 项目 | ||
| 662 | " 详细见:http://www.skywind.me/blog/archives/2084 | ||
| 663 | "---------------------------------------------------------------------- | ||
| 664 | |||
| 665 | " 自动打开 quickfix window ,高度为 6 | ||
| 666 | let g:asyncrun_open = 6 | ||
| 667 | |||
| 668 | " 任务结束时候响铃提醒 | ||
| 669 | let g:asyncrun_bell = 1 | ||
| 670 | |||
| 671 | " 设置 F10 打开/关闭 Quickfix 窗口 | ||
| 672 | nnoremap <F10> :call asyncrun#quickfix_toggle(6)<CR> | ||
| 673 | |||
| 674 | " F9 编译 C/C++ 文件 | ||
| 675 | nnoremap <silent> <F9> :AsyncRun gcc -Wall -O2 "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" <CR> | ||
| 676 | |||
| 677 | " F5 运行文件 | ||
| 678 | nnoremap <silent> <F5> :call ExecuteFile()<CR> | ||
| 679 | |||
| 680 | " F7 编译项目 | ||
| 681 | nnoremap <silent> <F7> :AsyncRun -cwd=<root> make <CR> | ||
| 682 | |||
| 683 | " F8 运行项目 | ||
| 684 | nnoremap <silent> <F8> :AsyncRun -cwd=<root> -raw make run <CR> | ||
| 685 | |||
| 686 | " F6 测试项目 | ||
| 687 | nnoremap <silent> <F6> :AsyncRun -cwd=<root> -raw make test <CR> | ||
| 688 | |||
| 689 | " 更新 cmake | ||
| 690 | nnoremap <silent> <F4> :AsyncRun -cwd=<root> cmake . <CR> | ||
| 691 | |||
| 692 | " Windows 下支持直接打开新 cmd 窗口运行 | ||
| 693 | if has('win32') || has('win64') | ||
| 694 | nnoremap <silent> <F8> :AsyncRun -cwd=<root> -mode=4 make run <CR> | ||
| 695 | endif | ||
| 696 | |||
| 697 | |||
| 698 | " F5 运行当前文件:根据文件类型判断方法,并且输出到 quickfix 窗口 | ||
| 699 | "---------------------------------------------------------------------- | ||
| 700 | function! ExecuteFile() | ||
| 701 | let cmd = '' | ||
| 702 | if index(['c', 'cpp', 'rs', 'go'], &ft) >= 0 | ||
| 703 | " native 语言,把当前文件名去掉扩展名后作为可执行运行 | ||
| 704 | " 写全路径名是因为后面 -cwd=? 会改变运行时的当前路径,所以写全路径 | ||
| 705 | " 加双引号是为了避免路径中包含空格 | ||
| 706 | let cmd = '"$(VIM_FILEDIR)/$(VIM_FILENOEXT)"' | ||
| 707 | elseif &ft == 'python' | ||
| 708 | let $PYTHONUNBUFFERED=1 " 关闭 python 缓存,实时看到输出 | ||
| 709 | let cmd = 'python "$(VIM_FILEPATH)"' | ||
| 710 | elseif &ft == 'javascript' | ||
| 711 | let cmd = 'node "$(VIM_FILEPATH)"' | ||
| 712 | elseif &ft == 'perl' | ||
| 713 | let cmd = 'perl "$(VIM_FILEPATH)"' | ||
| 714 | elseif &ft == 'ruby' | ||
| 715 | let cmd = 'ruby "$(VIM_FILEPATH)"' | ||
| 716 | elseif &ft == 'php' | ||
| 717 | let cmd = 'php "$(VIM_FILEPATH)"' | ||
| 718 | elseif &ft == 'lua' | ||
| 719 | let cmd = 'lua "$(VIM_FILEPATH)"' | ||
| 720 | elseif &ft == 'zsh' | ||
| 721 | let cmd = 'zsh "$(VIM_FILEPATH)"' | ||
| 722 | elseif &ft == 'ps1' | ||
| 723 | let cmd = 'powershell -file "$(VIM_FILEPATH)"' | ||
| 724 | elseif &ft == 'vbs' | ||
| 725 | let cmd = 'cscript -nologo "$(VIM_FILEPATH)"' | ||
| 726 | elseif &ft == 'sh' | ||
| 727 | let cmd = 'bash "$(VIM_FILEPATH)"' | ||
| 728 | else | ||
| 729 | return | ||
| 730 | endif | ||
| 731 | " Windows 下打开新的窗口 (-mode=4) 运行程序,其他系统在 quickfix 运行 | ||
| 732 | " -raw: 输出内容直接显示到 quickfix window 不匹配 errorformat | ||
| 733 | " -save=2: 保存所有改动过的文件 | ||
| 734 | " -cwd=$(VIM_FILEDIR): 运行初始化目录为文件所在目录 | ||
| 735 | if has('win32') || has('win64') | ||
| 736 | exec 'AsyncRun -cwd=$(VIM_FILEDIR) -raw -save=2 -mode=4 '. cmd | ||
| 737 | else | ||
| 738 | exec 'AsyncRun -cwd=$(VIM_FILEDIR) -raw -save=2 -mode=0 '. cmd | ||
| 739 | endif | ||
| 740 | endfunc | ||
| 741 | |||
| 742 | |||
| 743 | |||
| 744 | " F2 在项目目录下 Grep 光标下单词,默认 C/C++/Py/Js ,扩展名自己扩充 | ||
| 745 | " 支持 rg/grep/findstr ,其他类型可以自己扩充 | ||
| 746 | " 不是在当前目录 grep,而是会去到当前文件所属的项目目录 project root | ||
| 747 | " 下面进行 grep,这样能方便的对相关项目进行搜索 | ||
| 748 | "---------------------------------------------------------------------- | ||
| 749 | if executable('rg') | ||
| 750 | noremap <silent><F2> :AsyncRun! -cwd=<root> rg -n --no-heading | ||
| 751 | \ --color never -g *.h -g *.c* -g *.py -g *.js -g *.vim | ||
| 752 | \ <C-R><C-W> "<root>" <CR> | ||
| 753 | elseif has('win32') || has('win64') | ||
| 754 | noremap <silent><F2> :AsyncRun! -cwd=<root> findstr /n /s /C:"<C-R><C-W>" | ||
| 755 | \ "\%CD\%\*.h" "\%CD\%\*.c*" "\%CD\%\*.py" "\%CD\%\*.js" | ||
| 756 | \ "\%CD\%\*.vim" | ||
| 757 | \ <CR> | ||
| 758 | else | ||
| 759 | noremap <silent><F2> :AsyncRun! -cwd=<root> grep -n -s -R <C-R><C-W> | ||
| 760 | \ --include='*.h' --include='*.c*' --include='*.py' | ||
| 761 | \ --include='*.js' --include='*.vim' | ||
| 762 | \ '<root>' <CR> | ||
| 763 | endif | ||
| 764 | |||
| 765 | " }}} | ||
diff --git a/vim/mini.lua b/vim/mini.lua index 7a5bcf8..01e0cf1 100644 --- a/vim/mini.lua +++ b/vim/mini.lua | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | -- vim: sw=2 ts=2 et foldmethod=marker foldmarker={{{,}}} foldlevel=0 | 1 | -- vim: sw=2 et foldmethod=marker foldmarker={{{,}}} foldlevel=0 |
| 2 | 2 | ||
| 3 | -- Ref: https://github.com/echasnovski/mini.nvim | 3 | -- Ref: https://github.com/echasnovski/mini.nvim |
| 4 | -- https://lazy.folke.io/spec | 4 | -- https://lazy.folke.io/spec |
| @@ -785,6 +785,7 @@ require("mini.misc").setup({ | |||
| 785 | }) | 785 | }) |
| 786 | vim.keymap.set( 'n', '<leader>Z', function() | 786 | vim.keymap.set( 'n', '<leader>Z', function() |
| 787 | zoom() | 787 | zoom() |
| 788 | vim.cmd("silent! call ToggleWinPadding()") | ||
| 788 | end, { buffer = bufnr, desc = 'zoom' }) | 789 | end, { buffer = bufnr, desc = 'zoom' }) |
| 789 | --}}} | 790 | --}}} |
| 790 | -- mini.extra {{{ | 791 | -- mini.extra {{{ |