aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim')
-rw-r--r--vim/init/basic.vim17
-rw-r--r--vim/init/config.vim173
-rw-r--r--vim/init/keymaps.vim2
-rw-r--r--vim/lua/mappings.lua4
4 files changed, 80 insertions, 116 deletions
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
207set backup
208set backupext=.bak
209set noswapfile
210
211" Create backup dir if it doesn't exist
212silent! call mkdir(expand('~/.vim/tmp'), "p", 0755)
213set backupdir=~/.vim/tmp
214
215" backup when write file
216set 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
11autocmd BufEnter *.txt if &filetype == 'help' | wincmd T | endif
12
13" Automatically apply filetype by shebang
14function! 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
24endfunction
25autocmd BufReadPost * call <SID>ApplyShebang()
26
27" For vimscript
28if 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 \ })
35endif
36
37" html
38" Quickly edit html tag class
39function! 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
54endfunction
55" Edit class and id for javascript files
56autocmd FileType html nnoremap <leader>cl :call <SID>ChangeAttr("class")<CR>
57autocmd BufLeave nunmap <leader>cl
58autocmd FileType html nnoremap <leader>id :call <SID>ChangeAttr("id")<CR>
59autocmd 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~')
130if &term =~ '256color' && $TMUX != '' 82if &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=
135endif 86endif
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"---------------------------------------------------------------------- 91if !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"
143set backup 94endif
144
145" 保存时备份
146set writebackup
147
148" 备份文件地址,统一管理
149set backupdir=~/.vim/tmp
150
151" 备份文件扩展名
152set backupext=.bak
153
154" 禁用交换文件
155set noswapfile
156
157" 创建目录,并且忽略可能出现的警告
158silent! 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" 如果你确认你的终端支持,不会在一些不兼容的终端上运行该配置,可以注释
169if has('nvim')
170 set guicursor=
171elseif (!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=
178endif
179
180" 打开文件时恢复上一次光标所在位置 101" 打开文件时恢复上一次光标所在位置
181autocmd BufReadPost * 102autocmd BufReadPost *
182 \ if line("'\"") > 1 && line("'\"") <= line("$") | 103 \ if line("'\"") > 1 && line("'\"") <= line("$") |
@@ -190,7 +111,6 @@ if !exists(":DiffOrig")
190endif 111endif
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>
155cnoremap <M-f> <S-Right> 155cnoremap <M-f> <S-Right>
156cnoremap <M-b> <S-Left> 156cnoremap <M-b> <S-Left>
157cnoremap <C-d> <Del> 157cnoremap <C-d> <Del>
158cnoremap <C-r> <C-d> 158" cnoremap <C-r> <C-d>
159cnoremap <C-h> <BackSpace> 159cnoremap <C-h> <BackSpace>
160cnoremap <C-n> <Down> 160cnoremap <C-n> <Down>
161cnoremap <C-p> <Up> 161cnoremap <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
24vim.keymap.set("n", "<leader>ds", vim.diagnostic.setloclist, { desc = "lsp diagnostic loclist" }) 24vim.keymap.set("n", "<leader>ds", vim.diagnostic.setloclist, { desc = "lsp diagnostic loclist" })
25 25
26-- Comment
27vim.keymap.set("n", "<leader>/", "gcc", { desc = "comment toggle", remap = true })
28vim.keymap.set("v", "<leader>/", "gc", { desc = "comment toggle", remap = true })
29
30-- nvimtree 26-- nvimtree
31vim.keymap.set("n", "<C-n>", "<cmd>NvimTreeToggle<CR>", { desc = "nvimtree toggle window" }) 27vim.keymap.set("n", "<C-n>", "<cmd>NvimTreeToggle<CR>", { desc = "nvimtree toggle window" })
32vim.keymap.set("n", "<leader>nf", "<cmd>NvimTreeFocus<CR>", { desc = "nvimtree focus window" }) 28vim.keymap.set("n", "<leader>nf", "<cmd>NvimTreeFocus<CR>", { desc = "nvimtree focus window" })