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 /vim | |
parent | 8c3ba4ddd852cd1915d595ac1fcae3cb065e3ea4 (diff) |
Update
Diffstat (limited to 'vim')
-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 {{{ |