aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim
diff options
context:
space:
mode:
authorHsieh Chin Fan <pham@topo.tw>2024-07-31 01:16:59 +0800
committerHsieh Chin Fan <pham@topo.tw>2024-07-31 01:16:59 +0800
commitf7756cae141f5922f3af233211c89a01e2df4cd4 (patch)
tree93a470ca30fe2836cb9256fb3c8b4d653398ab88 /vim
parent8c3ba4ddd852cd1915d595ac1fcae3cb065e3ea4 (diff)
Update
Diffstat (limited to 'vim')
-rw-r--r--vim/init/keymaps.vim158
-rw-r--r--vim/mini.lua3
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
191function! DeleteMark(mark) 191function! 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
196endfunction 196endfunc
197nnoremap dm :call DeleteMark(getchar())<CR> 197nnoremap 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'
202autocmd BufEnter * let b:unfold_marks = 0
203let g:mark_bound = 5
204function! 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
237endfunction
238nnoremap <expr> z' ":\<C-u>call ToggleFoldForMarks(".v:count..")\<CR>"
239
199"}}} 240"}}}
200" EDIT {{{ 241" EDIT {{{
201 242
@@ -547,13 +588,13 @@ inoremap ( ()<Left>
547inoremap [ []<Left> 588inoremap [ []<Left>
548inoremap { {}<Left> 589inoremap { {}<Left>
549 590
550vnoremap ' <ESC>`<i'<ESC>`>la'<ESC>
551vnoremap q <ESC>`<i"<ESC>`>la"<ESC> 591vnoremap q <ESC>`<i"<ESC>`>la"<ESC>
552vnoremap ( <ESC>`<i(<ESC>`>la)<ESC> 592vnoremap ( <ESC>`<i(<ESC>`>la)<ESC>
553vnoremap [ <ESC>`<i[<ESC>`>la]<ESC> 593vnoremap [ <ESC>`<i[<ESC>`>la]<ESC>
554vnoremap { <ESC>`<i{<ESC>`>la}<ESC> 594vnoremap { <ESC>`<i{<ESC>`>la}<ESC>
555vnoremap ` <ESC>`<i`<ESC>`>la`<ESC>
556vnoremap Q <ESC>`<i「<ESC>`>la」<ESC> 595vnoremap Q <ESC>`<i「<ESC>`>la」<ESC>
596" vnoremap ' <ESC>`<i'<ESC>`>la'<ESC>
597" vnoremap ` <ESC>`<i`<ESC>`>la`<ESC>
557 598
558function! AddSpaceForSelection() 599function! 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
656nnoremap <leader>dt :r !date +\%H:\%m<CR>A 697nnoremap <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
666let g:asyncrun_open = 6
667
668" 任务结束时候响铃提醒
669let g:asyncrun_bell = 1
670
671" 设置 F10 打开/关闭 Quickfix 窗口
672nnoremap <F10> :call asyncrun#quickfix_toggle(6)<CR>
673
674" F9 编译 C/C++ 文件
675nnoremap <silent> <F9> :AsyncRun gcc -Wall -O2 "$(VIM_FILEPATH)" -o "$(VIM_FILEDIR)/$(VIM_FILENOEXT)" <CR>
676
677" F5 运行文件
678nnoremap <silent> <F5> :call ExecuteFile()<CR>
679
680" F7 编译项目
681nnoremap <silent> <F7> :AsyncRun -cwd=<root> make <CR>
682
683" F8 运行项目
684nnoremap <silent> <F8> :AsyncRun -cwd=<root> -raw make run <CR>
685
686" F6 测试项目
687nnoremap <silent> <F6> :AsyncRun -cwd=<root> -raw make test <CR>
688
689" 更新 cmake
690nnoremap <silent> <F4> :AsyncRun -cwd=<root> cmake . <CR>
691
692" Windows 下支持直接打开新 cmd 窗口运行
693if has('win32') || has('win64')
694 nnoremap <silent> <F8> :AsyncRun -cwd=<root> -mode=4 make run <CR>
695endif
696
697
698" F5 运行当前文件:根据文件类型判断方法,并且输出到 quickfix 窗口
699"----------------------------------------------------------------------
700function! 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
740endfunc
741
742
743
744" F2 在项目目录下 Grep 光标下单词,默认 C/C++/Py/Js ,扩展名自己扩充
745" 支持 rg/grep/findstr ,其他类型可以自己扩充
746" 不是在当前目录 grep,而是会去到当前文件所属的项目目录 project root
747" 下面进行 grep,这样能方便的对相关项目进行搜索
748"----------------------------------------------------------------------
749if 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>
753elseif 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>
758else
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>
763endif
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})
786vim.keymap.set( 'n', '<leader>Z', function() 786vim.keymap.set( 'n', '<leader>Z', function()
787 zoom() 787 zoom()
788 vim.cmd("silent! call ToggleWinPadding()")
788end, { buffer = bufnr, desc = 'zoom' }) 789end, { buffer = bufnr, desc = 'zoom' })
789--}}} 790--}}}
790-- mini.extra {{{ 791-- mini.extra {{{