diff options
| author | Hsieh Chin Fan <pham@topo.tw> | 2024-07-08 23:24:22 +0800 |
|---|---|---|
| committer | Hsieh Chin Fan <pham@topo.tw> | 2024-07-08 23:24:22 +0800 |
| commit | 7a98c89f22253177d9f5a0f83c9dbaa297eb54b0 (patch) | |
| tree | 566f70c7c7777bd1983708f9bf6e285d28c93639 /vim/init | |
| parent | d834d6da82ba20e32699380d335a65936bad16f9 (diff) | |
Update
Diffstat (limited to 'vim/init')
| -rw-r--r-- | vim/init/basic.vim | 34 | ||||
| -rw-r--r-- | vim/init/config.vim | 169 | ||||
| -rw-r--r-- | vim/init/special_highlight.vim | 28 |
3 files changed, 101 insertions, 130 deletions
diff --git a/vim/init/basic.vim b/vim/init/basic.vim index b268c6b..e18423d 100644 --- a/vim/init/basic.vim +++ b/vim/init/basic.vim | |||
| @@ -120,12 +120,7 @@ endfunction | |||
| 120 | nnoremap <silent> <C-c> :call Bye()<CR> | 120 | nnoremap <silent> <C-c> :call Bye()<CR> |
| 121 | 121 | ||
| 122 | " }}} | 122 | " }}} |
| 123 | 123 | " Go to last cursor position ----------------{{{ | |
| 124 | " Don't unload a buffer when no longer shown in a window | ||
| 125 | " This allows you open a new buffer and leaves current buffer modified | ||
| 126 | set hidden | ||
| 127 | |||
| 128 | " ":augroup vimStartup | au! | augroup END" | ||
| 129 | augroup vimStartup | 124 | augroup vimStartup |
| 130 | au! | 125 | au! |
| 131 | " When editing a file, always jump to the last known cursor position. | 126 | " When editing a file, always jump to the last known cursor position. |
| @@ -139,6 +134,7 @@ augroup vimStartup | |||
| 139 | augroup END | 134 | augroup END |
| 140 | 135 | ||
| 141 | " }}} | 136 | " }}} |
| 137 | " }}} | ||
| 142 | " TABSIZE ----------------{{{ | 138 | " TABSIZE ----------------{{{ |
| 143 | 139 | ||
| 144 | set expandtab | 140 | set expandtab |
| @@ -178,6 +174,32 @@ set backupdir=~/.vim/tmp | |||
| 178 | " backup when write file | 174 | " backup when write file |
| 179 | set writebackup | 175 | set writebackup |
| 180 | " }}} | 176 | " }}} |
| 177 | " HIGHLIGHT ----------------{{{ | ||
| 178 | syntax enable | ||
| 179 | |||
| 180 | function! GetHighlightGroupName() | ||
| 181 | let l:syntaxID = synID(line('.'), col('.'), 1) | ||
| 182 | let l:groupName = synIDattr(l:syntaxID, 'name') | ||
| 183 | echo "Highlight Group Name: " . l:groupName | ||
| 184 | endfunction | ||
| 185 | |||
| 186 | " Defualt highlight for matched parenthesis is so weird in many colorscheme | ||
| 187 | " Why the background color is lighter than my caret !? | ||
| 188 | " highlight MatchParen ctermfg=NONE ctermbg=darkgrey cterm=NONE | ||
| 189 | highlight LuaParen ctermfg=NONE ctermbg=darkgrey cterm=NONE | ||
| 190 | |||
| 191 | " Show trailing spaces | ||
| 192 | highlight ExtraWhitespace ctermbg=red guibg=red | ||
| 193 | match ExtraWhitespace /\s\+$/ | ||
| 194 | |||
| 195 | " Persist visualized lines | ||
| 196 | " define line highlight color | ||
| 197 | highlight MultiLineHighlight ctermbg=LightYellow guibg=LightYellow ctermfg=Black guifg=Black | ||
| 198 | " highlight the current line | ||
| 199 | nnoremap <silent> <leader>gh :call matchadd('MultiLineHighlight', '\%'.line('.').'l')<CR> | ||
| 200 | " clear all the highlighted lines | ||
| 201 | nnoremap <silent> <leader>gH :call clearmatches()<CR> | ||
| 202 | " }}} | ||
| 181 | " MISC ----------------{{{ | 203 | " MISC ----------------{{{ |
| 182 | 204 | ||
| 183 | " Use Unix way to add newline | 205 | " Use Unix way to add newline |
diff --git a/vim/init/config.vim b/vim/init/config.vim index ec9f090..b34ed81 100644 --- a/vim/init/config.vim +++ b/vim/init/config.vim | |||
| @@ -1,29 +1,40 @@ | |||
| 1 | "====================================================================== | 1 | "====================================================================== |
| 2 | " | ||
| 3 | " init-config.vim - 正常模式下的配置,在 init-basic.vim 后调用 | 2 | " init-config.vim - 正常模式下的配置,在 init-basic.vim 后调用 |
| 4 | " | ||
| 5 | " Created by skywind on 2018/05/30 | ||
| 6 | " Last Modified: 2018/05/30 19:20:46 | ||
| 7 | " | ||
| 8 | "====================================================================== | 3 | "====================================================================== |
| 9 | 4 | ||
| 10 | "---------------------------------------------------------------------- | 5 | " Unnamed Buffer ----------------{{{ |
| 11 | " | 6 | augroup DeleteUnnamedEmptBuffer! |
| 12 | "---------------------------------------------------------------------- | ||
| 13 | augroup LeavingBuffer! | ||
| 14 | au BufLeave {} if getline(1, '$') == [''] | setlocal bufhidden=wipe | endif | 7 | au BufLeave {} if getline(1, '$') == [''] | setlocal bufhidden=wipe | endif |
| 15 | augroup END | 8 | augroup END |
| 9 | " }}} | ||
| 10 | " TMUX ----------------{{{ | ||
| 16 | 11 | ||
| 17 | |||
| 18 | "---------------------------------------------------------------------- | ||
| 19 | " 有 tmux 何没有的功能键超时(毫秒) | 12 | " 有 tmux 何没有的功能键超时(毫秒) |
| 20 | "---------------------------------------------------------------------- | ||
| 21 | if $TMUX != '' | 13 | if $TMUX != '' |
| 22 | set ttimeoutlen=30 | 14 | set ttimeoutlen=30 |
| 23 | elseif &ttimeoutlen > 80 || &ttimeoutlen <= 0 | 15 | elseif &ttimeoutlen > 80 || &ttimeoutlen <= 0 |
| 24 | set ttimeoutlen=80 | 16 | set ttimeoutlen=80 |
| 25 | endif | 17 | endif |
| 26 | 18 | ||
| 19 | " 防止tmux下vim的背景色显示异常 | ||
| 20 | " Refer: http://sunaku.github.io/vim-256color-bce.html | ||
| 21 | if &term =~ '256color' && $TMUX != '' | ||
| 22 | " disable Background Color Erase (BCE) so that color schemes | ||
| 23 | " render properly when inside 256-color tmux and GNU screen. | ||
| 24 | set t_ut= | ||
| 25 | endif | ||
| 26 | |||
| 27 | |||
| 28 | " Ref: https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6 | ||
| 29 | " You might have to force true color when using regular vim inside tmux as the | ||
| 30 | " colorscheme can appear to be grayscale with 'termguicolors' option enabled. | ||
| 31 | if !has('gui_running') && &term =~ '^\%(screen\|tmux\)' | ||
| 32 | let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" | ||
| 33 | let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" | ||
| 34 | endif | ||
| 35 | |||
| 36 | " }}} | ||
| 37 | " KeyCode ----------------{{{ | ||
| 27 | 38 | ||
| 28 | "---------------------------------------------------------------------- | 39 | "---------------------------------------------------------------------- |
| 29 | " 终端下允许 ALT,详见:http://www.skywind.me/blog/archives/2021 | 40 | " 终端下允许 ALT,详见:http://www.skywind.me/blog/archives/2021 |
| @@ -50,9 +61,8 @@ if has('nvim') == 0 && has('gui_running') == 0 | |||
| 50 | endfor | 61 | endfor |
| 51 | endif | 62 | endif |
| 52 | 63 | ||
| 53 | |||
| 54 | "---------------------------------------------------------------------- | 64 | "---------------------------------------------------------------------- |
| 55 | " 终端下功能键设 | 65 | " 功能键端码矫正 |
| 56 | "---------------------------------------------------------------------- | 66 | "---------------------------------------------------------------------- |
| 57 | function! s:key_escape(name, code) | 67 | function! s:key_escape(name, code) |
| 58 | if has('nvim') == 0 && has('gui_running') == 0 | 68 | if has('nvim') == 0 && has('gui_running') == 0 |
| @@ -60,10 +70,6 @@ function! s:key_escape(name, code) | |||
| 60 | endif | 70 | endif |
| 61 | endfunc | 71 | endfunc |
| 62 | 72 | ||
| 63 | |||
| 64 | "---------------------------------------------------------------------- | ||
| 65 | " 功能键终端码矫正 | ||
| 66 | "---------------------------------------------------------------------- | ||
| 67 | call s:key_escape('<F1>', 'OP') | 73 | call s:key_escape('<F1>', 'OP') |
| 68 | call s:key_escape('<F2>', 'OQ') | 74 | call s:key_escape('<F2>', 'OQ') |
| 69 | call s:key_escape('<F3>', 'OR') | 75 | call s:key_escape('<F3>', 'OR') |
| @@ -81,55 +87,23 @@ call s:key_escape('<S-F10>', '[21;2~') | |||
| 81 | call s:key_escape('<S-F11>', '[23;2~') | 87 | call s:key_escape('<S-F11>', '[23;2~') |
| 82 | call s:key_escape('<S-F12>', '[24;2~') | 88 | call s:key_escape('<S-F12>', '[24;2~') |
| 83 | 89 | ||
| 84 | 90 | " }}} | |
| 85 | "---------------------------------------------------------------------- | 91 | " Filetype ----------------{{{ |
| 86 | " 防止tmux下vim的背景色显示异常 | ||
| 87 | " Refer: http://sunaku.github.io/vim-256color-bce.html | ||
| 88 | "---------------------------------------------------------------------- | ||
| 89 | if &term =~ '256color' && $TMUX != '' | ||
| 90 | " disable Background Color Erase (BCE) so that color schemes | ||
| 91 | " render properly when inside 256-color tmux and GNU screen. | ||
| 92 | set t_ut= | ||
| 93 | endif | ||
| 94 | |||
| 95 | " Ref: https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6 | ||
| 96 | " You might have to force true color when using regular vim inside tmux as the | ||
| 97 | " colorscheme can appear to be grayscale with 'termguicolors' option enabled. | ||
| 98 | if !has('gui_running') && &term =~ '^\%(screen\|tmux\)' | ||
| 99 | let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" | ||
| 100 | let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" | ||
| 101 | endif | ||
| 102 | |||
| 103 | |||
| 104 | "---------------------------------------------------------------------- | ||
| 105 | " 配置微调 | ||
| 106 | "---------------------------------------------------------------------- | ||
| 107 | |||
| 108 | " 打开文件时恢复上一次光标所在位置 | ||
| 109 | autocmd BufReadPost * | ||
| 110 | \ if line("'\"") > 1 && line("'\"") <= line("$") | | ||
| 111 | \ exe "normal! g`\"" | | ||
| 112 | \ endif | ||
| 113 | |||
| 114 | " 定义一个 DiffOrig 命令用于查看文件改动 | ||
| 115 | if !exists(":DiffOrig") | ||
| 116 | command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis | ||
| 117 | \ | wincmd p | diffthis | ||
| 118 | endif | ||
| 119 | |||
| 120 | |||
| 121 | "---------------------------------------------------------------------- | ||
| 122 | " 文件类型微调 | ||
| 123 | "---------------------------------------------------------------------- | 92 | "---------------------------------------------------------------------- |
| 124 | augroup InitFileTypesGroup | 93 | augroup InitFileTypesGroup |
| 125 | 94 | ||
| 126 | " 清除同组的历史 autocommand | ||
| 127 | au! | 95 | au! |
| 128 | 96 | ||
| 129 | " help page: open in a new tab | 97 | " Filetype for Vim ----------------{{{ |
| 98 | |||
| 99 | " Help page | ||
| 130 | autocmd BufEnter *.txt if &filetype == 'help' | wincmd T | endif | 100 | autocmd BufEnter *.txt if &filetype == 'help' | wincmd T | endif |
| 131 | 101 | ||
| 132 | " shegang: Automatically apply filetype by shebang | 102 | " quickfix: hide line number |
| 103 | autocmd FileType quickfix setlocal nonumber | ||
| 104 | |||
| 105 | " }}} | ||
| 106 | " Shebeng: Set filetype from shebeng ----------------{{{ | ||
| 133 | function! s:ApplyShebang() | 107 | function! s:ApplyShebang() |
| 134 | let l:filetype = matchstr(getline(1), '^#!.*[ /]\zs[[:alnum:]]\+$') | 108 | let l:filetype = matchstr(getline(1), '^#!.*[ /]\zs[[:alnum:]]\+$') |
| 135 | let l:shebangMatch = #{ node: "javascript" } | 109 | let l:shebangMatch = #{ node: "javascript" } |
| @@ -142,8 +116,31 @@ augroup InitFileTypesGroup | |||
| 142 | endif | 116 | endif |
| 143 | endfunction | 117 | endfunction |
| 144 | autocmd BufReadPost * call <SID>ApplyShebang() | 118 | autocmd BufReadPost * call <SID>ApplyShebang() |
| 119 | " }}} | ||
| 120 | " Markdown ----------------{{{ | ||
| 121 | au FileType markdown setlocal wrap | ||
| 122 | au FileType markdown set sw=2 ts=2 | ||
| 123 | " Fold by heading level | ||
| 124 | function! MarkdownLevel() | ||
| 125 | let hash_num = matchstr(getline(v:lnum), '^#\+') | ||
| 126 | let hash_num_at_top = matchstr(getline(v:lnum-1), '^#\+') | ||
| 127 | if empty(hash_num) | ||
| 128 | if empty(hash_num_at_top) | ||
| 129 | return "=" | ||
| 130 | else | ||
| 131 | return ">"..(len(hash_num_at_top)) | ||
| 132 | endif | ||
| 133 | else | ||
| 134 | return len(hash_num)-1 | ||
| 135 | endif | ||
| 136 | endfunction | ||
| 137 | au FileType markdown setlocal foldexpr=MarkdownLevel() | ||
| 138 | au FileType markdown setlocal foldmethod=expr | ||
| 139 | |||
| 140 | " }}} | ||
| 141 | " HTML ----------------{{{ | ||
| 145 | 142 | ||
| 146 | " html: Quickly edit html tag class | 143 | " Usage: <leader>cl(ass) or <leader>id to edit html tag attribute |
| 147 | function! s:ChangeAttr(pattern) | 144 | function! s:ChangeAttr(pattern) |
| 148 | let l:attr = matchstr(getline('.'), a:pattern.'="') | 145 | let l:attr = matchstr(getline('.'), a:pattern.'="') |
| 149 | if l:attr == '' | 146 | if l:attr == '' |
| @@ -160,29 +157,20 @@ augroup InitFileTypesGroup | |||
| 160 | startinsert | 157 | startinsert |
| 161 | endif | 158 | endif |
| 162 | endfunction | 159 | endfunction |
| 163 | " Edit class and id for javascript files | ||
| 164 | autocmd FileType html,markdown nnoremap <buffer> <leader>cl :call <SID>ChangeAttr("class")<CR> | 160 | autocmd FileType html,markdown nnoremap <buffer> <leader>cl :call <SID>ChangeAttr("class")<CR> |
| 165 | autocmd FileType html,markdown nnoremap <buffer> <leader>id :call <SID>ChangeAttr("id")<CR> | 161 | autocmd FileType html,markdown nnoremap <buffer> <leader>id :call <SID>ChangeAttr("id")<CR> |
| 166 | 162 | ||
| 167 | " markdown | 163 | " Reload preview server |
| 168 | au FileType markdown setlocal wrap | 164 | autocmd BufWrite *.html,*.js,*.css call ReloadServer() |
| 169 | au FileType markdown set sw=2 ts=2 | 165 | function ReloadServer() |
| 170 | " Fold by heading level | 166 | silent !browser-sync reload &>/dev/null |
| 171 | function! MarkdownLevel() | ||
| 172 | let hash_num = matchstr(getline(v:lnum), '^#\+') | ||
| 173 | let hash_num_at_top = matchstr(getline(v:lnum-1), '^#\+') | ||
| 174 | if empty(hash_num) | ||
| 175 | if empty(hash_num_at_top) | ||
| 176 | return "=" | ||
| 177 | else | ||
| 178 | return ">"..(len(hash_num_at_top)) | ||
| 179 | endif | ||
| 180 | else | ||
| 181 | return len(hash_num)-1 | ||
| 182 | endif | ||
| 183 | endfunction | 167 | endfunction |
| 184 | au FileType markdown setlocal foldexpr=MarkdownLevel() | 168 | |
| 185 | au FileType markdown setlocal foldmethod=expr | 169 | " }}} |
| 170 | " Mail ----------------{{{ | ||
| 171 | autocmd BufRead /tmp/mutt-* set tw=72 | ||
| 172 | " }}} | ||
| 173 | " Password ----------------{{{ | ||
| 186 | 174 | ||
| 187 | " Hide the first line of a file if editing password file | 175 | " Hide the first line of a file if editing password file |
| 188 | " TODO a better way to determine a file is related to password-store, now use | 176 | " TODO a better way to determine a file is related to password-store, now use |
| @@ -197,6 +185,8 @@ augroup InitFileTypesGroup | |||
| 197 | setlocal foldtext=s:custom() | 185 | setlocal foldtext=s:custom() |
| 198 | norm! ggzfl | 186 | norm! ggzfl |
| 199 | endfunction | 187 | endfunction |
| 188 | " }}} | ||
| 189 | " Beancount ----------------{{{ | ||
| 200 | 190 | ||
| 201 | " Set filetype for beancount | 191 | " Set filetype for beancount |
| 202 | autocmd BufRead,BufNewFile *.bean call PrepareBean() | 192 | autocmd BufRead,BufNewFile *.bean call PrepareBean() |
| @@ -206,21 +196,8 @@ augroup InitFileTypesGroup | |||
| 206 | autocmd VimLeave * silent !killall fava | 196 | autocmd VimLeave * silent !killall fava |
| 207 | endfunction | 197 | endfunction |
| 208 | 198 | ||
| 209 | " Set filetype for index.html | 199 | " }}} |
| 210 | autocmd BufWrite *.html,*.js,*.css call ReloadServer() | ||
| 211 | function ReloadServer() | ||
| 212 | silent !browser-sync reload &>/dev/null | ||
| 213 | endfunction | ||
| 214 | |||
| 215 | " quickfix: hide line number | ||
| 216 | au FileType quickfix setlocal nonumber | ||
| 217 | |||
| 218 | " 强制对某些扩展名的 filetype 进行纠正 | ||
| 219 | au BufNewFile,BufRead *.as setlocal filetype=actionscript | ||
| 220 | au BufNewFile,BufRead *.pro setlocal filetype=prolog | ||
| 221 | au BufNewFile,BufRead *.es setlocal filetype=erlang | ||
| 222 | au BufNewFile,BufRead *.asc setlocal filetype=asciidoc | ||
| 223 | au BufNewFile,BufRead *.vl setlocal filetype=verilog | ||
| 224 | au BufRead /tmp/mutt-* set tw=72 | ||
| 225 | 200 | ||
| 226 | augroup END | 201 | augroup END |
| 202 | |||
| 203 | " }}} | ||
diff --git a/vim/init/special_highlight.vim b/vim/init/special_highlight.vim deleted file mode 100644 index 26d2787..0000000 --- a/vim/init/special_highlight.vim +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | "---------------------------------------------------------------------- | ||
| 2 | " SYNTAX_HIGHLIGHT | ||
| 3 | "---------------------------------------------------------------------- | ||
| 4 | |||
| 5 | syntax enable | ||
| 6 | |||
| 7 | function! GetHighlightGroupName() | ||
| 8 | let l:syntaxID = synID(line('.'), col('.'), 1) | ||
| 9 | let l:groupName = synIDattr(l:syntaxID, 'name') | ||
| 10 | echo "Highlight Group Name: " . l:groupName | ||
| 11 | endfunction | ||
| 12 | |||
| 13 | " Defualt highlight for matched parenthesis is so weird in many colorscheme | ||
| 14 | " Why the background color is lighter than my caret !? | ||
| 15 | " highlight MatchParen ctermfg=NONE ctermbg=darkgrey cterm=NONE | ||
| 16 | highlight LuaParen ctermfg=NONE ctermbg=darkgrey cterm=NONE | ||
| 17 | |||
| 18 | " Show trailing spaces | ||
| 19 | highlight ExtraWhitespace ctermbg=red guibg=red | ||
| 20 | match ExtraWhitespace /\s\+$/ | ||
| 21 | |||
| 22 | " Persist visualized lines | ||
| 23 | " define line highlight color | ||
| 24 | highlight MultiLineHighlight ctermbg=LightYellow guibg=LightYellow ctermfg=Black guifg=Black | ||
| 25 | " highlight the current line | ||
| 26 | nnoremap <silent> <leader>gh :call matchadd('MultiLineHighlight', '\%'.line('.').'l')<CR> | ||
| 27 | " clear all the highlighted lines | ||
| 28 | nnoremap <silent> <leader>gH :call clearmatches()<CR> | ||