diff options
| author | Hsieh Chin Fan <pham@topo.tw> | 2024-06-28 12:42:41 +0800 |
|---|---|---|
| committer | Hsieh Chin Fan <pham@topo.tw> | 2024-06-28 12:42:41 +0800 |
| commit | 3e6fa3bbfd4f4de7780b2e14cff7ffa825978c80 (patch) | |
| tree | b6df2791a214aa088335a785dcae9119afd12497 | |
| parent | 3526eb6d756e3c37190814eca2e22ce9f7d9f1de (diff) | |
Update
| -rw-r--r-- | misc/tmux.conf | 5 | ||||
| -rw-r--r-- | vim/init/basic.vim | 17 | ||||
| -rw-r--r-- | vim/init/config.vim | 173 | ||||
| -rw-r--r-- | vim/init/keymaps.vim | 2 | ||||
| -rw-r--r-- | vim/lua/mappings.lua | 4 |
5 files changed, 85 insertions, 116 deletions
diff --git a/misc/tmux.conf b/misc/tmux.conf index a87b07a..0806bbf 100644 --- a/misc/tmux.conf +++ b/misc/tmux.conf | |||
| @@ -1,8 +1,11 @@ | |||
| 1 | set -g default-terminal "tmux-256color" | 1 | set -g default-terminal "tmux-256color" |
| 2 | set -ag terminal-overrides ",xterm-256color:RGB" | ||
| 2 | 3 | ||
| 3 | unbind C-b | 4 | unbind C-b |
| 4 | set-option -g prefix C-g | 5 | set-option -g prefix C-g |
| 5 | bind-key C-g send-prefix | 6 | bind-key C-g send-prefix |
| 7 | set-option -gw xterm-keys on | ||
| 8 | bind-key -nr C-_ send-keys C-/ | ||
| 6 | 9 | ||
| 7 | new-session # Start a new session if none available | 10 | new-session # Start a new session if none available |
| 8 | bind N new-session | 11 | bind N new-session |
| @@ -10,6 +13,8 @@ bind-key -n C-F3 set-option -g status #Ctrl+F3 Combo | |||
| 10 | 13 | ||
| 11 | bind k copy-mode | 14 | bind k copy-mode |
| 12 | 15 | ||
| 16 | set -sg escape-time 0 | ||
| 17 | |||
| 13 | #bind C-q select-layout even-horizontal | 18 | #bind C-q select-layout even-horizontal |
| 14 | #bind C-w select-layout even-vertical | 19 | #bind C-w select-layout even-vertical |
| 15 | #bind C-e select-layout main-horizontal | 20 | #bind C-e select-layout main-horizontal |
diff --git a/vim/init/basic.vim b/vim/init/basic.vim index b843476..8c92886 100644 --- a/vim/init/basic.vim +++ b/vim/init/basic.vim | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | " BUFFERS | 13 | " BUFFERS |
| 14 | " ENCODING_PREFERENCE | 14 | " ENCODING_PREFERENCE |
| 15 | " FOLDING | 15 | " FOLDING |
| 16 | " BACKUP | ||
| 16 | " MISC | 17 | " MISC |
| 17 | "====================================================================== | 18 | "====================================================================== |
| 18 | 19 | ||
| @@ -199,6 +200,22 @@ set foldlevel=2 " Expand all by default | |||
| 199 | 200 | ||
| 200 | 201 | ||
| 201 | "---------------------------------------------------------------------- | 202 | "---------------------------------------------------------------------- |
| 203 | " BACKUP | ||
| 204 | "---------------------------------------------------------------------- | ||
| 205 | |||
| 206 | " Allow backup | ||
| 207 | set backup | ||
| 208 | set backupext=.bak | ||
| 209 | set noswapfile | ||
| 210 | |||
| 211 | " Create backup dir if it doesn't exist | ||
| 212 | silent! call mkdir(expand('~/.vim/tmp'), "p", 0755) | ||
| 213 | set backupdir=~/.vim/tmp | ||
| 214 | |||
| 215 | " backup when write file | ||
| 216 | set writebackup | ||
| 217 | |||
| 218 | "---------------------------------------------------------------------- | ||
| 202 | " MISC | 219 | " MISC |
| 203 | "---------------------------------------------------------------------- | 220 | "---------------------------------------------------------------------- |
| 204 | 221 | ||
diff --git a/vim/init/config.vim b/vim/init/config.vim index 20beab2..4ec456e 100644 --- a/vim/init/config.vim +++ b/vim/init/config.vim | |||
| @@ -7,56 +7,6 @@ | |||
| 7 | " | 7 | " |
| 8 | "====================================================================== | 8 | "====================================================================== |
| 9 | 9 | ||
| 10 | " Open help page in a new tab | ||
| 11 | autocmd BufEnter *.txt if &filetype == 'help' | wincmd T | endif | ||
| 12 | |||
| 13 | " Automatically apply filetype by shebang | ||
| 14 | function! s:ApplyShebang() | ||
| 15 | let l:filetype = matchstr(getline(1), '^#!.*[ /]\zs[[:alnum:]]\+$') | ||
| 16 | let l:shebangMatch = #{node: "javascript"} | ||
| 17 | if l:filetype != "" | ||
| 18 | if has_key(shebangMatch, l:filetype) | ||
| 19 | let l:filetype = shebangMatch[l:filetype] | ||
| 20 | endif | ||
| 21 | echo "filetype from shebang: ".l:filetype | ||
| 22 | execute "set filetype=".l:filetype | ||
| 23 | endif | ||
| 24 | endfunction | ||
| 25 | autocmd BufReadPost * call <SID>ApplyShebang() | ||
| 26 | |||
| 27 | " For vimscript | ||
| 28 | if executable('vim-language-server') | ||
| 29 | echo "set vim language server" | ||
| 30 | au User lsp_setup call lsp#register_server({ | ||
| 31 | \ 'name': 'vimscript-language-server', | ||
| 32 | \ 'cmd': {server_info->['vimscript-language-server']}, | ||
| 33 | \ 'whitelist': ['vim'], | ||
| 34 | \ }) | ||
| 35 | endif | ||
| 36 | |||
| 37 | " html | ||
| 38 | " Quickly edit html tag class | ||
| 39 | function! s:ChangeAttr(pattern) | ||
| 40 | let l:attr = matchstr(getline('.'), a:pattern.'="') | ||
| 41 | if l:attr == '' | ||
| 42 | let l:all_attrs = matchstr(getline('.'), '<[[:alnum:]]\+\zs\s\?[^>]*>\ze') | ||
| 43 | execute 's/'.l:all_attrs.'/ '.a:pattern.'=""'.l:all_attrs.'/' | ||
| 44 | noh | ||
| 45 | normal! 0f"l | ||
| 46 | startinsert | ||
| 47 | else | ||
| 48 | normal! 0 | ||
| 49 | call search(l:attr) | ||
| 50 | normal! f"l | ||
| 51 | noh | ||
| 52 | startinsert | ||
| 53 | endif | ||
| 54 | endfunction | ||
| 55 | " Edit class and id for javascript files | ||
| 56 | autocmd FileType html nnoremap <leader>cl :call <SID>ChangeAttr("class")<CR> | ||
| 57 | autocmd BufLeave nunmap <leader>cl | ||
| 58 | autocmd FileType html nnoremap <leader>id :call <SID>ChangeAttr("id")<CR> | ||
| 59 | autocmd BufLeave nunmap <leader>id | ||
| 60 | 10 | ||
| 61 | "---------------------------------------------------------------------- | 11 | "---------------------------------------------------------------------- |
| 62 | " 有 tmux 何没有的功能键超时(毫秒) | 12 | " 有 tmux 何没有的功能键超时(毫秒) |
| @@ -76,9 +26,11 @@ if has('nvim') == 0 && has('gui_running') == 0 | |||
| 76 | function! s:metacode(key) | 26 | function! s:metacode(key) |
| 77 | exec "set <M-".a:key.">=\e".a:key | 27 | exec "set <M-".a:key.">=\e".a:key |
| 78 | endfunc | 28 | endfunc |
| 29 | " set 0-9 | ||
| 79 | for i in range(10) | 30 | for i in range(10) |
| 80 | call s:metacode(nr2char(char2nr('0') + i)) | 31 | call s:metacode(nr2char(char2nr('0') + i)) |
| 81 | endfor | 32 | endfor |
| 33 | " set a-z A-Z | ||
| 82 | for i in range(26) | 34 | for i in range(26) |
| 83 | call s:metacode(nr2char(char2nr('a') + i)) | 35 | call s:metacode(nr2char(char2nr('a') + i)) |
| 84 | call s:metacode(nr2char(char2nr('A') + i)) | 36 | call s:metacode(nr2char(char2nr('A') + i)) |
| @@ -130,53 +82,22 @@ call s:key_escape('<S-F12>', '[24;2~') | |||
| 130 | if &term =~ '256color' && $TMUX != '' | 82 | if &term =~ '256color' && $TMUX != '' |
| 131 | " disable Background Color Erase (BCE) so that color schemes | 83 | " disable Background Color Erase (BCE) so that color schemes |
| 132 | " render properly when inside 256-color tmux and GNU screen. | 84 | " render properly when inside 256-color tmux and GNU screen. |
| 133 | " see also http://snk.tuxfamily.org/log/vim-256color-bce.html | ||
| 134 | set t_ut= | 85 | set t_ut= |
| 135 | endif | 86 | endif |
| 136 | 87 | ||
| 137 | 88 | " Ref: https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6 | |
| 138 | "---------------------------------------------------------------------- | 89 | " You might have to force true color when using regular vim inside tmux as the |
| 139 | " 备份设置 | 90 | " colorscheme can appear to be grayscale with 'termguicolors' option enabled. |
| 140 | "---------------------------------------------------------------------- | 91 | if !has('gui_running') && &term =~ '^\%(screen\|tmux\)' |
| 141 | 92 | let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" | |
| 142 | " 允许备份 | 93 | let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" |
| 143 | set backup | 94 | endif |
| 144 | |||
| 145 | " 保存时备份 | ||
| 146 | set writebackup | ||
| 147 | |||
| 148 | " 备份文件地址,统一管理 | ||
| 149 | set backupdir=~/.vim/tmp | ||
| 150 | |||
| 151 | " 备份文件扩展名 | ||
| 152 | set backupext=.bak | ||
| 153 | |||
| 154 | " 禁用交换文件 | ||
| 155 | set noswapfile | ||
| 156 | |||
| 157 | " 创建目录,并且忽略可能出现的警告 | ||
| 158 | silent! call mkdir(expand('~/.vim/tmp'), "p", 0755) | ||
| 159 | 95 | ||
| 160 | 96 | ||
| 161 | "---------------------------------------------------------------------- | 97 | "---------------------------------------------------------------------- |
| 162 | " 配置微调 | 98 | " 配置微调 |
| 163 | "---------------------------------------------------------------------- | 99 | "---------------------------------------------------------------------- |
| 164 | 100 | ||
| 165 | " 修正 ScureCRT/XShell 以及某些终端乱码问题,主要原因是不支持一些 | ||
| 166 | " 终端控制命令,比如 cursor shaping 这类更改光标形状的 xterm 终端命令 | ||
| 167 | " 会令一些支持 xterm 不完全的终端解析错误,显示为错误的字符,比如 q 字符 | ||
| 168 | " 如果你确认你的终端支持,不会在一些不兼容的终端上运行该配置,可以注释 | ||
| 169 | if has('nvim') | ||
| 170 | set guicursor= | ||
| 171 | elseif (!has('gui_running')) && has('terminal') && has('patch-8.0.1200') | ||
| 172 | let g:termcap_guicursor = &guicursor | ||
| 173 | let g:termcap_t_RS = &t_RS | ||
| 174 | let g:termcap_t_SH = &t_SH | ||
| 175 | set guicursor= | ||
| 176 | set t_RS= | ||
| 177 | set t_SH= | ||
| 178 | endif | ||
| 179 | |||
| 180 | " 打开文件时恢复上一次光标所在位置 | 101 | " 打开文件时恢复上一次光标所在位置 |
| 181 | autocmd BufReadPost * | 102 | autocmd BufReadPost * |
| 182 | \ if line("'\"") > 1 && line("'\"") <= line("$") | | 103 | \ if line("'\"") > 1 && line("'\"") <= line("$") | |
| @@ -190,7 +111,6 @@ if !exists(":DiffOrig") | |||
| 190 | endif | 111 | endif |
| 191 | 112 | ||
| 192 | 113 | ||
| 193 | |||
| 194 | "---------------------------------------------------------------------- | 114 | "---------------------------------------------------------------------- |
| 195 | " 文件类型微调 | 115 | " 文件类型微调 |
| 196 | "---------------------------------------------------------------------- | 116 | "---------------------------------------------------------------------- |
| @@ -199,36 +119,67 @@ augroup InitFileTypesGroup | |||
| 199 | " 清除同组的历史 autocommand | 119 | " 清除同组的历史 autocommand |
| 200 | au! | 120 | au! |
| 201 | 121 | ||
| 202 | " C/C++ 文件使用 // 作为注释 | 122 | " help page: open in a new tab |
| 203 | au FileType c,cpp setlocal commentstring=//\ %s | 123 | autocmd BufEnter *.txt if &filetype == 'help' | wincmd T | endif |
| 124 | |||
| 125 | " shegang: Automatically apply filetype by shebang | ||
| 126 | function! s:ApplyShebang() | ||
| 127 | let l:filetype = matchstr(getline(1), '^#!.*[ /]\zs[[:alnum:]]\+$') | ||
| 128 | let l:shebangMatch = #{ node: "javascript" } | ||
| 129 | if l:filetype != "" | ||
| 130 | if has_key(shebangMatch, l:filetype) | ||
| 131 | let l:filetype = shebangMatch[l:filetype] | ||
| 132 | endif | ||
| 133 | echo "filetype from shebang: ".l:filetype | ||
| 134 | execute "set filetype=".l:filetype | ||
| 135 | endif | ||
| 136 | endfunction | ||
| 137 | autocmd BufReadPost * call <SID>ApplyShebang() | ||
| 138 | |||
| 139 | " html: Quickly edit html tag class | ||
| 140 | function! s:ChangeAttr(pattern) | ||
| 141 | let l:attr = matchstr(getline('.'), a:pattern.'="') | ||
| 142 | if l:attr == '' | ||
| 143 | let l:all_attrs = matchstr(getline('.'), '<[[:alnum:]]\+\zs\s\?[^>]*>\ze') | ||
| 144 | execute 's/'.l:all_attrs.'/ '.a:pattern.'=""'.l:all_attrs.'/' | ||
| 145 | noh | ||
| 146 | normal! 0f"l | ||
| 147 | startinsert | ||
| 148 | else | ||
| 149 | normal! 0 | ||
| 150 | call search(l:attr) | ||
| 151 | normal! f"l | ||
| 152 | noh | ||
| 153 | startinsert | ||
| 154 | endif | ||
| 155 | endfunction | ||
| 156 | " Edit class and id for javascript files | ||
| 157 | autocmd FileType html nnoremap <leader>cl :call <SID>ChangeAttr("class")<CR> | ||
| 158 | autocmd BufLeave nunmap <leader>cl | ||
| 159 | autocmd FileType html nnoremap <leader>id :call <SID>ChangeAttr("id")<CR> | ||
| 160 | autocmd BufLeave nunmap <leader>id | ||
| 204 | 161 | ||
| 205 | " markdown 允许自动换行 | 162 | " markdown |
| 206 | au FileType markdown setlocal wrap | 163 | au FileType markdown setlocal wrap |
| 207 | au FileType markdown set sw=2 | 164 | au FileType markdown set sw=2 ts=2 |
| 208 | au FileType markdown set ts=2 | 165 | " Fold by heading level |
| 209 | 166 | function! MarkdownLevel() | |
| 210 | " Fold markdown by heading level | 167 | let hash_num = matchstr(getline(v:lnum), '^#\+') |
| 211 | function MarkdownLevel() | 168 | let hash_num_at_top = matchstr(getline(v:lnum-1), '^#\+') |
| 212 | let h = matchstr(getline(v:lnum), '^#\+') | 169 | if empty(hash_num) |
| 213 | if empty(h) | 170 | if empty(hash_num_at_top) |
| 214 | return "=" | 171 | return "=" |
| 172 | else | ||
| 173 | return ">".(len(hash_num-1)) | ||
| 174 | endif | ||
| 215 | else | 175 | else |
| 216 | return ">" . len(h) | 176 | return len(hash_num)-1 |
| 217 | endif | 177 | endif |
| 218 | endfunction | 178 | endfunction |
| 219 | au FileType markdown setlocal foldexpr=MarkdownLevel() | 179 | au FileType markdown setlocal foldexpr=MarkdownLevel() |
| 220 | au FileType markdown setlocal foldmethod=expr | 180 | au FileType markdown setlocal foldmethod=expr |
| 221 | 181 | ||
| 222 | " lisp 进行微调 | 182 | " quickfix: hide line number |
| 223 | au FileType lisp setlocal ts=8 sts=2 sw=2 et | ||
| 224 | |||
| 225 | " scala 微调 | ||
| 226 | au FileType scala setlocal sts=4 sw=4 noet | ||
| 227 | |||
| 228 | " haskell 进行微调 | ||
| 229 | au FileType haskell setlocal et | ||
| 230 | |||
| 231 | " quickfix 隐藏行号 | ||
| 232 | au FileType qf setlocal nonumber | 183 | au FileType qf setlocal nonumber |
| 233 | 184 | ||
| 234 | " 强制对某些扩展名的 filetype 进行纠正 | 185 | " 强制对某些扩展名的 filetype 进行纠正 |
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index dc7f616..3c3ebc8 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim | |||
| @@ -155,7 +155,7 @@ cnoremap <C-e> <End> | |||
| 155 | cnoremap <M-f> <S-Right> | 155 | cnoremap <M-f> <S-Right> |
| 156 | cnoremap <M-b> <S-Left> | 156 | cnoremap <M-b> <S-Left> |
| 157 | cnoremap <C-d> <Del> | 157 | cnoremap <C-d> <Del> |
| 158 | cnoremap <C-r> <C-d> | 158 | " cnoremap <C-r> <C-d> |
| 159 | cnoremap <C-h> <BackSpace> | 159 | cnoremap <C-h> <BackSpace> |
| 160 | cnoremap <C-n> <Down> | 160 | cnoremap <C-n> <Down> |
| 161 | cnoremap <C-p> <Up> | 161 | cnoremap <C-p> <Up> |
diff --git a/vim/lua/mappings.lua b/vim/lua/mappings.lua index eaa6e68..3451ddf 100644 --- a/vim/lua/mappings.lua +++ b/vim/lua/mappings.lua | |||
| @@ -23,10 +23,6 @@ end, { desc = "format files" }) | |||
| 23 | -- global lsp mappings | 23 | -- global lsp mappings |
| 24 | vim.keymap.set("n", "<leader>ds", vim.diagnostic.setloclist, { desc = "lsp diagnostic loclist" }) | 24 | vim.keymap.set("n", "<leader>ds", vim.diagnostic.setloclist, { desc = "lsp diagnostic loclist" }) |
| 25 | 25 | ||
| 26 | -- Comment | ||
| 27 | vim.keymap.set("n", "<leader>/", "gcc", { desc = "comment toggle", remap = true }) | ||
| 28 | vim.keymap.set("v", "<leader>/", "gc", { desc = "comment toggle", remap = true }) | ||
| 29 | |||
| 30 | -- nvimtree | 26 | -- nvimtree |
| 31 | vim.keymap.set("n", "<C-n>", "<cmd>NvimTreeToggle<CR>", { desc = "nvimtree toggle window" }) | 27 | vim.keymap.set("n", "<C-n>", "<cmd>NvimTreeToggle<CR>", { desc = "nvimtree toggle window" }) |
| 32 | vim.keymap.set("n", "<leader>nf", "<cmd>NvimTreeFocus<CR>", { desc = "nvimtree focus window" }) | 28 | vim.keymap.set("n", "<leader>nf", "<cmd>NvimTreeFocus<CR>", { desc = "nvimtree focus window" }) |