diff options
| -rw-r--r-- | vim/init/basic.vim | 59 | ||||
| -rw-r--r-- | vim/init/config.vim | 63 | ||||
| -rw-r--r-- | vim/init/keymaps.vim | 174 | ||||
| -rw-r--r-- | vim/mini.lua | 276 |
4 files changed, 331 insertions, 241 deletions
diff --git a/vim/init/basic.vim b/vim/init/basic.vim index e18d51f..751b3ac 100644 --- a/vim/init/basic.vim +++ b/vim/init/basic.vim | |||
| @@ -17,57 +17,28 @@ augroup END | |||
| 17 | " For Buffer and Tab {{{ | 17 | " For Buffer and Tab {{{ |
| 18 | augroup tabinfo | 18 | augroup tabinfo |
| 19 | au! | 19 | au! |
| 20 | let g:tab_group = {} | ||
| 21 | " BufEnter {{{ | ||
| 22 | function! AddBufToTabGroup(tab_group) | ||
| 23 | let l:tabId = tabpagenr() | ||
| 24 | let l:bufnr = bufnr() | ||
| 25 | |||
| 26 | if has_key(a:tab_group, l:tabId) | ||
| 27 | for v in a:tab_group[l:tabId] | ||
| 28 | if v == l:bufnr | ||
| 29 | return | ||
| 30 | endif | ||
| 31 | endfor | ||
| 32 | call add(a:tab_group[l:tabId], l:bufnr) | ||
| 33 | else | ||
| 34 | let a:tab_group[l:tabId] = [l:bufnr] | ||
| 35 | endif | ||
| 36 | 20 | ||
| 37 | endfunc | 21 | " t:bufs holds buffer numbers |
| 38 | autocmd BufWinEnter * if &buflisted | call AddBufToTabGroup(g:tab_group) | endif | 22 | autocmd BufWinEnter * if &buflisted | call AddBufToTab() | endif |
| 39 | " }}} | 23 | autocmd BufDelete * call RemoveBufFromTabs() |
| 40 | " BufDelete {{{ | ||
| 41 | function! RemoveBufFromTabGroup(tab_group) | ||
| 42 | let l:tabId = tabpagenr() | ||
| 43 | |||
| 44 | if has_key(a:tab_group, l:tabId) | ||
| 45 | let l:new_tab_group = {} | ||
| 46 | |||
| 47 | for [k, tab_list] in items(a:tab_group) | ||
| 48 | let l:list = [] | ||
| 49 | for buf in tab_list | ||
| 50 | if buflisted(buf) > 0 && buf != expand('<abuf>') | ||
| 51 | call add(l:list, buf) | ||
| 52 | end | ||
| 53 | endfor | ||
| 54 | if !empty(l:list) | ||
| 55 | let l:new_tab_group[k] = l:list | ||
| 56 | endif | ||
| 57 | endfor | ||
| 58 | let g:tab_group = l:new_tab_group | ||
| 59 | |||
| 60 | endif | ||
| 61 | 24 | ||
| 25 | function! AddBufToTab() | ||
| 26 | if !has_key(t:, 'bufs') | let t:['bufs'] = [] | endif | ||
| 27 | call add(t:bufs, bufnr()) | call sort(t:bufs) | call uniq(t:bufs) | ||
| 28 | endfunc | ||
| 29 | function! RemoveBufFromTabs() | ||
| 30 | for tab in gettabinfo() | ||
| 31 | call filter(tab.variables.bufs, "v:val != "..expand('<abuf>')) | ||
| 32 | endfor | ||
| 62 | endfunc | 33 | endfunc |
| 63 | autocmd BufDelete * call RemoveBufFromTabGroup(g:tab_group) | 34 | |
| 64 | "}}} | 35 | nnoremap T :echo t:bufs<CR> |
| 65 | augroup END | 36 | augroup END |
| 66 | "}}} | 37 | "}}} |
| 67 | " GERERNAL {{{ | 38 | " GERERNAL {{{ |
| 68 | 39 | ||
| 69 | let mapleader = "," " Always use comma as leader key | 40 | let mapleader = "," " Always use comma as leader key |
| 70 | set nocompatible " Disable vi compatible, today is 20XX | 41 | set nocompatible " Disable vi compatible, today is 2RemoveBufFromTabXX |
| 71 | set path=.,** " Allow :find with completion | 42 | set path=.,** " Allow :find with completion |
| 72 | set mouse= " Disable mouse selection | 43 | set mouse= " Disable mouse selection |
| 73 | set winaltkeys=no " Allow alt key for mapping | 44 | set winaltkeys=no " Allow alt key for mapping |
| @@ -194,7 +165,7 @@ augroup END | |||
| 194 | set foldenable " Allow fold | 165 | set foldenable " Allow fold |
| 195 | set foldmethod=indent " Fold contents by indent | 166 | set foldmethod=indent " Fold contents by indent |
| 196 | set foldlevel=2 | 167 | set foldlevel=2 |
| 197 | set fillchars+=foldopen:▽,foldsep:│,foldclose:▶ | 168 | set fillchars=fold:\ ,foldopen:▽,foldsep:│,foldclose:▶ |
| 198 | let g:defaut_foldcolumn = "" | 169 | let g:defaut_foldcolumn = "" |
| 199 | if has('nvim') | 170 | if has('nvim') |
| 200 | let g:defaut_foldcolumn = "auto:3" | 171 | let g:defaut_foldcolumn = "auto:3" |
diff --git a/vim/init/config.vim b/vim/init/config.vim index 4181ad3..9700c61 100644 --- a/vim/init/config.vim +++ b/vim/init/config.vim | |||
| @@ -16,14 +16,15 @@ augroup END | |||
| 16 | 16 | ||
| 17 | augroup TerminalSize | 17 | augroup TerminalSize |
| 18 | au! | 18 | au! |
| 19 | function! LayoutForSmallTerminal() | 19 | function! LayoutForSmallTerminal(bound) |
| 20 | if &lines < 19 | 20 | let l:bound = a:bound ? a:bound : 19 |
| 21 | if &lines < l:bound || g:alacritty_extra_padding | ||
| 21 | silent! set cmdheight=0 laststatus=0 showtabline=0 signcolumn=no nowrap scrolloff=1 | 22 | silent! set cmdheight=0 laststatus=0 showtabline=0 signcolumn=no nowrap scrolloff=1 |
| 22 | else | 23 | else |
| 23 | silent! set cmdheight& laststatus& showtabline=2 signcolumn=yes scrolloff=3 | 24 | silent! set cmdheight& laststatus& showtabline=2 signcolumn=yes scrolloff=3 |
| 24 | endif | 25 | endif |
| 25 | endfunction | 26 | endfunc |
| 26 | autocmd VimEnter,VimResized * call LayoutForSmallTerminal() | 27 | autocmd VimEnter,VimResized * silent call LayoutForSmallTerminal(0) |
| 27 | augroup END | 28 | augroup END |
| 28 | 29 | ||
| 29 | " }}} | 30 | " }}} |
| @@ -140,30 +141,45 @@ augroup InitFileTypes | |||
| 140 | echo "filetype from shebang: ".l:filetype | 141 | echo "filetype from shebang: ".l:filetype |
| 141 | execute "set filetype=".l:filetype | 142 | execute "set filetype=".l:filetype |
| 142 | endif | 143 | endif |
| 143 | endfunction | 144 | endfunc |
| 144 | autocmd BufReadPost * call <SID>ApplyShebang() | 145 | autocmd BufReadPost * call <SID>ApplyShebang() |
| 145 | " }}} | 146 | " }}} |
| 146 | " Markdown {{{ | 147 | " Markdown {{{ |
| 147 | 148 | ||
| 148 | augroup Config_Markdown | 149 | augroup Config_Markdown |
| 149 | au! | 150 | au! |
| 150 | au FileType markdown setlocal wrap sw=2 ts=2 | 151 | au FileType markdown call InitMarkdown() |
| 151 | au FileType markdown setlocal foldexpr=MarkdownLevel() foldmethod=expr | 152 | |
| 153 | function! InitMarkdown() | ||
| 154 | setlocal wrap sw=2 ts=2 | ||
| 155 | setlocal foldexpr=MarkdownLevel() foldmethod=expr | ||
| 156 | setlocal foldtext=MarkdownFoldTextHeading() | ||
| 157 | syn match Details '^<details>' conceal cchar=▶ | ||
| 158 | syn match Summary '<summary>' conceal cchar= | ||
| 159 | syn match SummaryEnd '</summary>' conceal | ||
| 160 | syn match DetailsEnd '^</details>' conceal cchar=E | ||
| 161 | endfunc | ||
| 152 | 162 | ||
| 153 | " Fold by heading level | 163 | " Fold by heading level |
| 154 | function! MarkdownLevel() | 164 | function! MarkdownLevel() |
| 155 | let hash_num = matchstr(getline(v:lnum), '^#\+') | 165 | let hash_num = matchstr(getline(v:lnum), '^#\+') |
| 156 | let hash_num_at_top = matchstr(getline(v:lnum-1), '^#\+') | 166 | if !empty(hash_num) |
| 157 | if empty(hash_num) | 167 | " HEADING |
| 158 | if empty(hash_num_at_top) | 168 | " return ">"..(len(hash_num) - 1) |
| 159 | return "=" | 169 | return len(hash_num) == 1 ? 0 : '>1' |
| 160 | else | ||
| 161 | return ">"..(len(hash_num_at_top)) | ||
| 162 | endif | ||
| 163 | else | 170 | else |
| 164 | return len(hash_num) - 1 | 171 | " Contents |
| 172 | return "=" | ||
| 165 | endif | 173 | endif |
| 166 | endfunction | 174 | endfunc |
| 175 | |||
| 176 | function! MarkdownFoldTextHeading() | ||
| 177 | let origin = split(MarkdownFoldText()[2:], ' ') | ||
| 178 | let heading = substitute(join(origin[:-3], ' '), '\#', ' ', 'g') | ||
| 179 | let lines = join(origin[-2:], ' ')[1:-2] | ||
| 180 | let spaces = repeat('.', 50 - len(heading) - len(lines)) | ||
| 181 | return heading..spaces.." "..lines | ||
| 182 | endfunc | ||
| 167 | 183 | ||
| 168 | augroup END | 184 | augroup END |
| 169 | 185 | ||
| @@ -186,7 +202,7 @@ augroup InitFileTypes | |||
| 186 | noh | 202 | noh |
| 187 | startinsert | 203 | startinsert |
| 188 | endif | 204 | endif |
| 189 | endfunction | 205 | endfunc |
| 190 | autocmd FileType html,markdown nnoremap <buffer> <leader>cl :call <SID>ChangeAttr("class")<CR> | 206 | autocmd FileType html,markdown nnoremap <buffer> <leader>cl :call <SID>ChangeAttr("class")<CR> |
| 191 | autocmd FileType html,markdown nnoremap <buffer> <leader>id :call <SID>ChangeAttr("id")<CR> | 207 | autocmd FileType html,markdown nnoremap <buffer> <leader>id :call <SID>ChangeAttr("id")<CR> |
| 192 | 208 | ||
| @@ -194,12 +210,12 @@ augroup InitFileTypes | |||
| 194 | autocmd BufWrite *.html,*.js,*.css call ReloadServer() | 210 | autocmd BufWrite *.html,*.js,*.css call ReloadServer() |
| 195 | function! ReloadServer() | 211 | function! ReloadServer() |
| 196 | silent !browser-sync reload &>/dev/null | 212 | silent !browser-sync reload &>/dev/null |
| 197 | endfunction | 213 | endfunc |
| 198 | 214 | ||
| 199 | " }}} | 215 | " }}} |
| 200 | " Mail {{{ | 216 | " Mail {{{ |
| 201 | 217 | ||
| 202 | autocmd BufRead /tmp/mutt-* set tw=72 | 218 | autocmd BufRead /tmp/mutt-* setlocal tw=72 |
| 203 | 219 | ||
| 204 | " }}} | 220 | " }}} |
| 205 | " Password {{{ | 221 | " Password {{{ |
| @@ -211,12 +227,9 @@ augroup InitFileTypes | |||
| 211 | function SetPasswordFile() | 227 | function SetPasswordFile() |
| 212 | setlocal foldminlines=0 | 228 | setlocal foldminlines=0 |
| 213 | setlocal foldmethod=manual | 229 | setlocal foldmethod=manual |
| 214 | function s:custom() | 230 | setlocal foldtext="Password" |
| 215 | return "Password" | ||
| 216 | endfunction | ||
| 217 | setlocal foldtext=s:custom() | ||
| 218 | norm! ggzfl | 231 | norm! ggzfl |
| 219 | endfunction | 232 | endfunc |
| 220 | " }}} | 233 | " }}} |
| 221 | " Beancount {{{ | 234 | " Beancount {{{ |
| 222 | 235 | ||
| @@ -225,7 +238,7 @@ augroup InitFileTypes | |||
| 225 | set filetype=beancount | 238 | set filetype=beancount |
| 226 | silent !setsid fava ~/bean/main.bean &>/dev/null | 239 | silent !setsid fava ~/bean/main.bean &>/dev/null |
| 227 | autocmd VimLeave * silent !killall fava | 240 | autocmd VimLeave * silent !killall fava |
| 228 | endfunction | 241 | endfunc |
| 229 | 242 | ||
| 230 | " }}} | 243 | " }}} |
| 231 | 244 | ||
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index 1eb2b20..ce5d315 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | "====================================================================== | 3 | "====================================================================== |
| 4 | " vim: sw=2 ts=2 foldmethod=marker foldmarker={{{,}}} | 4 | " vim: sw=2 ts=2 foldmethod=marker foldmarker={{{,}}} |
| 5 | 5 | ||
| 6 | " COMMON_MAPPING ----------------{{{ | 6 | " COMMON_MAPPING {{{ |
| 7 | 7 | ||
| 8 | " Space for searching | 8 | " Space for searching |
| 9 | map <space> / | 9 | map <space> / |
| @@ -11,9 +11,6 @@ map <space> / | |||
| 11 | " Escape normal mode by <C-c> | 11 | " Escape normal mode by <C-c> |
| 12 | inoremap <C-c> <Esc>l | 12 | inoremap <C-c> <Esc>l |
| 13 | 13 | ||
| 14 | " Search for selected test | ||
| 15 | vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR> | ||
| 16 | |||
| 17 | " Set wrap | 14 | " Set wrap |
| 18 | nnoremap <leader>W :set wrap!<CR> | 15 | nnoremap <leader>W :set wrap!<CR> |
| 19 | 16 | ||
| @@ -39,23 +36,6 @@ augroup vimrc_CRfix | |||
| 39 | autocmd CmdwinEnter * nnoremap <buffer> <C-c> <C-c> | 36 | autocmd CmdwinEnter * nnoremap <buffer> <C-c> <C-c> |
| 40 | augroup END | 37 | augroup END |
| 41 | 38 | ||
| 42 | " In case ALT key is not working | ||
| 43 | " execute "set <M-2>=\e2" | ||
| 44 | " execute "set <M-1>=\e1" | ||
| 45 | " execute "set <M-3>=\e3" | ||
| 46 | " execute "set <M-4>=\e4" | ||
| 47 | " execute "set <M-5>=\e5" | ||
| 48 | " execute "set <M-6>=\e6" | ||
| 49 | " execute "set <M-7>=\e7" | ||
| 50 | " execute "set <M-8>=\e8" | ||
| 51 | " execute "set <M-9>=\e9" | ||
| 52 | " execute "set <M-0>=\e0" | ||
| 53 | " execute "set <M-f>=\ef" | ||
| 54 | " execute "set <M-b>=\eb" | ||
| 55 | " execute "set <M-d>=\ed" | ||
| 56 | " execute "set <M-l>=\el" | ||
| 57 | " execute "set <M-h>=\eh" | ||
| 58 | |||
| 59 | " Spell | 39 | " Spell |
| 60 | nnoremap \s :set spell!<CR>:set spell?<CR> | 40 | nnoremap \s :set spell!<CR>:set spell?<CR> |
| 61 | nnoremap <leader>ss ]s | 41 | nnoremap <leader>ss ]s |
| @@ -68,9 +48,22 @@ nnoremap <C-g> 1<C-g> | |||
| 68 | vnoremap Tz :!trans -t zh-TW -b<CR> | 48 | vnoremap Tz :!trans -t zh-TW -b<CR> |
| 69 | vnoremap Te :!trans -t en-US -b<CR> | 49 | vnoremap Te :!trans -t en-US -b<CR> |
| 70 | 50 | ||
| 51 | let g:alacritty_extra_padding = 0 | ||
| 52 | function! ToggleWinPadding() | ||
| 53 | if g:alacritty_extra_padding | ||
| 54 | !alacritty msg config --window-id $WINDOWID --reset | ||
| 55 | else | ||
| 56 | redir => output | hi Normal | redir END | ||
| 57 | let bg_color = matchstr(output, 'guibg=\zs[^\s]\+\ze') | ||
| 58 | exe "!alacritty msg config --window-id $WINDOWID window.padding.x=300 'colors.primary.background=\"\\"..bg_color.."\"'" | ||
| 59 | endif | ||
| 60 | |||
| 61 | let g:alacritty_extra_padding = !g:alacritty_extra_padding | ||
| 62 | endfunc | ||
| 63 | nnoremap <leader>Z <Cmd>silent call ToggleWinPadding()<CR> | ||
| 71 | 64 | ||
| 72 | " }}} | 65 | " }}} |
| 73 | " WORKING_DIR ----------------{{{ | 66 | " WORKING_DIR {{{ |
| 74 | 67 | ||
| 75 | let g:last_path = execute("pwd") | 68 | let g:last_path = execute("pwd") |
| 76 | augroup SaveLatestDir | 69 | augroup SaveLatestDir |
| @@ -103,7 +96,7 @@ function! InCaseCdToLatestDir() | |||
| 103 | endfunction | 96 | endfunction |
| 104 | 97 | ||
| 105 | " }}} | 98 | " }}} |
| 106 | " MOTION ----------------{{{ | 99 | " MOTION {{{ |
| 107 | 100 | ||
| 108 | " j/k will move virtual lines (lines that wrap) | 101 | " j/k will move virtual lines (lines that wrap) |
| 109 | nnoremap <silent> <expr> j (v:count == 0 ? 'gj' : 'j') | 102 | nnoremap <silent> <expr> j (v:count == 0 ? 'gj' : 'j') |
| @@ -121,7 +114,7 @@ xnoremap iq i" | |||
| 121 | xnoremap aq a" | 114 | xnoremap aq a" |
| 122 | 115 | ||
| 123 | 116 | ||
| 124 | " READLINE_FEATURES ----------------{{{ | 117 | " READLINE_FEATURES {{{ |
| 125 | 118 | ||
| 126 | inoremap <C-f> <Right> | 119 | inoremap <C-f> <Right> |
| 127 | inoremap <C-b> <Left> | 120 | inoremap <C-b> <Left> |
| @@ -155,7 +148,7 @@ nnoremap <m-k> gk | |||
| 155 | inoremap <m-j> <c-\><c-o>gj | 148 | inoremap <m-j> <c-\><c-o>gj |
| 156 | inoremap <m-k> <c-\><c-o>gk | 149 | inoremap <m-k> <c-\><c-o>gk |
| 157 | " }}} | 150 | " }}} |
| 158 | " JUMP_TO_TABS_WITH_ALT ----------------{{{ | 151 | " JUMP_TO_TABS_WITH_ALT {{{ |
| 159 | 152 | ||
| 160 | nnoremap <silent><A-1> :tabn 1<CR> | 153 | nnoremap <silent><A-1> :tabn 1<CR> |
| 161 | nnoremap <silent><A-2> :tabn 2<CR> | 154 | nnoremap <silent><A-2> :tabn 2<CR> |
| @@ -200,11 +193,29 @@ nnoremap <C-k> ddkP | |||
| 200 | nnoremap S S<ESC> | 193 | nnoremap S S<ESC> |
| 201 | 194 | ||
| 202 | " }}} | 195 | " }}} |
| 203 | " MANAGE_VIMRC ----------------{{{ | 196 | " TERMINAL {{{ |
| 197 | " In case ALT key is not working | ||
| 198 | " execute "set <M-2>=\e2" | ||
| 199 | " execute "set <M-1>=\e1" | ||
| 200 | " execute "set <M-3>=\e3" | ||
| 201 | " execute "set <M-4>=\e4" | ||
| 202 | " execute "set <M-5>=\e5" | ||
| 203 | " execute "set <M-6>=\e6" | ||
| 204 | " execute "set <M-7>=\e7" | ||
| 205 | " execute "set <M-8>=\e8" | ||
| 206 | " execute "set <M-9>=\e9" | ||
| 207 | " execute "set <M-0>=\e0" | ||
| 208 | " execute "set <M-f>=\ef" | ||
| 209 | " execute "set <M-b>=\eb" | ||
| 210 | " execute "set <M-d>=\ed" | ||
| 211 | " execute "set <M-l>=\el" | ||
| 212 | " execute "set <M-h>=\eh" | ||
| 213 | "}}} | ||
| 214 | " MANAGE_VIMRC {{{ | ||
| 204 | 215 | ||
| 205 | " source .vimrc | 216 | " source .vimrc |
| 206 | nnoremap <leader>so V:so<CR> | 217 | nnoremap <leader>so V:so<CR> |
| 207 | nnoremap <leader><leader>so :source ~/.vimrc<CR> | 218 | nnoremap <leader><leader>so :source %<CR> |
| 208 | vnoremap so :source<CR> | 219 | vnoremap so :source<CR> |
| 209 | autocmd! BUFWRITEPOST $MYVIMRC source $MYVIMRC | 220 | autocmd! BUFWRITEPOST $MYVIMRC source $MYVIMRC |
| 210 | 221 | ||
| @@ -213,7 +224,7 @@ nnoremap <leader>e :scriptnames<space> | |||
| 213 | nnoremap <leader>ee :edit $MYVIMRC<CR> | 224 | nnoremap <leader>ee :edit $MYVIMRC<CR> |
| 214 | 225 | ||
| 215 | " }}} | 226 | " }}} |
| 216 | " MANAGE_BUFFERS ----------------{{{ | 227 | " MANAGE_BUFFERS {{{ |
| 217 | 228 | ||
| 218 | " Set options | 229 | " Set options |
| 219 | nnoremap so :set<space> | 230 | nnoremap so :set<space> |
| @@ -236,19 +247,25 @@ augroup SaveLastBuffer | |||
| 236 | augroup END | 247 | augroup END |
| 237 | nnoremap <leader>l :exe "buffer ".g:lastbuffer<CR> | 248 | nnoremap <leader>l :exe "buffer ".g:lastbuffer<CR> |
| 238 | 249 | ||
| 239 | " Use Ctrl-C for buffer delete or quit vim ----------------{{{ | 250 | " Use Ctrl-C for buffer delete or quit vim {{{ |
| 240 | 251 | ||
| 241 | " Toggle behavior for the last buffer in the last window | 252 | " Toggle behavior for the last buffer in the last window |
| 242 | let g:quitVimWhenPressingCtrlC = 1 | 253 | let g:quitVimWhenPressingCtrlC = 1 |
| 243 | function! ToggleQuit() | 254 | function! ToggleQuit() |
| 244 | let g:quitVimWhenPressingCtrlC = g:quitVimWhenPressingCtrlC ? 0 : 1 | 255 | let g:quitVimWhenPressingCtrlC = !g:quitVimWhenPressingCtrlC |
| 245 | let message = g:quitVimWhenPressingCtrlC ? "Unlock" : "Lock" | 256 | let message = g:quitVimWhenPressingCtrlC ? "Unlock" : "Lock" |
| 246 | echo message | 257 | echo message |
| 247 | endfunction | 258 | endfunction |
| 248 | nnoremap \q :call ToggleQuit()<CR> | 259 | nnoremap \q :call ToggleQuit()<CR> |
| 249 | 260 | ||
| 261 | func! QuitWithCheck() | ||
| 262 | if g:quitVimWhenPressingCtrlC | ||
| 263 | silent! quit | ||
| 264 | else | ||
| 265 | echo "Press \\q to allow quit with <C-c>" | ||
| 266 | endif | ||
| 267 | endfunc | ||
| 250 | function! CloseBufferSafely() | 268 | function! CloseBufferSafely() |
| 251 | let l:bufnr = bufnr() | ||
| 252 | " Ask Saving | 269 | " Ask Saving |
| 253 | if &modified | 270 | if &modified |
| 254 | let answer = confirm("Save changes?", "&Yes\n&No\n&Cancel") | 271 | let answer = confirm("Save changes?", "&Yes\n&No\n&Cancel") |
| @@ -257,31 +274,37 @@ function! CloseBufferSafely() | |||
| 257 | if answer == "" | return | endif | 274 | if answer == "" | return | endif |
| 258 | endif | 275 | endif |
| 259 | 276 | ||
| 260 | if g:tab_group[tabpagenr()] == [l:bufnr] | 277 | let l:bufnr = bufnr() |
| 261 | bdelete | 278 | |
| 279 | if len(t:bufs) == 1 | ||
| 280 | " Close tab for last buffer | ||
| 281 | tabclose | ||
| 262 | else | 282 | else |
| 263 | bprevious | bd # | 283 | " Switch to proper buffer |
| 284 | let l:next_buf = get(t:bufs, bufnr('#')) ? bufnr('#') : filter(t:bufs, 'v:val != '..l:bufnr)[0] | ||
| 285 | exe "b "..l:next_buf | ||
| 286 | call filter(t:bufs, 'v:val != '..l:bufnr) | ||
| 264 | endif | 287 | endif |
| 288 | |||
| 289 | " Delete buffer if every t:buf doesn't have it | ||
| 290 | for tab in gettabinfo() | ||
| 291 | if get(tab.variables.bufs, l:bufnr) | return | endif | ||
| 292 | endfor | ||
| 293 | exe "bd! "..l:bufnr | ||
| 294 | |||
| 265 | endfunction | 295 | endfunction |
| 266 | func! QuitWithCheck() | ||
| 267 | if g:quitVimWhenPressingCtrlC | ||
| 268 | silent! quit | ||
| 269 | else | ||
| 270 | echo "Press \\q to allow quit with <C-c>" | ||
| 271 | endif | ||
| 272 | endfunc | ||
| 273 | function! Bye() | 296 | function! Bye() |
| 274 | let windows = gettabinfo(tabpagenr())[0]['windows'] | 297 | let windows = gettabinfo(tabpagenr())[0]['windows'] |
| 275 | let bufs = getbufinfo({'buflisted': 1}) | ||
| 276 | 298 | ||
| 277 | if len(windows) == 1 && len(bufs) == 1 | 299 | if len(t:bufs) <= 1 && len(windows) == 1 |
| 278 | call QuitWithCheck() | 300 | call QuitWithCheck() |
| 279 | elseif &diff | 301 | elseif &diff |
| 280 | silent call CloseBuffersForDiff() | 302 | silent call CloseBuffersForDiff() |
| 281 | elseif len(windows) >1 | 303 | elseif len(windows) >1 |
| 282 | quit | 304 | quit |
| 283 | else | 305 | else |
| 284 | silent! call CloseBufferSafely() | 306 | call CloseBufferSafely() |
| 307 | " silent! call CloseBufferSafely() | ||
| 285 | endif | 308 | endif |
| 286 | endfunction | 309 | endfunction |
| 287 | nnoremap <silent> <C-c> :call Bye()<CR> | 310 | nnoremap <silent> <C-c> :call Bye()<CR> |
| @@ -325,7 +348,7 @@ nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR> | |||
| 325 | " }}} | 348 | " }}} |
| 326 | 349 | ||
| 327 | " }}} | 350 | " }}} |
| 328 | " MANAGE_WINDOWS ----------------{{{ | 351 | " MANAGE_WINDOWS {{{ |
| 329 | 352 | ||
| 330 | nnoremap <leader><leader>sb :windo set scrollbind!<CR> | 353 | nnoremap <leader><leader>sb :windo set scrollbind!<CR> |
| 331 | 354 | ||
| @@ -361,7 +384,7 @@ elseif has('nvim') | |||
| 361 | tnoremap <m-q> <c-\><c-n> | 384 | tnoremap <m-q> <c-\><c-n> |
| 362 | endif | 385 | endif |
| 363 | " }}} | 386 | " }}} |
| 364 | " MANAGE_TABS ----------------{{{ | 387 | " MANAGE_TABS {{{ |
| 365 | 388 | ||
| 366 | " Useful mappings for managing tabs | 389 | " Useful mappings for managing tabs |
| 367 | map <leader>tn :tabnew<CR> | 390 | map <leader>tn :tabnew<CR> |
| @@ -395,13 +418,13 @@ function! Tab_MoveRight() | |||
| 395 | endif | 418 | endif |
| 396 | endfunc | 419 | endfunc |
| 397 | " }}} | 420 | " }}} |
| 398 | " FOLD ----------------{{{ | 421 | " FOLD {{{ |
| 399 | 422 | ||
| 400 | " Set fold options | 423 | " Set fold options |
| 401 | nnoremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> | 424 | nnoremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> |
| 402 | nnoremap <leader><leader>fc :<C-\>e'set foldcolumn='..&foldcolumn<CR> | 425 | nnoremap <leader><leader>fc :<C-\>e'set foldcolumn='..&foldcolumn<CR> |
| 403 | 426 | ||
| 404 | nnoremap zi zizz | 427 | nnoremap zi zizz:silent exe &foldenable ? "set foldcolumn=auto:3" : "set foldcolumn=0"<CR> |
| 405 | 428 | ||
| 406 | " Show fold level when it changes | 429 | " Show fold level when it changes |
| 407 | nnoremap zm zm:set foldlevel<CR> | 430 | nnoremap zm zm:set foldlevel<CR> |
| @@ -415,7 +438,9 @@ nnoremap zF :call ToggleUnfoldSelection()<CR>zv | |||
| 415 | nnoremap \z :call GrayOutOtherFolds()<CR> | 438 | nnoremap \z :call GrayOutOtherFolds()<CR> |
| 416 | 439 | ||
| 417 | " Select current fold | 440 | " Select current fold |
| 441 | onoremap az :<C-U>silent! keepjumps normal![zV]z<CR> | ||
| 418 | xnoremap az :<C-U>silent! keepjumps normal![zV]z<CR> | 442 | xnoremap az :<C-U>silent! keepjumps normal![zV]z<CR> |
| 443 | onoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR> | ||
| 419 | xnoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR> | 444 | xnoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR> |
| 420 | 445 | ||
| 421 | " Use l to open fold | 446 | " Use l to open fold |
| @@ -464,7 +489,7 @@ function! GrayOutOtherFolds() | |||
| 464 | endfunction | 489 | endfunction |
| 465 | 490 | ||
| 466 | " }}} | 491 | " }}} |
| 467 | " HIGHLIGHT ----------------{{{ | 492 | " HIGHLIGHT {{{ |
| 468 | 493 | ||
| 469 | " Disable highlight when <leader><CR> is pressed | 494 | " Disable highlight when <leader><CR> is pressed |
| 470 | nnoremap <silent> <leader><CR> :noh<CR> | 495 | nnoremap <silent> <leader><CR> :noh<CR> |
| @@ -497,7 +522,7 @@ nnoremap <silent> <leader>gh :call matchadd('MultiLineHighlight', '\%'.line('.') | |||
| 497 | nnoremap <silent> <leader>gH :call clearmatches()<CR> | 522 | nnoremap <silent> <leader>gH :call clearmatches()<CR> |
| 498 | 523 | ||
| 499 | " }}} | 524 | " }}} |
| 500 | " SURROUND ----------------{{{ | 525 | " SURROUND {{{ |
| 501 | 526 | ||
| 502 | inoremap ' ''<Left> | 527 | inoremap ' ''<Left> |
| 503 | inoremap " ""<Left> | 528 | inoremap " ""<Left> |
| @@ -530,14 +555,14 @@ endfunction | |||
| 530 | vnoremap <space> :<C-u>call AddSpaceForSelection()<CR> | 555 | vnoremap <space> :<C-u>call AddSpaceForSelection()<CR> |
| 531 | 556 | ||
| 532 | " }}} | 557 | " }}} |
| 533 | " QUICKFIX ----------------{{{ | 558 | " QUICKFIX {{{ |
| 534 | 559 | ||
| 535 | nnoremap <leader>cn :cn<CR> | 560 | nnoremap <leader>cn :cn<CR> |
| 536 | nnoremap <leader>cp :cp<CR> | 561 | nnoremap <leader>cp :cp<CR> |
| 537 | nnoremap <leader>cw :cw 10<CR> | 562 | nnoremap <leader>cw :cw 10<CR> |
| 538 | 563 | ||
| 539 | " }}} | 564 | " }}} |
| 540 | " REDIRECTION_WITH_BUFFER ----------------{{{ | 565 | " REDIRECTION_WITH_BUFFER {{{ |
| 541 | 566 | ||
| 542 | " Usage: | 567 | " Usage: |
| 543 | " :Redir hi ............. show the full output of command ':hi' in a scratch window | 568 | " :Redir hi ............. show the full output of command ':hi' in a scratch window |
| @@ -561,38 +586,23 @@ command! -nargs=1 -complete=command Redir silent call Redir(<q-args>) | |||
| 561 | command! -nargs=1 -complete=command R silent call Redir(<q-args>) | 586 | command! -nargs=1 -complete=command R silent call Redir(<q-args>) |
| 562 | nnoremap <leader>rr :Redir<space> | 587 | nnoremap <leader>rr :Redir<space> |
| 563 | " }}} | 588 | " }}} |
| 564 | " QUICK_SUBSTITUTE ----------------{{{ | 589 | " SEARCH/SUBSTITUTE {{{ |
| 565 | 590 | ||
| 566 | " Usage: Press <TAB> n times for area, and <CR> for substitute | 591 | " Search for selected test |
| 592 | vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR> | ||
| 567 | 593 | ||
| 568 | " substitute across file | ||
| 569 | vnoremap <leader>s y:%s//<C-R>0/g<LEFT><LEFT> | 594 | vnoremap <leader>s y:%s//<C-R>0/g<LEFT><LEFT> |
| 570 | 595 | ||
| 571 | let g:search_not_in_register = 1 | 596 | " Usage: Press <TAB> n times for area, and <CR> for substitute |
| 572 | " When leaving visual mode, resume search_not_in_register | 597 | let g:search_selection = 0 |
| 573 | autocmd Modechanged [vV\x16]*:* let g:search_not_in_register = 1 | 598 | " When leaving visual mode, resume search_selection |
| 574 | 599 | autocmd Modechanged [vV\x16]*:* let g:search_selection = 0 | |
| 575 | function! ExpandSelectionBySearch(sep) | 600 | xmap <expr> <TAB> g:search_selection ? "//e<CR>" : "*:let g:search_selection = 1<CR>gv//e<CR>" |
| 576 | if g:search_not_in_register | 601 | xmap <expr> <S-TAB> g:search_selection ? "??<CR>" : "*:let g:search_selection = 1<CR>gv??<CR>" |
| 577 | " Save current selection to register, and keep selection | 602 | vnoremap <CR> :s//<C-R>0/g<Left><Left> |
| 578 | norm! ygv | ||
| 579 | let g:search_not_in_register = 0 | ||
| 580 | endif | ||
| 581 | " Use register s to go to next search, counts/total is displayed in | ||
| 582 | " statusline | ||
| 583 | call feedkeys(a:sep.."\<C-R>0"..a:sep.."e\<CR>") | ||
| 584 | endfunction | ||
| 585 | function! SubstituteBySearch() | ||
| 586 | " Apply current search for default substitute text | ||
| 587 | call feedkeys(":s//\<C-R>0/g\<Left>\<Left>") | ||
| 588 | endfunction | ||
| 589 | |||
| 590 | vnoremap <TAB> <Cmd>call ExpandSelectionBySearch('/')<CR> | ||
| 591 | vnoremap <S-TAB> <Cmd>call ExpandSelectionBySearch('?')<CR> | ||
| 592 | vnoremap <CR> <Cmd>call SubstituteBySearch()<CR> | ||
| 593 | 603 | ||
| 594 | " }}} | 604 | " }}} |
| 595 | " SIGN ----------------{{{ | 605 | " SIGN {{{ |
| 596 | 606 | ||
| 597 | nnoremap <leader><leader>sc :<C-\>e'set signcolumn='..&signcolumn<CR> | 607 | nnoremap <leader><leader>sc :<C-\>e'set signcolumn='..&signcolumn<CR> |
| 598 | 608 | ||
| @@ -600,7 +610,7 @@ nnoremap <leader>si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. | |||
| 600 | nnoremap <leader>sI :exe ":sign unplace * file=" .. expand("%:p")<CR> | 610 | nnoremap <leader>sI :exe ":sign unplace * file=" .. expand("%:p")<CR> |
| 601 | 611 | ||
| 602 | " }}} | 612 | " }}} |
| 603 | " GIT_TIG ----------------{{{ | 613 | " GIT_TIG {{{ |
| 604 | 614 | ||
| 605 | let g:tig_explorer_keymap_commit_split = '<C-s>' | 615 | let g:tig_explorer_keymap_commit_split = '<C-s>' |
| 606 | let g:tig_explorer_keymap_commit_vsplit = '<C-v>' | 616 | let g:tig_explorer_keymap_commit_vsplit = '<C-v>' |
| @@ -609,7 +619,7 @@ nnoremap <C-t>s <Cmd>TigStatus<CR> | |||
| 609 | nnoremap <C-t>b <Cmd>TigBlame<CR> | 619 | nnoremap <C-t>b <Cmd>TigBlame<CR> |
| 610 | 620 | ||
| 611 | " }}} | 621 | " }}} |
| 612 | " Tmp: Markdown items (temproray solution) ----------------{{{ | 622 | " Tmp: Markdown items (temproray solution) {{{ |
| 613 | 623 | ||
| 614 | " Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX" | 624 | " Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX" |
| 615 | " autocmd FileType markdown nnoremap <buffer> <leader>i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }'<CR><CR> | 625 | " autocmd FileType markdown nnoremap <buffer> <leader>i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }'<CR><CR> |
| @@ -618,14 +628,14 @@ nnoremap <C-t>b <Cmd>TigBlame<CR> | |||
| 618 | " Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] " | 628 | " Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] " |
| 619 | " nnoremap <leader>x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }'<CR><CR> | 629 | " nnoremap <leader>x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }'<CR><CR> |
| 620 | " }}} | 630 | " }}} |
| 621 | " Tmp: Common system command ----------------{{{ | 631 | " Tmp: Common system command {{{ |
| 622 | " Show date selector | 632 | " Show date selector |
| 623 | nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR> | 633 | nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR> |
| 624 | nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR> | 634 | nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR> |
| 625 | nnoremap <leader>dt :r !date +\%H:\%m<CR>A | 635 | nnoremap <leader>dt :r !date +\%H:\%m<CR>A |
| 626 | 636 | ||
| 627 | " }}} | 637 | " }}} |
| 628 | " Tmp: Compile ----------------{{{ | 638 | " Tmp: Compile {{{ |
| 629 | 639 | ||
| 630 | " 编译运行 C/C++ 项目 | 640 | " 编译运行 C/C++ 项目 |
| 631 | " 详细见:http://www.skywind.me/blog/archives/2084 | 641 | " 详细见:http://www.skywind.me/blog/archives/2084 |
diff --git a/vim/mini.lua b/vim/mini.lua index 15f4c42..6c31590 100644 --- a/vim/mini.lua +++ b/vim/mini.lua | |||
| @@ -327,12 +327,121 @@ require("lazy").setup({ | |||
| 327 | vim.keymap.set({ "n", "t" }, "<A-i>", function() | 327 | vim.keymap.set({ "n", "t" }, "<A-i>", function() |
| 328 | vim.cmd("ToggleTerm direction=float") | 328 | vim.cmd("ToggleTerm direction=float") |
| 329 | end, { desc = "terminal toggle floating term" }) | 329 | end, { desc = "terminal toggle floating term" }) |
| 330 | vim.keymap.set({ "n", "t" }, "<A-e>", function() | ||
| 331 | zoom() | ||
| 332 | end, { desc = "terminal toggle floating term" }) | ||
| 330 | vim.keymap.set({ "n", "t" }, "<A-v>", function() | 333 | vim.keymap.set({ "n", "t" }, "<A-v>", function() |
| 331 | vim.cmd("ToggleTerm direction=horizontal") | 334 | vim.cmd("ToggleTerm direction=horizontal") |
| 332 | end, { desc = "terminal toggle floating term" }) | 335 | end, { desc = "terminal toggle floating term" }) |
| 333 | end, | 336 | end, |
| 334 | }, | 337 | }, |
| 335 | --}}} | 338 | --}}} |
| 339 | -- Markdown: obsidian {{{ | ||
| 340 | { | ||
| 341 | "epwalsh/obsidian.nvim", | ||
| 342 | version = "*", -- recommended, use latest release instead of latest commit | ||
| 343 | lazy = false, | ||
| 344 | ft = "markdown", | ||
| 345 | -- Replace the above line with this if you only want to load obsidian.nvim for markdown files in your vault: | ||
| 346 | -- event = { | ||
| 347 | -- -- If you want to use the home shortcut '~' here you need to call 'vim.fn.expand'. | ||
| 348 | -- -- E.g. "BufReadPre " .. vim.fn.expand "~" .. "/my-vault/**.md" | ||
| 349 | -- "BufReadPre path/to/my-vault/**.md", | ||
| 350 | -- "BufNewFile path/to/my-vault/**.md", | ||
| 351 | -- }, | ||
| 352 | dependencies = { | ||
| 353 | -- Required. | ||
| 354 | "nvim-lua/plenary.nvim", | ||
| 355 | }, | ||
| 356 | config = function() | ||
| 357 | vim.keymap.set("n", "<leader>oo", ":Obsidian", { }) | ||
| 358 | vim.keymap.set("n", "<leader>ot", ":ObsidianTags<CR>", { }) | ||
| 359 | vim.keymap.set("n", "<leader>os", ":ObsidianSearch<CR>", { }) | ||
| 360 | vim.keymap.set("n", "<leader>oq", ":ObsidianQuickSwitch<CR>", { }) | ||
| 361 | vim.keymap.set("v", "<leader>on", ":ObsidianLinkNew<CR>", { }) | ||
| 362 | vim.keymap.set("n", "<leader>ol", ":ObsidianLinks<CR>", { }) | ||
| 363 | require("obsidian").setup({ | ||
| 364 | workspaces = { | ||
| 365 | { | ||
| 366 | name = "log", | ||
| 367 | path = "~/log", | ||
| 368 | }, | ||
| 369 | }, | ||
| 370 | completion = { | ||
| 371 | -- Set to false to disable completion. | ||
| 372 | nvim_cmp = true, | ||
| 373 | -- Trigger completion at 2 chars. | ||
| 374 | min_chars = 2, | ||
| 375 | }, | ||
| 376 | mapping = { | ||
| 377 | -- Toggle check-boxes. | ||
| 378 | ["<leader>oc"] = { | ||
| 379 | action = function() | ||
| 380 | return require("obsidian").util.toggle_checkbox() | ||
| 381 | end, | ||
| 382 | opts = { buffer = true }, | ||
| 383 | }, | ||
| 384 | -- Smart action depending on context, either follow link or toggle checkbox. | ||
| 385 | ["<cr>"] = { | ||
| 386 | action = function() | ||
| 387 | return require("obsidian").util.smart_action() | ||
| 388 | end, | ||
| 389 | opts = { buffer = true, expr = true }, | ||
| 390 | }, | ||
| 391 | }, | ||
| 392 | -- see below for full list of options 👇 | ||
| 393 | note_id_func = function(title) | ||
| 394 | return title | ||
| 395 | -- Create note IDs in a Zettelkasten format with a timestamp and a suffix. | ||
| 396 | -- In this case a note with the title 'My new note' will be given an ID that looks | ||
| 397 | -- like '1657296016-my-new-note', and therefore the file name '1657296016-my-new-note.md' | ||
| 398 | -- local suffix = "" | ||
| 399 | -- title = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower() | ||
| 400 | -- if title ~= nil and title ~= "" then | ||
| 401 | -- -- If title is given, transform it into valid file name. | ||
| 402 | -- suffix = "-" .. title | ||
| 403 | -- else | ||
| 404 | -- -- If title is nil, just add 4 random uppercase letters to the suffix. | ||
| 405 | -- for _ = 1, 4 do | ||
| 406 | -- suffix = suffix .. string.char(math.random(65, 90)) | ||
| 407 | -- end | ||
| 408 | -- suffix = "-" .. title | ||
| 409 | -- end | ||
| 410 | -- return tostring(os.time()) .. suffix | ||
| 411 | end, | ||
| 412 | -- Optional, for templates (see below). | ||
| 413 | templates = { | ||
| 414 | folder = "templates", | ||
| 415 | date_format = "%Y-%m-%d", | ||
| 416 | time_format = "%H:%M", | ||
| 417 | -- A map for custom variables, the key should be the variable and the value a function | ||
| 418 | substitutions = {}, | ||
| 419 | }, | ||
| 420 | }) | ||
| 421 | end, | ||
| 422 | }, | ||
| 423 | -- }}} | ||
| 424 | -- Markdown: preview {{{ | ||
| 425 | { | ||
| 426 | "iamcco/markdown-preview.nvim", | ||
| 427 | cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, | ||
| 428 | build = function() | ||
| 429 | vim.fn["mkdp#util#install"]() | ||
| 430 | end, | ||
| 431 | keys = { | ||
| 432 | { | ||
| 433 | "<leader>cp", | ||
| 434 | ft = "markdown", | ||
| 435 | "<cmd>MarkdownPreviewToggle<cr>", | ||
| 436 | desc = "Markdown Preview", | ||
| 437 | }, | ||
| 438 | }, | ||
| 439 | config = function() | ||
| 440 | vim.cmd([[do FileType]]) | ||
| 441 | vim.g.mkdp_browser = 'firefox' | ||
| 442 | end, | ||
| 443 | }, | ||
| 444 | -- }}} | ||
| 336 | -- lualine {{{ | 445 | -- lualine {{{ |
| 337 | { | 446 | { |
| 338 | "nvim-lualine/lualine.nvim", | 447 | "nvim-lualine/lualine.nvim", |
| @@ -417,67 +526,67 @@ require("lazy").setup({ | |||
| 417 | }, | 526 | }, |
| 418 | -- }}} | 527 | -- }}} |
| 419 | 528 | ||
| 420 | -- lspconfig {{{ | 529 | -- -- lspconfig {{{ |
| 421 | -- Use :help lspconfig-all to check servers | 530 | -- -- Use :help lspconfig-all to check servers |
| 422 | { | 531 | -- { |
| 423 | "neovim/nvim-lspconfig", | 532 | -- "neovim/nvim-lspconfig", |
| 424 | lazy = false, | 533 | -- lazy = false, |
| 425 | config = function() | 534 | -- config = function() |
| 426 | local lspconfig = require "lspconfig" | 535 | -- local lspconfig = require "lspconfig" |
| 427 | -- | 536 | -- -- |
| 428 | -- typescript | 537 | -- -- typescript |
| 429 | lspconfig.lua_ls.setup {} | 538 | -- lspconfig.lua_ls.setup {} |
| 430 | lspconfig.tsserver.setup {} | 539 | -- lspconfig.tsserver.setup {} |
| 431 | lspconfig.vimls.setup {} | 540 | -- lspconfig.vimls.setup {} |
| 432 | lspconfig.html.setup {} | 541 | -- lspconfig.html.setup {} |
| 433 | -- | 542 | -- -- |
| 434 | vim.keymap.set("n", "<leader>F", function() | 543 | -- vim.keymap.set("n", "<leader>F", function() |
| 435 | vim.lsp.buf.format() | 544 | -- vim.lsp.buf.format() |
| 436 | end, { desc = "format files" }) | 545 | -- end, { desc = "format files" }) |
| 437 | end, | 546 | -- end, |
| 438 | }, | 547 | -- }, |
| 439 | -- }}} | 548 | -- -- }}} |
| 440 | -- Mason {{{ | 549 | -- -- Mason {{{ |
| 441 | { | 550 | -- { |
| 442 | "williamboman/mason.nvim", | 551 | -- "williamboman/mason.nvim", |
| 443 | dependencies = { | 552 | -- dependencies = { |
| 444 | "williamboman/mason-lspconfig.nvim", | 553 | -- "williamboman/mason-lspconfig.nvim", |
| 445 | }, | 554 | -- }, |
| 446 | config = function() | 555 | -- config = function() |
| 447 | require('mason').setup { | 556 | -- require('mason').setup { |
| 448 | automatically_installation = true, | 557 | -- automatically_installation = true, |
| 449 | ensure_installed = { | 558 | -- ensure_installed = { |
| 450 | "vim-language-server", | 559 | -- "vim-language-server", |
| 451 | "lua-language-server", | 560 | -- "lua-language-server", |
| 452 | "css-lsp", | 561 | -- "css-lsp", |
| 453 | "html-lsp", | 562 | -- "html-lsp", |
| 454 | "prettier", | 563 | -- "prettier", |
| 455 | "stylua", | 564 | -- "stylua", |
| 456 | }, | 565 | -- }, |
| 457 | } | 566 | -- } |
| 458 | end | 567 | -- end |
| 459 | }, | 568 | -- }, |
| 460 | -- }}} | 569 | -- -- }}} |
| 461 | -- treesitter {{{ | 570 | -- -- treesitter {{{ |
| 462 | { | 571 | -- { |
| 463 | "nvim-treesitter/nvim-treesitter", | 572 | -- "nvim-treesitter/nvim-treesitter", |
| 464 | event = { "BufReadPost", "BufNewFile" }, | 573 | -- event = { "BufReadPost", "BufNewFile" }, |
| 465 | cmd = { "TSInstall", "TSBufEnable", "TSBufDisable", "TSModuleInfo" }, | 574 | -- cmd = { "TSInstall", "TSBufEnable", "TSBufDisable", "TSModuleInfo" }, |
| 466 | build = ":TSUpdate", | 575 | -- build = ":TSUpdate", |
| 467 | config = function() | 576 | -- config = function() |
| 468 | require("nvim-treesitter.configs").setup({ | 577 | -- require("nvim-treesitter.configs").setup({ |
| 469 | ensure_installed = { "lua", "luadoc", "printf", "vim", "vimdoc" }, | 578 | -- ensure_installed = { "lua", "luadoc", "printf", "vim", "vimdoc" }, |
| 470 | -- | 579 | -- -- |
| 471 | highlight = { | 580 | -- highlight = { |
| 472 | enable = true, | 581 | -- enable = true, |
| 473 | use_languagetree = true, | 582 | -- use_languagetree = true, |
| 474 | }, | 583 | -- }, |
| 475 | -- | 584 | -- -- |
| 476 | indent = { enable = true }, | 585 | -- indent = { enable = true }, |
| 477 | }) | 586 | -- }) |
| 478 | end, | 587 | -- end, |
| 479 | }, | 588 | -- }, |
| 480 | -- }}} | 589 | -- -- }}} |
| 481 | -- nvim-cmp {{{ | 590 | -- nvim-cmp {{{ |
| 482 | { | 591 | { |
| 483 | "hrsh7th/nvim-cmp", | 592 | "hrsh7th/nvim-cmp", |
| @@ -537,7 +646,6 @@ require("lazy").setup({ | |||
| 537 | ["<C-d>"] = cmp.mapping.scroll_docs(-4), | 646 | ["<C-d>"] = cmp.mapping.scroll_docs(-4), |
| 538 | ["<C-f>"] = cmp.mapping.scroll_docs(4), | 647 | ["<C-f>"] = cmp.mapping.scroll_docs(4), |
| 539 | ["<C-Space>"] = cmp.mapping.complete(), | 648 | ["<C-Space>"] = cmp.mapping.complete(), |
| 540 | ["<C-e>"] = cmp.mapping.close(), | ||
| 541 | ['<CR>'] = cmp.mapping.confirm(), | 649 | ['<CR>'] = cmp.mapping.confirm(), |
| 542 | ['<C-c>'] = cmp.mapping.abort(), | 650 | ['<C-c>'] = cmp.mapping.abort(), |
| 543 | } | 651 | } |
| @@ -577,7 +685,7 @@ require("lazy").setup({ | |||
| 577 | { name = "path" }, | 685 | { name = "path" }, |
| 578 | }, | 686 | }, |
| 579 | experimental = { | 687 | experimental = { |
| 580 | ghost_text = true, | 688 | -- ghost_text = true, |
| 581 | } | 689 | } |
| 582 | }) | 690 | }) |
| 583 | cmp.setup.cmdline(':', { | 691 | cmp.setup.cmdline(':', { |
| @@ -675,6 +783,7 @@ require("mini.basics").setup() | |||
| 675 | require("mini.misc").setup({ | 783 | require("mini.misc").setup({ |
| 676 | make_global = { "put", "put_text", "zoom" }, | 784 | make_global = { "put", "put_text", "zoom" }, |
| 677 | }) | 785 | }) |
| 786 | vim.keymap.set( 'n', '<leader>z', function() zoom() end, { buffer = bufnr, desc = 'zoom' }) | ||
| 678 | --}}} | 787 | --}}} |
| 679 | -- mini.extra {{{ | 788 | -- mini.extra {{{ |
| 680 | require("mini.extra").setup() | 789 | require("mini.extra").setup() |
| @@ -800,10 +909,10 @@ require("mini.visits").setup() | |||
| 800 | -- mini.surround {{{ | 909 | -- mini.surround {{{ |
| 801 | require("mini.surround").setup { | 910 | require("mini.surround").setup { |
| 802 | mappings = { | 911 | mappings = { |
| 803 | add = 'S' | 912 | add = 'sa' |
| 804 | } | 913 | } |
| 805 | } | 914 | } |
| 806 | vim.keymap.set('v', 's', 'S', { remap = true }) | 915 | vim.keymap.set('v', 's', 'sa', {}) |
| 807 | -- }}} | 916 | -- }}} |
| 808 | -- mini.indentscope {{{ | 917 | -- mini.indentscope {{{ |
| 809 | require("mini.indentscope").setup() | 918 | require("mini.indentscope").setup() |
| @@ -957,16 +1066,16 @@ require("mini.pairs").setup() | |||
| 957 | -- add { source = "lambdalisue/suda.vim" } | 1066 | -- add { source = "lambdalisue/suda.vim" } |
| 958 | -- }}} | 1067 | -- }}} |
| 959 | -- -- true-zen {{{ | 1068 | -- -- true-zen {{{ |
| 960 | -- add({ | 1069 | -- Add({ |
| 961 | -- source = "Pocco81/true-zen.nvim", | 1070 | -- source = "Pocco81/true-zen.nvim", |
| 962 | -- }) | 1071 | -- }) |
| 963 | -- vim.keymap.set("n", "<leader>z", ":TZAtaraxis<CR>") | 1072 | -- vim.keymap.set("n", "<leader>z", ":TZAtaraxis<CR>") |
| 964 | -- -- }}} | 1073 | -- -- }}} |
| 965 | -- -- bufferline {{{ | 1074 | -- bufferline {{{ |
| 966 | Add({ | 1075 | Add({ |
| 967 | source = "akinsho/bufferline.nvim", | 1076 | source = "akinsho/bufferline.nvim", |
| 968 | depends = { | 1077 | depends = { |
| 969 | "nvim-tree/nvim-web-devicons", -- OPTIONAL: for file icons | 1078 | "nvim-tree/nvim-web-devicons", |
| 970 | "tiagovla/scope.nvim", | 1079 | "tiagovla/scope.nvim", |
| 971 | }, | 1080 | }, |
| 972 | }) | 1081 | }) |
| @@ -1015,34 +1124,15 @@ require('bufferline').setup{ | |||
| 1015 | } | 1124 | } |
| 1016 | }, | 1125 | }, |
| 1017 | custom_filter = function (buf_number) | 1126 | custom_filter = function (buf_number) |
| 1018 | local tabId = tostring(vim.fn.tabpagenr()) | 1127 | for _, p in ipairs(vim.t.bufs) do |
| 1019 | if vim.g.tab_group[tabId] then | 1128 | if p == buf_number then |
| 1020 | for _, p in ipairs(vim.g.tab_group[tabId]) do | 1129 | return true |
| 1021 | if p == buf_number then | ||
| 1022 | return true | ||
| 1023 | end | ||
| 1024 | end | 1130 | end |
| 1025 | end | 1131 | end |
| 1026 | return false | 1132 | return false |
| 1027 | end | 1133 | end |
| 1028 | } | 1134 | } |
| 1029 | }; | 1135 | }; |
| 1030 | |||
| 1031 | -- require("bufferline").setup({ | ||
| 1032 | -- options = { | ||
| 1033 | -- custom_filter = function(buf_number) | ||
| 1034 | -- local tabId = vim.fn.tabpagenr() | ||
| 1035 | -- if vim.g.tab_group[tabId] then | ||
| 1036 | -- for _, p in ipairs(vim.g.tab_group[tabId]) do | ||
| 1037 | -- if p == buf_number then | ||
| 1038 | -- return true | ||
| 1039 | -- end | ||
| 1040 | -- end | ||
| 1041 | -- end | ||
| 1042 | -- return false | ||
| 1043 | -- end | ||
| 1044 | -- }, | ||
| 1045 | -- }) | ||
| 1046 | -- keymaps {{{ | 1136 | -- keymaps {{{ |
| 1047 | for i = 1, 9, 1 do | 1137 | for i = 1, 9, 1 do |
| 1048 | vim.keymap.set("n", string.format("<A-%s>", i), function() | 1138 | vim.keymap.set("n", string.format("<A-%s>", i), function() |
| @@ -1058,6 +1148,12 @@ vim.keymap.set("n", "<M-p>", "<Cmd>BufferLineTogglePin<CR>", opts) | |||
| 1058 | -- }}} | 1148 | -- }}} |
| 1059 | -- -- TODO: tabpages | 1149 | -- -- TODO: tabpages |
| 1060 | -- -- }}} | 1150 | -- -- }}} |
| 1151 | Add { | ||
| 1152 | source = "chentoast/marks.nvim" | ||
| 1153 | } | ||
| 1154 | require('marks').setup { | ||
| 1155 | } | ||
| 1156 | vim.cmd("hi MarkSignHL guifg=#f85e84 guibg=#37343a") | ||
| 1061 | 1157 | ||
| 1062 | -- KEYMAPS {{{ | 1158 | -- KEYMAPS {{{ |
| 1063 | 1159 | ||