diff options
-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" }) |