├── .github └── workflows │ └── build.yml ├── .vimrc ├── LICENSE ├── README.en.md ├── README.md ├── autoload ├── cursorline.vim ├── editorconfig.vim ├── findkey.vim ├── gutter.vim ├── highlightcolor.vim ├── indentline.vim ├── mdbook.vim ├── multcursor.vim ├── obj.vim ├── plug.vim ├── precode.vim ├── rest.vim ├── smooth_scroll.vim └── termtask.vim ├── coc └── coc-settings.json ├── colors ├── badwolf.vim ├── codedark.vim ├── dracula.vim ├── gruvbox.vim ├── jellybeans.vim ├── monokai.vim ├── neodark.vim ├── nord.vim ├── onedark.vim ├── seoul256.vim ├── toast.vim └── tokyonight.vim ├── doc ├── build_map_doc.py ├── help.md ├── key.md ├── keybinding.txt └── map_key.txt ├── fonts ├── DejaVu.ttf └── Droid Sans Mono Nerd Font Complete.otf ├── ftplugin ├── c ├── cfg │ └── curl.vim ├── cmake │ └── comment.vim ├── cpp │ ├── comment.vim │ └── turn.vim ├── go │ ├── comment.vim │ └── test.vim ├── html │ └── preview.vim ├── javascript │ └── format.vim ├── make │ └── comment.vim ├── markdown │ ├── complete.vim │ ├── fold.vim │ ├── format.vim │ ├── ibus.vim │ ├── oper.vim │ └── preview.vim ├── nerdtree │ └── menu.vim ├── python │ ├── comment.vim │ └── test.vim ├── qf │ └── preview.vim ├── sh │ └── comment.vim ├── template │ ├── template.cpp │ └── template.h └── vim │ └── config.vim ├── init.vim ├── install.sh ├── install_without_sudo.sh ├── old ├── .vimrc.custom.config ├── .vimrc.custom.plugins ├── LICENSE ├── install_old.sh ├── install_to_user.sh ├── master.md └── update.sh ├── shell ├── coc_plug.sh ├── color.sh ├── cpp.sh ├── doc_zh.sh ├── go.sh ├── link.sh ├── nodejs.sh ├── nvim.sh ├── nvr.py ├── pack.sh ├── plug.sh ├── plug_create.sh ├── python.sh ├── rust.sh ├── self.sh ├── tool.sh ├── vim_compile.sh ├── webinstall.sh ├── websimple.sh └── win_install.bat ├── uninstall.sh ├── update.sh ├── vimrc-no-plug └── vimscript ├── README.md ├── apidoc ├── apidoc.vim ├── autoload │ └── apidoc.vim └── json │ └── apidoc.vim ├── branch.vim ├── coc.vim ├── ide.vim ├── recommend_plug.vim └── useful_vimscript.vim /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | on: 3 | push: #设置触发规则 4 | branches: 5 | - master 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout code #这部分是为了从github自动clone代码 11 | uses: actions/checkout@v4 12 | - name: Build And Run 13 | run: | 14 | ./install.sh 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 chenxuan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /autoload/cursorline.vim: -------------------------------------------------------------------------------- 1 | 2 | let s:last_oper=0 3 | func! cursorline#NextMove(seq) 4 | if mode() == 'c' && stridx('/?', getcmdtype()) < 0 5 | return a:seq 6 | endif 7 | silent! autocmd! slash 8 | set hlsearch 9 | map (cursor-trailer) trailer() 10 | let s:last_oper=1 11 | return a:seq.s:trailer() 12 | endfunc 13 | 14 | func! s:trailer() 15 | augroup slash 16 | autocmd! 17 | autocmd CursorMoved,CursorMovedI * set nohlsearch | autocmd! slash 18 | augroup END 19 | return "" 20 | endfunc 21 | 22 | func! cursorline#FindWord(seq,str) 23 | set hlsearch 24 | return a:seq."``" 25 | endfunc 26 | 27 | func! cursorline#VisualFind() 28 | set hlsearch 29 | norm! gv"sy 30 | let @/ = '\V' . substitute(escape(@s, a:cmdtype.'\'), '\n', '\\n', 'g') 31 | let @s=temp 32 | endfunc 33 | 34 | function! s:CursorHighlight() abort 35 | if !get(g:, 'cursorword_highlight', 1) | return | endif 36 | highlight CursorWord0 term=underline cterm=underline gui=underline 37 | redir => out 38 | silent! highlight CursorLine 39 | redir END 40 | let highlight = 'highlight CursorWord1 term=underline cterm=underline gui=underline' 41 | execute highlight matchstr(out, 'ctermbg=#\?\w\+') matchstr(out, 'guibg=#\?\w\+') 42 | endfunction 43 | 44 | 45 | function! cursorline#Matchadd(...) abort 46 | if get(g:,"cursorword_highlight",0)==0 47 | call s:CursorHighlight() 48 | let g:cursorword_highlight=1 49 | endif 50 | let s:alphabets = '^[\x00-\x7f\xb5\xc0-\xd6\xd8-\xf6\xf8-\u01bf\u01c4-\u02af\u0370-\u0373\u0376\u0377\u0386-\u0481\u048a-\u052f]\+$' 51 | let enable = get(b:, 'cursorword', get(g:, 'cursorword', 1)) && !has('vim_starting') 52 | if !enable && !get(w:, 'cursorword_match') | return | endif 53 | let i = (a:0 ? a:1 : mode() ==# 'i' || mode() ==# 'R') && col('.') > 1 54 | let line = getline('.') 55 | let linenr = line('.') 56 | let word = matchstr(line[:(col('.')-i-1)], '\k*$') . matchstr(line[(col('.')-i-1):], '^\k*')[1:] 57 | if get(w:, 'cursorword_state', []) ==# [ linenr, word, enable ] | return | endif 58 | let w:cursorword_state = [ linenr, word, enable ] 59 | if get(w:, 'cursorword_match') 60 | silent! call matchdelete(w:cursorword_id0) 61 | silent! call matchdelete(w:cursorword_id1) 62 | endif 63 | let w:cursorword_match = 0 64 | let w:cursorword_stop=0 65 | if !enable || word ==# '' || len(word) !=# strchars(word) && word !~# s:alphabets || len(word) > 1000 | return | endif 66 | let pattern = '\<' . escape(word, '~"\.^$[]*') . '\>' 67 | let w:cursorword_id0 = matchadd('CursorWord0', pattern, -100) 68 | let w:cursorword_id1 = matchadd('CursorWord' . &l:cursorline, '\%' . linenr . 'l' . pattern, -100) 69 | let w:cursorword_match = 1 70 | endfunction 71 | 72 | function! cursorline#CursorMoved() abort 73 | if get(w:, 'cursorword_match') 74 | silent! call matchdelete(w:cursorword_id0) 75 | silent! call matchdelete(w:cursorword_id1) 76 | endif 77 | let w:cursorword_match = 0 78 | call timer_stop(s:timer) 79 | let s:timer = timer_start(s:delay, "cursorline#Matchadd") 80 | endfunction 81 | 82 | function! cursorline#Able() abort 83 | let s:delay = get(g:, 'cursorline_delay', 50) 84 | if has('timers') && s:delay > 0 85 | let s:timer = 0 86 | augroup cursorline 87 | autocmd! 88 | autocmd CursorMoved * call cursorline#CursorMoved() 89 | augroup END 90 | else 91 | augroup cursorline 92 | autocmd! 93 | autocmd CursorMoved * call cursorline#Matchadd() 94 | augroup END 95 | endif 96 | endfunction 97 | 98 | function! cursorline#Disable() 99 | if get(w:, 'cursorword_match') 100 | silent! call matchdelete(w:cursorword_id0) 101 | silent! call matchdelete(w:cursorword_id1) 102 | endif 103 | let w:cursorword_match = 0 104 | let w:cursorword_stop=0 105 | 106 | silent! autocmd! cursorline 107 | endfunction 108 | 109 | function! cursorline#Toggle() 110 | let w:cursorword_stop=get(w:,"cursorword_stop",0) 111 | let s:delay = get(g:, 'cursorline_delay', 50) 112 | if w:cursorword_stop 113 | augroup cursorline 114 | autocmd! 115 | autocmd CursorMoved * call cursorline#Matchadd() 116 | augroup END 117 | let w:cursorword_stop=0 118 | else 119 | silent! autocmd! cursorline 120 | let w:cursorword_stop=1 121 | endif 122 | if !exists("w:cursorword_match")||w:cursorword_match==0 123 | call cursorline#Matchadd() 124 | endif 125 | endfunction 126 | -------------------------------------------------------------------------------- /autoload/editorconfig.vim: -------------------------------------------------------------------------------- 1 | "====================================================================== 2 | " 3 | " editorconfig 4 | " 5 | " Created by chenxuan on 2023-01-29 09:34 6 | " 7 | "====================================================================== 8 | 9 | let s:editorconfigdict={} 10 | let s:pathprefix="" 11 | 12 | func! s:FindConfig() 13 | return findfile(".editorconfig", getcwd() .';') 14 | endfunc 15 | 16 | func! s:FindRoot() 17 | let s:gitdir = finddir(".git", getcwd() .';') 18 | if !empty(s:gitdir) 19 | if s:gitdir==".git"|let s:gitdir=getcwd() 20 | else|let s:gitdir=strpart(s:gitdir,0,strridx(s:gitdir,"/")) 21 | endif 22 | return s:gitdir 23 | endif 24 | return "" 25 | endfunc 26 | 27 | func! s:SetOptions(key,val)abort 28 | let key=a:key|let val=a:val 29 | if key==?'indent_style' 30 | if val==?"tab" 31 | setlocal noexpandtab 32 | elseif val==?"space" 33 | setlocal expandtab 34 | else 35 | echom "unknown ".val 36 | endif 37 | elseif key==?'tab_width' 38 | execute ":setlocal tabstop=".val 39 | elseif key==?'indent_size' 40 | execute ":setlocal shiftwidth=".val 41 | execute ":setlocal softtabstop=".val 42 | elseif key==?'charset' 43 | execute ":setlocal fileencoding=".val 44 | endif 45 | endfunc 46 | 47 | func! s:AnalyseFile(file)abort 48 | if !filereadable(a:file) 49 | echohl WarningMsg|echo "cannot find .editorconfig file"|echohl NONE 50 | return 51 | endif 52 | let s:pathprefix=fnamemodify(a:file,":p:h") 53 | let nowkey=""|let nowdict={} 54 | for line in readfile(a:file) 55 | if line==""||line=~"^\\s*#" 56 | continue 57 | elseif line=~"^\\s*\\[" 58 | let list=matchlist(line,"^\\s*\\[\\(.*[^]]\\)") 59 | if len(list)<2||list[0]=='' 60 | continue 61 | endif 62 | if nowkey!=""&&len(nowdict)!=0 63 | let s:editorconfigdict[nowkey]=nowdict 64 | endif 65 | let nowkey=list[1]|let nowdict={} 66 | elseif line=~"^\\s*[a-zA-Z_]*" 67 | let list=matchlist(line,"^\\s*\\([0-9a-zA-Z_-]*\\)\\s*=\\s*\\([0-9a-zA-Z_-]*\\)") 68 | if len(list)<3||list[0]=='' 69 | continue 70 | endif 71 | let nowdict[list[1]]=list[2] 72 | else 73 | echom line." unknown config" 74 | endif 75 | endfor 76 | if nowkey!=""&&len(nowdict)!=0 77 | let s:editorconfigdict[nowkey]=nowdict 78 | endif 79 | endfunc 80 | 81 | func! s:Clear()abort 82 | silent! autocmd! EditorConfig 83 | let s:editorconfigdict={} 84 | let s:pathprefix="" 85 | endfunc 86 | 87 | func! editorconfig#Run()abort 88 | if s:pathprefix==""||stridx(expand('%:p:h'),s:pathprefix)==-1 89 | return 90 | endif 91 | for [key,val] in items(s:editorconfigdict) 92 | if expand('%')=~glob2regpat(key) 93 | for [k1,v1] in items(val) 94 | call s:SetOptions(k1,v1) 95 | endfor 96 | break 97 | endif 98 | endfor 99 | endfunc 100 | 101 | func! editorconfig#Able()abort 102 | call s:AnalyseFile(s:FindConfig()) 103 | if len(s:editorconfigdict)!=0 104 | augroup EditorConfig 105 | autocmd! 106 | autocmd BufReadPost * call editorconfig#Run() 107 | autocmd BufNewFile * call editorconfig#Run() 108 | augroup END 109 | echomsg "load success" 110 | else 111 | call s:Clear() 112 | endif 113 | endfunc 114 | 115 | func! editorconfig#Disable()abort 116 | call s:Clear() 117 | echo "clear success" 118 | endfunc 119 | 120 | func! editorconfig#EditconfigFile()abort 121 | let name=s:FindConfig()|let flag=0 122 | if name=="" 123 | let flag=1 124 | let temp=s:FindRoot()."/" 125 | if temp=="/"|let name=".editorconfig" 126 | else|let name=temp.".editorconfig" 127 | endif 128 | endif 129 | exec ":edit ".name 130 | if flag 131 | call append(line('.')-1, "# this is a example for editorconfig") 132 | call append(line('.')-1, "") 133 | call append(line('.')-1, "root = true") 134 | call append(line('.')-1, "") 135 | call append(line('.')-1, "[*]") 136 | call append(line('.')-1, "indent_style = tab") 137 | call append(line('.')-1, "tab_width = 4") 138 | endif 139 | endfunc 140 | -------------------------------------------------------------------------------- /autoload/findkey.vim: -------------------------------------------------------------------------------- 1 | "====================================================================== 2 | " 3 | " Created by chenxuan on 2023.1.2 4 | " 5 | "====================================================================== 6 | " 7 | let s:input='' 8 | let s:is_continue=1 9 | let s:last_change_file=[] 10 | let s:last_change_now=0 11 | let s:direct_file=0 12 | 13 | func! findkey#open_file(direct) abort 14 | if !exists("s:input")||len(s:input)==0 15 | echo "first find key first" 16 | return 17 | endif 18 | if !exists("s:last_change_file")||len(s:last_change_file)==0 19 | let s:last_change_file=[] 20 | echom execute(":verbose map ".s:input) 21 | let list=split(execute(":verbose map ".s:input."| verbose map! ".s:input,"silent"),'\n') 22 | for now in list 23 | let str=matchlist(now,'\~\?/\S* \(line\|行\) \d*') 24 | if len(str)==0 25 | continue 26 | endif 27 | let msg=split(str[0]) 28 | call add(s:last_change_file,{"file":msg[0],"line":msg[2]}) 29 | endfor 30 | let s:last_change_now=-1 31 | endif 32 | if len(s:last_change_file)==0 33 | echo "nofind" 34 | return 35 | endif 36 | if a:direct==1 37 | let s:last_change_now+=1 38 | if s:last_change_now>=len(s:last_change_file) 39 | let s:last_change_now=0 40 | endif 41 | else 42 | let s:last_change_now-=1 43 | if s:last_change_now<0 44 | let s:last_change_now=len(s:last_change_file)-1 45 | endif 46 | endif 47 | exec "edit".s:last_change_file[s:last_change_now]["file"] 48 | call cursor(s:last_change_file[s:last_change_now]["line"],0) 49 | exec "normal! zz" 50 | if exists("s:direct_file")&&s:direct_file 51 | redraw! 52 | endif 53 | endfunc 54 | 55 | func! CallBack(timer) 56 | if get(g:,"findkey_mode",1) 57 | let s:is_continue=0 58 | elseif s:is_continue==1 59 | return 60 | endif 61 | if s:direct_file 62 | call findkey#open_file(1) 63 | return 64 | endif 65 | " redraw! 66 | echo "detect key: ".s:input 67 | echohl WarningMsg 68 | if s:input!='' 69 | exec ":echo 'vis/nor/sel/oper model'|echohl NONE|verbose map ".s:input. 70 | \"|echohl WarningMsg|echo 'insert/command model'|verbose map! ".s:input. 71 | \"|echohl NONE" 72 | echo "" 73 | else 74 | echo 'empty input,enter exit' 75 | endif 76 | echohl NONE 77 | endfunc 78 | 79 | func! findkey#get_key_msg(direct) 80 | let s:input='' 81 | let s:last_change_file=[] 82 | let s:is_continue=1 83 | let s:direct_file=a:direct 84 | let first_extra_time=300 85 | 86 | if get(g:,"findkey_mode",1) 87 | echo 'key code detecting( to cancel)...' 88 | else 89 | echo 'key code detecting( to cancel, to ensure)...' 90 | endif 91 | 92 | while s:is_continue 93 | let timer=timer_start(&timeoutlen+first_extra_time,'CallBack') 94 | let temp=getchar() 95 | call timer_stop(timer) 96 | if type(temp)==1 97 | " too many left there if need,add self 98 | if temp=="\" 99 | let s:input=s:input."" 100 | elseif temp=="\" 101 | let s:input=s:input."" 102 | elseif temp=="\" 103 | let s:input=s:input."" 104 | elseif temp=="\" 105 | let s:input=s:input."" 106 | elseif temp=="\" 107 | let s:input=s:input."" 108 | elseif temp=="\" 109 | let s:input=s:input."" 110 | elseif temp=="\" 111 | if s:input[len(s:input)-1]=='>' 112 | let s:input=strpart(s:input,0,strridx(s:input,'<')) 113 | else 114 | let s:input=strpart(s:input,0,len(s:input)-1) 115 | endif 116 | endif 117 | elseif temp==13 118 | if !get(g:,"findkey_mode",1) 119 | let s:is_continue=0 120 | call CallBack(timer) 121 | return 122 | endif 123 | 124 | if s:is_continue 125 | let s:input=s:input."" 126 | endif 127 | elseif temp==27 128 | let s:is_continue=0 129 | echo "cancel operator" 130 | return 131 | elseif temp<27 132 | let s:input=s:input."" 133 | elseif temp<30&&temp>27 134 | let s:input=s:input."" 135 | elseif temp==char2nr(g:mapleader) 136 | let s:input=s:input."" 137 | elseif temp==32 138 | let s:input=s:input."" 139 | else 140 | let s:input=s:input . nr2char(temp) 141 | endif 142 | if s:is_continue 143 | redraw! 144 | echo 'get key:'.s:input 145 | endif 146 | let first_extra_time=0 147 | endwhile 148 | endfunc 149 | -------------------------------------------------------------------------------- /autoload/gutter.vim: -------------------------------------------------------------------------------- 1 | "====================================================================== 2 | " 3 | " gitguttersimple 4 | " 5 | " Created by chenxuan on 2022.12.18 6 | " 7 | "====================================================================== 8 | " 9 | " g:gitgutter_sign_able is if show sign,default 1 10 | " 11 | " g:gitgutter_highlight_able is if highlight diff,default 1 12 | 13 | let s:regex = '^@@ -\(\d\+\),\?\(\d*\) +\(\d\+\),\?\(\d*\) @@' 14 | let s:sign_id=0 15 | let s:sign_group_name= 'gutter' 16 | let b:buffer_gitgutter=[] 17 | let b:buffer_gitgutter_result=[] 18 | let b:buffer_gitgutter_highlight=[] 19 | let b:git_gutter_status=0 20 | 21 | func! gutter#GitGutterDiff() 22 | " judge if save 23 | if &modified 24 | if input("not save the buffer,save buffer?(y/n):")==?"y" 25 | write 26 | else 27 | echo "\nnot save buffer,exit the operator" 28 | return 29 | endif 30 | endif 31 | 32 | let now_line=line('.') 33 | if len(b:buffer_gitgutter)==0 34 | echo 'git gutter not open yet' 35 | return 36 | endif 37 | let file_real_path=resolve(expand('%:p')) 38 | let s:lines=system('git diff -U0 '.file_real_path) 39 | let s:list=split(s:lines,'\n') 40 | let result='' 41 | let i=0 42 | while i0 46 | let new_line = str2nr(matches[3]) 47 | let new_change = (matches[4] == '') ? 1 : str2nr(matches[4]) 48 | else 49 | let i+=1 50 | continue 51 | endif 52 | if new_line<=now_line&&new_change+new_line>=now_line 53 | " let result=s:line 54 | echohl GitGutterChange 55 | echo s:line 56 | echohl NONE 57 | 58 | let j=i+1 59 | while j0 63 | break 64 | endif 65 | 66 | " let result=result."\n".s:line 67 | if match(s:line,"^+")!=-1 68 | echohl GitGutterAdd 69 | elseif match(s:line,"^-")!=-1 70 | echohl GitGutterDelete 71 | else 72 | echohl GitGutterChange 73 | endif 74 | echo s:list[j] 75 | echohl NONE 76 | 77 | let j+=1 78 | endwhile 79 | return 80 | endif 81 | let i+=1 82 | endwhile 83 | echo "not match result" 84 | " echo result 85 | endfunc 86 | 87 | func! gutter#GitGutterRecover() 88 | " judge if save 89 | if &modified 90 | if input("not save the buffer,save buffer?(y/n):")==?"y" 91 | write 92 | else 93 | echo "\nnot save buffer,exit the operator" 94 | return 95 | endif 96 | endif 97 | 98 | let now_line=line('.') 99 | let file_real_path=resolve(expand('%:p')) 100 | let s:lines=system('git diff -U0 '.file_real_path) 101 | let s:list=split(s:lines,'\n') 102 | let result='' 103 | let i=0 104 | while i0 108 | let new_line = str2nr(matches[3]) 109 | let new_change = (matches[4] == '') ? 1 : str2nr(matches[4]) 110 | else 111 | let i+=1 112 | continue 113 | endif 114 | if new_line<=now_line&&new_change+new_line>=now_line 115 | if new_change>0 116 | call deletebufline(bufnr(),new_line,new_change+new_line-1) 117 | endif 118 | let add_list=[] 119 | let add_num=0 120 | if new_change!=0 121 | let add_num-=1 122 | endif 123 | 124 | let j=i+1 125 | while j0 129 | break 130 | endif 131 | 132 | if match(s:line,"^-")!=-1 133 | call add(add_list,s:line[1:-1]) 134 | else 135 | break 136 | endif 137 | 138 | let j+=1 139 | endwhile 140 | call append(new_line+add_num,add_list) 141 | write 142 | call gutter#GitGutterAble() 143 | return 144 | endif 145 | let i+=1 146 | endwhile 147 | echo "not match result" 148 | " echo result 149 | endfunc 150 | 151 | func! s:PlaceSign(new_line,new_change,old_line,old_change) 152 | let new_line=a:new_line 153 | let new_change=a:new_change 154 | let old_line=a:old_change 155 | let old_change=a:old_change 156 | let file_real_path=resolve(expand('%:p')) 157 | if new_change>old_change 158 | let i=new_change 159 | while i>0 160 | call sign_place(s:sign_id,s:sign_group_name,'gitadd',file_real_path,{'lnum':new_line+i-1,'priority':1}) 161 | let i-=1 162 | endwhile 163 | elseif new_change==old_change 164 | let i=new_change 165 | while i>0 166 | call sign_place(s:sign_id,s:sign_group_name,'gitchange',file_real_path,{'lnum':new_line+i-1,'priority':1}) 167 | let i-=1 168 | endwhile 169 | else 170 | let i=new_change==0?1:new_change 171 | while i>0 172 | call sign_place(s:sign_id,s:sign_group_name,'gitdelete',file_real_path,{'lnum':new_line+i-1,'priority':1}) 173 | let i-=1 174 | endwhile 175 | endif 176 | endfunc 177 | 178 | func! s:PlaceHl(new_line,new_change,old_line,old_change) 179 | let new_line=a:new_line 180 | let new_change=a:new_change 181 | let old_line=a:old_change 182 | let old_change=a:old_change 183 | let begin=new_line 184 | let end=new_line+new_change-1 185 | if new_change==0 186 | let end+=1 187 | endif 188 | while end-begin>=8 189 | let m=matchaddpos("DiffAdd",range(begin,end)) 190 | let begin+=8 191 | call add(b:buffer_gitgutter_highlight,m) 192 | endwhile 193 | if new_change>old_change 194 | let m=matchaddpos("DiffAdd",range(begin,end)) 195 | elseif new_change==old_change 196 | let m=matchaddpos("DiffChange",range(begin,end)) 197 | else 198 | let m=matchaddpos("DiffDelete",range(begin,end)) 199 | endif 200 | call add(b:buffer_gitgutter_highlight,m) 201 | endfunc 202 | 203 | func! gutter#GitGutterAble() 204 | " judge if save 205 | if &modified 206 | if input("not save the buffer,save buffer?(y/n):")==?"y" 207 | write 208 | else 209 | echo "\nnot save buffer,exit the operator" 210 | return 211 | endif 212 | endif 213 | " clear 214 | call s:ClearSign() 215 | call s:ClearHl() 216 | let b:buffer_gitgutter=[] 217 | let b:buffer_gitgutter_result=[] 218 | let b:buffer_gitgutter_highlight=[] 219 | " get show options 220 | let sign_show=get(g:,"gitgutter_sign_able",1) 221 | let hl_show=get(g:,"gitgutter_highlight_able",1) 222 | 223 | let g:gitgutter_status=get(g:,'gitgutter_status',0) 224 | if g:gitgutter_status==0 225 | let g:gitgutter_status=1 226 | call s:SignDefine() 227 | endif 228 | let file_real_path=resolve(expand('%:p')) 229 | let s:lines=system('git diff -U0 '.file_real_path.' | grep "^@@"') 230 | let s:list=split(s:lines,'\n') 231 | for s:line in s:list 232 | let matches = matchlist(s:line, s:regex) 233 | if len(matches)>0 234 | let old_line = str2nr(matches[1]) 235 | let old_change = (matches[2] == '') ? 1 : str2nr(matches[2]) 236 | let new_line = str2nr(matches[3]) 237 | let new_change = (matches[4] == '') ? 1 : str2nr(matches[4]) 238 | let b:buffer_gitgutter=add(b:buffer_gitgutter,new_line) 239 | let b:buffer_gitgutter_result=add(b:buffer_gitgutter_result,{ 240 | \"old_line":old_line, 241 | \"old_change":old_change, 242 | \"new_line":new_line, 243 | \"new_change":new_change, 244 | \}) 245 | else 246 | echohl WarningMsg 247 | echo "get git status wrong,please check exist .git dir and grep cmd is ok" 248 | echohl None 249 | return 250 | endif 251 | if sign_show 252 | call s:PlaceSign(new_line,new_change,old_line,old_change) 253 | endif 254 | if hl_show 255 | call s:PlaceHl(new_line,new_change,old_line,old_change) 256 | endif 257 | endfor 258 | 259 | augroup GitGutterCmd 260 | au! 261 | autocmd BufWritePost call gutter#GitGutterAble() 262 | augroup END 263 | 264 | let b:git_gutter_status=1 265 | endfunc 266 | 267 | func! gutter#GitGutterDisable() 268 | call s:ClearSign() 269 | call s:ClearHl() 270 | 271 | if exists("b:git_gutter_status")&&b:git_gutter_status 272 | silent! au! GitGutterCmd 273 | silent! augroup! GitGutterCmd 274 | else 275 | echo "gitgutter not open yet" 276 | endif 277 | 278 | let b:git_gutter_status=0 279 | endfunc 280 | 281 | func! FoldExpr() 282 | let b:expr_fold_num=get(b:,"expr_fold_num",0) 283 | if b:expr_fold_num>=len(b:buffer_gitgutter_result) 284 | return 1 285 | endif 286 | let temp=b:buffer_gitgutter_result[b:expr_fold_num] 287 | if v:lnum=b:buffer_gitgutter[-1] 359 | echo 'the last,again from first' 360 | call cursor(b:buffer_gitgutter[0],0) 361 | return 362 | else 363 | for i in b:buffer_gitgutter 364 | if i>a:now 365 | call cursor(i,0) 366 | return 367 | endif 368 | endfor 369 | endif 370 | elseif a:direct==0 371 | if a:now<=b:buffer_gitgutter[0] 372 | echo 'the first,again from last' 373 | call cursor(b:buffer_gitgutter[-1],0) 374 | return 375 | else 376 | let i=len(b:buffer_gitgutter)-1 377 | while i>=0 378 | if b:buffer_gitgutter[i] I 35 | silent! nunmap A 36 | let s:last_dict=s:match_dict 37 | let s:match_dict={} 38 | let s:able=0 39 | endfunc 40 | 41 | func! multcursor#Disable() 42 | for [key,val] in items(s:match_dict) 43 | silent! call matchdelete(s:match_dict[key]["hl"]) 44 | endfor 45 | silent! au! MultCursor 46 | silent! nunmap I 47 | silent! nunmap A 48 | let s:last_dict=s:match_dict 49 | let s:match_dict={} 50 | let s:able=0 51 | endfunc 52 | 53 | func! multcursor#Toggle() abort 54 | if !exists("s:last_dict") 55 | echo "open select before" 56 | return 57 | endif 58 | if s:able==1 59 | call multcursor#Disable() 60 | return 61 | endif 62 | let s:able=1 63 | call s:HlDefine() 64 | call s:InitCmd() 65 | let s:match_dict=s:last_dict 66 | for [key,val] in items(s:match_dict) 67 | let m=matchaddpos("MultCursorHl", [[key,val["col"],1]]) 68 | let s:match_dict[key]={"col":col('.'),"hl":m} 69 | endfor 70 | endfunc 71 | 72 | func! s:Init() 73 | let s:able=1 74 | let s:match_dict={} 75 | let s:last_dict={} 76 | call s:HlDefine() 77 | call s:InitCmd() 78 | endfunc 79 | 80 | func! multcursor#Choose() abort 81 | if !exists("s:able")||s:able==0 82 | call s:Init() 83 | endif 84 | let pos=line('.') 85 | if has_key(s:match_dict,pos) 86 | let temp=s:match_dict[pos]["col"] 87 | call matchdelete(s:match_dict[pos]["hl"]) 88 | unlet s:match_dict[pos] 89 | if temp==col('.') 90 | return 91 | endif 92 | endif 93 | let m=matchaddpos("MultCursorHl", [[line('.'),col('.'),1]]) 94 | let s:match_dict[pos]={"col":col('.'),"hl":m} 95 | endfunc 96 | 97 | 98 | func! s:InitCmd() 99 | nnoremap I i 100 | nnoremap A a 101 | augroup MultCursor 102 | au! 103 | autocmd BufDelete,BufLeave ++once call multcursor#Disable()|au! MultCursor 104 | autocmd InsertLeave ++once call multcursor#Oper()|au! MultCursor 105 | augroup END 106 | endfunc 107 | -------------------------------------------------------------------------------- /autoload/obj.vim: -------------------------------------------------------------------------------- 1 | " obj get for self 2 | 3 | func! obj#GetIndent(model) 4 | let model=a:model 5 | let str=matchstr(getline('.'),"^\\s*")|let line=line('.')|let i=line 6 | let begin=0|let end=line('.')-1 7 | while i>=0 8 | if len(str)>len(matchstr(getline(i),"^\\s*"))|let begin=i+model|break|endif 9 | let i-=1 10 | endwhile 11 | let i=line 12 | while ilen(matchstr(getline(i),"^\\s*"))|let end=i-model|break|endif 14 | let i+=1 15 | endwhile 16 | call cursor([begin,0]) 17 | execute "normal! V".(end-begin)."j" 18 | endfunc 19 | 20 | func! obj#GetSynchl(model) 21 | let temp=synstack(line('.'),col('.')) 22 | if len(temp)==0|return|endif|let hl=temp[-1] 23 | let begin=col('.')-1|let end=col('.')|let line=line('.') 24 | let list=synstack(line,begin) 25 | while(begin>=0&&len(list)>0&&list[-1]==hl) 26 | let list=synstack(line,begin)|let begin-=1 27 | endwhile 28 | let list=synstack(line,end) 29 | while(end<=col('$')&&len(list)>0&&list[-1]==hl) 30 | let list=synstack(line,end)|let end+=1 31 | endwhile 32 | if begin!=col('.')-1|call cursor([line, begin+2])|execute "normal! v".(end-begin-4)."l" 33 | else|call cursor(line, begin+1)|execute "normal! v".(end-begin-3)."l" 34 | endif 35 | endfunc 36 | 37 | func! obj#GetArgs(model) 38 | let model=a:model 39 | let line=line('.')|let col=col('.')|let i=col-1|let now=getline('.') 40 | let begin=-1|let end=-1|let pos0=-1|let pos1=-1 41 | let buket=0|let flag=0 42 | while i>0 43 | let temp=now[i]|let flag=0 44 | if temp==')'|let buket+=1|endif 45 | if temp=='('|let buket-=1|let flag=1|endif 46 | if (buket>0)||(buket==0&&flag)|let i-=1|continue|endif 47 | if temp=='('|| temp==','|let begin=temp|let pos0=i|break|endif 48 | let i-=1 49 | endwhile 50 | let i=col|let buket=0|let flag=0 51 | while i0)||(buket==0&&flag)|let i+=1|continue|endif 56 | if temp==')'|| temp==','|let end=temp|let pos1=i|break|endif 57 | let i+=1 58 | endwhile 59 | if model=='i' 60 | let pos0+=1|let pos1-=1 61 | else 62 | if begin=='('|let pos0+=1|else|let pos1-=1|endif 63 | endif 64 | call cursor([line,pos0+1]) 65 | let pos1-=pos0|echom end 66 | execute "normal! v".pos1."l" 67 | endfunc 68 | 69 | func! obj#GetBigWord(model) 70 | let begin=col('.')-1|let end=col('.')|let line=getline('.') 71 | while begin>0 72 | let temp=line[begin] 73 | if (temp>='a'&&temp<='z')||(temp>='0'&&temp<='9')||temp=='_'||temp=='-'|let begin-=1 74 | else|break|endif 75 | endwhile 76 | while end='a'&&temp<='z')||(temp>='0'&&temp<='9')||temp=='_'||temp=='-'|let end+=1 79 | else|break|endif 80 | endwhile 81 | call cursor([line('.'),begin+2]) 82 | execute "normal! v".(end-begin-2)."l" 83 | endfunc 84 | 85 | func! obj#GetAllObj(model,need) 86 | let need=a:need 87 | let begin=col('.')-1|let end=col('.')|let line=getline('.') 88 | while begin>0 89 | let temp=line[begin] 90 | if temp==need|break 91 | else|let begin-=1|endif 92 | endwhile 93 | while end".a:speed."j" 44 | else 45 | exec "normal! ".a:speed."\".a:speed."k" 46 | endif 47 | redraw 48 | let elapsed = s:get_ms_since(start) 49 | let snooze = float2nr(a:duration-elapsed) 50 | if snooze > 0 51 | exec "sleep ".snooze."m" 52 | endif 53 | endfor 54 | endfunction 55 | 56 | function! s:get_ms_since(time) 57 | let cost = split(reltimestr(reltime(a:time)), '\.') 58 | return str2nr(cost[0])*1000 + str2nr(cost[1])/1000.0 59 | endfunction 60 | 61 | -------------------------------------------------------------------------------- /autoload/termtask.vim: -------------------------------------------------------------------------------- 1 | "====================================================================== 2 | " 3 | " termtask 4 | " 5 | " Created by chenxuan on 2022.10.18 6 | " 7 | "====================================================================== 8 | 9 | let s:dictname={} 10 | let g:term_exit_code=0 11 | let s:term_fin_exec="" 12 | 13 | func! s:FindConfigWay() 14 | return findfile(".config.vim",getcwd().';') 15 | endfunc 16 | 17 | func! s:FindRoot() 18 | let temp = finddir(".git", getcwd() .';') 19 | if !empty(temp) 20 | if temp==".git" 21 | let temp=getcwd() 22 | else 23 | let temp=strpart(temp,0,strridx(temp,"/")) 24 | endif 25 | return temp 26 | endif 27 | return "" 28 | endfunc 29 | 30 | func! s:Workflow(dict) abort 31 | let dict=a:dict 32 | if !has_key(dict,'begin')||!has_key(dict,'next') 33 | echom 'define no ok' 34 | return 35 | endif 36 | if !has_key(s:dictname,dict['begin'])||!has_key(s:dictname,dict['next']) 37 | echoerr 'no such task' 38 | return 39 | endif 40 | let begin=s:dictname[dict['begin']]|let index=begin['index'] 41 | if get(begin,'quickfix',0)==0&&get(begin,'mode','')!='quickfix' 42 | let g:Term_project_task[index]['end_script']='' 43 | endif 44 | let g:Term_project_task[index]['next']=dict['next'] 45 | call s:Term_read(dict['begin']) 46 | return 47 | endfunc 48 | 49 | function! s:Term_read(name) 50 | let s:options={} 51 | let s:term_fin_exec="" 52 | let s:exist=0 53 | 54 | for s:task in g:Term_project_task 55 | if a:name!="" 56 | if !has_key(s:task,'name')||s:task['name']!=a:name 57 | continue 58 | endif 59 | endif 60 | 61 | let s:exist=1 62 | 63 | if has_key(s:task, 'mode') 64 | if s:task['mode']=='quickfix' 65 | let s:task['quickfix']=1 66 | elseif s:task['mode']=='term' 67 | let s:task['quickfix']=0 68 | elseif s:task['mode']=='workflow' 69 | call s:Workflow(s:task) 70 | return 71 | elseif s:task['mode']=='shell' 72 | if !has_key(s:task,'command') 73 | echom s:task['name'].' command is null' 74 | return 75 | endif 76 | echo system(s:task['command']) 77 | let g:term_exit_code=0 78 | return 79 | else 80 | echom "unknown task mode" 81 | return 82 | endif 83 | endif 84 | 85 | if !has_key(s:task,'command') 86 | echom s:task['name'].' command is null' 87 | return 88 | endif 89 | 90 | let s:path=expand('%:p:h') 91 | if has_key(s:task,'path') 92 | let s:path=s:task['path'] 93 | endif 94 | let s:options['cwd']=s:path 95 | 96 | if has_key(s:task,'pre_script')&&s:task['pre_script']!='' 97 | execute s:task['pre_script'] 98 | endif 99 | 100 | if has_key(s:task,'end_script') 101 | let g:asyncrun_exit=s:task['end_script'] 102 | else 103 | let g:asyncrun_exit="" 104 | endif 105 | 106 | if has_key(s:task,'close')&&s:task['close'] 107 | if s:task['close']==1 108 | let g:asyncrun_exit="cclose|" . g:asyncrun_exit 109 | elseif s:task['close']==2 110 | let g:asyncrun_exit="if g:asyncrun_code==0|cclose|endif|" . g:asyncrun_exit 111 | elseif s:task['close']==3 112 | let s:height=get(g:,"asyncrun_open",6) 113 | let g:asyncrun_open=0 114 | let g:asyncrun_exit="let g:asyncrun_open = ".s:height."|copen|" . g:asyncrun_exit 115 | endif 116 | endif 117 | 118 | if has_key(s:task, 'next')&&s:task['next']!='' 119 | let g:asyncrun_exit="if g:asyncrun_code==0|cclose|call termtask#Term_task_run('".s:task['next']."')|endif|" 120 | let s:term_fin_exec="if g:term_exit_code==0|call termtask#Term_task_run('".s:task['next']."')|endif" 121 | endif 122 | 123 | if has_key(s:task,'quickfix')&&s:task['quickfix'] 124 | 125 | if has_key(s:task,'type')&&s:task['type']=='tab' 126 | let s:options['pos']='tab' 127 | elseif has_key(s:task,'type')&&s:task['type']=='vsplit' 128 | let s:options['pos']='left' 129 | endif 130 | 131 | call asyncrun#run("",s:options,s:task['command']) 132 | return 133 | endif 134 | 135 | if has_key(s:task,'close') 136 | if s:task['close']==1 137 | let s:options['term_finish']='close' 138 | elseif s:task['close']==2 139 | let s:task['command']='bash -c "'.s:task['command'].' || bash"' 140 | let s:options['term_finish']='close' 141 | elseif s:task['close']==3 142 | let s:options['hidden']=1 143 | let s:options['term_finish']='open' 144 | endif 145 | endif 146 | 147 | if stridx(s:task['command'],';')!=-1&&get(s:task,'close',2)!=2 148 | let s:task['command']='bash -c "'.s:task['command'].'"' 149 | endif 150 | 151 | if has_key(s:task,'end_script') 152 | let s:options['exit_cb']="termtask#Term_Cb" 153 | if has('nvim') 154 | let s:options['on_exit']="termtask#Nvim_Term_Exit" 155 | endif 156 | let s:term_fin_exec=s:term_fin_exec.s:task['end_script'] 157 | endif 158 | 159 | if has('nvim') 160 | let g:nvim_term_open=1 161 | let Funcrun=function('termopen') 162 | 163 | if s:task['close']==1||s:task['close']==2 164 | unlet g:nvim_term_open 165 | endif 166 | else 167 | let Funcrun=function('term_start') 168 | endif 169 | 170 | if has_key(s:task,'type')&&s:task['type']=='tab' 171 | execute ':tabe' 172 | let s:options['curwin']=1 173 | call Funcrun(s:task['command'],s:options) 174 | elseif has_key(s:task,'type')&&s:task['type']=='vsplit' 175 | if has('nvim') 176 | vsplit 177 | enew 178 | endif 179 | vert call Funcrun(s:task['command'],s:options) 180 | else 181 | if has('nvim') 182 | split 183 | enew 184 | endif 185 | call Funcrun(s:task['command'],s:options) 186 | endif 187 | 188 | break 189 | endfor 190 | 191 | if !s:exist 192 | echo 'no this task name' 193 | endif 194 | 195 | endfunction 196 | 197 | function! termtask#Term_task_run(name) abort 198 | let s:dictname={}|let i=0|let temp=s:FindConfigWay() 199 | if filereadable(temp) 200 | execute ":source ". temp 201 | echo "load success" 202 | else 203 | echohl WarningMsg 204 | echo "no config file" 205 | echohl NONE 206 | return 207 | endif 208 | for s:task in g:Term_project_task 209 | if !has_key(s:task,'name')||s:task['name']=='' 210 | echoerr "task need name" 211 | return 212 | endif 213 | if has_key(s:task,'key')&&s:task['key']!='' 214 | execute ":nnoremap " . s:task['key'] . ' :call Term_read("' . s:task['name'] . '")' 215 | endif 216 | let s:dictname[s:task["name"]]=s:task|let s:dictname[s:task["name"]]["index"]=i 217 | let i+=1 218 | endfor 219 | if a:name!='' 220 | call s:Term_read(a:name) 221 | endif 222 | endfunction 223 | 224 | fun! termtask#Term_Cb(chan,msg) 225 | let g:term_exit_code=a:msg 226 | echom a:msg 227 | if s:term_fin_exec!='' 228 | exec s:term_fin_exec 229 | endif 230 | endfun 231 | 232 | fun! termtask#Nvim_Term_Exit(chan,msg,event) 233 | let g:term_exit_code=a:msg 234 | echom a:msg 235 | if s:term_fin_exec!='' 236 | exec s:term_fin_exec 237 | endif 238 | endfun 239 | 240 | " read diff config for diff project 241 | func! termtask#Term_config_edit() 242 | let config=s:FindConfigWay() 243 | if config!="" 244 | execute ":edit ".config 245 | else 246 | let temp=s:FindRoot() 247 | if temp!="" 248 | execute ":edit ".temp."/.config.vim" 249 | else 250 | edit .config.vim 251 | redraw 252 | echohl WarningMsg|echom "cannot not find .git dir,create config in pwd"|echohl NONE 253 | endif 254 | endif 255 | endfunc 256 | 257 | " read from git dir 258 | func! termtask#Term_get_dir() 259 | let root=s:FindRoot() 260 | return root==""?getcwd():root 261 | endfunc 262 | 263 | " get task list 264 | func! termtask#Term_task_list(A,C,P) 265 | let temp=s:FindConfigWay() 266 | if filereadable(temp) 267 | execute ":source ".temp 268 | else 269 | echohl WarningMsg|echo "no config file"|echohl NONE 270 | return 271 | endif 272 | 273 | let s:list=[] 274 | for s:task in g:Term_project_task 275 | if has_key(s:task,'name') 276 | let s:list=add(s:list,s:task['name']) 277 | endif 278 | endfor 279 | 280 | if len(a:A)!=0 281 | let temp=[] 282 | for task in s:list 283 | if match(task,"^".a:A)!=-1 284 | let temp=add(temp,task) 285 | endif 286 | endfor 287 | let s:list=temp 288 | endif 289 | return s:list 290 | endfunc 291 | 292 | " set cmd task 293 | func! termtask#Term_cmd_exec(mode) 294 | if a:mode=='v' 295 | norm! gv"sy 296 | else 297 | let @s=expand('') 298 | endif 299 | let s:cmd=get(g:,"term_cmd","") 300 | if s:cmd==""|echo "cmd no define"|return 301 | endif 302 | echo system(s:cmd.' "'.@s.'"') 303 | endfunc 304 | 305 | " set cmd popup 306 | func! termtask#Term_cmd_exec_popup(mode) 307 | if a:mode=='v' 308 | norm! gv"sy 309 | else 310 | let @s=expand('') 311 | endif 312 | let s:cmd=get(g:,"term_cmd","") 313 | if s:cmd==""|echo "cmd no define"|return|endif 314 | let result=system(s:cmd.' "'.@s.'"') 315 | if has('nvim')|echo result|return|endif 316 | let text=split(result,"\n") 317 | if result==""|let text="no message"|endif 318 | call popup_atcursor(text,{}) 319 | endfunc 320 | -------------------------------------------------------------------------------- /coc/coc-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "suggest.noselect": true, 3 | "coc.preferences.currentFunctionSymbolAutoUpdate": false, 4 | 5 | "sh.commandPath":"/usr/local/bin/bash-language-server", 6 | "python.pythonPath" : "/usr/bin/python3", 7 | "go.checkForUpdates": "disabled", 8 | "clangd.checkUpdates":false, 9 | "json.schemaDownload.enable": false, 10 | "list.insertMappings": { 11 | "":"do:togglemode" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /colors/dracula.vim: -------------------------------------------------------------------------------- 1 | " Dracula Theme v1.2.5 2 | " 3 | " https://github.com/zenorocha/dracula-theme 4 | " 5 | " Copyright 2016, All rights reserved 6 | " 7 | " Code licensed under the MIT license 8 | " http://zenorocha.mit-license.org 9 | " 10 | " @author Éverton Ribeiro 11 | " @author Zeno Rocha 12 | 13 | set background=dark 14 | highlight clear 15 | 16 | if exists("syntax_on") 17 | syntax reset 18 | endif 19 | 20 | let g:colors_name = "dracula" 21 | 22 | hi Cursor ctermfg=17 ctermbg=231 cterm=NONE guifg=#282a36 guibg=#f8f8f0 gui=NONE 23 | hi Visual ctermfg=NONE ctermbg=236 cterm=NONE guifg=NONE guibg=#44475a gui=NONE 24 | hi CursorLine ctermfg=NONE ctermbg=236 cterm=NONE guifg=NONE guibg=#3d3f49 gui=NONE 25 | hi CursorColumn ctermfg=NONE ctermbg=236 cterm=NONE guifg=NONE guibg=#3d3f49 gui=NONE 26 | hi ColorColumn ctermfg=NONE ctermbg=236 cterm=NONE guifg=NONE guibg=#3d3f49 gui=NONE 27 | hi LineNr ctermfg=246 ctermbg=236 cterm=NONE guifg=#909194 guibg=#3d3f49 gui=NONE 28 | hi VertSplit ctermfg=59 ctermbg=236 cterm=NONE guifg=#64666d guibg=#64666d gui=NONE 29 | hi MatchParen ctermfg=212 ctermbg=NONE cterm=underline guifg=#ff79c6 guibg=NONE gui=underline 30 | hi StatusLine ctermfg=231 ctermbg=236 cterm=bold guifg=#f8f8f2 guibg=#64666d gui=bold 31 | hi StatusLineNC ctermfg=231 ctermbg=236 cterm=NONE guifg=#f8f8f2 guibg=#64666d gui=NONE 32 | hi Pmenu ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 33 | hi PmenuSel ctermfg=NONE ctermbg=236 cterm=NONE guifg=NONE guibg=#44475a gui=NONE 34 | hi IncSearch ctermfg=17 ctermbg=228 cterm=NONE guifg=#282a36 guibg=#f1fa8c gui=NONE 35 | hi Search ctermfg=NONE ctermbg=NONE cterm=underline guifg=NONE guibg=NONE gui=underline 36 | hi Directory ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 37 | hi Folded ctermfg=61 ctermbg=235 cterm=NONE guifg=#6272a4 guibg=#282a36 gui=NONE 38 | hi Normal ctermfg=231 ctermbg=235 cterm=NONE guifg=#f8f8f2 guibg=#282a36 gui=NONE 39 | hi Boolean ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 40 | hi Character ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 41 | hi Comment ctermfg=61 ctermbg=NONE cterm=NONE guifg=#6272a4 guibg=NONE gui=NONE 42 | hi Conditional ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 43 | hi Constant ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 44 | hi Define ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 45 | hi DiffAdd ctermfg=231 ctermbg=64 cterm=bold guifg=#f8f8f2 guibg=#468410 gui=bold 46 | hi DiffDelete ctermfg=88 ctermbg=NONE cterm=NONE guifg=#8b080b guibg=NONE gui=NONE 47 | hi DiffChange ctermfg=231 ctermbg=23 cterm=NONE guifg=#f8f8f2 guibg=#243a5f gui=NONE 48 | hi DiffText ctermfg=231 ctermbg=24 cterm=bold guifg=#f8f8f2 guibg=#204a87 gui=bold 49 | hi ErrorMsg ctermfg=231 ctermbg=212 cterm=NONE guifg=#f8f8f0 guibg=#ff79c6 gui=NONE 50 | hi WarningMsg ctermfg=231 ctermbg=212 cterm=NONE guifg=#f8f8f0 guibg=#ff79c6 gui=NONE 51 | hi Float ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 52 | hi Function ctermfg=84 ctermbg=NONE cterm=NONE guifg=#50fa7b guibg=NONE gui=NONE 53 | hi Identifier ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=italic 54 | hi Keyword ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 55 | hi Label ctermfg=228 ctermbg=NONE cterm=NONE guifg=#f1fa8c guibg=NONE gui=NONE 56 | hi NonText ctermfg=231 ctermbg=235 cterm=NONE guifg=#525563 guibg=#282a36 gui=NONE 57 | hi Number ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 58 | hi Operator ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 59 | hi PreProc ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 60 | hi Special ctermfg=231 ctermbg=NONE cterm=NONE guifg=#f8f8f2 guibg=NONE gui=NONE 61 | hi SpecialKey ctermfg=231 ctermbg=235 cterm=NONE guifg=#525563 guibg=#282a36 gui=NONE 62 | hi Statement ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 63 | hi StorageClass ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=italic 64 | hi String ctermfg=228 ctermbg=NONE cterm=NONE guifg=#f1fa8c guibg=NONE gui=NONE 65 | hi Tag ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 66 | hi Title ctermfg=231 ctermbg=NONE cterm=bold guifg=#f8f8f2 guibg=NONE gui=bold 67 | hi Todo ctermfg=61 ctermbg=NONE cterm=inverse,bold guifg=#6272a4 guibg=NONE gui=inverse,bold 68 | hi Type ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 69 | hi Underlined ctermfg=NONE ctermbg=NONE cterm=underline guifg=NONE guibg=NONE gui=underline 70 | hi rubyClass ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 71 | hi rubyFunction ctermfg=84 ctermbg=NONE cterm=NONE guifg=#50fa7b guibg=NONE gui=NONE 72 | hi rubyInterpolationDelimiter ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 73 | hi rubySymbol ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 74 | hi rubyConstant ctermfg=81 ctermbg=NONE cterm=NONE guifg=#66d9ef guibg=NONE gui=italic 75 | hi rubyStringDelimiter ctermfg=228 ctermbg=NONE cterm=NONE guifg=#f1fa8c guibg=NONE gui=NONE 76 | hi rubyBlockParameter ctermfg=215 ctermbg=NONE cterm=NONE guifg=#ffb86c guibg=NONE gui=italic 77 | hi rubyInstanceVariable ctermfg=203 ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 78 | hi rubyInclude ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 79 | hi rubyGlobalVariable ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 80 | hi rubyRegexp ctermfg=228 ctermbg=NONE cterm=NONE guifg=#f1fa8c guibg=NONE gui=NONE 81 | hi rubyRegexpDelimiter ctermfg=228 ctermbg=NONE cterm=NONE guifg=#f1fa8c guibg=NONE gui=NONE 82 | hi rubyEscape ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 83 | hi rubyControl ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 84 | hi rubyClassVariable ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 85 | hi rubyOperator ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 86 | hi rubyException ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 87 | hi rubyPseudoVariable ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 88 | hi rubyRailsUserClass ctermfg=81 ctermbg=NONE cterm=NONE guifg=#66d9ef guibg=NONE gui=italic 89 | hi rubyRailsARAssociationMethod ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 90 | hi rubyRailsARMethod ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 91 | hi rubyRailsRenderMethod ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 92 | hi rubyRailsMethod ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 93 | hi erubyDelimiter ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 94 | hi erubyComment ctermfg=61 ctermbg=NONE cterm=NONE guifg=#6272a4 guibg=NONE gui=NONE 95 | hi erubyRailsMethod ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 96 | hi htmlTag ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 97 | hi htmlEndTag ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 98 | hi htmlTagName ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 99 | hi htmlArg ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 100 | hi htmlSpecialChar ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 101 | hi javaScriptFunction ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=italic 102 | hi javaScriptRailsFunction ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 103 | hi javaScriptBraces ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 104 | hi yamlKey ctermfg=212 ctermbg=NONE cterm=NONE guifg=#ff79c6 guibg=NONE gui=NONE 105 | hi yamlAnchor ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 106 | hi yamlAlias ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 107 | hi yamlDocumentHeader ctermfg=228 ctermbg=NONE cterm=NONE guifg=#f1fa8c guibg=NONE gui=NONE 108 | hi cssURL ctermfg=215 ctermbg=NONE cterm=NONE guifg=#ffb86c guibg=NONE gui=italic 109 | hi cssFunctionName ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 110 | hi cssColor ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 111 | hi cssPseudoClassId ctermfg=84 ctermbg=NONE cterm=NONE guifg=#50fa7b guibg=NONE gui=NONE 112 | hi cssClassName ctermfg=84 ctermbg=NONE cterm=NONE guifg=#50fa7b guibg=NONE gui=NONE 113 | hi cssValueLength ctermfg=141 ctermbg=NONE cterm=NONE guifg=#bd93f9 guibg=NONE gui=NONE 114 | hi cssCommonAttr ctermfg=81 ctermbg=NONE cterm=NONE guifg=#6be5fd guibg=NONE gui=NONE 115 | hi cssBraces ctermfg=NONE ctermbg=NONE cterm=NONE guifg=NONE guibg=NONE gui=NONE 116 | 117 | hi goMethod ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 118 | hi goType ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 119 | hi goBuiltins ctermfg=117 ctermbg=NONE cterm=NONE guifg=#8be9fd guibg=NONE gui=NONE 120 | 121 | -------------------------------------------------------------------------------- /colors/monokai.vim: -------------------------------------------------------------------------------- 1 | " File: monokai.vim 2 | " Maintainer: Crusoe Xia (crusoexia) 3 | " URL: https://github.com/crusoexia/vim-monokai 4 | " License: MIT 5 | " 6 | " The colour palette is from http://www.colourlovers.com/ 7 | " The original code is from https://github.com/w0ng/vim-hybrid 8 | " 9 | " Configuration: 10 | " 11 | " * Enable italic: 12 | " 13 | " let g:monokai_term_italic = 1 14 | " 15 | " Initialisation 16 | " -------------- 17 | 18 | if !has("gui_running") && &t_Co < 256 19 | finish 20 | endif 21 | 22 | if ! exists("g:monokai_term_italic") 23 | let g:monokai_term_italic = 0 24 | endif 25 | 26 | let g:monokai_termcolors = 256 " does not support 16 color term right now. 27 | 28 | set background=dark 29 | hi clear 30 | 31 | if exists("syntax_on") 32 | syntax reset 33 | endif 34 | 35 | let colors_name = "monokai" 36 | 37 | function! s:h(group, style) 38 | let s:ctermformat = "NONE" 39 | if g:monokai_term_italic == 0 && has_key(a:style, "format") 40 | let s:ctermformat = substitute(a:style.format, ",italic", "", "") 41 | let s:ctermformat = substitute(s:ctermformat, "italic,", "", "") 42 | let s:ctermformat = substitute(s:ctermformat, "italic", "", "") 43 | endif 44 | if g:monokai_termcolors == 16 45 | let l:ctermfg = (has_key(a:style, "fg") ? a:style.fg.cterm16 : "NONE") 46 | let l:ctermbg = (has_key(a:style, "bg") ? a:style.bg.cterm16 : "NONE") 47 | else 48 | let l:ctermfg = (has_key(a:style, "fg") ? a:style.fg.cterm : "NONE") 49 | let l:ctermbg = (has_key(a:style, "bg") ? a:style.bg.cterm : "NONE") 50 | end 51 | execute "highlight" a:group 52 | \ "guifg=" (has_key(a:style, "fg") ? a:style.fg.gui : "NONE") 53 | \ "guibg=" (has_key(a:style, "bg") ? a:style.bg.gui : "NONE") 54 | \ "guisp=" (has_key(a:style, "sp") ? a:style.sp.gui : "NONE") 55 | \ "gui=" (has_key(a:style, "format") && !empty(a:style["format"]) ? "NONE,".a:style.format : "NONE") 56 | \ "ctermfg=" . l:ctermfg 57 | \ "ctermbg=" . l:ctermbg 58 | \ "cterm=" (!empty(s:ctermformat) ? s:ctermformat : "NONE") 59 | endfunction 60 | 61 | " Palettes 62 | " -------- 63 | 64 | 65 | let s:white = { "gui": "#E8E8E3", "cterm": "252" } 66 | let s:black = { "gui": "#272822", "cterm": "234" } 67 | let s:lightblack = { "gui": "#2D2E27", "cterm": "235" } 68 | let s:lightblack2 = { "gui": "#383a3e", "cterm": "236" } 69 | let s:darkblack = { "gui": "#211F1C", "cterm": "233" } 70 | let s:grey = { "gui": "#8F908A", "cterm": "243" } 71 | let s:lightgrey = { "gui": "#575b61", "cterm": "237" } 72 | let s:darkgrey = { "gui": "#64645e", "cterm": "239" } 73 | let s:warmgrey = { "gui": "#75715E", "cterm": "59" } 74 | 75 | let s:pink = { "gui": "#F92772", "cterm": "197" } 76 | let s:green = { "gui": "#A6E22D", "cterm": "148" } 77 | let s:aqua = { "gui": "#66d9ef", "cterm": "81" } 78 | let s:yellow = { "gui": "#E6DB74", "cterm": "186" } 79 | let s:orange = { "gui": "#FD9720", "cterm": "208" } 80 | let s:purple = { "gui": "#ae81ff", "cterm": "141" } 81 | let s:red = { "gui": "#e73c50", "cterm": "196" } 82 | let s:darkred = { "gui": "#5f0000", "cterm": "52" } 83 | 84 | let s:addfg = { "gui": "#d7ffaf", "cterm": "193" } 85 | let s:addbg = { "gui": "#5f875f", "cterm": "65" } 86 | let s:delbg = { "gui": "#f75f5f", "cterm": "167" } 87 | let s:changefg = { "gui": "#d7d7ff", "cterm": "189" } 88 | let s:changebg = { "gui": "#5f5f87", "cterm": "60" } 89 | 90 | " Highlighting 91 | " ------------ 92 | 93 | " editor 94 | call s:h("Normal", { "fg": s:white, "bg": s:black }) 95 | call s:h("ColorColumn", { "bg": s:lightblack }) 96 | call s:h("CursorColumn", { "bg": s:lightblack2 }) 97 | call s:h("CursorLine", { "bg": s:lightblack2 }) 98 | call s:h("NonText", { "fg": s:lightgrey }) 99 | call s:h("StatusLine", { "fg": s:warmgrey, "bg": s:black, "format": "reverse" }) 100 | call s:h("StatusLineNC", { "fg": s:darkgrey, "bg": s:warmgrey, "format": "reverse" }) 101 | call s:h("TabLine", { "fg": s:white, "bg": s:darkblack, "format": "reverse" }) 102 | call s:h("Visual", { "bg": s:lightgrey }) 103 | call s:h("Search", { "fg": s:black, "bg": s:yellow }) 104 | call s:h("MatchParen", { "fg": s:black, "bg": s:purple }) 105 | call s:h("Question", { "fg": s:yellow }) 106 | call s:h("ModeMsg", { "fg": s:yellow }) 107 | call s:h("MoreMsg", { "fg": s:yellow }) 108 | call s:h("ErrorMsg", { "fg": s:black, "bg": s:red, "format": "standout" }) 109 | call s:h("WarningMsg", { "fg": s:red }) 110 | call s:h("VertSplit", { "fg": s:darkgrey, "bg": s:darkblack }) 111 | call s:h("LineNr", { "fg": s:grey, "bg": s:lightblack }) 112 | call s:h("CursorLineNr", { "fg": s:orange }) 113 | call s:h("SignColumn", { "bg": s:lightblack }) 114 | 115 | " misc 116 | call s:h("SpecialKey", { "fg": s:pink }) 117 | call s:h("Title", { "fg": s:yellow }) 118 | call s:h("Directory", { "fg": s:aqua }) 119 | 120 | " diff 121 | call s:h("DiffAdd", { "fg": s:addfg, "bg": s:addbg }) 122 | call s:h("DiffDelete", { "fg": s:black, "bg": s:delbg }) 123 | call s:h("DiffChange", { "fg": s:changefg, "bg": s:changebg }) 124 | call s:h("DiffText", { "fg": s:black, "bg": s:aqua }) 125 | 126 | " fold 127 | call s:h("Folded", { "fg": s:warmgrey, "bg": s:darkblack }) 128 | call s:h("FoldColumn", { "bg": s:darkblack }) 129 | " Incsearch" 130 | 131 | " popup menu 132 | call s:h("Pmenu", { "fg": s:lightblack, "bg": s:white }) 133 | call s:h("PmenuSel", { "fg": s:aqua, "bg": s:black, "format": "reverse,bold" }) 134 | call s:h("PmenuThumb", { "fg": s:lightblack, "bg": s:grey }) 135 | " PmenuSbar" 136 | 137 | " Generic Syntax Highlighting 138 | " --------------------------- 139 | 140 | call s:h("Constant", { "fg": s:purple }) 141 | call s:h("Number", { "fg": s:purple }) 142 | call s:h("Float", { "fg": s:purple }) 143 | call s:h("Boolean", { "fg": s:purple }) 144 | call s:h("Character", { "fg": s:yellow }) 145 | call s:h("String", { "fg": s:yellow }) 146 | 147 | call s:h("Type", { "fg": s:aqua }) 148 | call s:h("Structure", { "fg": s:aqua }) 149 | call s:h("StorageClass", { "fg": s:aqua }) 150 | call s:h("Typedef", { "fg": s:aqua }) 151 | 152 | call s:h("Identifier", { "fg": s:green }) 153 | call s:h("Function", { "fg": s:green }) 154 | 155 | call s:h("Statement", { "fg": s:pink }) 156 | call s:h("Operator", { "fg": s:pink }) 157 | call s:h("Label", { "fg": s:pink }) 158 | call s:h("Keyword", { "fg": s:aqua }) 159 | " Conditional" 160 | " Repeat" 161 | " Exception" 162 | 163 | call s:h("PreProc", { "fg": s:green }) 164 | call s:h("Include", { "fg": s:pink }) 165 | call s:h("Define", { "fg": s:pink }) 166 | call s:h("Macro", { "fg": s:green }) 167 | call s:h("PreCondit", { "fg": s:green }) 168 | 169 | call s:h("Special", { "fg": s:purple }) 170 | call s:h("SpecialChar", { "fg": s:pink }) 171 | call s:h("Delimiter", { "fg": s:pink }) 172 | call s:h("SpecialComment",{ "fg": s:aqua }) 173 | call s:h("Tag", { "fg": s:pink }) 174 | " Debug" 175 | 176 | call s:h("Todo", { "fg": s:orange, "format": "bold,italic" }) 177 | call s:h("Comment", { "fg": s:warmgrey, "format": "italic" }) 178 | 179 | call s:h("Underlined", { "fg": s:green }) 180 | call s:h("Ignore", {}) 181 | call s:h("Error", { "fg": s:red, "bg": s:darkred }) 182 | 183 | " NerdTree 184 | " -------- 185 | 186 | call s:h("NERDTreeOpenable", { "fg": s:yellow }) 187 | call s:h("NERDTreeClosable", { "fg": s:yellow }) 188 | call s:h("NERDTreeHelp", { "fg": s:yellow }) 189 | call s:h("NERDTreeBookmarksHeader", { "fg": s:pink }) 190 | call s:h("NERDTreeBookmarksLeader", { "fg": s:black }) 191 | call s:h("NERDTreeBookmarkName", { "fg": s:yellow }) 192 | call s:h("NERDTreeCWD", { "fg": s:pink }) 193 | call s:h("NERDTreeUp", { "fg": s:white }) 194 | call s:h("NERDTreeDirSlash", { "fg": s:grey }) 195 | call s:h("NERDTreeDir", { "fg": s:grey }) 196 | 197 | " Syntastic 198 | " --------- 199 | 200 | hi! link SyntasticErrorSign Error 201 | call s:h("SyntasticWarningSign", { "fg": s:lightblack, "bg": s:orange }) 202 | 203 | " Language highlight 204 | " ------------------ 205 | 206 | " Java properties 207 | call s:h("jpropertiesIdentifier", { "fg": s:pink }) 208 | 209 | " Vim command 210 | call s:h("vimCommand", { "fg": s:pink }) 211 | 212 | " Javascript 213 | call s:h("jsFuncName", { "fg": s:green }) 214 | call s:h("jsThis", { "fg": s:pink }) 215 | call s:h("jsFunctionKey", { "fg": s:green }) 216 | call s:h("jsPrototype", { "fg": s:aqua }) 217 | call s:h("jsExceptions", { "fg": s:aqua }) 218 | call s:h("jsFutureKeys", { "fg": s:aqua }) 219 | call s:h("jsBuiltins", { "fg": s:aqua }) 220 | call s:h("jsArgsObj", { "fg": s:aqua }) 221 | call s:h("jsStatic", { "fg": s:aqua }) 222 | call s:h("jsSuper", { "fg": s:aqua }) 223 | call s:h("jsFuncArgRest", { "fg": s:purple }) 224 | call s:h("jsFuncArgs", { "fg": s:orange }) 225 | call s:h("jsStorageClass", { "fg": s:aqua }) 226 | call s:h("jsDocTags", { "fg": s:aqua, "format": "italic" }) 227 | 228 | " Html 229 | call s:h("htmlTag", { "fg": s:white }) 230 | call s:h("htmlEndTag", { "fg": s:white }) 231 | call s:h("htmlTagName", { "fg": s:pink }) 232 | call s:h("htmlArg", { "fg": s:green }) 233 | call s:h("htmlSpecialChar", { "fg": s:purple }) 234 | 235 | " Xml 236 | call s:h("xmlTag", { "fg": s:pink }) 237 | call s:h("xmlEndTag", { "fg": s:pink }) 238 | call s:h("xmlTagName", { "fg": s:orange }) 239 | call s:h("xmlAttrib", { "fg": s:green }) 240 | 241 | " CSS 242 | call s:h("cssProp", { "fg": s:yellow }) 243 | call s:h("cssUIAttr", { "fg": s:yellow }) 244 | call s:h("cssFunctionName", { "fg": s:aqua }) 245 | call s:h("cssColor", { "fg": s:purple }) 246 | call s:h("cssPseudoClassId", { "fg": s:purple }) 247 | call s:h("cssClassName", { "fg": s:green }) 248 | call s:h("cssValueLength", { "fg": s:purple }) 249 | call s:h("cssCommonAttr", { "fg": s:pink }) 250 | call s:h("cssBraces" , { "fg": s:white }) 251 | call s:h("cssClassNameDot", { "fg": s:pink }) 252 | call s:h("cssURL", { "fg": s:orange, "format": "underline" }) 253 | 254 | " ruby 255 | call s:h("rubyInterpolationDelimiter", {}) 256 | call s:h("rubyInstanceVariable", {}) 257 | call s:h("rubyGlobalVariable", {}) 258 | call s:h("rubyClassVariable", {}) 259 | call s:h("rubyPseudoVariable", {}) 260 | call s:h("rubyFunction", { "fg": s:green }) 261 | call s:h("rubyStringDelimiter", { "fg": s:yellow }) 262 | call s:h("rubyRegexp", { "fg": s:yellow }) 263 | call s:h("rubyRegexpDelimiter", { "fg": s:yellow }) 264 | call s:h("rubySymbol", { "fg": s:purple }) 265 | call s:h("rubyEscape", { "fg": s:purple }) 266 | call s:h("rubyInclude", { "fg": s:pink }) 267 | call s:h("rubyOperator", { "fg": s:pink }) 268 | call s:h("rubyControl", { "fg": s:pink }) 269 | call s:h("rubyClass", { "fg": s:pink }) 270 | call s:h("rubyDefine", { "fg": s:pink }) 271 | call s:h("rubyException", { "fg": s:pink }) 272 | call s:h("rubyRailsARAssociationMethod",{ "fg": s:orange }) 273 | call s:h("rubyRailsARMethod", { "fg": s:orange }) 274 | call s:h("rubyRailsRenderMethod", { "fg": s:orange }) 275 | call s:h("rubyRailsMethod", { "fg": s:orange }) 276 | call s:h("rubyConstant", { "fg": s:aqua }) 277 | call s:h("rubyBlockArgument", { "fg": s:orange }) 278 | call s:h("rubyBlockParameter", { "fg": s:orange }) 279 | 280 | " eruby 281 | call s:h("erubyDelimiter", {}) 282 | call s:h("erubyRailsMethod", { "fg": s:aqua }) 283 | 284 | " c 285 | call s:h("cLabel", { "fg": s:pink }) 286 | call s:h("cStructure", { "fg": s:pink }) 287 | call s:h("cStorageClass", { "fg": s:pink }) 288 | call s:h("cInclude", { "fg": s:red }) 289 | call s:h("cDefine", { "fg": s:red }) 290 | -------------------------------------------------------------------------------- /colors/toast.vim: -------------------------------------------------------------------------------- 1 | " Vim color file Toast 2 | " Maintainer: [jsit] 3 | " Last Change: 2020 Oct 26 4 | " URL: https://github.com/jsit/toast.vim 5 | " Version: 0.2.4 6 | " Description: Toast! A colorful, medium-contrast theme with full Vim and Neovim 7 | " support, true color and 256-color support, and automatic light and dark 8 | " variants. Easy to read without frying your retinae. 9 | " 10 | " Toast is not meant to be a "color system" or anything fancy like that, 11 | " although it does operate within a few parameters to make its development 12 | " easier and to aim for some degree of theoretical color harmony. 13 | " 14 | " - All text has (or should have) a contrast ratio of at least 3:1, meeting WCAG 15 | " level A. (Level AA across the board makes the colors too drab for my taste, 16 | " but there will be an option for this in the future, because a11y is 17 | " important.) 18 | " - All hues are multiples of 15 degrees apart on the color wheel, because why 19 | " not. 20 | " - Within these parameters, saturation and luminance levels are chosen based on 21 | " what I think looks good while dogfooding the themes. 22 | " 23 | " Much of the basis for this code and approach comes from Chris Kempson's 24 | " venerable Tomorrow theme. 25 | 26 | " Grays {{{ 27 | 28 | if &background == "light" 29 | let s:white = ["#f4f3ef", 231] 30 | let s:black = ["#323434", 16] 31 | 32 | let s:lightgray = ["#eae8e1", 188] 33 | let s:mediumlightgray = ["#e4e2d8", 188] 34 | let s:mediumgray = ["#7f7757", 101] 35 | let s:mediumdarkgray = ["#4f4a36", 52] 36 | let s:darkgray = ["#423e2e", 16] 37 | 38 | let s:grayone=s:lightgray 39 | let s:graytwo=s:mediumlightgray 40 | let s:graythree=s:mediumdarkgray 41 | let s:grayfour=s:mediumdarkgray 42 | 43 | let s:fg=s:black 44 | let s:bg=s:white 45 | else " &background == 'dark' 46 | let s:white = ["#c3d2df", 188] 47 | let s:black = ["#17222b", 234] 48 | 49 | let s:lightgray = ["#b9cbda", 152] 50 | let s:mediumlightgray = ["#acc1d3", 146] 51 | let s:mediumgray = ["#547d9c", 242] 52 | let s:mediumdarkgray = ["#253846", 236] 53 | let s:darkgray = ["#1e2d38", 235] 54 | 55 | let s:grayone=s:darkgray 56 | let s:graytwo=s:mediumdarkgray 57 | let s:graythree=s:mediumlightgray 58 | let s:grayfour=s:lightgray 59 | 60 | let s:fg=s:white 61 | let s:bg=s:black 62 | endif 63 | 64 | let s:graymid=s:mediumgray 65 | 66 | " }}} 67 | 68 | " Colors {{{ 69 | 70 | " Terminal Colors {{{ 71 | if has('nvim') 72 | let g:terminal_color_1 = "#D12D00" 73 | let g:terminal_color_2 = "#427B00" 74 | let g:terminal_color_3 = "#B68200" 75 | let g:terminal_color_4 = "#006fd1" 76 | let g:terminal_color_5 = "#a53bce" 77 | let g:terminal_color_6 = "#119c97" 78 | let g:terminal_color_9 = "#E74D23" 79 | let g:terminal_color_10 = "#7dc030" 80 | let g:terminal_color_11 = "#ffc233" 81 | let g:terminal_color_12 = "#5aa2e0" 82 | let g:terminal_color_13 = "#b968d9" 83 | let g:terminal_color_14 = "#15c1bb" 84 | 85 | if &background == "light" 86 | let g:terminal_color_0 = "#323434" 87 | let g:terminal_color_7 = "#e4e2d8" 88 | let g:terminal_color_8 = "#4f4a36" 89 | let g:terminal_color_15 = "#f4f3ef" 90 | else " &background == 'dark' 91 | let g:terminal_color_0 = "#1e2d38" 92 | let g:terminal_color_7 = "#acc1d3" 93 | let g:terminal_color_8 = "#253846" 94 | let g:terminal_color_15 = "#b9cbda" 95 | endif 96 | else 97 | let g:terminal_ansi_colors = repeat([0], 16) 98 | let g:terminal_ansi_colors[1] = "#D12D00" 99 | let g:terminal_ansi_colors[2] = "#427B00" 100 | let g:terminal_ansi_colors[3] = "#B68200" 101 | let g:terminal_ansi_colors[4] = "#006fd1" 102 | let g:terminal_ansi_colors[5] = "#a53bce" 103 | let g:terminal_ansi_colors[6] = "#119c97" 104 | let g:terminal_ansi_colors[9] = "#E74D23" 105 | let g:terminal_ansi_colors[10] = "#7dc030" 106 | let g:terminal_ansi_colors[11] = "#ffc233" 107 | let g:terminal_ansi_colors[12] = "#5aa2e0" 108 | let g:terminal_ansi_colors[13] = "#b968d9" 109 | let g:terminal_ansi_colors[14] = "#15c1bb" 110 | 111 | if &background == "light" 112 | let g:terminal_ansi_colors[0] = "#323434" 113 | let g:terminal_ansi_colors[7] = "#e4e2d8" 114 | let g:terminal_ansi_colors[8] = "#4f4a36" 115 | let g:terminal_ansi_colors[15] = "#f4f3ef" 116 | else " &background == 'dark' 117 | let g:terminal_ansi_colors[0] = "#1e2d38" 118 | let g:terminal_ansi_colors[7] = "#acc1d3" 119 | let g:terminal_ansi_colors[8] = "#253846" 120 | let g:terminal_ansi_colors[15] = "#b9cbda" 121 | endif 122 | endif 123 | " }}} 124 | 125 | let s:darkyellow = ["#B68200", 136] 126 | let s:darkgreen = ["#427B00", 28] 127 | let s:darkcyan = ["#119c97", 36] 128 | let s:darkblue = ["#006fd1", 26] 129 | let s:darkmagenta = ["#a53bce", 128] 130 | let s:darkred = ["#D12D00", 160] 131 | let s:lightyellow = ["#ffc233", 214] 132 | let s:lightgreen = ["#7dc030", 106] 133 | let s:lightcyan = ["#15c1bb", 37] 134 | let s:lightblue = ["#5aa2e0", 74] 135 | let s:lightmagenta = ["#b968d9", 134] 136 | let s:lightred = ["#E74D23", 166] 137 | 138 | if &background == "light" 139 | let s:yellow = s:darkyellow 140 | let s:green = s:darkgreen 141 | let s:cyan = s:darkcyan 142 | let s:blue = s:darkblue 143 | let s:magenta = s:darkmagenta 144 | let s:red = s:darkred 145 | let s:altyellow = s:lightyellow 146 | let s:altgreen = s:lightgreen 147 | let s:altcyan = s:lightcyan 148 | let s:altblue = s:lightblue 149 | let s:altmagenta = s:lightmagenta 150 | let s:altred = s:lightred 151 | else " &background == 'dark' 152 | let s:yellow = s:lightyellow 153 | let s:green = s:lightgreen 154 | let s:cyan = s:lightcyan 155 | let s:blue = s:lightblue 156 | let s:magenta = s:lightmagenta 157 | let s:red = s:lightred 158 | let s:altyellow = s:darkyellow 159 | let s:altgreen = s:darkgreen 160 | let s:altcyan = s:darkcyan 161 | let s:altblue = s:darkblue 162 | let s:altmagenta = s:darkmagenta 163 | let s:altred = s:darkred 164 | endif 165 | 166 | " }}} 167 | 168 | " References {{{ 169 | 170 | let s:truered = s:red 171 | let s:truegreen = s:green 172 | let s:trueyellow = ["#ffc233", 214] 173 | let s:trueblue = s:blue 174 | let s:truemagenta = s:magenta 175 | let s:truecyan = s:cyan 176 | 177 | if &background == "light" 178 | let s:constant = s:red 179 | let s:identifier = s:yellow 180 | let s:statement = s:blue 181 | let s:preproc = s:magenta 182 | let s:type = s:green 183 | let s:special = s:cyan 184 | else " &background == 'dark' 185 | let s:constant = s:red 186 | let s:identifier = s:yellow 187 | let s:statement = s:cyan 188 | let s:preproc = s:magenta 189 | let s:special = s:green 190 | let s:type = s:blue 191 | endif 192 | 193 | let s:none = ["NONE", "NONE"] 194 | 195 | " }}} 196 | 197 | " }}} 198 | 199 | " 200 | " Everthing from this point forward can probably be ignored 201 | " 202 | 203 | " Setup {{{ 204 | 205 | hi clear 206 | syntax on 207 | 208 | let g:colors_name = "toast" 209 | 210 | if exists("syntax_on") 211 | syntax reset 212 | endif 213 | 214 | " }}} 215 | 216 | " Highlight shorthand {{{ 217 | " From chriskempson/vim-tomorrow-theme 218 | function! s:hl(...) 219 | if len(a:000) > 1 && len(a:2) > 0 220 | exec "hi " . a:1 . " guifg=" . a:2[0] . " ctermfg=" . a:2[1] 221 | endif 222 | if len(a:000) > 2 && len(a:3) > 0 223 | exec "hi " . a:1 . " guibg=" . a:3[0] . " ctermbg=" . a:3[1] 224 | endif 225 | if len(a:000) > 3 && a:4 != "" 226 | exec "hi " . a:1 . " gui=" . a:4 . " cterm=" . a:4 227 | endif 228 | endfunction 229 | " }}} 230 | 231 | " UI {{{ 232 | 233 | call s:hl("ColorColumn", s:none, s:none) 234 | call s:hl("CursorColumn", [], s:grayone) 235 | call s:hl("CursorLine", [], s:grayone, "NONE") 236 | call s:hl("Conceal", []) 237 | call s:hl("Cursor", s:none, s:none, "reverse") 238 | call s:hl("CursorIM", [], [], "") 239 | call s:hl("CursorLineNr", s:graymid, s:grayone, "NONE") 240 | call s:hl("Directory", s:blue) 241 | call s:hl("DiffAdd", s:green, s:white, "reverse") 242 | call s:hl("DiffDelete", s:red, s:white, "reverse") 243 | call s:hl("DiffChange", s:altmagenta, s:white, "reverse") 244 | call s:hl("DiffText", s:magenta, s:white, "reverse") 245 | exec "hi link EndOfBuffer NonText" 246 | call s:hl("ErrorMsg", s:white, s:truered) 247 | call s:hl("VertSplit", s:bg, s:graytwo, "reverse") 248 | call s:hl("Folded", s:none, s:grayone) 249 | call s:hl("FoldColumn", s:yellow, s:bg) 250 | call s:hl("SignColumn", s:none, s:bg) 251 | call s:hl("IncSearch", s:trueyellow, '', "reverse") 252 | call s:hl("LineNr", s:graymid) 253 | call s:hl("MatchParen", s:cyan, s:bg) 254 | call s:hl("ModeMsg", s:green) 255 | call s:hl("Error", s:truered, s:white, "reverse") 256 | call s:hl("Ignore", s:grayone) 257 | call s:hl("InfoPopup", s:fg, s:grayone) 258 | call s:hl("MoreMsg", s:green) 259 | call s:hl("NonText", s:graytwo) 260 | call s:hl("Normal", s:fg, s:bg) 261 | call s:hl("NvimInternalError", s:red, s:red) 262 | call s:hl("PMenu", s:graymid, s:grayone) 263 | call s:hl("PMenuSbar", s:fg, s:grayone) 264 | call s:hl("PMenuSel", s:fg, s:graytwo) 265 | call s:hl("PMenuThumb", s:fg, s:grayone) 266 | call s:hl("Question", s:green) 267 | call s:hl("RedrawDebugClear", s:fg, s:yellow) 268 | call s:hl("RedrawDebugComposed", s:fg, s:green) 269 | call s:hl("RedrawDebugRecompose", s:fg, s:red) 270 | call s:hl("Search", s:trueyellow, s:black, "reverse") 271 | call s:hl("SpecialKey", s:blue) 272 | call s:hl("SpellBad", s:truered, s:white, "reverse") 273 | call s:hl("SpellCap", s:truered, s:white, "reverse") 274 | call s:hl("SpellLocal", s:truered, s:white, "reverse") 275 | call s:hl("SpellRare", s:truered, s:white, "reverse") 276 | call s:hl("StatusLine", s:graymid, s:grayone, "reverse") 277 | call s:hl("StatusLineNC", s:grayone, s:graymid, "reverse,underline") 278 | call s:hl("StatusLineTerm", s:green, s:none, "reverse") 279 | call s:hl("StatusLineTermNC", s:green, s:none, "reverse") 280 | call s:hl("TabLine", s:graymid, s:grayone) 281 | call s:hl("TabLineFill", s:grayone, s:grayone) 282 | exec "hi TabLineSel gui='NONE'" 283 | call s:hl("Title", s:magenta) 284 | call s:hl("Todo", s:yellow, s:none, "reverse") 285 | call s:hl("ToolbarButton", s:fg, s:graythree, "NONE") 286 | call s:hl("ToolbarLine", "", s:grayone) 287 | exec "hi Underlined gui='underline'" 288 | call s:hl("Visual", [], s:graytwo) 289 | call s:hl("VisualNOS", s:graytwo) 290 | call s:hl("WarningMsg", s:red, s:none) 291 | call s:hl("WildMenu", s:green, s:grayone) 292 | 293 | " }}} 294 | 295 | " Group Names (:h group-name) {{{ 296 | 297 | call s:hl("Comment", s:graymid, "") 298 | 299 | call s:hl("Constant", s:constant) 300 | hi link String Constant 301 | hi link Character Constant 302 | hi link Number Constant 303 | hi link Boolean Constant 304 | hi link Float Constant 305 | 306 | call s:hl("Identifier", s:identifier, [], "NONE") 307 | hi link Function Identifier 308 | 309 | call s:hl("Statement", s:statement, "", "NONE") 310 | hi link Conditional Statement 311 | hi link Repeat Statement 312 | hi link Label Statement 313 | hi link Operator Statement 314 | hi link Keyword Statement 315 | hi link Exception Statement 316 | 317 | call s:hl("PreProc", s:preproc) 318 | hi link Include PreProc 319 | hi link Define PreProc 320 | hi link Macro PreProc 321 | hi link PreCondit PreProc 322 | 323 | call s:hl("Type", s:type, "", "NONE") 324 | hi link StorageClass Type 325 | hi link Structure Type 326 | hi link Typedef Type 327 | 328 | call s:hl("Special", s:special) 329 | hi link SpecialChar Special 330 | hi link Tag Special 331 | hi link Delimiter Special 332 | hi link SpecialComment Special 333 | hi link Debug Special 334 | 335 | " End Group Names }}} 336 | 337 | " ex: set tabstop=2 expandtab nolist foldmethod=marker: 338 | -------------------------------------------------------------------------------- /doc/build_map_doc.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # coding=utf-8 3 | # 此文件和解释文件都是通过GPT生成的😃 4 | 5 | import re 6 | 7 | # 定义正则表达式匹配所有map的语句,包括递归和非递归的情况 8 | map_pattern = re.compile(r'^\s*(i|n|v|x|s|o|c|l|t|a)?(nore)?map\s+(\S+)\s+(.*)') 9 | 10 | # 定义映射类型和其对应的模式描述 11 | mode_description = { 12 | 'map': '所有模式', 13 | 'imap': '插入模式', 14 | 'noremap': '所有模式(无递归)', 15 | 'inoremap': '插入模式(无递归)', 16 | 'nmap': '普通模式', 17 | 'nnoremap': '普通模式(无递归)', 18 | 'vmap': '可视模式', 19 | 'vnoremap': '可视模式(无递归)', 20 | 'xmap': '选择模式', 21 | 'xnoremap': '选择模式(无递归)', 22 | 'smap': '选择模式', 23 | 'snoremap': '选择模式(无递归)', 24 | 'omap': '操作符待定模式', 25 | 'onoremap': '操作符待定模式(无递归)', 26 | 'cmap': '命令行模式', 27 | 'cnoremap': '命令行模式(无递归)', 28 | 'lmap': '插入命令模式', 29 | 'lnoremap': '插入命令模式(无递归)', 30 | 'tmap': '终端模式', 31 | 'tnoremap': '终端模式(无递归)', 32 | 'amap': '所有模式', 33 | 'anoremap': '所有模式(无递归)', 34 | } 35 | 36 | # 读取vimrc文件内容 37 | with open('/home/chenxuan/vim-fast/.vimrc', 'r', encoding='utf-8') as file: 38 | vimrc_content = file.readlines() 39 | 40 | # 读取已存在的映射文件内容 41 | output_file_path = 'key_map.txt' 42 | try: 43 | with open(output_file_path, 'r', encoding='utf-8') as file: 44 | existing_mappings = file.read().splitlines() 45 | except FileNotFoundError: 46 | existing_mappings = [] 47 | 48 | # 将已有的映射转换为字典 {region+key: (mapping, description)} 49 | existing_mappings_dict = {} 50 | for line in existing_mappings: 51 | parts = line.split('\t\t') 52 | if len(parts) >= 4: 53 | region_key = parts[0] + parts[1] 54 | existing_mappings_dict[region_key] = (parts[2], parts[3]) 55 | 56 | # 用于存储新的映射结果 57 | new_mappings = [] 58 | 59 | # 遍历每一行,匹配并拆分 60 | for line in vimrc_content: 61 | match = map_pattern.match(line.strip()) 62 | if match: 63 | region_prefix = match.group(1) or '' 64 | nore = match.group(2) or '' 65 | region = region_prefix + nore + 'map' 66 | key = match.group(3) 67 | mapping = match.group(4) 68 | description = mode_description.get(region, '未知模式') 69 | 70 | # 构建唯一标识 71 | unique_key = region + key 72 | 73 | # 检查该映射是否已经存在 74 | if unique_key in existing_mappings_dict: 75 | # 如果存在但mapping不一样,替换这一行 76 | if existing_mappings_dict[unique_key][0] != mapping: 77 | existing_mappings_dict[unique_key] = (mapping, description) 78 | else: 79 | # 如果不存在,添加新的映射 80 | existing_mappings_dict[unique_key] = (mapping, description) 81 | 82 | # 将字典中的映射转换回列表形式 83 | final_mappings = [] 84 | for region_key, (mapping, description) in existing_mappings_dict.items(): 85 | # 拆分唯一标识回region和key 86 | region_match = re.match(r'^(i|n|v|x|s|o|c|l|t|a)?(nore)?map', region_key) 87 | if region_match: 88 | region = region_match.group(0) 89 | key = region_key[len(region):] 90 | final_mappings.append(f"{region}\t\t{key}\t\t{mapping}\t\t{description}\t\t") 91 | 92 | # 将结果写入文件 93 | with open(output_file_path, 'w', encoding='utf-8') as file: 94 | for line in final_mappings: 95 | file.write(line + '\n') 96 | 97 | print("处理完成,映射已更新并保存到output.txt文件中。") 98 | 99 | -------------------------------------------------------------------------------- /doc/help.md: -------------------------------------------------------------------------------- 1 | ## 说明 2 | 3 | 1. 以下操作为Vim内置,尽量不要修改 4 | 5 | 2. 自己配置的按键见[这里](./key.md) 6 | 7 | ## 插入模式 8 | 9 | | 快捷键 | 说明 | 10 | | ------- | --------------- | 11 | | `i` | 在光标处进入插入模式 | 12 | | `I` | 在行首进入插入模式 | 13 | | `a` | 在光标后进入插入模式 | 14 | | `A` | 在行尾进入插入模式 | 15 | | `o` | 在下一行插入新行并进入插入模式 | 16 | | `O` | 在上一行插入新行并进入插入模式 | 17 | | `gi` | 进入到上一次插入模式的位置 | 18 | | `` | 退出插入模式 | 19 | 20 | ## 缓存操作 21 | 22 | | 快捷键 | 说明 | 23 | | --------------- | ------------ | 24 | | `:e ` | 新建buffer打开文件 | 25 | | `:bp` | 切换到上一个buffer | 26 | | `:bn` | 切换到下一个buffer | 27 | | `:bd` | 删除当前buffer | 28 | 29 | ## 窗口操作 30 | 31 | | 快捷键 | 说明 | 32 | | ----------------- | ----------- | 33 | | `:sp ` | 横向切分窗口并打开文件 | 34 | | `:vsp ` | 竖向切分窗口并打开文件 | 35 | | `h` | 跳到左边的窗口 | 36 | | `j` | 跳到下边的窗口 | 37 | | `k` | 跳到上边的窗口 | 38 | | `l` | 跳到右边的窗口 | 39 | | `c` | 关闭当前窗口 | 40 | | `o` | 关闭其他窗口 | 41 | | `:only` | 关闭其他窗口 | 42 | 43 | ## 光标移动 44 | 45 | | 快捷键 | 说明 | 46 | | ------- | --------------------- | 47 | | `h` | 上下左右移动 | 48 | | `j` | 上下左右移动 | 49 | | `k` | 上下左右移动 | 50 | | `l` | 上下左右移动 | 51 | | `0` | 光标移动到行首 | 52 | | `^` | 跳到从行首开始第一个非空白字符 | 53 | | `$` | 光标移动到行尾 | 54 | | `` | 跳到上一个位置 | 55 | | `` | 跳到下一个位置 | 56 | | `` | 上一页 | 57 | | `` | 下一页 | 58 | | `` | 上移半屏 | 59 | | `` | 下移半屏 | 60 | | `H` | 调到屏幕顶上 | 61 | | `M` | 调到屏幕中间 | 62 | | `L` | 调到屏幕下方 | 63 | | `:n` | 跳到第n行 | 64 | | `w` | 跳到下一个单词开头(标点或空格分隔的单词) | 65 | | `W` | 跳到下一个单词开头(空格分隔的单词) | 66 | | `e` | 跳到下一个单词尾部(标点或空格分隔的单词) | 67 | | `E` | 跳到下一个单词尾部(空格分隔的单词) | 68 | | `b` | 上一个单词头(标点或空格分隔的单词) | 69 | | `B` | 上一个单词头(空格分隔的单词) | 70 | | `ge` | 上一个单词尾 | 71 | | `%` | 在配对符间移动, 可用于()、{}、[] | 72 | | `gg` | 到文件首 | 73 | | `G` | 到文件尾 | 74 | | `fx` | 跳转到下一个为x的字符 | 75 | | `Fx` | 跳转到上一个为x的字符 | 76 | | `tx` | 跳转到下一个为x的字符前 | 77 | | `Tx` | 跳转到上一个为x的字符前 | 78 | | `;` | 跳到下一个搜索的结果 | 79 | | `[[` | 跳转到函数开头 | 80 | | `]]` | 跳转到函数结尾 | 81 | 82 | ## 文本编辑 83 | 84 | | 快捷键 | 说明 | 85 | | -------------- | ------------------------------------- | 86 | | `r` | 替换当前字符 | 87 | | `R` | 进入替换模式,直至 ESC 离开 | 88 | | `s` | 替换字符(删除光标处字符,并进入插入模式,前可接数量) | 89 | | `S` | 替换行(删除当前行,并进入插入模式,前可接数量) | 90 | | `cc` | 改写当前行(删除当前行并进入插入模式),同 S | 91 | | `cw` | 改写光标开始处的当前单词 | 92 | | `ciw` | 改写光标所处的单词 | 93 | | `caw` | 改写光标所处的单词,并且包括前后空格(如果有的话) | 94 | | `ct,` | 改写到逗号 | 95 | | `c0` | 改写到行首 | 96 | | `c^` | 改写到行首(第一个非零字符) | 97 | | `c$` | 改写到行末 | 98 | | `C` | 改写到行末(同 c$) | 99 | | `ci"` | 改写双引号中的内容 | 100 | | `ci'` | 改写单引号中的内容 | 101 | | `ci)` | 改写小括号中的内容 | 102 | | `ci]` | 改写中括号中内容 | 103 | | `ci}` | 改写大括号中内容 | 104 | | `cit` | 改写 xml tag 中的内容 | 105 | | `cis` | 改写当前句子 | 106 | | `ciB` | 改写'{}'中的内容 | 107 | | `c2w` | 改写下两个单词 | 108 | | `ct(` | 改写到小括号前 | 109 | | `x` | 删除当前字符,前面可以接数字,3x代表删除三个字符 | 110 | | `X` | 向前删除字符 | 111 | | `dd` | 删除当前行 | 112 | | `d0` | 删除到行首 | 113 | | `d^` | 删除到行首(第一个非零字符) | 114 | | `d$` | 删除到行末 | 115 | | `D` | 删除到行末(同 d$) | 116 | | `dw` | 删除当前单词 | 117 | | `dt,` | 删除到逗号 | 118 | | `diw` | 删除光标所处的单词 | 119 | | `daw` | 删除光标所处的单词,并包含前后空格(如果有的话) | 120 | | `di"` | 删除双引号中的内容 | 121 | | `di'` | 删除单引号中的内容 | 122 | | `di)` | 删除小括号中的内容 | 123 | | `di]` | 删除中括号中内容 | 124 | | `di}` | 删除大括号中内容 | 125 | | `diB` | 删除'{}'中的内容 | 126 | | `dit` | 删除 xml tag 中的内容 | 127 | | `dis` | 删除当前句子 | 128 | | `d2w` | 删除下两个单词 | 129 | | `dt(` | 删除到小括号前 | 130 | | `dgg` | 删除到文件头部 | 131 | | `dG` | 删除到文件尾部 | 132 | | `d}` | 删除下一段 | 133 | | `d{` | 删除上一段 | 134 | | `u` | 撤销 | 135 | | `U` | 撤销整行操作 | 136 | | `CTRL-R` | 撤销上一次 u 命令 | 137 | | `J` | 连接若干行 | 138 | | `gJ` | 连接若干行,删除空白字符 | 139 | | `.` | 重复上一次操作 | 140 | | `~` | 交换大小写 | 141 | | `g~iw` | 替换当前单词的大小写 | 142 | | `gUiw` | 将单词转成大写 | 143 | | `guiw` | 将当前单词转成小写 | 144 | | `guu` | 全行转为小写 | 145 | | `gUU` | 全行转为大写 | 146 | | `gg=G` | 缩进整个文件 | 147 | | `=a{` | 缩进光标所在代码块 | 148 | | `=i{` | 缩进光标所在代码块,不缩进"{" | 149 | | `<<` | 减少缩进 | 150 | | `>>` | 增加缩进 | 151 | | `==` | 自动缩进 | 152 | | `CTRL-A` | 增加数字 | 153 | | `CTRL-X` | 减少数字 | 154 | | `p` | 粘贴到光标后 | 155 | | `P` | 粘贴到光标前 | 156 | | `v` | 开始标记 | 157 | | `y` | 复制标记内容 | 158 | | `V` | 开始按行标记 | 159 | | `CTRL-V` | 开始列标记 | 160 | | `y$` | 复制当前位置到本行结束的内容 | 161 | | `yy` | 复制当前行 | 162 | | `Y` | 复制当前行,同 yy | 163 | | `yt,` | 复制到逗号 | 164 | | `yiw` | 复制当前单词 | 165 | | `"+y` | 复制当前选中到系统剪切板 | 166 | | `3yy` | 复制光标下三行内容 | 167 | | `v0` | 选中当前位置到行首 | 168 | | `v$` | 选中当前位置到行末 | 169 | | `vt,` | 选中到逗号 | 170 | | `viw` | 选中当前单词 | 171 | | `vi)` | 选中小括号内的东西 | 172 | | `vi]` | 选中中括号内的东西 | 173 | | `viB` | 选中'{}'中的内容 | 174 | | `vis` | 选中句子中的东西 | 175 | | `gv` | 重新选择上一次选中的文字 | 176 | | `:set paste` | 允许粘贴模式(避免粘贴时自动缩进影响格式) | 177 | | `:set nopaste` | 禁止粘贴模式 | 178 | | `"?yy` | 复制当前行到寄存器 ? ,问号代表 0-9 的寄存器名称 | 179 | | `"?p` | 将寄存器 ? 的内容粘贴到光标后 | 180 | | `"?P` | 将寄存器 ? 的内容粘贴到光标前 | 181 | | `:registers` | 显示所有寄存器内容 | 182 | | `:[range]y` | 复制范围,比如 :20,30y 是复制20到30行,:10y 是复制第十行 | 183 | | `:[range]d` | 删除范围,比如 :20,30d 是删除20到30行,:10d 是删除第十行 | 184 | | `ddp` | 交换两行内容:先删除当前行复制到寄存器,并粘贴 | 185 | 186 | ## 文件操作 187 | 188 | | 快捷键 | 说明 | 189 | | -------------------- | ------------------- | 190 | | `:w` | 保存文件 | 191 | | `:w ` | 按名称保存文件 | 192 | | `ZZ` | 保存文件(如果有改动的话),并关闭窗口 | 193 | | `:e ` | 打开文件并编辑 | 194 | | `:saveas ` | 另存为文件 | 195 | | `:r ` | 读取文件并将内容插入到光标后 | 196 | | `:r !dir` | 将dir命令的输出捕获并插入到光标后 | 197 | | `:close` | 关闭文件 | 198 | | `:q` | 退出 | 199 | | `:q!` | 强制退出 | 200 | | `:wa` | 保存所有文件 | 201 | | `:cd ` | 切换Vim当前路径 | 202 | | `:new` | 打开一个新的窗口编辑新文件 | 203 | | `:enew` | 在当前窗口创建新文件 | 204 | | `:vnew` | 在左右切分的新窗口中编辑新文件 | 205 | | `:tabnew` | 在新的标签页中编辑新文件 | 206 | 207 | ## 使用外部程序 208 | 209 | | 快捷键 | 说明 | 210 | | ---------------- | ------------------- | 211 | | `!` | 告诉vim正在执行一个过滤操作 | 212 | | `!5Gsort` | 使用外部sort命令对1-5行文本排序 | 213 | | `!!` | 对当前行执行过滤命令 | 214 | | `!!date` | 用"date"的输出代替当前行 | 215 | 216 | ## 宏录制 217 | 218 | | 快捷键 | 说明 | 219 | | ----------- | -------------- | 220 | | `qa` | 开始录制名字为a的宏 | 221 | | `q` | 结束录制宏 | 222 | | `@a` | 播放名字为a的宏 | 223 | | `100@a` | 播放名字为a的宏100次 | 224 | | `:normal@a` | 播放名字为a的宏直到自动结束 | 225 | 226 | ## 实用命令 227 | 228 | | 快捷键 | 说明 | 229 | | -------------------- | ------------------------------- | 230 | | `/pattern` | 从光标处向文件尾搜索 pattern | 231 | | `?pattern` | 从光标处向文件头搜索 pattern | 232 | | `n` | 向同一方向执行上一次搜索 | 233 | | `N` | 向相反方向执行上一次搜索 | 234 | | `*` | 向前搜索光标下的单词 | 235 | | `#` | 向后搜索光标下的单词 | 236 | | `:s/p1/p2/g` | 替换当前行的p1为p2 | 237 | | `:%s/p1/p2/g` | 替换当前文件中的p1为p2 | 238 | | `:%s//p2/g` | 替换当前文件中的p1单词为p2 | 239 | | `:%s/p1/p2/gc` | 替换当前文件中的p1为p2,并且每处询问你是否替换 | 240 | | `:10,20s/p1/p2/g` | 将第10到20行中所有p1替换为p2 | 241 | | `:%s/1\\2\/3/123/g` | 将“1\2/3” 替换为 “123”(特殊字符使用反斜杠标注) | 242 | | `:%s/\r//g` | 删除 DOS 换行符 ^M | 243 | | `:g/^\s*$/d` | 删除空行 | 244 | | `:g/test/d` | 删除所有包含 test 的行 | 245 | | `:v/test/d` | 删除所有不包含 test 的行 | 246 | | `:%s/^/test/` | 在行首加入特定字符(也可以用宏录制来添加) | 247 | | `:%s/$/test/` | 在行尾加入特定字符(也可以用宏录制来添加) | 248 | | `:sort` | 排序 | 249 | | `:g/^\(.\+\)$\n\1/d` | 去除重复行(先排序) | 250 | | `:%s/^.\{10\}//` | 删除每行前10个字符 | 251 | | `:%s/.\{10\}$//` | 删除每行尾10个字符 | 252 | 253 | ## 帮助 254 | 255 | | 快捷键 | 说明 | 256 | | ---------------------- | ---------------- | 257 | | `h tutor` | 入门文档 | 258 | | `h quickref` | 快速帮助 | 259 | | `h index` | 查询Vim所有键盘命令定义 | 260 | | `h summary` | 帮助你更好的使用内置帮助系统 | 261 | | `h pattern.txt` | 正则表达式帮助 | 262 | | `h eval` | 脚本编写帮助 | 263 | | `h function-list` | 查看VimScript的函数列表 | 264 | | `h windows.txt` | 窗口使用帮助 | 265 | | `h tabpage.txt` | 标签页使用帮助 | 266 | | `h tips` | 查看Vim内置的常用技巧文档 | 267 | | `h quote` | 寄存器 | 268 | | `h autocommand-events` | 所有可能事件 | 269 | | `h write-plugin` | 编写插件 | 270 | 271 | ## 其他 272 | 273 | | 快捷键 | 说明 | 274 | | --------------------- | ---------------- | 275 | | `vim -u NONE -N` | 开启vim时不加载vimrc文件 | 276 | | `vimdiff file1 file2` | 显示文件差异 | 277 | | `vim -R filename` | 以只读方式打开(阅读模式) | 278 | -------------------------------------------------------------------------------- /doc/keybinding.txt: -------------------------------------------------------------------------------- 1 | *keybinding* The key binding for vim 2 | *keybinding* 3 | ============================================================================== 4 | CONTENTS *keybinding-contents* 5 | 6 | INTRO .......................................... |keybinding-intro| 7 | COMMANDS ....................................... |keybinding-commands| 8 | 9 | ============================================================================== 10 | INTRO *keybinding-intro* 11 | 12 | keybinding is a plugin that shows the key binding,(only use foe vim-fast) 13 | 14 | ============================================================================== 15 | COMMANDS *keybinding-commands* 16 | 17 | *key:-bind:,* 18 | leadef key ',' 19 | *key:buffer-next/last:n/p* 20 | change buffer 21 | *key:buffer-delete:d* 22 | delete now buffer 23 | *key:buffer-save:c-m,* 24 | buffer save 25 | *key:window-size-change:* 26 | 修改窗口大小 27 | *key:window-cursor-change:* 28 | 修改光标所在窗口 29 | *key:window-location-change:* 30 | 修改窗口布局 31 | *key:color-change:* 32 | 修改VIM主题 33 | *key:reload-vimrc:s* 34 | 重新加载.vimrc 35 | *key:plug-install:i* 36 | 插件安装 37 | *key:plug-clean:c* 38 | 清理无用插件 39 | *key:copy-system:y* 40 | 复制到系统粘贴板 41 | *key:paste-system:p* 42 | 从系统粘贴板粘贴 43 | *key:paste-copy:p* 44 | 粘贴复制内容 45 | *key:add-comment-user:c* 46 | 添加作者信息注释 47 | *key:up/down(insert):* 48 | 插入模式光标移动 49 | *key:right(insert):* 50 | 插入模式光标移动 51 | *key:term-inside:t* 52 | 垂直控制台 53 | *key:term-inside-space:T* 54 | 水平控制台 55 | *key:debug-open:d,F5* 56 | 打开调试 57 | *key:debug-break:F6* 58 | 设置断点 59 | *key:debug-next:F7* 60 | 调试下一步 61 | *key:debug-step:F8* 62 | 调试进入 63 | *key:coc-goto-define:u,gd* 64 | 去到定义 65 | *key:coc-goto-implementation:gi* 66 | 去到虚函数引用 67 | *key:coc-goto-type-define:U,gD,* 68 | 去到类型定义 69 | *key:coc-goto-refence:gr* 70 | 引用列表 71 | *key:coc-goto-tag:j* 72 | tag列表 73 | *key:coc-rename:r* 74 | 重命名 75 | *key:coc-refactor:r* 76 | 高级重命名 77 | *key:coc-fix:qq* 78 | 快速修复 79 | *key:coc-wrong-list:w,=w* 80 | 错误列表 81 | *key:coc-wrong-next/last:[w,]w* 82 | 上/下一个错误 83 | *key:coc-code-action:a* 84 | lsp的action 85 | *key:coc-help-current:K* 86 | 当前光标的help 87 | *key:coc-mouse-open/close:=c,\c* 88 | coc阅读模式鼠标配置 89 | *key:coc-format-code:f/:Format* 90 | 格式化代码 91 | *key:coc-config:c* 92 | coc配置 93 | *key:coc-list-exten:l* 94 | coc安装插件列表 95 | *key:leaderf-last:l* 96 | 上一次leaderf搜索 97 | *key:leaderf-find-word:a* 98 | 查找单词 99 | *key:leaderf-find-select-word:a* 100 | 查找选中单词 101 | *key:leaderf-find-current-word:A* 102 | 查找光标单词 103 | *key:leaderf-recent-file:F* 104 | 查找最近文件 105 | *key:leaderf-line:/* 106 | 在当前buffer查找 107 | *key:leaderf-function-list:t* 108 | 查找当前buffer函数 109 | *key:leaderf-function-list-all:T* 110 | 查找所有buffer函数 111 | *key:leaderf-help:h* 112 | 查找帮助 113 | *key:leaderf-help-key:H* 114 | 查找快捷键帮助 115 | *key:leaderf-find-file:f* 116 | 查找文件 117 | *key:leaderf-jump-tags:j* 118 | 跳转当前缓冲区tag 119 | *key:leaderf-jump-tags:J* 120 | 跳转所有缓冲区tags 121 | *key:leaderf-quickfix:Q* 122 | quickfix搜索 123 | *key:leaderf-buffer:b* 124 | 查找buffer 125 | *key:leaderf-dir-root-open/close:=l,\l* 126 | 开启leaderf在根目录下 127 | *key:easy-motion:w* 128 | 快速移动光标(按单词) 129 | *key:easy-motion-f:f* 130 | 快速移动光标(按字母) 131 | *key:easy-motion-line:l/k* 132 | 快速移动光标(按行) 133 | *key:git-file:g* 134 | 当前文件commit图 135 | *key:git-all:G* 136 | 仓库commit图 137 | *key:termtask-project-config:c* 138 | 项目配置文件打开 139 | *key:termtask-project-project:C* 140 | 项目运行 141 | *key:async-find-word:A* 142 | ack搜索单词 143 | *key:async-run:;* 144 | 异步命令 145 | *key:tabular-aligen:T* 146 | 文本对齐 147 | *key:nerdtree-file-tree:n* 148 | 文件目录打开 149 | *key:comment-code:gcc* 150 | 快速注释 151 | *key:quickfix-open/delete:=q,\q* 152 | quickfix打开/关闭 153 | *key:quickfix-next/last:[q,]q* 154 | quickfix跳转 155 | *key:mouse-open/close:=m,\m* 156 | 鼠标打开/关闭 157 | *key:spell-open/close:=s,\s* 158 | 拼写检查打开/关闭 159 | *key:indentline-open/close:=i,\i* 160 | 缩进线打开/关闭 161 | *key:fold-open/close:=z,\z* 162 | 折叠打开/关闭 163 | *key:fold-open/close:=o,\o* 164 | 局部折叠打开/关闭 165 | *key:hlsearch-open/close:=h,\h* 166 | 高亮打开/关闭 167 | *key:delete-space-endline:d* 168 | 删除行尾空格 169 | *key:name-quick(insert):;n* 170 | 姓名快速输入 171 | *key:email-quick(insert):;e* 172 | 邮箱快速输入 173 | *key:indent-buffer:=e* 174 | 整个buffer缩进 175 | *key:indent-buffer:vae* 176 | 整个buffer选中 177 | *key:wrap-line-open/close:=r,\r* 178 | 折行打开/关闭 179 | *key:linenumber-open/close:=n,\n* 180 | 绝对行号打开/关闭 181 | *key:recent-close-buffer:q* 182 | 最近关闭的buffer 183 | *key:goto-link:gl,gx* 184 | 打开光标所在的链接 185 | *key:gitgutter-open/close/next/last:=g,\g,]g,[g,-g* 186 | 文件git更改打开/关闭/下一个不同/上一个不同/恢复差异 187 | *key:cursorline-open/close/toggle:=f,\f,-f* 188 | 高亮光标所在单词/关闭高亮/固定高亮 189 | *key:findkey-open/close/toggle:h,-h,[h,]h* 190 | 搜索按键绑定/直接跳转按键绑定/上一个/下一个 191 | *key:multiple-cursor:s,-s* 192 | 多光标操作打开/关闭 193 | ============================================================================== 194 | vim:tw=78:sw=4:ts=8:ft=help:norl:noet: 195 | -------------------------------------------------------------------------------- /fonts/DejaVu.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenxuan520/vim-fast/2fe55ea3168abb42d88a0bdbc052134a22b58916/fonts/DejaVu.ttf -------------------------------------------------------------------------------- /fonts/Droid Sans Mono Nerd Font Complete.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenxuan520/vim-fast/2fe55ea3168abb42d88a0bdbc052134a22b58916/fonts/Droid Sans Mono Nerd Font Complete.otf -------------------------------------------------------------------------------- /ftplugin/c: -------------------------------------------------------------------------------- 1 | ./cpp -------------------------------------------------------------------------------- /ftplugin/cfg/curl.vim: -------------------------------------------------------------------------------- 1 | 2 | if match(expand('%'),"curl")==-1 3 | finish 4 | endif 5 | 6 | nnoremap xx :w:vert term curl -K =expand('%:p') 7 | -------------------------------------------------------------------------------- /ftplugin/cmake/comment.vim: -------------------------------------------------------------------------------- 1 | " set preparecode in buffernew 2 | func! VimFastSetPreCode() 3 | let s:version=system("cmake --version| grep version|awk '{print $3}'") 4 | let s:version = substitute(s:version, '[\r\n]', '', '') 5 | call append(line(".")-1,"# cmake version") 6 | call append(line(".")-1,"cmake_minimum_required(VERSION " . s:version .")") 7 | call append(line(".")-1,"# project name") 8 | call append(line(".")-1,"project(" . split(expand('%:p'),'/')[-2] . ")") 9 | call append(line(".")-1,"") 10 | call append(line(".")-1,"# set c++ version") 11 | call append(line(".")-1,"set(CMAKE_CXX_STANDARD 17)") 12 | call append(line(".")-1,"") 13 | call append(line(".")-1,"# include dir add,split by") 14 | call append(line(".")-1,"# include_directories()") 15 | call append(line(".")-1,"") 16 | call append(line(".")-1,"# link dir add") 17 | call append(line(".")-1,"# link_directories()") 18 | call append(line(".")-1,"# link_libraries(-lpthread)") 19 | call append(line(".")-1,"") 20 | call append(line(".")-1,"# add source") 21 | call append(line(".")-1,"aux_source_directory(./src DIR_SRCS)") 22 | call append(line(".")-1,"add_executable(" . split(expand('%:p'),'/')[-2] . " ${DIR_SRCS})") 23 | endfunc 24 | " set iab for cmake 25 | iab define add_definitions( 26 | iab sflag set( CMAKE_CXX_FLAGS 27 | iab stype set( CMAKE_BUILD_TYPE 28 | iab spath set( EXECUTABLE_OUTPUT_PATH 29 | iab sub add_subdirectory( 30 | iab link link_directories( 31 | iab exe add_executable( 32 | -------------------------------------------------------------------------------- /ftplugin/cpp/comment.vim: -------------------------------------------------------------------------------- 1 | " fast add comment for cpp 2 | func s:SetComment() 3 | call append(line("."),'/***********************************************') 4 | call append(line(".")+1,'* Author: chenxuan-1607772321@qq.com') 5 | call append(line(".")+2,'* change time:'.strftime("%Y-%m-%d %H:%M:%S")) 6 | call append(line(".")+3,'* description:') 7 | call append(line(".")+4,'* example: ') 8 | call append(line(".")+5,'***********************************************/') 9 | endfunc 10 | " set preparecode in buffernew 11 | func! VimFastSetPreCode() 12 | call precode#CreateCode() 13 | endfunc 14 | nnoremap c :call SetComment() 15 | 16 | func! s:Run() 17 | let g:nvim_term_open=1 18 | if filereadable(expand('%:p:h')."/Makefile")||filereadable(expand('%:p:h')."/makefile") 19 | if has('nvim') 20 | exec ":vsplit|term make" 21 | else 22 | exec ":vert term make" 23 | endif 24 | elseif filereadable(expand('%:p:h')."/CMakeLists.txt") 25 | if has('nvim') 26 | exec ":vsplit|term cmake ." 27 | else 28 | exec ":vert term cmake ." 29 | endif 30 | else 31 | echo "using g++,please wait..." 32 | call system("g++ ".expand('%:p')) 33 | if has('nvim') 34 | exec ":vsplit|term ./a.out" 35 | else 36 | exec ":vert term ./a.out" 37 | endif 38 | endif 39 | endfunc 40 | nnoremap xx :call Run() 41 | 42 | " 设置cpp缩进 43 | call g:SetTypeIndex("space", 2) 44 | " 设置折行 45 | setlocal wrap 46 | noremap j gj 47 | noremap k gk 48 | " 设置使用tagbar,vista对cpp支持太差了 49 | nnoremap t :Tagbar 50 | -------------------------------------------------------------------------------- /ftplugin/cpp/turn.vim: -------------------------------------------------------------------------------- 1 | 2 | func! s:HppCppturn() 3 | let s:type=split(expand('%:p'),'\.')[-1] 4 | let s:way=split(expand('%:p'),'\.') 5 | let s:name="" 6 | for s:temp in s:way 7 | if s:temp=='hpp'||s:temp=='cpp' 8 | continue 9 | endif 10 | let s:name =s:name.s:temp.'.' 11 | endfor 12 | if s:type=='hpp'||s:type=='h' 13 | if filereadable(s:name . 'c') 14 | let s:name=s:name.'c' 15 | else 16 | let s:name=s:name.'cpp' 17 | endif 18 | elseif s:type=='cpp'||s:type=='c' 19 | if filereadable(s:name . 'h') 20 | let s:name=s:name.'h' 21 | else 22 | let s:name=s:name.'hpp' 23 | endif 24 | endif 25 | let @s=s:name 26 | endfunc 27 | 28 | nnoremap xc :call HppCppturn():e =@s 29 | 30 | if exists('g:did_coc_loaded') 31 | nnoremap xc :CocCommand clangd.switchSourceHeader 32 | endif 33 | 34 | func! s:Enter() 35 | let s:str=getline('.') 36 | let s:col=col('.')-2 37 | while s:str[s:col]==' '||s:str[s:col]==nr2char(9) 38 | let s:col-=1 39 | if s:col<=0 40 | break 41 | endif 42 | endwhile 43 | if s:col<=0 44 | return "\" 45 | endif 46 | if s:str[s:col]=='{'||s:str[s:col]==';'||s:str[s:col]=='>'||s:str[0]=='#' 47 | " \||s:str[s:col]==')' 48 | return "\" 49 | endif 50 | return ";\" 51 | endfunc 52 | 53 | if get(g:,"cpp_enter",0) 54 | inoremap Enter() 55 | endif 56 | 57 | " for popup menu 58 | func CppMenu() 59 | unmenu PopUp 60 | call MouseConfig() 61 | endfunc 62 | let g:rightmouse_popupmenu['cpp']=function("CppMenu") 63 | -------------------------------------------------------------------------------- /ftplugin/go/comment.vim: -------------------------------------------------------------------------------- 1 | " fast add comment for cpp 2 | func s:SetComment() 3 | call append(line(".")+0,'// Author: chenxuan-1607772321@qq.com') 4 | call append(line(".")+1,'// change time:'.strftime("%Y-%m-%d %H:%M:%S")) 5 | call append(line(".")+2,'// description:') 6 | call append(line(".")+3,'// example: ') 7 | endfunc 8 | " set preparecode in buffernew 9 | func! VimFastSetPreCode() 10 | " if str has main.go,make package main 11 | if match(expand('%:p'),'/main.go')!=-1 12 | call append(line(".")-1,'package main') 13 | return 14 | endif 15 | 16 | call append(line(".")-1,'package ' . split(expand('%:p'),'/')[-2]) 17 | endfunc 18 | " auto get go.mod path way 19 | func! s:GetModPath() 20 | let file=findfile("go.mod",".;") 21 | if file=="" 22 | return 23 | endif 24 | for line in readfile(file) 25 | let list=matchlist(line,"^\\s*module\\s*\\(.*\\)$") 26 | if len(list)>1 27 | execute ':iab mod "'.list[1].'/"' 28 | break 29 | endif 30 | endfor 31 | endfunc 32 | nnoremap c :call SetComment() 33 | nnoremap C :call GetModPath() 34 | 35 | " 设置折行 36 | setlocal wrap 37 | noremap j gj 38 | noremap k gk 39 | -------------------------------------------------------------------------------- /ftplugin/go/test.vim: -------------------------------------------------------------------------------- 1 | 2 | " for gopl coc-go 3 | if exists('g:did_coc_loaded') 4 | " test 5 | nnoremap xe :CocCommand go.test.generate.exported 6 | nnoremap xf :call TestFunc() 7 | nnoremap xn :CocCommand go.test.generate.file 8 | nnoremap xg :CocCommand go.test.toggle 9 | nnoremap xc :CocCommand go.test.toggle 10 | " tag 11 | nnoremap xa :CocCommand go.tags.add.prompt 12 | nnoremap xd :CocCommand go.tags.remove.prompt 13 | " auto format 14 | augroup GoFormat 15 | autocmd! 16 | autocmd BufWritePre *.go silent! call CocAction('format') 17 | augroup END 18 | endif 19 | 20 | function! s:FindGoPackageName() 21 | let pattern = '\v^\s*package\s+(\w+)' 22 | let line = search(pattern, 'n') 23 | if line != 0|return substitute(matchstr(getline(line), pattern), '^\s*package\s*', '', '') 24 | else|return ''|endif 25 | endfunction 26 | 27 | func! s:JsonRun(name) 28 | if a:name==""|return|endif 29 | let str=[]|let s:name=expand("%:p:h")."/json_test.go" 30 | let packagename=s:FindGoPackageName() 31 | if packagename==''|let packagename=split(expand('%:p'),'/')[-2]|endif 32 | call add(str,'package ' . packagename) 33 | let str+=["import (",' "testing"',' "fmt"',' "encoding/json"',')'] 34 | let str+=['func TestJson(t *testing.T) {',' temp:='.a:name.'{}'] 35 | let str+=[' data, _ := json.MarshalIndent(temp, "", " ")',' fmt.Println(string(data))','}'] 36 | call writefile(str,s:name) 37 | if has('nvim') 38 | let g:nvim_term_open=1 39 | let path=expand("%:p:h") 40 | vsp|enew 41 | call termopen("go test -v -run TestJson",{"cwd":path,"on_exit":"JsonCloseCbNvim"}) 42 | else 43 | vert call term_start("go test -v -run TestJson",{"cwd":expand("%:p:h"),"close_cb":"JsonCloseCb"}) 44 | endif 45 | endfunc 46 | 47 | func! s:YamlRun(name) 48 | if a:name==""|return|endif 49 | let str=[]|let s:name=expand("%:p:h")."/yaml_test.go" 50 | let packagename=s:FindGoPackageName() 51 | if packagename==''|let packagename=split(expand('%:p'),'/')[-2]|endif 52 | call add(str,'package ' . packagename) 53 | let str+=["import (",' "testing"',' "fmt"','"gopkg.in/yaml.v3"',')'] 54 | let str+=['func TestYaml(t *testing.T) {',' temp:='.a:name.'{}'] 55 | let str+=[' data, _ := yaml.Marshal(temp)',' fmt.Println(string(data))','}'] 56 | call writefile(str,s:name) 57 | if has('nvim') 58 | let g:nvim_term_open=1 59 | let path=expand("%:p:h") 60 | vsp|enew 61 | call termopen("go test -v -run TestYaml",{"cwd":path,"on_exit":"JsonCloseCbNvim"}) 62 | else 63 | vert call term_start("go test -v -run TestYaml",{"cwd":expand("%:p:h"),"close_cb":"JsonCloseCb"}) 64 | endif 65 | endfunc 66 | 67 | func! JsonCloseCb(chan) 68 | call delete(s:name)|echo "Run ok" 69 | endfunc 70 | func! JsonCloseCbNvim(chan,exitcode,event) 71 | call delete(s:name)|echo "Run ok" 72 | endfunc 73 | 74 | func! s:CodeRun(testfunc,is_bench) 75 | write 76 | let s:name=expand('%:p') 77 | if match(expand('%'),"test")==-1 78 | if a:testfunc=='' 79 | if !has('nvim') 80 | exec ":vert term go run ".expand('%:p') 81 | else 82 | let path=expand("%:p") 83 | let g:nvim_term_open=1 84 | vsp|enew 85 | exec ":term go run ".path 86 | endif 87 | else 88 | CocCommand go.test.generate.function 89 | endif 90 | else 91 | if a:testfunc=='' 92 | if !has('nvim') 93 | if a:is_bench 94 | exec ":vert term go test -v -bench=. ".expand('%:p:h') 95 | else 96 | exec ":vert term go test -v ".expand('%:p:h') 97 | endif 98 | else 99 | let path=expand("%:p:h") 100 | vsp|enew 101 | let g:nvim_term_open=1 102 | if a:is_bench 103 | call termopen("go test -bench=. -v ".path) 104 | else 105 | call termopen("go test -v ".path) 106 | endif 107 | endif 108 | else 109 | if !has('nvim') 110 | if a:is_bench 111 | vert call term_start("go test -v -bench=". a:testfunc,{"cwd":expand("%:p:h")}) 112 | else 113 | vert call term_start("go test -v -run ". a:testfunc,{"cwd":expand("%:p:h")}) 114 | endif 115 | else 116 | let path=expand("%:p:h") 117 | vsp|enew 118 | let g:nvim_term_open=1 119 | if a:is_bench 120 | call termopen("go test -v -bench=". a:testfunc,{"cwd":path}) 121 | else 122 | call termopen("go test -v -run ". a:testfunc,{"cwd":path}) 123 | endif 124 | endif 125 | endif 126 | endif 127 | endfunc 128 | 129 | func! s:TestFunc() 130 | if match(expand('%'),"test")==-1 131 | CocCommand go.test.generate.function 132 | else 133 | call CodeRun(CocAction('getCurrentFunctionSymbol')) 134 | endif 135 | endfunc 136 | 137 | nnoremap xx :call CodeRun('',0) 138 | xnoremap xf :execute "normal! gv\"sy":call CodeRun("^".@s."$",0) 139 | xnoremap xb :execute "normal! gv\"sy":call CodeRun("^".@s."$",1) 140 | nnoremap xj :call JsonRun(input("input struct name:")) 141 | nnoremap xj :call YamlRun(input("input struct name:")) 142 | xnoremap xj :execute "normal! gv\"sy":call JsonRun(@s) 143 | xnoremap xy :execute "normal! gv\"sy":call YamlRun(@s) 144 | 145 | " for popup menu 146 | func GoMenu() 147 | unmenu PopUp 148 | vnoremenu PopUp.Go\ Run\ Test :execute "normal! gv\"sy":call CodeRun("^".@s."$",0) 149 | vnoremenu PopUp.Go\ Run\ Bench :execute "normal! gv\"sy":call CodeRun("^".@s."$",1) 150 | vnoremenu PopUp.Go\ Json :execute "normal! gv\"sy":call JsonRun(@s) 151 | vnoremenu PopUp.Go\ Yaml :execute "normal! gv\"sy":call YamlRun(@s) 152 | 153 | nnoremenu PopUp.Go\ Run\ File :call CodeRun('',0) 154 | nnoremenu PopUp.Go\ Json :call JsonRun(input("input struct name:")) 155 | nnoremenu PopUp.Go\ Yaml :call YamlRun(input("input struct name:")) 156 | nnoremenu PopUp.Go\ Toggle :CocCommand go.test.toggle 157 | call MouseConfig() 158 | endfunc 159 | let g:rightmouse_popupmenu['go']=function("GoMenu") 160 | 161 | command! GoLines exec "!golines -w ".expand("%d") 162 | -------------------------------------------------------------------------------- /ftplugin/html/preview.vim: -------------------------------------------------------------------------------- 1 | 2 | func! VimFastSetPreCode() 3 | call append(line(".")-1,'') 4 | call append(line(".")-1,'') 5 | call append(line(".")-1,'') 6 | call append(line(".")-1,' ') 7 | call append(line(".")-1,' ') 8 | call append(line(".")-1,' Document') 9 | call append(line(".")-1,'') 10 | call append(line(".")-1,'') 11 | call append(line(".")-1,'') 12 | call append(line(".")-1,'') 13 | endfunc 14 | 15 | " open in default browser 16 | if has('mac') 17 | " mac 18 | let b:browser=get(g:,'default_browser','open') 19 | elseif has('unix') 20 | " linux 21 | let b:browser=get(g:,'default_browser','xdg-open') 22 | elseif has('win32') || has('win64') 23 | " windows 24 | let b:browser=get(g:,'default_browser','start') 25 | else 26 | echom 'not support this system' 27 | finish 28 | endif 29 | 30 | if expand('%:e')=='html' 31 | if has('nvim') 32 | nnoremap p :w:call jobstart(b:browser.' '.expand('%:p')) 33 | else 34 | nnoremap p :w:call job_start(b:browser.' '.expand('%:p')) 35 | endif 36 | endif 37 | 38 | 39 | " for popup menu 40 | func HtmlMenu() 41 | unmenu PopUp 42 | vnoremenu PopUp.Html\ Run :w:call jobstart(b:browser.' '.expand('%:p')) 43 | call MouseConfig() 44 | endfunc 45 | let g:rightmouse_popupmenu['html']=function("HtmlMenu") 46 | 47 | call g:SetTypeIndex("space", 4) 48 | -------------------------------------------------------------------------------- /ftplugin/javascript/format.vim: -------------------------------------------------------------------------------- 1 | call g:SetTypeIndex("space", 4) 2 | -------------------------------------------------------------------------------- /ftplugin/make/comment.vim: -------------------------------------------------------------------------------- 1 | 2 | nnoremap xx :vert term make 3 | -------------------------------------------------------------------------------- /ftplugin/markdown/complete.vim: -------------------------------------------------------------------------------- 1 | let s:suggestions = [ 2 | \{'abbr':'header5' , 'word': '##### ' , 'menu': ''} , 3 | \{'abbr':'header4' , 'word': '#### ' , 'menu': ''} , 4 | \{'abbr':'header3' , 'word': '### ' , 'menu': ''} , 5 | \{'abbr':'header2' , 'word': '## ' , 'menu': ''} , 6 | \{'abbr':'header1' , 'word': '# ' , 'menu': ''} , 7 | \{'abbr':'link' , 'word': '[{text}]({link})' , 'menu': ''} , 8 | \{'abbr':'pic' , 'word': '![{text}]({link})' , 'menu': ''} , 9 | \{'abbr':'unorder list' , 'word': '- ' , 'menu': ''} , 10 | \{'abbr':'order list' , 'word': '1. ' , 'menu': ''} , 11 | \{'abbr':'table' , 'word': '| {text} | {text} |' , 'menu': ''} , 12 | \] 13 | 14 | func! s:MarkDownComplete() 15 | let line = getline('.') 16 | let col = col('.') - 1 17 | let opt=&completeopt 18 | let flag=stridx(opt,"noselect") 19 | if col!=0 && line[col-1] =~ '\S' 20 | if flag!=-1 21 | return "/\\" 22 | else 23 | return "/\\\" 24 | endif 25 | endif 26 | call complete(col('.'), s:suggestions) 27 | if flag!=-1 28 | return '' 29 | else 30 | return "\" 31 | endif 32 | endfunc 33 | 34 | " inoremap \\ =MarkDownComplete() 35 | " inoremap / =MarkDownComplete() 36 | -------------------------------------------------------------------------------- /ftplugin/markdown/fold.vim: -------------------------------------------------------------------------------- 1 | 2 | if get(g:,"markdown_simple_disable",0) 3 | finish 4 | endif 5 | 6 | if !get(g:,"markdown_fold_enable",1) 7 | finish 8 | endif 9 | 10 | let b:fold_code_flag=1 11 | func! g:VimFastFoldExpr() 12 | if line('$')==v:lnum-1 13 | return '<1' 14 | endif 15 | let s:next=getline(v:lnum+1) 16 | let s:now=getline(v:lnum) 17 | let s:pre=getline(v:lnum-1) 18 | 19 | if match(s:now,'^```')>=0 20 | let b:fold_code_flag=3-b:fold_code_flag 21 | endif 22 | 23 | if b:fold_code_flag==2 24 | return '1' 25 | endif 26 | 27 | if match(s:now,'^\s*#')>=0 28 | return '0' 29 | else 30 | return '1' 31 | endif 32 | endfunc 33 | 34 | setlocal foldexpr=VimFastFoldExpr() 35 | setlocal fdm=expr 36 | " setlocal fen 37 | 38 | nnoremap =z :setlocal fdm=expr:setlocal fen 39 | -------------------------------------------------------------------------------- /ftplugin/markdown/format.vim: -------------------------------------------------------------------------------- 1 | 2 | "====================================================================== 3 | " 4 | " termtask 5 | " 6 | " Created by chenxuan on 2022.11.02 7 | " 8 | "====================================================================== 9 | 10 | if get(g:,"markdown_simple_disable",0) 11 | finish 12 | endif 13 | 14 | func! s:Format() 15 | let s:i=2 16 | let s:code=0 17 | while s:i<=line('$') 18 | let s:flag=1 19 | let s:str=getline(s:i) 20 | let s:ch='' 21 | 22 | for s:ch in str2list(s:str) 23 | if s:ch!=char2nr(' ')&&s:ch!=9 24 | if s:ch==char2nr('`') 25 | if s:code==0 26 | let s:code=1 27 | else 28 | let s:code=0 29 | endif 30 | let s:flag=0 31 | elseif s:ch==char2nr('>')||s:ch==char2nr('|') 32 | let s:flag=0 33 | endif 34 | 35 | break 36 | endif 37 | endfor 38 | 39 | if s:flag!=1 40 | let s:i=s:i+1 41 | continue 42 | endif 43 | 44 | if len(getline(s:i))!=0&&len(getline(s:i-1))!=0&&s:code==0 45 | call append(s:i-1,'') 46 | let s:i=s:i+1 47 | endif 48 | 49 | let s:i=s:i+1 50 | endwhile 51 | endfunc 52 | 53 | nnoremap f :call Format() 54 | nnoremap F :g/^\s*$/d:noh 55 | -------------------------------------------------------------------------------- /ftplugin/markdown/ibus.vim: -------------------------------------------------------------------------------- 1 | 2 | if get(g:,"markdown_simple_disable",0) 3 | finish 4 | endif 5 | 6 | " ibus enable 7 | let g:ibus_enable=get(g:,'ibus_enable',0) 8 | if !g:ibus_enable 9 | finish 10 | endif 11 | "ibus no exist 12 | if !executable('ibus') 13 | finish 14 | endif 15 | "ibus isn't running 16 | " if system('ibus engine') =~ 'No engine is set' 17 | " finish 18 | " endif 19 | " let g:ibus_normal=system('ibus engine') 20 | 21 | func! s:ibusSaveStatus() 22 | let s:ibus_normal=get(g:,'ibus_normal','xkb:us::eng') 23 | let g:ibus_status=system('ibus engine') 24 | execute "call system('ibus engine ".s:ibus_normal."')" 25 | endfunc 26 | 27 | func! s:ibusReloadStatus() 28 | let s:now=system('ibus engine') 29 | if s:now==g:ibus_status 30 | return 31 | endif 32 | execute "call system('ibus engine ".g:ibus_status."')" 33 | endfunc 34 | 35 | let g:ibus_status='' 36 | if g:ibus_enable 37 | augroup ibus 38 | au! 39 | au InsertEnter *.md call s:ibusReloadStatus() 40 | au InsertLeave *.md call s:ibusSaveStatus() 41 | au BufDelete *.md call s:ibusReloadStatus()|au! ibus 42 | augroup END 43 | endif 44 | -------------------------------------------------------------------------------- /ftplugin/markdown/oper.vim: -------------------------------------------------------------------------------- 1 | 2 | "====================================================================== 3 | " 4 | " termtask 5 | " 6 | " Created by chenxuan on 2022.11.02 7 | " 8 | "====================================================================== 9 | 10 | if get(g:,"markdown_simple_disable",0) 11 | finish 12 | endif 13 | 14 | let b:indent=get(g:,"markdown_simple_indent",nr2char(9)) 15 | let b:table_flag=get(g:,"markdown_simple_table_flag",";;") 16 | 17 | augroup mdpair 18 | au! 19 | au BufLeave *.md let conceallevel=0|au! mdpair 20 | augroup END 21 | 22 | func! s:AddTitle() 23 | let old_pos=col('.')-1 24 | let lnum=line('.') 25 | 26 | execute "normal! ^" 27 | let col = col('.') - 1 28 | let s:char= getline('.')[col] 29 | if s:char=='#' 30 | execute "normal! i#" 31 | else 32 | execute "normal! i#\ " 33 | endif 34 | 35 | call cursor(lnum,old_pos) 36 | endfunc 37 | 38 | func! s:AddSub() 39 | let old_pos=col('.')-1 40 | let lnum=line('.') 41 | 42 | execute "normal! ^" 43 | let col = col('.') - 1 44 | let s:char= getline('.')[col] 45 | if s:char=='-' 46 | execute "normal! 2x" 47 | let old_pos-=3 48 | else 49 | execute "normal! i-\ " 50 | let old_pos+=1 51 | endif 52 | 53 | if old_pos>0 54 | call cursor(lnum,old_pos) 55 | endif 56 | endfunc 57 | 58 | func! s:Code() 59 | call append(line('v')-1,'```') 60 | call append(line('.'),'```') 61 | endfunc 62 | 63 | func! s:Refence() 64 | let old_pos=col('.')-1 65 | let lnum=line('.') 66 | 67 | execute "normal! ^" 68 | let col = col('.') - 1 69 | let s:char= getline('.')[col] 70 | if s:char=='-' 71 | execute "normal! 2x" 72 | else 73 | execute "normal! i>\ " 74 | endif 75 | 76 | call cursor(lnum,old_pos) 77 | endfunc 78 | 79 | func! s:Bold(ch) 80 | let temp = @s 81 | norm! gv 82 | let col = col('.') 83 | let temp = col('v') 84 | norm! "sy 85 | let str = @s 86 | let @s = temp 87 | 88 | if temp=0||match(s:str, '^\s*\d\+.\s*$')>=0||match(s:str, '^\s*>\s*$')>=0 165 | return "\" 166 | endif 167 | " 如果发现前面有空格,那么减少缩进 168 | if match(s:str, '^\s\+$')>=0 169 | return "\<<" 170 | endif 171 | 172 | 173 | for s:ch in str2list(s:str) 174 | if s:ch!=char2nr(' ')&&s:ch!=9 175 | break 176 | endif 177 | let s:i=s:i+1 178 | endfor 179 | 180 | while s:i'9' 183 | break 184 | endif 185 | let s:i=s:i+1 186 | endwhile 187 | 188 | if s:char=='|'&&getline('.')[col('$')-2]!='|' 189 | call setline(line('.'),getline('.').'|') 190 | endif 191 | 192 | let @s="" 193 | if a:ch=='io' 194 | let @s=b:indent 195 | return "\".@s 196 | elseif a:ch=='ke' 197 | let @s=b:indent 198 | endif 199 | 200 | if s:char=='-'&&getline('.')[s:i+1]!='-' 201 | let @s=@s.'- ' 202 | elseif s:char=='>' 203 | let @s='> ' 204 | elseif s:char=='|' 205 | if exists('g:plugs')&&has_key(g:plugs,'tabular') 206 | execute ":Tabularize /|" 207 | execute "normal! $l" 208 | endif 209 | let @s='' 210 | elseif s:char[0]>0&&s:char[0]<=9 211 | let @s=(s:char+1).". " 212 | else 213 | let @s="" 214 | endif 215 | 216 | return "\".@s 217 | endfunc 218 | 219 | func! s:OrderList() 220 | let line=getline('.') 221 | if line =~ '^\s*\d$' 222 | return '. ' 223 | endif 224 | return '.' 225 | endfunc 226 | 227 | func! s:Backspace() 228 | let s:str=getline('.') 229 | let s:char="" 230 | let s:i=col('.')-2 231 | let s:delete=1 232 | let s:tab=0 233 | let s:space=0 234 | let s:is_bs=1 235 | 236 | let s:pair=getline('.')[col('.')-1] 237 | let s:pair_l=getline('.')[col('.')-2] 238 | if (s:pair==')'&&s:pair_l=='(')|| 239 | \ (s:pair==']'&&s:pair_l=='[')|| 240 | \ (s:pair=='}'&&s:pair_l=='{')|| 241 | \ (s:pair=='"'&&s:pair_l=='"')|| 242 | \ (s:pair=="'"&&s:pair_l=="'")|| 243 | \ (s:pair=='`'&&s:pair_l=='`')|| 244 | \ (s:pair=='~'&&s:pair_l=='~')|| 245 | \ (s:pair=='*'&&s:pair_l=='*') 246 | return "\\\" 247 | endif 248 | 249 | while s:i>0 250 | if s:str[s:i]==nr2char(9) 251 | let s:tab=1 252 | break 253 | elseif s:str[s:i]=='-'|| 254 | \s:str[s:i]=='>'||s:str[s:i]=='.'|| 255 | \(s:str[s:i]>='0'&&s:str[s:i]<='9') 256 | let s:delete+=1 257 | let s:is_bs=0 258 | elseif s:str[s:i]==' ' 259 | if s:space==0 260 | let s:space=1 261 | let s:delete+=1 262 | else 263 | break 264 | endif 265 | else 266 | break 267 | endif 268 | let s:i-=1 269 | endwhile 270 | 271 | if s:is_bs&&s:i!=0 272 | return "\" 273 | endif 274 | 275 | let s:result='' 276 | 277 | if s:i==0&&s:str[s:i]==nr2char(9) 278 | let s:delete-=1 279 | endif 280 | if s:tab 281 | let s:delete-=1 282 | endif 283 | 284 | if s:i==0&&s:str[s:i]==' '&&s:delete>1 285 | let s:delete-=1 286 | endif 287 | 288 | let s:result=s:result."\" 289 | if s:delete>0 290 | while s:delete>1 291 | let s:result=s:result."\" 292 | let s:delete-=1 293 | endwhile 294 | return s:result 295 | else 296 | return s:result 297 | endif 298 | return 299 | endfunc 300 | 301 | func! s:DivLine(ch) 302 | let s:pair=getline('.')[col('.')-2] 303 | let s:pair_l=getline('.')[col('.')-3] 304 | 305 | if s:pair==' '&&s:pair_l==a:ch 306 | return "\".a:ch."\" 307 | endif 308 | if match(getline('.'),'\s*$')==0 309 | return a:ch."\" 310 | else 311 | return a:ch 312 | endif 313 | endfunc 314 | 315 | func! s:Move() 316 | let s:str=getline('.') 317 | let s:i=1 318 | while s:str[col('.')-2+s:i]=='*'|| 319 | \ s:str[col('.')-2+s:i]=='~'|| 320 | \ s:str[col('.')-2+s:i]==']'|| 321 | \ s:str[col('.')-2+s:i]==')' 322 | let s:i+=1 323 | endwhile 324 | let s:result="" 325 | while s:i>0 326 | let s:result=s:result."\" 327 | let s:i-=1 328 | endwhile 329 | return s:result 330 | endfunc 331 | 332 | func! s:FindHead(direction) 333 | let s:i=line('.') 334 | 335 | if a:direction=='up' 336 | let s:i-=1 337 | while s:i>=0 338 | let s:str=getline(s:i) 339 | if match(s:str,'^\s*#')>=0 340 | call setpos('.',[0,s:i,0,0]) 341 | return 342 | endif 343 | let s:i-=1 344 | endwhile 345 | else 346 | let s:i+=1 347 | while s:i<=line('$') 348 | let s:str=getline(s:i) 349 | if match(s:str,'^\s*#')>=0 350 | call setpos('.',[0,s:i,0,0]) 351 | return 352 | endif 353 | let s:i+=1 354 | endwhile 355 | endif 356 | endfunc 357 | 358 | func! s:TableCreate(mode) 359 | let s:get=getchar()-48 360 | let s:time=getchar()-48 361 | let s:result='' 362 | let s:split='' 363 | if s:get<'0'||s:get>'9' 364 | let s:get=1 365 | endif 366 | if s:time<'0'||s:time>'9' 367 | let s:time=1 368 | endif 369 | 370 | while s:get>0 371 | let s:result=s:result.'|{text}' 372 | let s:split=s:split.'| --- ' 373 | let s:get-=1 374 | endwhile 375 | 376 | let s:result=s:result.'|' 377 | let s:split=s:split.'|' 378 | let one=s:result 379 | if s:time>1 380 | let s:result=s:result."\".s:split 381 | endif 382 | 383 | while s:time>1 384 | let s:result=s:result."\".one 385 | let s:time-=1 386 | endwhile 387 | 388 | if a:mode!='' 389 | return s:result 390 | endif 391 | 392 | while s:time>0 393 | execute 'normal! i'.s:result 394 | if s:time>1 395 | execute 'normal! o'.s:result 396 | else 397 | execute 'normal! ^' 398 | endif 399 | let s:time-=1 400 | endwhile 401 | endfunc 402 | 403 | nnoremap # : call AddTitle() 404 | 405 | nnoremap - : call AddSub() 406 | 407 | nnoremap & : call Number() 408 | 409 | nnoremap > : call Refence() 410 | 411 | xnoremap ~ : call Bold('~~') 412 | 413 | xnoremap * :call Bold('*')gvlol 414 | xnoremap :call Bold('*') 415 | xnoremap :call Bold('**') 416 | inoremap **** 417 | 418 | xnoremap ` :call Bold('`') 419 | nnoremap ` viw:call Bold('`') 420 | 421 | xnoremap :call BlodLink('[',']()')f]f) 422 | nnoremap viw:call BlodLink('[',']()')f]f) 423 | 424 | xnoremap ` :call Code() 425 | 426 | nnoremap o :call g:VimFastEnter('o')os 427 | nnoremap o :call g:VimFastEnter('io')os 428 | 429 | inoremap =g:VimFastEnter('') 430 | inoremap \ =g:VimFastEnter('io') 431 | inoremap =g:VimFastEnter('ke') 432 | 433 | inoremap Backspace() 434 | 435 | inoremap \t TableCreate('i') 436 | nnoremap \t :call TableCreate('') 437 | 438 | nnoremap ]] :call FindHead('next')zz 439 | nnoremap [[ :call FindHead('up')zz 440 | 441 | inoremap Move() 442 | inoremap - DivLine('-') 443 | inoremap > DivLine('>') 444 | inoremap * ** 445 | inoremap ~~ ~~~~ 446 | inoremap . OrderList() 447 | 448 | let s:head='#' 449 | for s:i in [1,2,3,4,5] 450 | execute "iab h".s:i." ".s:head 451 | execute "iab H".s:i." ".s:head 452 | let s:head=s:head.'#' 453 | endfor 454 | 455 | if b:table_flag!="" 456 | execute ":inoremap ".b:table_flag." \\|" 457 | endif 458 | 459 | nnoremap p :call Paste() 460 | nnoremap "+p :call Paste() 461 | 462 | nnoremap > >> 463 | nnoremap < << 464 | 465 | inoremap [{text}]({link}) 466 | inoremap ![{text}]({link}) 467 | 468 | " for popup menu 469 | func MarkDownMenu() 470 | unmenu PopUp 471 | " markdown text 472 | vnoremenu PopUp.Bold\ Text :call Bold('**') 473 | vnoremenu PopUp.Italic\ Text :call Bold('*') 474 | vnoremenu PopUp.Line\ Text :call Bold('~~') 475 | vnoremenu PopUp.Code\ Text :call Bold('`') 476 | vnoremenu PopUp.Link\ Text :call BlodLink('[',']()')f]f) 477 | 478 | call MouseConfig() 479 | endfunc 480 | let g:rightmouse_popupmenu['markdown']=function("MarkDownMenu") 481 | 482 | setlocal conceallevel=3 483 | -------------------------------------------------------------------------------- /ftplugin/markdown/preview.vim: -------------------------------------------------------------------------------- 1 | " this file is for preview markdown file 2 | if get(g:,"markdown_simple_disable",0) 3 | finish 4 | endif 5 | 6 | if get(g:,'markdown_preview_disable',0) 7 | finish 8 | endif 9 | 10 | let b:pandoc=get(g:,'markdown_preview_tool','pandoc') 11 | 12 | " open in default browser 13 | if has('mac') 14 | " mac 15 | let b:browser=get(g:,'default_browser','open') 16 | elseif has('unix') 17 | " linux 18 | let b:browser=get(g:,'default_browser','xdg-open') 19 | elseif has('win32') || has('win64') 20 | " windows 21 | let b:browser=get(g:,'default_browser','start') 22 | else 23 | echom 'not support this system' 24 | finish 25 | endif 26 | 27 | " be dark model 28 | let b:header='' 29 | 30 | let g:mdFileMp={} 31 | 32 | func! s:MarkdownPreview() 33 | if !executable(b:pandoc) 34 | echom b:pandoc.' not find,please make sure pandoc install' 35 | return 36 | endif 37 | 38 | if !executable(b:browser) 39 | echom b:browser.' not find' 40 | return 41 | endif 42 | 43 | let s:fileName=expand('%:p') 44 | let s:html='' 45 | if has_key(g:mdFileMp,s:fileName) 46 | let s:html=g:mdFileMp[s:fileName] 47 | else 48 | let s:html=tempname() 49 | let s:html=s:html.".html" 50 | let g:mdFileMp[s:fileName]=s:html 51 | endif 52 | 53 | write 54 | if b:header!='' 55 | call system('echo "'.b:header.'" > '.s:html) 56 | endif 57 | echo 'Turn md to html,please wait...' 58 | call system(b:pandoc.' '.expand('%:p').' -t html >>'.s:html) 59 | if has('nvim') 60 | call jobstart(b:browser.' '.s:html) 61 | else 62 | call job_start(b:browser.' '.s:html) 63 | endif 64 | echo s:html 65 | endfunc 66 | 67 | nnoremap p MarkdownPreview() 68 | -------------------------------------------------------------------------------- /ftplugin/nerdtree/menu.vim: -------------------------------------------------------------------------------- 1 | 2 | " for popup menu 3 | func NERDTreeMenu() 4 | unmenu PopUp 5 | nnoremenu PopUp.Create\ File :call NERDTreeAddNode() 6 | nnoremenu PopUp.Create\ Dir :call NERDTreeAddNode()/ 7 | nnoremenu PopUp.VSplite\ File :call nerdtree#ui_glue#invokeKeyMap("s") 8 | nnoremenu PopUp.Splite\ File :call nerdtree#ui_glue#invokeKeyMap("i") 9 | nnoremenu PopUp.Move\ Node :call NERDTreeMoveNode() 10 | nnoremenu PopUp.Hidden\ File :call nerdtree#ui_glue#invokeKeyMap("I") 11 | nnoremenu PopUp.Focus\ File :wincmd wNERDTreeFind 12 | nnoremenu PopUp.Copy\ Path :echom g:NERDTreeFileNode.GetSelected().path.str() 13 | \let @+=g:NERDTreeFileNode.GetSelected().path.str() 14 | nnoremenu PopUp.Flush :NERDTreeRefreshRootNERDTreeRefreshRoot 15 | endfunc 16 | let g:rightmouse_popupmenu['nerdtree']=function("NERDTreeMenu") 17 | 18 | setlocal nowrap 19 | -------------------------------------------------------------------------------- /ftplugin/python/comment.vim: -------------------------------------------------------------------------------- 1 | " fast add comment for cpp 2 | func s:SetComment() 3 | call append(line(".")+0,'# Author: chenxuan-1607772321@qq.com') 4 | call append(line(".")+1,'# change time:'.strftime("%Y-%m-%d %H:%M:%S")) 5 | call append(line(".")+2,'# description:') 6 | call append(line(".")+3,'# example: ') 7 | endfunc 8 | " set preparecode in buffernew 9 | func! VimFastSetPreCode() 10 | call append(line(".")-1,'#!/usr/bin/env python3') 11 | call append(line(".")-1,'# coding=utf-8') 12 | endfunc 13 | nnoremap c :call SetComment() 14 | 15 | nnoremap xx :w:let g:nvim_term_open=1:vert term python3 =expand('%:p') 16 | nnoremap xl 0v$"+y:call ExecPython(getreg('+')) 17 | xnoremap xl "+y:call ExecPython(getreg('+')) 18 | func! s:ExecPython(str) 19 | let temp=tempname() 20 | let content=["#!/usr/bin/env python3"]+split(a:str,'\n') 21 | call writefile(content, temp) 22 | call setfperm(temp,"rwxrwxrwx") 23 | exec ":!".temp 24 | endfunc 25 | 26 | " for popup menu 27 | func PyMenu() 28 | unmenu PopUp 29 | vnoremenu PopUp.Python\ Run "+y:call ExecPython(getreg('+')) 30 | nnoremenu PopUp.Python\ Run :w:let g:nvim_term_open=1:vert term python3 =expand('%:p') 31 | " visual model 32 | vnoremenu PopUp.Yank\ Text "+y 33 | vnoremenu PopUp.Paste\ Text "+p 34 | " normal model 35 | nnoremenu PopUp.Paste\ Text "+p 36 | nnoremenu PopUp.Select\ All ggVG 37 | endfunc 38 | let g:rightmouse_popupmenu['python']=function("PyMenu") 39 | 40 | " 设置折行 41 | setlocal wrap 42 | noremap j gj 43 | noremap k gk 44 | -------------------------------------------------------------------------------- /ftplugin/python/test.vim: -------------------------------------------------------------------------------- 1 | 2 | " for pyright 3 | if exists('g:did_coc_loaded') 4 | " test 5 | nnoremap xf :CocCommand pyright.fileTest 6 | nnoremap xs :CocCommand pyright.singleTest 7 | endif 8 | -------------------------------------------------------------------------------- /ftplugin/qf/preview.vim: -------------------------------------------------------------------------------- 1 | 2 | func! PreviewNowFile(ch) 3 | silent! exec "silent! bd ".matchlist(getline('.'),b:regex)[1] 4 | if a:ch!='' 5 | exec "normal! ".a:ch 6 | endif 7 | let line=getline('.') 8 | let match=matchlist(line,b:regex) 9 | if len(match)>=3 10 | let file=match[1] 11 | let line=match[2] 12 | exe ':pedit +'.line.' '.file 13 | endif 14 | endfunc 15 | 16 | augroup QuickFixMap 17 | autocmd! 18 | autocmd BufLeave quickfix call QuickFixMap(0)|au! QuickFixMap 19 | augroup END 20 | 21 | let b:regex='\([^|]\+\)|\(\d\+\)' 22 | 23 | 24 | func! s:QuickFixMap(is_set) 25 | if a:is_set 26 | nnoremap j :call PreviewNowFile('j') 27 | nnoremap k :call PreviewNowFile('k') 28 | else 29 | pclose 30 | exec "silent! bd".matchlist(getline('.'),b:regex)[1] 31 | silent! unmap j 32 | silent! unmap k 33 | endif 34 | endfunc 35 | nnoremap :call QuickFixMap(1) 36 | nnoremap :call QuickFixMap(0) 37 | -------------------------------------------------------------------------------- /ftplugin/sh/comment.vim: -------------------------------------------------------------------------------- 1 | " set preparecode in buffernew 2 | func! VimFastSetPreCode() 3 | call append(line(".")-1,'#!/bin/bash') 4 | augroup shmode 5 | au! 6 | autocmd! BufWritePost *.sh call setfperm(expand('%'),'rwxrwxr-x') 7 | autocmd! BufDelete *.sh au! shmode|aug! shmode 8 | augroup END 9 | endfunc 10 | 11 | nnoremap xx :w:let g:nvim_term_open = 1:vert term =expand('%:p') 12 | nnoremap xl 0v$"+y:!=@+ 13 | xnoremap xl "+y:call ExecShell(getreg('+')) 14 | func! s:ExecShell(str) 15 | let temp=tempname() 16 | let content=["#!/bin/sh"]+split(a:str,'\n') 17 | call writefile(content, temp) 18 | call setfperm(temp,"rwxrwxrwx") 19 | exec ":!".temp 20 | endfunc 21 | 22 | " for popup menu 23 | func ShMenu() 24 | unmenu PopUp 25 | vnoremenu PopUp.Shell\ Run "+y:call ExecShell(getreg('+')) 26 | nnoremenu PopUp.Shell\ Run :w:vert term =expand('%:p') 27 | " visual model 28 | vnoremenu PopUp.Yank\ Text "+y 29 | vnoremenu PopUp.Paste\ Text "+p 30 | " normal model 31 | nnoremenu PopUp.Paste\ Text "+p 32 | nnoremenu PopUp.Select\ All ggVG 33 | endfunc 34 | let g:rightmouse_popupmenu['sh']=function("ShMenu") 35 | 36 | " set index for shell script 37 | call g:SetTypeIndex("space", 4) 38 | -------------------------------------------------------------------------------- /ftplugin/template/template.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | using namespace std; 7 | 8 | int main() { 9 | return 0; 10 | } 11 | -------------------------------------------------------------------------------- /ftplugin/template/template.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | -------------------------------------------------------------------------------- /ftplugin/vim/config.vim: -------------------------------------------------------------------------------- 1 | func! VimFastSetPreCode() 2 | call append( line(".")-1,'" this config is for project' ) 3 | call append( line(".")-1,'' ) 4 | call append( line(".")-1,'" name : the task name' ) 5 | call append( line(".")-1,'" mode : (new version add)the mode of task,quickfix,term,workflow,shell') 6 | call append( line(".")-1,'" workflow first exec task [begin],and if first exec is ok,exec task [end]') 7 | call append( line(".")-1,'" use workflow mode,first exec must be quickfix') 8 | call append( line(".")-1,'" workflow mode option is only with:begin,next,name,key') 9 | call append( line(".")-1,'" shell model only run in backgroud and show nothing which is always success') 10 | call append( line(".")-1,'" command : the command to run' ) 11 | call append( line(".")-1,'" path : path can be termtask#Term_get_dir() stand for git,expand("%:p:h") for current dir' ) 12 | call append( line(".")-1,'" expand("%") for current buffer all path,expand("%:t") for current buffer name' ) 13 | call append( line(".")-1,'" use . can connect str' ) 14 | call append( line(".")-1,'" close : term and quickfix after command status' ) 15 | call append( line(".")-1,'" 0 noclose' ) 16 | call append( line(".")-1,'" 1 close' ) 17 | call append( line(".")-1,'" 2 if command is not ok,will stay open,or close,' ) 18 | call append( line(".")-1,'" 3 do not open first,after finish,open it(invalid for nvim)' ) 19 | call append( line(".")-1,'" type : pos of task tab or vsplit or split' ) 20 | call append( line(".")-1,'" key : key can bound map to make task run' ) 21 | call append( line(".")-1,'" script : pre,end script is vimscript,use | to divide' ) 22 | call append( line(".")-1,'" can define function,and make end_script call func to do it(recommand way)' ) 23 | call append( line(".")-1,'" can use g:asyncrun_code==0 to judge task if success' ) 24 | call append( line(".")-1,"let s:root=termtask#Term_get_dir().'/'" ) 25 | call append( line(".")-1,"let s:pwd=expand('%:p:h')" ) 26 | call append( line(".")-1,"let g:Term_project_task=[" ) 27 | call append( line(".")-1," \\{" ) 28 | call append( line(".")-1," \\'name' : 'build'," ) 29 | call append( line(".")-1," \\'command' : 'g++ -O2 '.expand('%')," ) 30 | call append( line(".")-1," \\'mode' : 'quickfix'," ) 31 | call append( line(".")-1," \\'path' : s:root," ) 32 | call append( line(".")-1," \\'close' : 2," ) 33 | call append( line(".")-1," \\'type' : 'split'," ) 34 | call append( line(".")-1," \\'key' : '\\1'," ) 35 | call append( line(".")-1," \\'pre_script' : ''," ) 36 | call append( line(".")-1," \\'end_script' : ''," ) 37 | call append( line(".")-1," \\}," ) 38 | call append( line(".")-1," \\{" ) 39 | call append( line(".")-1," \\'name' : 'run'," ) 40 | call append( line(".")-1," \\'command' : './a.out'," ) 41 | call append( line(".")-1," \\'mode' : 'term'," ) 42 | call append( line(".")-1," \\'path' : s:root," ) 43 | call append( line(".")-1," \\'close' : 0," ) 44 | call append( line(".")-1," \\'type' : 'vsplit'," ) 45 | call append( line(".")-1," \\'key' : '\\2'," ) 46 | call append( line(".")-1," \\}," ) 47 | call append( line(".")-1," \\{") 48 | call append( line(".")-1," \\'name' : 'workflow',") 49 | call append( line(".")-1," \\'mode' : 'workflow',") 50 | call append( line(".")-1," \\'begin' : 'build',") 51 | call append( line(".")-1," \\'next' : 'run',") 52 | call append( line(".")-1," \\'key' : '\\3'," ) 53 | call append( line(".")-1," \\},") 54 | call append( line(".")-1," \\{" ) 55 | call append( line(".")-1," \\'name' : 'debug'," ) 56 | call append( line(".")-1," \\'command' : 'g++ -g '.expand('%')," ) 57 | call append( line(".")-1," \\'mode' : 'quickfix'," ) 58 | call append( line(".")-1," \\'path' : s:pwd," ) 59 | call append( line(".")-1," \\'close' : 1," ) 60 | call append( line(".")-1," \\'type' : 'split'," ) 61 | call append( line(".")-1," \\'key' : '\\4'," ) 62 | call append( line(".")-1," \\'end_script' : 'cclose|packadd termdebug|Termdebug a.out'," ) 63 | call append( line(".")-1," \\}," ) 64 | call append( line(".")-1," \\]" ) 65 | endfunc 66 | 67 | if expand('%:t')=='.config.vim' 68 | augroup TaskLoad 69 | au! 70 | au BufWritePost .config.vim exec "source ". expand('%:p') 71 | au BufDelete .config.vim au! TaskLoad 72 | augroup END 73 | endif 74 | 75 | " for popup menu 76 | func VimMenu() 77 | unmenu PopUp 78 | vnoremenu PopUp.Vims\ Run "+y:=@+ 79 | nnoremenu PopUp.Vims\ Source :source =expand("%") 80 | call MouseConfig() 81 | endfunc 82 | let g:rightmouse_popupmenu['vim']=function("VimMenu") 83 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # 拷贝文件 4 | function copy_files() 5 | { 6 | rm -rf ~/.vimrc 7 | ln -s ${PWD}/.vimrc ~ 8 | 9 | mkdir ~/.vim 10 | rm -rf ~/.vim/colors 11 | ln -s ${PWD}/colors ~/.vim 12 | 13 | rm -rf ~/.vim/ftplugin 14 | ln -s ${PWD}/ftplugin ~/.vim 15 | 16 | rm -rf ~/.vim/autoload 17 | ln -s ${PWD}/autoload ~/.vim 18 | 19 | ln -s ${PWD}/coc/coc-settings.json ~/.vim/coc-settings.json 20 | } 21 | 22 | # 安装coc插件 23 | function install_plug() 24 | { 25 | mkdir ~/.vim/plugged 26 | ./shell/plug.sh 27 | # tar -zxvf ${PWD}/vim.tar.gz -C ~/.vim/plugged/ 28 | # sudo curl -sL install-node.now.sh | sudo bash 29 | # curl --compressed -o- -L https://yarnpkg.com/install.sh | bash 30 | sudo ./shell/nodejs.sh 31 | npm config set registry https://registry.npmmirror.com 32 | # https://registry.npmjs.org/ 33 | 34 | # npm install -g yarn 35 | # yarn config set registry 'https://registry.npm.taobao.org' 36 | 37 | # git clone https://gitee.com/zgpio/markdown-preview.nvim.git ~/.vim/plugged/markdown-preview.nvim 38 | # cd ~/.vim/plugged/markdown-preview.nvim/app 39 | # yarn install 40 | 41 | git clone -b release https://gitee.com/zgpio/coc.nvim.git ~/.vim/plugged/coc.nvim 42 | root_path=${PWD} 43 | cd ~/.vim/plugged/coc.nvim 44 | git reset --hard v0.0.82 45 | # yarn install 46 | # yarn build 47 | vim -c "PlugInstall" -c "qa" 48 | 49 | if [ -d ~/.vim/plugged/vim-airline/autoload/airline/extensions ];then 50 | mv $root_path/vimscript/branch.vim ~/.vim/plugged/vim-airline/autoload/airline/extensions 51 | # mv ${PWD}/vimscript/coc.vim ~/.vim/plugged/vim-airline/autoload/airline/extensions 52 | fi 53 | 54 | chmod 664 ~/.viminfo 55 | } 56 | 57 | # 安装vim插件 58 | function install_vim_plugin() 59 | { 60 | vim -c "PlugInstall" -c "qa" 61 | } 62 | 63 | # 安装linux平台字体 64 | function install_fonts_on_linux() 65 | { 66 | mkdir -p ~/.local/share/fonts 67 | rm -rf ~/.local/share/fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf 68 | cp ./fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf ~/.local/share/fonts 69 | 70 | fc-cache -vf ~/.local/share/fonts 71 | } 72 | 73 | # 打印logo 74 | function print_logo() 75 | { 76 | color="$(tput setaf 6)" 77 | normal="$(tput sgr0)" 78 | printf "${color}" 79 | echo ' _ __ _ ' 80 | echo ' (_) / _| | | ' 81 | echo '__ ___ _ __ ___ | |_ __ _ ___| |_ ' 82 | echo '\ \ / / | "_ " _ \| _/ _" / __| __|' 83 | echo ' \ V /| | | | | | | || (_| \__ \ |_ ' 84 | echo ' \_/ |_|_| |_| |_|_| \__,_|___/\__|' 85 | echo '' 86 | echo 'install ok' 87 | echo 'Just enjoy it!' 88 | echo 'p.s. Follow me at https://github.com/chenxuan520.' 89 | echo '' 90 | printf "${normal}" 91 | } 92 | 93 | # 开始安装vimplus 94 | function begin_install_vimplus() 95 | { 96 | copy_files 97 | install_fonts_on_linux 98 | install_plug 99 | print_logo 100 | } 101 | 102 | # 安装mac必备软件 103 | function install_prepare_software_on_mac() 104 | { 105 | type brew 106 | if [ $? == 1 ];then 107 | curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh 108 | echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> ~/.zprofile 109 | echo 'please make sure brew is installed,and run it angin' 110 | exit 1 111 | fi 112 | brew install nodejs 113 | brew install zip wget git ctags fzf ripgrep 114 | } 115 | 116 | 117 | # 安装ubuntu必备软件 118 | function install_prepare_software_on_ubuntu() 119 | { 120 | type apt 121 | if [ $? == 1 ];then 122 | return 123 | fi 124 | sudo apt-get update 125 | sudo apt-get install -y vim 126 | sudo apt-get install -y zip curl git wget ctags ripgrep fzf 127 | sudo apt-get install -y build-essential python python-dev python3-dev fontconfig ack-grep ack 128 | sudo apt-get install -y universal-ctags || sudo apt-get install -y exuberant-ctags 129 | } 130 | # 安装debian必备软件 131 | function install_prepare_software_on_debian() 132 | { 133 | type apt 134 | if [ $? == 1 ];then 135 | return 136 | fi 137 | sudo apt-get update 138 | sudo apt-get install -y vim 139 | sudo apt-get install -y zip curl git wget ctags ripgrep fzf 140 | sudo apt-get install -y build-essential python python-dev python3-dev fontconfig ack 141 | sudo apt-get install -y universal-ctags || sudo apt-get install -y exuberant-ctags 142 | sudo apt-get install -y vim cmake build-essential python python-dev python3-dev fontconfig ack git 143 | } 144 | 145 | # 安装tmux必备软件 146 | function install_prepare_software_on_tmux() 147 | { 148 | pkg update 149 | pkg install -y vim 150 | pkg install -y zip curl git wget ctags ripgrep 151 | pkg install -y build-essential python python-dev python3-dev fontconfig libfile-next-perl ack-grep ack 152 | pkg install -y universal-ctags || sudo apt-get install -y exuberant-ctags 153 | } 154 | 155 | 156 | # 获取linux发行版名称 157 | function get_linux_distro() 158 | { 159 | if grep -Eq "Ubuntu" /etc/*-release; then 160 | echo "Ubuntu" 161 | elif grep -Eq "Deepin" /etc/*-release; then 162 | echo "Deepin" 163 | elif grep -Eq "Raspbian" /etc/*-release; then 164 | echo "Raspbian" 165 | elif grep -Eq "uos" /etc/*-release; then 166 | echo "UOS" 167 | elif grep -Eq "LinuxMint" /etc/*-release; then 168 | echo "LinuxMint" 169 | elif grep -Eq "elementary" /etc/*-release; then 170 | echo "elementaryOS" 171 | elif grep -Eq "Debian" /etc/*-release; then 172 | echo "Debian" 173 | elif grep -Eq "Kali" /etc/*-release; then 174 | echo "Kali" 175 | elif grep -Eq "Parrot" /etc/*-release; then 176 | echo "Parrot" 177 | elif grep -Eq "CentOS" /etc/*-release; then 178 | echo "CentOS" 179 | elif grep -Eq "fedora" /etc/*-release; then 180 | echo "fedora" 181 | elif grep -Eq "openSUSE" /etc/*-release; then 182 | echo "openSUSE" 183 | elif grep -Eq "Arch Linux" /etc/*-release; then 184 | echo "ArchLinux" 185 | elif grep -Eq "ManjaroLinux" /etc/*-release; then 186 | echo "ManjaroLinux" 187 | elif grep -Eq "Gentoo" /etc/*-release; then 188 | echo "Gentoo" 189 | elif grep -Eq "alpine" /etc/*-release; then 190 | echo "Alpine" 191 | else 192 | echo "Unknow" 193 | fi 194 | } 195 | 196 | # 获取日期 197 | function get_datetime() 198 | { 199 | time=$(date "+%Y%m%d%H%M%S") 200 | echo $time 201 | } 202 | 203 | # 判断文件是否存在 204 | function is_exist_file() 205 | { 206 | filename=$1 207 | if [ -f $filename ]; then 208 | echo 1 209 | else 210 | echo 0 211 | fi 212 | } 213 | 214 | # 判断目录是否存在 215 | function is_exist_dir() 216 | { 217 | dir=$1 218 | if [ -d $dir ]; then 219 | echo 1 220 | else 221 | echo 0 222 | fi 223 | } 224 | 225 | #备份原有的.vimrc文件 226 | function backup_vimrc_file() 227 | { 228 | old_vimrc=$HOME"/.vimrc" 229 | is_exist=$(is_exist_file $old_vimrc) 230 | if [ $is_exist == 1 ]; then 231 | time=$(get_datetime) 232 | backup_vimrc=$old_vimrc"_bak_"$time 233 | read -p "Find "$old_vimrc" already exists,backup "$old_vimrc" to "$backup_vimrc"? [Y/N] " ch 234 | if [[ $ch == "Y" ]] || [[ $ch == "y" ]]; then 235 | cp $old_vimrc $backup_vimrc 236 | fi 237 | fi 238 | } 239 | 240 | #备份原有的.vimrc.custom.plugins文件 241 | function backup_vimrc_custom_plugins_file() 242 | { 243 | old_vimrc_plugins=$HOME"/.vimrc.custom.plugins" 244 | is_exist=$(is_exist_file $old_vimrc_plugins) 245 | if [ $is_exist == 1 ]; then 246 | time=$(get_datetime) 247 | backup_vimrc_plugins=$old_vimrc_plugins"_bak_"$time 248 | read -p "Find "$old_vimrc_plugins" already exists,backup "$old_vimrc_plugins" to "$backup_vimrc_plugins"? [Y/N] " ch 249 | if [[ $ch == "Y" ]] || [[ $ch == "y" ]]; then 250 | cp $old_vimrc_plugins $backup_vimrc_plugins 251 | fi 252 | fi 253 | } 254 | 255 | #备份原有的.vimrc.custom.config文件 256 | function backup_vimrc_custom_config_file() 257 | { 258 | old_vimrc_config=$HOME"/.vimrc.custom.config" 259 | is_exist=$(is_exist_file $old_vimrc_config) 260 | if [ $is_exist == 1 ]; then 261 | time=$(get_datetime) 262 | backup_vimrc_config=$old_vimrc_config"_bak_"$time 263 | read -p "Find "$old_vimrc_config" already exists,backup "$old_vimrc_config" to "$backup_vimrc_config"? [Y/N] " ch 264 | if [[ $ch == "Y" ]] || [[ $ch == "y" ]]; then 265 | cp $old_vimrc_config $backup_vimrc_config 266 | fi 267 | fi 268 | } 269 | 270 | #备份原有的.vim目录 271 | function backup_vim_dir() 272 | { 273 | old_vim=$HOME"/.vim" 274 | is_exist=$(is_exist_dir $old_vim) 275 | if [ $is_exist == 1 ]; then 276 | time=$(get_datetime) 277 | backup_vim=$old_vim"_bak_"$time 278 | read -p "Find "$old_vim" already exists,backup "$old_vim" to "$backup_vim"? [Y/N] " ch 279 | if [[ $ch == "Y" ]] || [[ $ch == "y" ]]; then 280 | cp -R $old_vim $backup_vim 281 | fi 282 | fi 283 | } 284 | 285 | # 备份原有的.vimrc和.vim 286 | function backup_vimrc_and_vim() 287 | { 288 | backup_vimrc_file 289 | backup_vimrc_custom_plugins_file 290 | backup_vimrc_custom_config_file 291 | backup_vim_dir 292 | } 293 | 294 | # 在mac上安装vimfast 295 | function install_vimplus_on_mac() 296 | { 297 | backup_vimrc_and_vim 298 | install_prepare_software_on_mac 299 | begin_install_vimplus 300 | } 301 | 302 | # 在ubuntu上安装vimplus 303 | function install_vimplus_on_ubuntu() 304 | { 305 | backup_vimrc_and_vim 306 | install_prepare_software_on_ubuntu 307 | begin_install_vimplus 308 | } 309 | 310 | # 在debian上安装vimplus 311 | function install_vimplus_on_debian() 312 | { 313 | backup_vimrc_and_vim 314 | install_prepare_software_on_debian 315 | begin_install_vimplus 316 | } 317 | 318 | function install_vimplus_on_tmux() 319 | { 320 | backup_vimrc_and_vim 321 | install_prepare_software_on_tmux 322 | begin_install_vimplus 323 | } 324 | 325 | # 在linux平上台安装vimplus 326 | function install_vimplus_on_linux() 327 | { 328 | distro=`get_linux_distro` 329 | echo "Linux distro: "${distro} 330 | 331 | if [ ${distro} == "Ubuntu" ]; then 332 | install_vimplus_on_ubuntu 333 | elif [ ${distro} == "Deepin" ]; then 334 | install_vimplus_on_ubuntu 335 | elif [ ${distro} == "LinuxMint" ]; then 336 | install_vimplus_on_ubuntu 337 | elif [ ${distro} == "elementaryOS" ]; then 338 | install_vimplus_on_ubuntu 339 | elif [ ${distro} == "Debian" ]; then 340 | install_vimplus_on_debian 341 | elif [ ${distro} == "Raspbian" ]; then 342 | install_vimplus_on_debian 343 | elif [ ${distro} == "UOS" ]; then 344 | install_vimplus_on_debian 345 | elif [ ${distro} == "Kali" ]; then 346 | install_vimplus_on_debian 347 | else 348 | echo "Not support linux distro: "${distro} 349 | fi 350 | } 351 | 352 | # 获取当前时间戳 353 | function get_now_timestamp() 354 | { 355 | cur_sec_and_ns=`date '+%s-%N'` 356 | echo ${cur_sec_and_ns%-*} 357 | } 358 | 359 | function main(){ 360 | begin=`get_now_timestamp` 361 | 362 | type=$(uname) 363 | echo "Platform type: "${type} 364 | 365 | if [ ${type} == "Linux" ]; then 366 | tp=$(uname -a) 367 | if [[ $tp =~ "Android" ]]; then 368 | install_vimplus_on_tmux 369 | else 370 | install_vimplus_on_linux 371 | fi 372 | elif [ ${type} == "Darwin" ]; then 373 | install_vimplus_on_mac 374 | else 375 | echo "Not support platform type: "${type} 376 | fi 377 | 378 | end=`get_now_timestamp` 379 | second=`expr ${end} - ${begin}` 380 | min=`expr ${second} / 60` 381 | echo "It takes "${min}" minutes." 382 | } 383 | 384 | main 385 | -------------------------------------------------------------------------------- /install_without_sudo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 拷贝文件 4 | function copy_files() 5 | { 6 | rm -rf ~/.vimrc 7 | ln -s ${PWD}/.vimrc ~ 8 | 9 | mkdir ~/.vim 10 | rm -rf ~/.vim/colors 11 | ln -s ${PWD}/colors ~/.vim 12 | 13 | rm -rf ~/.vim/ftplugin 14 | ln -s ${PWD}/ftplugin ~/.vim 15 | 16 | rm -rf ~/.vim/autoload 17 | ln -s ${PWD}/autoload ~/.vim 18 | 19 | ln -s ${PWD}/coc/coc-settings.json ~/.vim/coc-settings.json 20 | } 21 | 22 | # 安装coc插件 23 | function install_plug() 24 | { 25 | mkdir ~/.vim/plugged 26 | ./shell/plug.sh 27 | # curl --compressed -o- -L https://yarnpkg.com/install.sh | bash 28 | 29 | ./shell/nodejs.sh 0 30 | type node 31 | if [ $? == 1 ];then 32 | npm config set registry https://registry.npmmirror.com 33 | # https://registry.npmjs.org/ 34 | # npm install -g yarn 35 | git clone -b release https://gitee.com/zgpio/coc.nvim.git ~/.vim/plugged/coc.nvim 36 | cd ~/.vim/plugged/coc.nvim 37 | git reset --hard v0.0.81 38 | 39 | # cd ~/.vim/plugged/coc.nvim 40 | # yarn install 41 | # yarn build 42 | vim -c "PlugInstall" -c "qa" 43 | fi 44 | 45 | if [ -d ~/.vim/plugged/vim-airline/autoload/airline/extensions ];then 46 | mv ${PWD}/vimscript/branch.vim ~/.vim/plugged/vim-airline/autoload/airline/extensions 47 | # mv ${PWD}/vimscript/coc.vim ~/.vim/plugged/vim-airline/autoload/airline/extensions 48 | fi 49 | 50 | chmod 664 ~/.viminfo 51 | 52 | mkdir ~/.local;mkdir ~/.local/bin 53 | 54 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/ctagsv1.0.0/ctags -O ~/.local/bin/ctags 55 | chmod +x ~/.local/bin/ctags 56 | 57 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/lfv1.0.0/lf -O ~/.local/bin/lf 58 | chmod +x ~/.local/bin/lf 59 | 60 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/rgv1.0.0/rg.tar.gz 61 | tar -zxvf ./rg.tar.gz -C ~/.local/bin 62 | mv ./ripgrep-13.0.0-x86_64-unknown-linux-musl/rg ~/.local/bin/rg 63 | rm -rf ./ripgrep-13.0.0-x86_64-unknown-linux-musl ./rg.tar.gz 64 | 65 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/cmdv1.0.0/lazygit.tar.gz 66 | tar -zxvf ./lazygit.tar.gz -C ~/.local/bin 67 | chmod +x ~/.local/bin/lazygit 68 | rm ./lazygit.tar.gz ~/.local/bin/README.md ~/.local/bin/LICENSE 69 | } 70 | 71 | # 安装vim插件 72 | function install_vim_plugin() 73 | { 74 | vim -c "PlugInstall" -c "qa" 75 | } 76 | 77 | # 安装linux平台字体 78 | function install_fonts_on_linux() 79 | { 80 | mkdir -p ~/.local/share/fonts 81 | rm -rf ~/.local/share/fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf 82 | cp ./fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf ~/.local/share/fonts 83 | 84 | fc-cache -vf ~/.local/share/fonts 85 | } 86 | 87 | # 打印logo 88 | function print_logo() 89 | { 90 | color="$(tput setaf 6)" 91 | normal="$(tput sgr0)" 92 | printf "${color}" 93 | echo ' _ __ _ ' 94 | echo ' (_) / _| | | ' 95 | echo '__ ___ _ __ ___ | |_ __ _ ___| |_ ' 96 | echo '\ \ / / | "_ " _ \| _/ _" / __| __|' 97 | echo ' \ V /| | | | | | | || (_| \__ \ |_ ' 98 | echo ' \_/ |_|_| |_| |_|_| \__,_|___/\__|' 99 | echo '' 100 | echo 'install ok' 101 | echo 'Just enjoy it!' 102 | echo 'p.s. Follow me at https://github.com/chenxuan520.' 103 | echo '' 104 | printf "${normal}" 105 | } 106 | 107 | # 开始安装vimplus 108 | function begin_install_vimplus() 109 | { 110 | copy_files 111 | install_fonts_on_linux 112 | install_plug 113 | print_logo 114 | } 115 | 116 | function main(){ 117 | begin_install_vimplus 118 | } 119 | 120 | main 121 | -------------------------------------------------------------------------------- /old/.vimrc.custom.config: -------------------------------------------------------------------------------- 1 | 2 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 3 | " 用户自定义配置(该文件放一般性配置,可覆盖~/.vimrc里的配置,若要增加、卸载插件,请放入~/.vimrc.custom.plugins) 4 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 5 | 6 | " 开启相对行号 7 | " set relativenumber 8 | 9 | " 开启鼠标 10 | " set mouse=a 11 | 12 | " 设置光标所在列高亮 13 | " set cursorcolumn 14 | 15 | " indentLine 开启代码对齐线 16 | " let g:indentLine_enabled = 1 17 | 18 | " markdown 19 | " let system = system('uname -s') 20 | " if system == "Darwin\n" 21 | " let g:mkdp_path_to_chrome = "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome" 22 | " else 23 | " let g:mkdp_path_to_chrome = '/usr/bin/google-chrome-stable %U' 24 | " endif 25 | " nmap MarkdownPreview 26 | " imap MarkdownPreview 27 | " nmap StopMarkdownPreview 28 | " imap StopMarkdownPreview 29 | 30 | " Doxygen 31 | " let g:DoxygenToolkit_authorName="chenxuan, 1607772321@qq.com" 32 | " let s:licenseTag = "Copyright(C)\" 33 | " let s:licenseTag = s:licenseTag . "For free\" 34 | " let s:licenseTag = s:licenseTag . "All right reserved\" 35 | " let g:DoxygenToolkit_licenseTag = s:licenseTag 36 | " let g:DoxygenToolkit_briefTag_funcName="yes" 37 | " let g:doxygen_enhanced_color=1 38 | " let g:DoxygenToolkit_commentType="Qt" 39 | 40 | 41 | -------------------------------------------------------------------------------- /old/.vimrc.custom.plugins: -------------------------------------------------------------------------------- 1 | 2 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 3 | " 用户自定义插件列表(该文件只放插件,若要增加其他配置,请放入~/.vimrc.custom.config) 4 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 5 | 6 | " 增加~/.vimrc里没有的插件 7 | " 增加插件后需要进行插件安装,安装步骤如下: 8 | " 1.执行:w保存修改 9 | " 2.执行,s重新加载vim配置 10 | " 3.执行,,i进行插件安装 11 | " Plug 'iamcco/mathjax-support-for-mkdp' 12 | " (需要自己安装nodejs和yarn) Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install' } 13 | " Plug 'Yggdroot/indentLine' 14 | " Plug 'gorodinskiy/vim-coloresque' 15 | " Plug 'vim-scripts/DoxygenToolkit.vim' 16 | 17 | " 卸载/禁用~/.vimrc里的默认插件 18 | " UnPlug 'chxuan/prepare-code' 19 | -------------------------------------------------------------------------------- /old/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 chxuan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /old/install_to_user.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 获取平台类型,mac还是linux平台 4 | function get_platform_type() 5 | { 6 | echo $(uname) 7 | } 8 | 9 | # 在linux上获取当前用户 10 | function get_current_username_on_linux() 11 | { 12 | current_path=$PWD 13 | array=(${current_path//// }) 14 | 15 | if [ ${array[0]} == "root" ]; then 16 | echo ${array[0]} 17 | else 18 | echo ${array[1]} 19 | fi 20 | } 21 | 22 | # 在linux上判断用户是否存在 23 | function is_valid_user_on_linux() 24 | { 25 | desc_username=$1 26 | usernames=$(ls /home/) 27 | array=(${usernames// / }) 28 | 29 | is_found=0 30 | for username in ${array[@]} 31 | do 32 | if [ $username == $desc_username ]; then 33 | is_found=1 34 | break 35 | fi 36 | done 37 | 38 | if [ $desc_username == "root" ]; then 39 | is_found=1 40 | fi 41 | 42 | echo $is_found 43 | } 44 | 45 | # 获取日期 46 | function get_datetime() 47 | { 48 | time=$(date "+%Y%m%d%H%M%S") 49 | echo $time 50 | } 51 | 52 | # 判断文件是否存在 53 | function is_exist_file() 54 | { 55 | filename=$1 56 | if [ -f $filename ]; then 57 | echo 1 58 | else 59 | echo 0 60 | fi 61 | } 62 | 63 | # 判断目录是否存在 64 | function is_exist_dir() 65 | { 66 | dir=$1 67 | if [ -d $dir ]; then 68 | echo 1 69 | else 70 | echo 0 71 | fi 72 | } 73 | 74 | #备份原有的.vimrc文件 75 | function backup_vimrc_file() 76 | { 77 | user=$1 78 | home_path=$2 79 | old_vimrc=$home_path".vimrc" 80 | is_exist=$(is_exist_file $old_vimrc) 81 | if [ $is_exist == 1 ]; then 82 | time=$(get_datetime) 83 | backup_vimrc=$old_vimrc"_bak_"$time 84 | read -p "Find "$old_vimrc" already exists,backup "$old_vimrc" to "$backup_vimrc"? [Y/N] " ch 85 | if [[ $ch == "Y" ]] || [[ $ch == "y" ]]; then 86 | cp $old_vimrc $backup_vimrc 87 | chown $user":"$user $backup_vimrc 88 | fi 89 | fi 90 | } 91 | 92 | #备份原有的.vimrc.custom.plugins文件 93 | function backup_vimrc_custom_plugins_file() 94 | { 95 | user=$1 96 | home_path=$2 97 | old_vimrc_plugins=$home_path".vimrc.custom.plugins" 98 | is_exist=$(is_exist_file $old_vimrc_plugins) 99 | if [ $is_exist == 1 ]; then 100 | time=$(get_datetime) 101 | backup_vimrc_plugins=$old_vimrc_plugins"_bak_"$time 102 | read -p "Find "$old_vimrc_plugins" already exists,backup "$old_vimrc_plugins" to "$backup_vimrc_plugins"? [Y/N] " ch 103 | if [[ $ch == "Y" ]] || [[ $ch == "y" ]]; then 104 | cp $old_vimrc_plugins $backup_vimrc_plugins 105 | chown $user":"$user $backup_vimrc_plugins 106 | fi 107 | fi 108 | } 109 | 110 | #备份原有的.vimrc.custom.config文件 111 | function backup_vimrc_custom_config_file() 112 | { 113 | user=$1 114 | home_path=$2 115 | old_vimrc_config=$home_path".vimrc.custom.config" 116 | is_exist=$(is_exist_file $old_vimrc_config) 117 | if [ $is_exist == 1 ]; then 118 | time=$(get_datetime) 119 | backup_vimrc_config=$old_vimrc_config"_bak_"$time 120 | read -p "Find "$old_vimrc_config" already exists,backup "$old_vimrc_config" to "$backup_vimrc_config"? [Y/N] " ch 121 | if [[ $ch == "Y" ]] || [[ $ch == "y" ]]; then 122 | cp $old_vimrc_config $backup_vimrc_config 123 | chown $user":"$user $backup_vimrc_config 124 | fi 125 | fi 126 | } 127 | 128 | #备份原有的.vim目录 129 | function backup_vim_dir() 130 | { 131 | user=$1 132 | home_path=$2 133 | old_vim=$home_path".vim" 134 | is_exist=$(is_exist_dir $old_vim) 135 | if [ $is_exist == 1 ]; then 136 | time=$(get_datetime) 137 | backup_vim=$old_vim"_bak_"$time 138 | read -p "Find "$old_vim" already exists,backup "$old_vim" to "$backup_vim"? [Y/N] " ch 139 | if [[ $ch == "Y" ]] || [[ $ch == "y" ]]; then 140 | cp -R $old_vim $backup_vim 141 | chown -R $user":"$user $backup_vim 142 | fi 143 | fi 144 | } 145 | 146 | # 备份原有的.vimrc和.vim 147 | function backup_vimrc_and_vim() 148 | { 149 | backup_vimrc_file $1 $2 150 | backup_vimrc_custom_plugins_file $1 $2 151 | backup_vimrc_custom_config_file $1 $2 152 | backup_vim_dir $1 $2 153 | } 154 | 155 | # 打印logo 156 | function print_logo() 157 | { 158 | color="$(tput setaf 6)" 159 | normal="$(tput sgr0)" 160 | printf "${color}" 161 | echo ' __ __ ' 162 | echo '__ __/_/___ ___ ____ / /_ _______ ' 163 | echo '\ \ / / / __ `__ \/ __ \/ / / / / ___/ ' 164 | echo ' \ V / / / / / / / /_/ / / /_/ (__ ) ' 165 | echo ' \_/_/_/ /_/ /_/ ,___/_/\____/____/ ' 166 | echo ' /_/ ...is now installed!' 167 | echo '' 168 | echo '' 169 | echo 'Just enjoy it!' 170 | echo 'p.s. Follow me at https://github.com/chxuan.' 171 | echo '' 172 | printf "${normal}" 173 | } 174 | 175 | # 获得home路径 176 | function get_home_path() 177 | { 178 | username=$1 179 | if [ $username == "root" ]; then 180 | echo "/root/" 181 | else 182 | echo "/home/"$username"/" 183 | fi 184 | } 185 | 186 | # 在linux上将vimplus安装到指定用户 187 | function install_to_user_on_linux() 188 | { 189 | src_username=`get_current_username_on_linux` 190 | desc_username=$1 191 | 192 | # 判断是否是有效用户 193 | is_found=$(is_valid_user_on_linux $desc_username) 194 | if [ $is_found != 1 ]; then 195 | echo "Invalid username "$desc_username 196 | return 197 | fi 198 | 199 | # 判断是否是当前用户 200 | if [ $src_username == $desc_username ]; then 201 | echo "Can not install vimplus to "$desc_username 202 | return 203 | fi 204 | 205 | src_home_path=$(get_home_path $src_username) 206 | desc_home_path=$(get_home_path $desc_username) 207 | 208 | echo "Current home path:"$src_home_path 209 | echo "Installing vimplus to "$desc_home_path 210 | 211 | backup_vimrc_and_vim $desc_username $desc_home_path 212 | 213 | # 拷贝.vim目录 214 | src_vim_path=$src_home_path".vim/" 215 | desc_vim_path=$desc_home_path".vim/" 216 | 217 | rm -rf $desc_vim_path 218 | mkdir $desc_vim_path 219 | 220 | cp -R $src_vim_path"autoload/" $desc_vim_path 221 | cp -R $src_vim_path"plugged/" $desc_vim_path 222 | 223 | chown -R $desc_username":"$desc_username $desc_vim_path 224 | 225 | # 拷贝.vimplus目录 226 | src_vimplus_path=$src_home_path".vimplus/" 227 | desc_vimplus_path=$desc_home_path".vimplus/" 228 | 229 | rm -rf $desc_vimplus_path 230 | cp -R $src_vimplus_path $desc_home_path 231 | chown -R $desc_username":"$desc_username $desc_vimplus_path 232 | 233 | rm -rf $desc_home_path".vimrc.custom.plugins" 234 | cp $desc_vimplus_path".vimrc.custom.plugins" $desc_home_path 235 | chown $desc_username":"$desc_username $desc_home_path".vimrc.custom.plugins" 236 | 237 | rm -rf $desc_home_path".vimrc.custom.config" 238 | cp $desc_vimplus_path".vimrc.custom.config" $desc_home_path 239 | chown $desc_username":"$desc_username $desc_home_path".vimrc.custom.config" 240 | 241 | # 创建软链接 242 | rm -rf $desc_home_path".vimrc" 243 | ln -s $desc_vimplus_path".vimrc" $desc_home_path 244 | chown -R $desc_username":"$desc_username $desc_home_path".vimrc" 245 | 246 | rm -rf $desc_home_path".ycm_extra_conf.py" 247 | ln -s $desc_vimplus_path".ycm_extra_conf.py" $desc_home_path 248 | chown -R $desc_username":"$desc_username $desc_home_path".ycm_extra_conf.py" 249 | 250 | ln -s $desc_vimplus_path"colors" $desc_vim_path 251 | chown -R $desc_username":"$desc_username $desc_vim_path"colors" 252 | 253 | ln -s $desc_vimplus_path"ftplugin" $desc_vim_path 254 | chown -R $desc_username":"$desc_username $desc_vim_path"ftplugin" 255 | 256 | ln -s $desc_vimplus_path"autoload" $desc_vim_path 257 | chown -R $desc_username":"$desc_username $desc_vim_path"autoload" 258 | 259 | # 安装字体 260 | mkdir -p $desc_home_path".local/share/fonts/" 261 | rm -rf $desc_home_path".local/share/fonts/Droid Sans Mono Nerd Font Complete.otf" 262 | cp $desc_vimplus_path"fonts/Droid Sans Mono Nerd Font Complete.otf" $desc_home_path".local/share/fonts/" 263 | chown -R $desc_username":"$desc_username $desc_home_path".local/" 264 | fc-cache -vf $desc_home_path".local/share/fonts/" 265 | } 266 | 267 | # 脚本启动点 268 | if [ $# -lt 1 ]; then 269 | echo "Please input username!" 270 | exit 1 271 | fi 272 | 273 | type=`get_platform_type` 274 | echo "Platform type: "${type} 275 | 276 | if [ ${type} == "Linux" ]; then 277 | for username in $@ 278 | do 279 | install_to_user_on_linux $username 280 | done 281 | 282 | print_logo 283 | else 284 | echo "Not support platform type: "${type} 285 | fi 286 | 287 | -------------------------------------------------------------------------------- /old/update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 判断文件是否存在 4 | function is_exist_file() 5 | { 6 | filename=$1 7 | if [ -f $filename ]; then 8 | echo 1 9 | else 10 | echo 0 11 | fi 12 | } 13 | 14 | # 更新mac平台字体 15 | function update_fonts_on_mac() 16 | { 17 | rm -rf ~/Library/Fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf 18 | cp ./fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf ~/Library/Fonts 19 | } 20 | 21 | # 更新android平台字体 22 | function update_fonts_on_android() 23 | { 24 | rm -rf ~/.termux/font.ttf 25 | mkdir ~/.termux 26 | cp ./fonts/DejaVu.ttf ~/.termux/font.ttf 27 | 28 | # 刷新style 29 | REL="am broadcast --user 0 -a com.termux.app.reload_style com.termux" 30 | $REL > /dev/null 31 | } 32 | 33 | # 更新linux平台字体 34 | function update_fonts_on_linux() 35 | { 36 | mkdir -p ~/.local/share/fonts 37 | rm -rf ~/.local/share/fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf 38 | cp ./fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf ~/.local/share/fonts 39 | 40 | fc-cache -vf ~/.local/share/fonts 41 | } 42 | 43 | # 更新vim插件 44 | function update_vim_plugin() 45 | { 46 | # vim -c "PlugUpdate" -c "q" -c "q" 47 | } 48 | 49 | # 拷贝文件 50 | function copy_files() 51 | { 52 | rm -rf ~/.vimrc 53 | ln -s ${PWD}/.vimrc ~ 54 | 55 | vimrc_plugins=$HOME"/.vimrc.custom.plugins" 56 | is_exist=$(is_exist_file $vimrc_plugins) 57 | if [ $is_exist != 1 ]; then 58 | cp ${PWD}/.vimrc.custom.plugins ~ 59 | fi 60 | 61 | vimrc_config=$HOME"/.vimrc.custom.config" 62 | is_exist=$(is_exist_file $vimrc_config) 63 | if [ $is_exist != 1 ]; then 64 | cp ${PWD}/.vimrc.custom.config ~ 65 | fi 66 | 67 | rm -rf ~/.ycm_extra_conf.py 68 | ln -s ${PWD}/.ycm_extra_conf.py ~ 69 | 70 | rm -rf ~/.vim/colors 71 | ln -s ${PWD}/colors ~/.vim 72 | 73 | rm -rf ~/.vim/ftplugin 74 | ln -s ${PWD}/ftplugin ~/.vim 75 | 76 | rm -rf ~/.vim/autoload 77 | ln -s ${PWD}/autoload ~/.vim 78 | } 79 | 80 | # 打印logo 81 | function print_logo() 82 | { 83 | color="$(tput setaf 6)" 84 | normal="$(tput sgr0)" 85 | printf "${color}" 86 | echo 'Just enjoy it!' 87 | echo 'p.s. Follow me at https://github.com/chenxuan520.' 88 | echo '' 89 | printf "${normal}" 90 | } 91 | 92 | # 在mac更新vimplus 93 | function update_vimplus_on_mac() 94 | { 95 | git pull origin master 96 | copy_files 97 | update_fonts_on_mac 98 | update_vim_plugin 99 | print_logo 100 | } 101 | 102 | # 在linux更新vimplus 103 | function update_vimplus_on_linux() 104 | { 105 | git pull origin master 106 | copy_files 107 | update_fonts_on_linux 108 | update_vim_plugin 109 | print_logo 110 | } 111 | 112 | # 在android更新vimplus 113 | function update_vimplus_on_android() 114 | { 115 | git pull origin master 116 | copy_files 117 | update_fonts_on_android 118 | update_vim_plugin 119 | print_logo 120 | } 121 | 122 | # 获取当前时间戳 123 | function get_now_timestamp() 124 | { 125 | cur_sec_and_ns=`date '+%s-%N'` 126 | echo ${cur_sec_and_ns%-*} 127 | } 128 | 129 | # main函数 130 | function main() 131 | { 132 | begin=`get_now_timestamp` 133 | 134 | type=$(uname) 135 | echo "Platform type: "${type} 136 | 137 | if [ ${type} == "Darwin" ]; then 138 | update_vimplus_on_mac 139 | elif [ ${type} == "Linux" ]; then 140 | tp=$(uname -a) 141 | if [[ $tp =~ "Android" ]]; then 142 | echo "Android" 143 | update_vimplus_on_android 144 | else 145 | update_vimplus_on_linux 146 | fi 147 | else 148 | echo "Not support platform type: "${type} 149 | fi 150 | 151 | end=`get_now_timestamp` 152 | second=`expr ${end} - ${begin}` 153 | min=`expr ${second} / 60` 154 | echo "It takes "${min}" minutes." 155 | } 156 | 157 | # 调用main函数 158 | main 159 | -------------------------------------------------------------------------------- /shell/coc_plug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | vim -c "CocInstall coc-sh@0.6.1 coc-json coc-snippets coc-vimlsp" 3 | vim -c "CocInstall coc-explorer" 4 | echo "nmap N :CocCommand explorer" >> ~/.vimrc 5 | -------------------------------------------------------------------------------- /shell/color.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # get more color from https://github.com/topics/vim-colorscheme 3 | wget https://gitee.com/mirrorvim/vim-fast/releases/download/v1.0.3/color.tar.gz 4 | if [ ! -d "~/.vim" ]; then 5 | mkdir ~/.vim 6 | fi 7 | tar -zxvf color.tar.gz -C ~/.vim 8 | -------------------------------------------------------------------------------- /shell/cpp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # check g++ 4 | type g++ 5 | if [ $? == 1 ];then 6 | echo 'Please install g++ first' 7 | exit 0 8 | fi 9 | 10 | # for mac install 11 | if [ "$(uname)" == "Darwin" ]; then 12 | brew install llvm 13 | vim -c "CocInstall coc-clangd" 14 | exit 0 15 | fi 16 | 17 | # linux install 18 | sudo apt update 19 | sudo apt-get install -y wget clangd 20 | type clangd 21 | if [ $? == 1 ];then 22 | wget https://gitee.com/mirrorvim/vim-coc/attach_files/1084289/download/clangd-linux-14.0.3.zip 23 | sudo unzip ./clangd-linux-14.0.3.zip 24 | sudo ln -s ./clangd_14.0.3/bin/clangd /usr/bin/clangd 25 | fi 26 | # can download it by https://github.com/clangd/clangd/releases/download/15.0.6/clangd-linux-15.0.6.zip 27 | vim -c "CocInstall coc-clangd" 28 | -------------------------------------------------------------------------------- /shell/doc_zh.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | wget https://gitee.com/mirrorvim/vim-fast/releases/download/v1.0.2/doc.tar.gz 3 | tar -zxvf ./doc.tar.gz 4 | mv ${PWD}/vimcdoc/doc ~/.vim/doc 5 | rm ./doc.tar.gz 6 | rm -rf ${PWD}/vimcdoc 7 | -------------------------------------------------------------------------------- /shell/go.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | 4 | # for mac install 5 | if [ "$(uname)" == "Darwin" ]; then 6 | brew install go 7 | vim -c "CocInstall coc-go@1.2.1 coc-snippets" 8 | go env -w GO111MODULE=on 9 | go env -w GOPROXY=https://goproxy.cn,direct 10 | exit 0 11 | fi 12 | 13 | type go 14 | if [ $? == 1 ];then 15 | sudo apt update 16 | sudo apt-get install -y wget 17 | sudo apt-get remove golang 18 | # it may be very slow,so advise to use apt intsall 19 | # https://golang.google.cn/dl/ or download form there 20 | wget https://golang.google.cn/dl/go1.22.0.linux-amd64.tar.gz 21 | sudo rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz 22 | sudo rm /usr/bin/go 23 | sudo rm /usr/bin/gofmt 24 | sudo ln -s /usr/local/go/bin/go /usr/bin/go 25 | sudo ln -s /usr/local/go/bin/gofmt /usr/bin/gofmt 26 | go env -w GO111MODULE=on 27 | go env -w GOPROXY=https://goproxy.cn,direct 28 | fi 29 | type go 30 | if [ $? == 1 ];then 31 | sudo apt-get install -y golang-go 32 | fi 33 | go env -w GO111MODULE=on 34 | go env -w GOPROXY=https://goproxy.cn,direct 35 | vim -c "CocInstall coc-go@1.2.1 coc-snippets" 36 | -------------------------------------------------------------------------------- /shell/link.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ -f ~/.vimrc ]; then 3 | mv ~/.vimrc ~/.vimrc.bak 4 | fi 5 | # if [ -f ~/.gvimrc ]; then 6 | # mv ~/.gvimrc ~/.gvimrc.bak 7 | # fi 8 | if [ -d ~/.vim/plugged/vim-airline/autoload/airline/extensions ];then 9 | ln -s ${PWD}/vimscript/branch.vim ~/.vim/plugged/vim-airline/autoload/airline/extensions/branch.vim 10 | fi 11 | ln -s ${PWD}/.vimrc ~/.vimrc 12 | cp -r ./colors ~/.vim/ 13 | cp -r ./autoload ~/.vim/ 14 | cp -r ./ftplugin ~/.vim/ 15 | -------------------------------------------------------------------------------- /shell/nodejs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "this script need root permission,if you don't have root permission,please download nodejs from https://nodejs.org/en/download/ and install it manually" 3 | 4 | #check mac version 5 | type=$(uname) 6 | if [ ${type} == "Darwin" ]; then 7 | brew install node 8 | exit 9 | fi 10 | 11 | 12 | function AddPath() 13 | { 14 | OLD_IFS="$IFS" 15 | IFS=":" 16 | arr=($PATH) 17 | IFS="$OLD_IFS" 18 | for s in ${arr[@]} 19 | do 20 | if [ $s == "$HOME/.local/bin" ]; then 21 | return 22 | fi 23 | done 24 | echo 'export PATH=$HOME/.local/bin:$PATH' >> ~/.bashrc 25 | } 26 | 27 | type node 28 | if [ $? == 1 ];then 29 | NODEVERSION='v20.14.0' 30 | PKGNAME=node-${NODEVERSION}-linux-x64.tar.xz 31 | URL=https://cdn.npmmirror.com/binaries/node/${NODEVERSION}/${PKGNAME} 32 | if [ $# == 0 ]; then 33 | PREFIX=/usr/local/ 34 | else 35 | PREFIX=~/.local/ 36 | AddPath 37 | fi 38 | wget $URL 39 | sudo tar xf ${PKGNAME} \ 40 | --exclude CHANGELOG.md \ 41 | --exclude LICENSE \ 42 | --exclude README.md \ 43 | --strip-components 1 \ 44 | -C "${PREFIX}" 45 | fi 46 | -------------------------------------------------------------------------------- /shell/nvim.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | function main(){ 3 | echo 'it will change init.vim please make sure init.vim has be stored' 4 | read -p "continue?[y/n]" ch 5 | if [[ $ch == "n" ]] || [[ $ch == "N" ]]; then 6 | return 7 | fi 8 | type nvim 9 | if [ $? == 1 ];then 10 | # not mac system 11 | if [ "$(uname)" != "Darwin" ]; then 12 | sudo apt update 13 | sudo apt install -y neovim 14 | else 15 | brew install neovim 16 | fi 17 | fi 18 | 19 | pip3 install neovim 20 | pip3 install pynvim 21 | 22 | rm ~/.config/nvim/init.vim 23 | mkdir ~/.config/nvim 24 | ln -s $PWD/init.vim ~/.config/nvim/init.vim 25 | ln -s $PWD/coc/coc-settings.json ~/.config/nvim/coc-settings.json 26 | ln -s $PWD/autoload ~/.config/nvim/autoload 27 | ln -s $PWD/ftplugin ~/.config/nvim/ftplugin 28 | cp $PWD/shell/nvr.py ~/.config/nvim/nvr.py 29 | cp -r $PWD/colors ~/.config/nvim/ 30 | 31 | cd ~/.vim/plugged/coc.nvim 32 | git pull 33 | 34 | color="$(tput setaf 6)" 35 | normal="$(tput sgr0)" 36 | printf "${color}" 37 | echo ' _ __ _ ' 38 | echo ' (_) / _| | | ' 39 | echo '__ ___ _ __ ___ | |_ __ _ ___| |_ ' 40 | echo '\ \ / / | "_ " _ \| _/ _" / __| __|' 41 | echo ' \ V /| | | | | | | || (_| \__ \ |_ ' 42 | echo ' \_/ |_|_| |_| |_|_| \__,_|___/\__|' 43 | echo '' 44 | echo "nvim install ok" 45 | echo 'Just enjoy it!' 46 | echo 'p.s. Follow me at https://github.com/chenxuan520.' 47 | echo '' 48 | printf "${normal}" 49 | } 50 | main 51 | -------------------------------------------------------------------------------- /shell/pack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this file is for author pack the plug,don't run it 4 | 5 | ignore="$HOME/.vim/plugged/coc.nvim $HOME/.vim/plugged/copilot.vim $HOME/.vim/plugged/tokyonight.nvim" 6 | temp="$HOME/.vim/coc.nvim $HOME/.vim/copilot.vim $HOME/.vim/tokyonight.nvim" 7 | 8 | rm ./vim.tar.gz 9 | mv $ignore ~/.vim/ 10 | cd ~/.vim/plugged 11 | tar -zcvf ~/vim-fast/vim.tar.gz -C ~/.vim/plugged ./* 12 | mv $temp ~/.vim/plugged/ 13 | 14 | mkdir -p ~/vim-fast/plugged 15 | tar -zxvf ~/vim-fast/vim.tar.gz -C ~/vim-fast/plugged/ 16 | ls ~/vim-fast/plugged 17 | rm -rf ~/vim-fast/plugged 18 | -------------------------------------------------------------------------------- /shell/plug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rm ./vim.tar.gz 3 | wget https://gitee.com/mirrorvim/vim-fast/releases/download/v1.0.16/vim.tar.gz 4 | tar -zxvf ${PWD}/vim.tar.gz -C ~/.vim/plugged/ 5 | ls -alh ~/.vim/plugged 6 | 7 | git config --global --add safe.directory "*" 8 | -------------------------------------------------------------------------------- /shell/plug_create.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rm ./vim.tar.gz 3 | cd ~/.vim/plugged 4 | mv ./coc.nvim ~/.vim/ 5 | tar -zcvf vim.tar.gz . 6 | mv ~/.vim/coc.nvim ~/.vim/plugged 7 | mv ./vim.tar.gz ~/vim-fast 8 | -------------------------------------------------------------------------------- /shell/python.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # echo -e "{\n\t\"python.pythonPath\" : \"/usr/bin/python3\"\n}" > ~/.vim/coc-settings.json 3 | pip3 install autopep8 4 | vim -c "CocInstall coc-pyright" 5 | -------------------------------------------------------------------------------- /shell/rust.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Warning! make sure vim version greater than 8.2 or use nvim,or it will not effort" 3 | type rustc 4 | if [ $? == 1 ];then 5 | export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static 6 | export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup 7 | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 8 | fi 9 | type rust-analyzer 10 | if [ $? == 1 ]; then 11 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/cmdv1.0.0/rust-analyzer-x86_64-unknown-linux-gnu 12 | chmod +x ./rust-analyzer-x86_64-unknown-linux-gnu 13 | mkdir ~/.local 14 | mkdir ~/.local/bin 15 | ln -s $PWD/rust-analyzer-x86_64-unknown-linux-gnu ~/.local/bin/rust-analyzer 16 | fi 17 | rustup component add rust-analyzer 18 | 19 | vim -c "CocInstall coc-rust-analyzer" 20 | -------------------------------------------------------------------------------- /shell/self.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | read -p "please input your name:" name 3 | read -p "please input your email:" email 4 | sed --follow-symlinks -i "s/chenxuan[^5]/${name}'/g" ~/.vimrc 5 | sed --follow-symlinks -i "s/ chenxuan/ ${name}/g" ~/.vimrc 6 | sed -i "s/chenxuan/${name}/g" ~/.vim/ftplugin/*/comment.vim 7 | sed -i "s/1607772321@qq.com/${email}/g" ~/.vimrc 8 | sed -i "s/1607772321@qq.com/${email}/g" ~/.vim/ftplugin/*/comment.vim 9 | echo "change ok" 10 | -------------------------------------------------------------------------------- /shell/tool.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | mkdir ~/.local 2>/dev/null 3 | mkdir ~/.local/bin 2>/dev/null 4 | 5 | function command_exists { 6 | if command -v "$1" &> /dev/null 7 | then 8 | return 0 # 返回0表示命令存在 9 | else 10 | return 1 # 返回1表示命令不存在 11 | fi 12 | } 13 | 14 | function file_exist(){ 15 | if [ -f "$1" ]; then 16 | return 0 17 | else 18 | return 1 19 | fi 20 | } 21 | 22 | install_lazygit() { 23 | if command_exists "lazygit"; then 24 | echo "lazygit command exists" 25 | return 26 | fi 27 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/cmdv1.0.0/lazygit.tar.gz 28 | tar -zxvf ./lazygit.tar.gz -C ~/.local/bin 29 | rm ./lazygit.tar.gz ~/.local/bin/README.md ~/.local/bin/LICENSE 30 | } 31 | 32 | install_ctags(){ 33 | if command_exists "ctags"; then 34 | echo "ctags command exists" 35 | return 36 | fi 37 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/ctagsv1.0.0/ctags -O ~/.local/bin/ctags 38 | chmod +x ~/.local/bin/ctags 39 | } 40 | 41 | install_lf(){ 42 | if command_exists "lf"; then 43 | echo "lf command exists" 44 | return 45 | fi 46 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/lfv1.0.0/lf -O ~/.local/bin/lf 47 | chmod +x ~/.local/bin/lf 48 | } 49 | 50 | install_fzf(){ 51 | if command_exists "fzf"; then 52 | echo "fzf command exists" 53 | return 54 | fi 55 | wget https://gitee.com/mirrorvim/userful-tools-2/releases/download/cmdv1.0.0/fzf-0.36.0-linux_amd64.tar.gz 56 | tar -zxvf ./fzf-0.36.0-linux_amd64.tar.gz -C ~/.local/bin 57 | rm ./fzf-0.36.0-linux_amd64.tar.gz 58 | } 59 | 60 | install_nvr(){ 61 | if file_exist ~/.config/nvim/nvr.py; then 62 | echo "nvr exists" 63 | return 64 | fi 65 | mkdir -p ~/.config/nvim 66 | wget https://gitee.com/mirrorvim/vim-fast/raw/master/shell/nvr.py -O ~/.config/nvim/nvr.py 67 | chmod +x ~/.config/nvim/nvr.py 68 | } 69 | 70 | check_and_add_to_path(){ 71 | if [[ ":$PATH:" == *":$HOME/.local/bin:"* ]]; then 72 | echo "~/.local/bin is already in your PATH." 73 | else 74 | read -p "Add ~/.local/bin to your PATH? (y/n) " choice 75 | if [ "$choice" = "y" ]; then 76 | echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc 77 | export PATH="$HOME/.local/bin:$PATH" 78 | echo "~/.local/bin has been added to your PATH." 79 | else 80 | echo "No changes have been made to your PATH." 81 | fi 82 | fi 83 | } 84 | 85 | case "$1" in 86 | lazygit) 87 | install_lazygit 88 | check_and_add_to_path 89 | ;; 90 | ctags) 91 | install_ctags 92 | check_and_add_to_path 93 | ;; 94 | fzf) 95 | install_fzf 96 | check_and_add_to_path 97 | ;; 98 | lf) 99 | install_lf 100 | check_and_add_to_path 101 | ;; 102 | nvr) 103 | install_nvr 104 | ;; 105 | *) 106 | echo $"Usage: $0 {lazygit|ctags|fzf|lf|nvr}" 107 | exit 2 108 | ;; 109 | esac 110 | -------------------------------------------------------------------------------- /shell/vim_compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo apt install -y python3-dev python-dev 3 | sudo apt install -y libncurses5-dev 4 | git clone --depth=1 https://gitee.com/mirrors/vim.git 5 | cd vim 6 | # ./configure --with-features=huge \ 7 | # --enable-multibyte \ 8 | # --enable-pythoninterp=dynamic \ 9 | # --with-python-config-dir=/usr/lib/python2.7/config \ 10 | # --enable-python3interp=dynamic \ 11 | # --enable-cscope \ 12 | # --enable-gui=auto \ 13 | # --enable-gtk2-check \ 14 | # --enable-fontset \ 15 | # --enable-largefile \ 16 | # --disable-netbeans \ 17 | # --enable-fail-if-missing \ 18 | # --prefix=/usr/local 19 | 20 | ./configure --with-features=huge \ 21 | --enable-multibyte \ 22 | --enable-pythoninterp=dynamic \ 23 | --enable-python3interp=dynamic \ 24 | --enable-gui=auto \ 25 | --enable-gtk2-check \ 26 | --enable-cscope \ 27 | --enable-largefile \ 28 | --enable-fail-if-missing \ 29 | --prefix=/usr 30 | 31 | make 32 | sudo make install 33 | -------------------------------------------------------------------------------- /shell/webinstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | type git 3 | if [ $? == 1 ];then 4 | # not mac system 5 | if [ "$(uname)" != "Darwin" ]; then 6 | sudo apt update 7 | sudo apt install -y git 8 | else 9 | brew install git 10 | fi 11 | fi 12 | git clone https://gitee.com/mirrorvim/vim-fast 13 | cd vim-fast 14 | ./install.sh 15 | -------------------------------------------------------------------------------- /shell/websimple.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | wget https://gitee.com/mirrorvim/vim-fast/raw/master/vimrc-no-plug -O ~/.vimrc 3 | -------------------------------------------------------------------------------- /shell/win_install.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | REM echo info 4 | echo System version:%OS% 5 | echo Home path is %USERPROFILE% 6 | echo. 7 | 8 | REM check for bin 9 | where git >nul 2>nul 10 | if %errorlevel% equ 0 ( 11 | echo git is installed on this computer. 12 | where git 13 | ) else ( 14 | color 0C 15 | echo git is not installed on this computer. 16 | echo get it from https://pc.qq.com/detail/13/detail_22693.html 17 | pause 18 | return 19 | ) 20 | where vim >nul 2>nul 21 | if %errorlevel% equ 0 ( 22 | echo vim is installed on this computer. 23 | where vim 24 | ) else ( 25 | color 0C 26 | echo vim is not installed on this computer. 27 | echo get it from https://github.com/vim/vim-win32-installer/releases 28 | pause 29 | exit 30 | ) 31 | where node >nul 2>nul 32 | if %errorlevel% equ 0 ( 33 | echo nodejs is installed on this computer. 34 | where node 35 | ) else ( 36 | color 0C 37 | echo nodejs is not installed on this computer. 38 | echo get it from https://nodejs.org/en/download 39 | pause 40 | exit 41 | ) 42 | 43 | REM ask for if continue 44 | set /p choice=it will delete you old vim config,do you want to continue? (y/n) 45 | if /i "%choice%"=="n" ( 46 | echo Exiting the script... 47 | pause 48 | exit 49 | ) 50 | 51 | REM remove old config 52 | rmdir /s /q "%USERPROFILE%\vimfiles" 53 | 54 | REM check vimfiles path 55 | if not exist "%USERPROFILE%\vimfiles" mkdir "%USERPROFILE%\vimfiles" 56 | 57 | REM link the vimfiles 58 | copy .\.vimrc %USERPROFILE%\_vimrc 59 | mklink /J %USERPROFILE%\vimfiles\autoload .\autoload 60 | mklink /J %USERPROFILE%\vimfiles\ftplugin .\ftplugin 61 | mklink /J %USERPROFILE%\vimfiles\colors .\colors 62 | 63 | REM check vim-plug path 64 | if not exist "%USERPROFILE%\.vim\plugged" mkdir "%USERPROFILE%\.vim\plugged" 65 | 66 | REM coc install 67 | IF NOT EXIST "%USERPROFILE%\.vim\plugged\coc.nvim" ( 68 | git clone -b release https://gitee.com/zgpio/coc.nvim.git "%USERPROFILE%\.vim\plugged\coc.nvim" 69 | cd "%USERPROFILE%\.vim\plugged" 70 | git reset --hard v0.0.81 71 | ) 72 | 73 | REM install other plug,TODO 74 | REM cd "%USERPROFILE%\.vim" 75 | REM del ./vim.tar.gz 76 | REM curl https://gitee.com/mirrorvim/vim-fast/releases/download/v1.0.16/vim.tar.gz -o vim.tar.gz 77 | REM tar -zxvf ./vim.tar.gz 78 | vim -c "PlugInstall" -c "qa" 79 | 80 | echo vim-fast install ok,have a good time 81 | pause 82 | -------------------------------------------------------------------------------- /uninstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | rm -rf ~/.vim 4 | rm -rf ~/.vimrc 5 | 6 | color="$(tput setaf 6)" 7 | normal="$(tput sgr0)" 8 | 9 | printf "${color}" 10 | echo ' _ __ _ ' 11 | echo ' (_) / _| | | ' 12 | echo '__ ___ _ __ ___ | |_ __ _ ___| |_ ' 13 | echo '\ \ / / | "_ " _ \| _/ _" / __| __|' 14 | echo ' \ V /| | | | | | | || (_| \__ \ |_ ' 15 | echo ' \_/ |_|_| |_| |_|_| \__,_|___/\__|' 16 | echo '' 17 | echo ' uninstall ok' 18 | echo 'p.s. Follow me at https://github.com/chenxuan520.' 19 | echo '' 20 | printf "${normal}" 21 | -------------------------------------------------------------------------------- /update.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | git pull 3 | vim -c "PlugInstall" -c "qa" 4 | 5 | echo ' _ __ _ ' 6 | echo ' (_) / _| | | ' 7 | echo '__ ___ _ __ ___ | |_ __ _ ___| |_ ' 8 | echo '\ \ / / | "_ " _ \| _/ _" / __| __|' 9 | echo ' \ V /| | | | | | | || (_| \__ \ |_ ' 10 | echo ' \_/ |_|_| |_| |_|_| \__,_|___/\__|' 11 | echo '' 12 | echo 'update ok' 13 | echo 'Just enjoy it!' 14 | echo 'p.s. Follow me at https://github.com/chenxuan520.' 15 | echo '' 16 | -------------------------------------------------------------------------------- /vimscript/README.md: -------------------------------------------------------------------------------- 1 | ## 如果你想学习vimscript,可以推荐一些资料给你 2 | 3 | --- 4 | 5 | 1. [Learn Vimscript in Y Minutes](https://learnxinyminutes.com/docs/vimscript/) 6 | 7 | 2. [[Learn Vimscript the Hard Way](https://learnvimscriptthehardway.stevelosh.com/)](https://learnvimscriptthehardway.stevelosh.com/) 8 | 9 | 3. https://learnvim.irian.to/ 10 | 11 | 4. [Vimscript编程参考_w3cschool](https://www.w3cschool.cn/vim/nckx1pu0.html) 12 | 13 | 5. [Vimscript Tutorial - YouTube](https://www.youtube.com/playlist?list=PLOe6AggsTaVv_IQsADuzhOzepA_tSAagN) 14 | 15 | 6. https://zhuanlan.zhihu.com/p/37352209 16 | 17 | 7. [文档 - 章节目录 - [ 笨方法学Vimscript ] - 手册网](https://www.shouce.ren/api/view/a/9653) 18 | 19 | 8. [Introduction | learnvimscriptthehardway](https://huhuang03.gitbooks.io/learnvimscriptthehardway/content/) 20 | -------------------------------------------------------------------------------- /vimscript/apidoc/apidoc.vim: -------------------------------------------------------------------------------- 1 | 2 | let b:apidoc_enable=get(g:,"apidoc_enable",1) 3 | 4 | if !b:apidoc_enable 5 | finish 6 | endif 7 | 8 | nnoremap C :call apidoc#ApiComment() 9 | 10 | command! -buffer ApiSuccess :call apidoc#ApiDefineSuccess() 11 | command! -buffer ApiError :call apidoc#ApiDefineError() 12 | -------------------------------------------------------------------------------- /vimscript/apidoc/autoload/apidoc.vim: -------------------------------------------------------------------------------- 1 | 2 | " fast add apidoc.json 3 | func! apidoc#ApiJson() 4 | call append(line('.')-1, '{' ) 5 | call append(line('.')-1, ' "name": "example",' ) 6 | call append(line('.')-1, ' "version": "0.1.0",' ) 7 | call append(line('.')-1, ' "description": "apiDoc basic example",' ) 8 | call append(line('.')-1, ' "title": "Custom apiDoc browser title",' ) 9 | call append(line('.')-1, ' "url" : "https://api.github.com/v1"' ) 10 | call append(line('.')-1, '}' ) 11 | endfunc 12 | 13 | func! apidoc#ApiComment() 14 | call append(line('.')+0, '/**' ) 15 | call append(line('.')+1, '* @api {method} {path} {title}' ) 16 | call append(line('.')+2, '* @apiName {name}' ) 17 | call append(line('.')+3, '* @apiGroup {group}' ) 18 | call append(line('.')+4, '* @apiDescription {text}' ) 19 | call append(line('.')+5, '* @apiParam {String,Boolean,Number,Object,String[]} {name} {description}' ) 20 | call append(line('.')+6, '* @apiParamExample {json} Request-Example' ) 21 | call append(line('.')+7, '* {' ) 22 | call append(line('.')+8, '* }' ) 23 | call append(line('.')+9, '*' ) 24 | call append(line('.')+10, '* @apiSuccessExample {json} Response-Example' ) 25 | call append(line('.')+11, '* {' ) 26 | call append(line('.')+12, '* }' ) 27 | call append(line('.')+13, '*' ) 28 | call append(line('.')+14, '* @apiUse {name}' ) 29 | call append(line('.')+15, '*/' ) 30 | endfunc 31 | 32 | func! apidoc#ApiDefineError() 33 | call append(line('.')+0, '/**' ) 34 | call append(line('.')+1, '* @apiDefine {name}' ) 35 | call append(line('.')+2, '* @apiErrorExample {json} Error-Response' ) 36 | call append(line('.')+3, '* HTTP/1.1 404 Not Found' ) 37 | call append(line('.')+4, '* {' ) 38 | call append(line('.')+5, '* }' ) 39 | call append(line('.')+6, '*/' ) 40 | endfunc 41 | 42 | func! apidoc#ApiDefineSuccess() 43 | call append(line('.')+0, '/**' ) 44 | call append(line('.')+1, '* @apiDefine {name}' ) 45 | call append(line('.')+2, '* @apiSuccessExample {json} Response-Example' ) 46 | call append(line('.')+3, '* HTTP/1.1 200 OK' ) 47 | call append(line('.')+4, '* {' ) 48 | call append(line('.')+5, '* }' ) 49 | call append(line('.')+6, '*/' ) 50 | endfunc 51 | -------------------------------------------------------------------------------- /vimscript/apidoc/json/apidoc.vim: -------------------------------------------------------------------------------- 1 | 2 | if expand('%')!='apidoc.json' 3 | finish 4 | endif 5 | 6 | command! -buffer ApiDocJson :call apidoc#ApiJson() 7 | -------------------------------------------------------------------------------- /vimscript/branch.vim: -------------------------------------------------------------------------------- 1 | " MIT License. Copyright (c) 2013-2021 Bailey Ling et al. 2 | " Plugin: fugitive, gina, lawrencium and vcscommand 3 | " vim: et ts=2 sts=2 sw=2 4 | 5 | func! airline#extensions#branch#git_branch(chan,msg) abort 6 | let s:call_back=0 7 | let g:status_branch_name=a:msg 8 | endfunc 9 | func! airline#extensions#branch#git_branch_nvim(chan,msg,name) abort 10 | let s:call_back=0 11 | if a:msg[0]!=""|let g:status_branch_name=join(a:msg)|endif 12 | endfunc 13 | 14 | let s:git_oper_counter=0 15 | let s:git_last_branch="" 16 | function! airline#extensions#branch#get_head() 17 | if exists("g:status_branch_name") && g:status_branch_name != "" 18 | let s:git_oper_counter+=1 19 | if s:git_oper_counter%150==0 20 | let s:git_oper_counter=0 21 | let s:git_last_branch=g:status_branch_name 22 | let g:status_branch_name="" 23 | return s:git_last_branch 24 | endif 25 | return g:status_branch_name 26 | elseif !exists("s:call_back")||s:call_back==0 27 | let s:call_back=1 28 | if !has('nvim') 29 | call job_start("git rev-parse --abbrev-ref HEAD",{"out_cb":"airline#extensions#branch#git_branch"}) 30 | else 31 | call jobstart("git rev-parse --abbrev-ref HEAD",{"on_stdout":"airline#extensions#branch#git_branch_nvim"}) 32 | endif 33 | return s:git_last_branch 34 | else 35 | return s:git_last_branch 36 | endif 37 | endfunction 38 | 39 | function! airline#extensions#branch#init(ext) 40 | call airline#parts#define_function('branch', 'airline#extensions#branch#get_head') 41 | endfunction 42 | -------------------------------------------------------------------------------- /vimscript/coc.vim: -------------------------------------------------------------------------------- 1 | " MIT License. Copyright (c) 2019-2021 Peng Guanwen et al. 2 | " vim: et ts=2 sts=2 sw=2 3 | " Plugin: https://github.com/neoclide/coc 4 | 5 | scriptencoding utf-8 6 | 7 | let s:error_symbol = get(g:, 'airline#extensions#coc#error_symbol', 'E:') 8 | let s:warning_symbol = get(g:, 'airline#extensions#coc#warning_symbol', 'W:') 9 | 10 | function! airline#extensions#coc#get_warning() abort 11 | return airline#extensions#coc#get('warning') 12 | endfunction 13 | 14 | function! airline#extensions#coc#get_error() abort 15 | return airline#extensions#coc#get('error') 16 | endfunction 17 | 18 | function! airline#extensions#coc#get(type) abort 19 | if !exists(':CocCommand') 20 | return '' 21 | endif 22 | let _backup = get(g:, 'coc_stl_format', '') 23 | let is_err = (a:type is# 'error') 24 | if is_err 25 | let g:coc_stl_format = get(g:, 'airline#extensions#coc#stl_format_err', '%E{[%e(#%fe)]}') 26 | else 27 | let g:coc_stl_format = get(g:, 'airline#extensions#coc#stl_format_warn', '%W{[%w(#%fw)]}') 28 | endif 29 | let info = get(b:, 'coc_diagnostic_info', {}) 30 | if empty(info) | return '' | endif 31 | 32 | 33 | let cnt = get(info, a:type, 0) 34 | if !empty(_backup) 35 | let g:coc_stl_format = _backup 36 | endif 37 | 38 | if empty(cnt) 39 | return '' 40 | else 41 | let lnum = printf('(L%d)', (info.lnums)[0]) 42 | return (is_err ? s:error_symbol : s:warning_symbol).cnt.lnum 43 | endif 44 | endfunction 45 | 46 | function! airline#extensions#coc#get_status() abort 47 | " Shorten text for windows < 91 characters 48 | if !get(g:,"airline_coc_cur_func",0) 49 | return airline#util#shorten(get(g:, 'coc_status', ''), 91, 9) 50 | endif 51 | 52 | if exists("g:coc_status") 53 | call CocActionAsync('getCurrentFunctionSymbol') 54 | endif 55 | return airline#util#shorten(get(g:, 'coc_status', '').get(b:,'coc_current_function',''), 91, 9) 56 | endfunction 57 | 58 | function! airline#extensions#coc#init(ext) abort 59 | call airline#parts#define_function('coc_error_count', 'airline#extensions#coc#get_error') 60 | call airline#parts#define_function('coc_warning_count', 'airline#extensions#coc#get_warning') 61 | call airline#parts#define_function('coc_status', 'airline#extensions#coc#get_status') 62 | endfunction 63 | -------------------------------------------------------------------------------- /vimscript/ide.vim: -------------------------------------------------------------------------------- 1 | " This file is not fully completed 2 | set mouse=a 3 | execute ":bo term ++rows=7" 4 | execute "normal \k" 5 | execute "NERDTree | wincmd p" 6 | execute "TagbarToggle" 7 | " nnoremenu WinBar.NewFile :enew 8 | -------------------------------------------------------------------------------- /vimscript/recommend_plug.vim: -------------------------------------------------------------------------------- 1 | " for vim debug 2 | call plug#begin('~/.vim/plugged') 3 | Plug 'puremourning/vimspector' 4 | call plug#end() 5 | 6 | " vim spector map setting 7 | let g:vimspector_enable_mappings = 'HUMAN' 8 | 9 | " for vim markdown 10 | call plug#begin('~/.vim/plugged') 11 | Plug 'preservim/vim-markdown' 12 | Plug 'mzlogin/vim-markdown-toc' 13 | Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} 14 | Plug 'iamcco/markdown-preview.nvim', {'for':'markdown'} 15 | call plug#end() 16 | 17 | " markdown config 18 | nmap mo MarkdownPreviewToggle 19 | nmap md :GenTocGFM 20 | " markdown preview 21 | nmap p MarkdownPreviewToggle 22 | " shell to install markdown preview 23 | " npm install -g yarn 24 | " yarn config set registry 'https://registry.npm.taobao.org' 25 | " git clone https://gitee.com/zgpio/markdown-preview.nvim.git ~/.vim/plugged/markdown-preview.nvim 26 | " cd ~/.vim/plugged/markdown-preview.nvim/app 27 | " yarn install 28 | 29 | " light line 30 | call plug#begin('~/.vim/plugged') 31 | Plug 'itchyny/lightline.vim' 32 | Plug 'mengelbrecht/lightline-bufferline' 33 | call plug#end() 34 | 35 | " lightline 36 | let g:lightline = { 37 | \ 'colorscheme': 'gruvbox', 38 | \ 'active': { 39 | \ 'left': [ [ 'mode', 'paste' ], [ 'readonly', 'filename', 'modified' ] ], 40 | \ 'right': [ [ 'lineinfo' ], 41 | \ [ 'percent' ], 42 | \ [ 'fileformat', 'fileencoding', 'filetype', 'charvaluehex' ] ] 43 | \ }, 44 | \ 'tabline': { 45 | \ 'left': [ ['buffers'] ], 46 | \ 'right': [ ['close'] ] 47 | \ }, 48 | \ 'component_expand': { 49 | \ 'buffers': 'lightline#bufferline#buffers' 50 | \ }, 51 | \ 'component_type': { 52 | \ 'buffers': 'tabsel' 53 | \ }, 54 | \ 'separator': {'left': '', 'right': ''}, 55 | \ 'subseparator': {'left': ' ', 'right': ' '} 56 | \ } 57 | 58 | " bufferline 59 | let g:lightline#bufferline#enable_devicons = 1 60 | let g:lightline#bufferline#enable_nerdfont = 1 61 | let g:lightline#bufferline#icon_position = 'right' 62 | let g:lightline#bufferline#show_number = 3 63 | 64 | let g:lightline#bufferline#number_map = { 65 | \ 0: '⁰', 1: '¹ ', 2: '² ', 3: '³ ', 4: '⁴ ', 66 | \ 5: '⁵', 6: '⁶', 7: '⁷', 8: '⁸', 9: '⁹'} 67 | 68 | function LightlineBufferlineFilter(buffer) 69 | return getbufvar(a:buffer, '&buftype') !=# 'terminal' 70 | endfunction 71 | let g:lightline#bufferline#buffer_filter = "LightlineBufferlineFilter" 72 | 73 | call plug#begin('~/.vim/plugged') 74 | Plug 'airblade/vim-gitgutter' 75 | call plug#end() 76 | 77 | " fzf 78 | call plug#begin('~/.vim/plugged') 79 | Plug 'junegunn/fzf.vim' 80 | call plug#end() 81 | " # find dir 82 | " fd() { 83 | " local dir 84 | " dir=$(find ${1:-${HOME}} \( -path '*/\.*' -o -path "*/go/pkg" -o -path "*/node_modules" \) -prune -o -type d -print 2> /dev/null | \ 85 | " fzf +m --layout=reverse --preview "ls -ah {}") && 86 | " cd "$dir" 87 | " } 88 | " # find file to edit 89 | " fe() { 90 | " local file="" 91 | " file=`fzf --layout=reverse --preview 'head -64 {}'` 92 | " if [ "$file" = "" ] ;then 93 | " return 94 | " fi 95 | " vim $file 96 | " } 97 | " # find in vim 98 | " fv() { 99 | " local file="" 100 | " file=`fzf --layout=reverse --preview 'head -64 {}' --preview-window=down` 101 | " printf '\033]51;["call","Tapi_EditFile",["%s/%s","exit"]]\007' $PWD $file 102 | " } 103 | " # find history 104 | " fh() { 105 | " eval $( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s --tac | sed -E 's/ *[0-9]*\*? *//' | sed -E 's/\\/\\\\/g') 106 | " } 107 | " alias fzf='fzf --layout=reverse --preview "head -64 {}"' 108 | 109 | " A collection of language packs for Vim. 110 | call plug#begin('~/.vim/plugged') 111 | Plug 'sheerun/vim-polyglot' 112 | call plug#end() 113 | -------------------------------------------------------------------------------- /vimscript/useful_vimscript.vim: -------------------------------------------------------------------------------- 1 | " 使用tab进行移出括号 2 | noremap 3 | \ pumvisible() ? "\" : 4 | \ CheckBackspace() ? "\" : 5 | \ CheckPair()? "\" : 6 | \ coc#refresh() 7 | inoremap pumvisible() ? "\" : "\" 8 | 9 | function! CheckPair() abort 10 | return getline('.')[col('.') - 1] == ')' || getline('.')[col('.') - 1] == ']' || getline('.')[col('.') - 1] == '"' || getlin 11 | endfunction 12 | function! CheckBackspace() abort 13 | let col = col('.') - 1 14 | return !col || getline('.')[col - 1] =~# '\s' 15 | endfunction 16 | 17 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 18 | " uninstall plug function 19 | """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 20 | function! s:deregister(repo) 21 | let repo = substitute(a:repo, '[\/]\+$', '', '') 22 | let name = fnamemodify(repo, ':t:s?\.git$??') 23 | call remove(g:plugs, name) 24 | endfunction 25 | command! -nargs=1 -bar UnPlug call s:deregister() 26 | 27 | " like clever-f (experimental) {{{ 28 | nnoremap f :call CleverF('f') 29 | nnoremap F :call CleverF('F') 30 | nnoremap ; :call CleverF(';') 31 | let s:cleverf_hl_arr=[] 32 | let s:cleverf_pos_arr=[] 33 | let s:cleverf_find_now=0 34 | let s:cleverf_find_line=-1 35 | let s:cleverf_find_last=0 36 | func! s:CleverFDeleteHl() abort 37 | if s:cleverf_find_now==getline(line("."))[col(".")-1]&&s:cleverf_find_line==line('.') 38 | return 39 | endif 40 | for hl in s:cleverf_hl_arr 41 | call matchdelete(hl) 42 | endfor 43 | let s:cleverf_hl_arr=[] 44 | let s:cleverf_pos_arr=[] 45 | let s:cleverf_find_now=0 46 | let s:cleverf_find_line=-1 47 | au! CleverF 48 | endfunc 49 | func! s:CleverF(ch) abort 50 | let line=getline('.') 51 | let line_num=line('.') 52 | let col=col('.') 53 | if type(s:cleverf_find_now)==0&&a:ch==#'F' 54 | call feedkeys('F','n') 55 | return 56 | endif 57 | if type(s:cleverf_find_now)!=0 58 | let i=0 59 | if a:ch!=#'F' 60 | while is:cleverf_pos_arr[i] 61 | let i=i+1 62 | endwhile 63 | else 64 | let i=len(s:cleverf_pos_arr)-1 65 | while i>0&&col-1<=s:cleverf_pos_arr[i] 66 | let i=i-1 67 | endwhile 68 | endif 69 | if i>=0&&iCleverFDeleteHl() 99 | augroup END 100 | endfunc 101 | " }}} 102 | --------------------------------------------------------------------------------