aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim')
-rw-r--r--vim/init/basic.vim195
-rw-r--r--vim/init/config.vim30
-rw-r--r--vim/init/keymaps.vim181
-rw-r--r--vim/lua/mappings.lua299
-rw-r--r--vim/lua/plugins/init.lua11
5 files changed, 293 insertions, 423 deletions
diff --git a/vim/init/basic.vim b/vim/init/basic.vim
index 2867f69..b268c6b 100644
--- a/vim/init/basic.vim
+++ b/vim/init/basic.vim
@@ -1,36 +1,24 @@
1"====================================================================== 1"======================================================================
2"
3" init-basic.vim - Need vim tiny compatible 2" init-basic.vim - Need vim tiny compatible
4" 3"
5" Used for general usecases. No keymap and personal preference 4" Used for general usecases. No keymap and personal preference
6"
7" Use '*' to search for:
8" VIM_BEHAVIOR
9" VISUAL
10" EDIT
11" JUMP
12" SEARCH
13" BUFFERS
14" TABSIZE
15" ENCODING_PREFERENCE
16" FOLDING
17" BACKUP
18" MISC
19"====================================================================== 5"======================================================================
20 6
7" Vimscript file settings ---------------------- {{{
21 8
22"---------------------------------------------------------------------- 9" Usage: type --- for foldmark
23" VIM_BEHAVIOR 10augroup filetype_vim
24"---------------------------------------------------------------------- 11 autocmd!
25 12 execute "autocmd FileType vim :inoreabbrev <buffer> --- ----------------{".."{{"
13 autocmd FileType vim setlocal foldmethod=marker foldlevel=0
14augroup END
15" }}}
16" VIM_BEHAVIOR ----------------{{{
26let mapleader = "," " Always use comma as leader key 17let mapleader = "," " Always use comma as leader key
27set nocompatible " Disable vi compatible, today is 20XX 18set nocompatible " Disable vi compatible, today is 20XX
28set path=.,** " Allow :find with completion 19set path=.,** " Allow :find with completion
29set mouse= " Disable mouse selection 20set mouse= " Disable mouse selection
30set winaltkeys=no " Allow alt key for mapping 21set winaltkeys=no " Allow alt key for mapping
31set cursorline
32set whichwrap=b,s
33" set autochdir " Automatically cd to current file
34 22
35" Turn persistent undo on 23" Turn persistent undo on
36" means that you can undo even when you close a buffer/VIM 24" means that you can undo even when you close a buffer/VIM
@@ -41,28 +29,44 @@ set conceallevel=1
41" Apply plugin and indent by filetype 29" Apply plugin and indent by filetype
42filetype plugin indent on 30filetype plugin indent on
43 31
44 32" Set to auto read when a file is changed from the outside
45"---------------------------------------------------------------------- 33" Unnamed buffer like CmdWindows should prevent this
46" VISUAL 34set autoread
47"---------------------------------------------------------------------- 35autocmd FocusGained,BufEnter .* checktime
36" }}}
37" VISUAL ----------------{{{
48 38
49" colorscheme desert " I like desert! 39" colorscheme desert " I like desert!
50 40
51" In most of the cases, it is overrides by lightline.vim 41" Editing Area
52set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c
53set showmatch " Show pairing brackets
54
55set number relativenumber " Use relativenumber 42set number relativenumber " Use relativenumber
56set wrap " Disable wrap by default 43set wrap " enable wrap by default
57set scrolloff=3 " Leave some buffer when scrolling down 44set scrolloff=3 " Leave some buffer when scrolling down
58set ruler " Show cursor position 45set showmatch " Show pairing brackets
59set laststatus=2 " Always show the status line 46set display=lastline
47set lazyredraw
48set formatoptions+=m " 遇到Unicode值大於255的文本,不必等到空格再折行
49set formatoptions+=B " 合併兩行中文時,不在中間加空格
50set whichwrap=b,s
51
52" Cursor
53set cursorline
60set guicursor=n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20 54set guicursor=n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20
55set matchtime=2
56
57" In most of the cases, it is overrides by lightline.vim
58set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l\ \ Column:\ %c
59set laststatus=2 " Always show the status line
60set ruler " Show cursor position
61set wildmenu wildoptions=pum,fuzzy
61 62
63" Format of error message
64set errorformat+=[%f:%l]\ ->\ %m,[%f:%l]:%m
62 65
63"---------------------------------------------------------------------- 66" 顯示分隔符號
64" EDIT 67set listchars=tab:\|\ ,trail:.,extends:>,precedes:<
65"---------------------------------------------------------------------- 68" }}}
69" EDIT ----------------{{{
66 70
67set backspace=eol,start,indent " Set Backspace behaviors 71set backspace=eol,start,indent " Set Backspace behaviors
68set autoindent " If current line has indent, automatically set indent for next line 72set autoindent " If current line has indent, automatically set indent for next line
@@ -76,32 +80,21 @@ imap <C-c> <Esc>l
76" Change IM to US when exit to Normal mode 80" Change IM to US when exit to Normal mode
77autocmd InsertLeave * :silent !fcitx-remote -c &>/dev/null || true 81autocmd InsertLeave * :silent !fcitx-remote -c &>/dev/null || true
78 82
79 83" }}}
80"---------------------------------------------------------------------- 84" JUMP to anoterh file ----------------{{{
81" JUMP
82"----------------------------------------------------------------------
83 85
84set isfname=@,48-57,/,.,-,_,+,,,#,$,%,~ " This affects filename recognition for gf (go to file) 86set isfname=@,48-57,/,.,-,_,+,,,#,$,%,~ " This affects filename recognition for gf (go to file)
85set suffixesadd=.md " Enable reference markdown file without extension 87set suffixesadd=.md " Enable reference markdown file without extension
86 88
87 89" }}}
88"---------------------------------------------------------------------- 90" SEARCH ----------------{{{
89" SEARCH 91set ignorecase " Search case without case sensation
90"----------------------------------------------------------------------
91set ignorecase " Search case without case sensation
92set smartcase 92set smartcase
93set hlsearch " Hilight all matched texts 93set hlsearch " Hilight all matched texts
94set incsearch " Show matched strings when typing 94set incsearch " Show matched strings when typing
95 95" }}}
96"---------------------------------------------------------------------- 96" BUFFERS ----------------{{{
97" BUFFERS 97" Use <C-c> to quit the last buffer ----------------{{{
98"----------------------------------------------------------------------
99
100" Set to auto read when a file is changed from the outside
101" Unnamed buffer like CmdWindows should prevent this
102set autoread
103autocmd FocusGained,BufEnter .* checktime
104
105let g:quitVimWhenPressingCtrlC = 1 98let g:quitVimWhenPressingCtrlC = 1
106function! ToggleQuit() 99function! ToggleQuit()
107 let g:quitVimWhenPressingCtrlC = g:quitVimWhenPressingCtrlC ? 0 : 1 100 let g:quitVimWhenPressingCtrlC = g:quitVimWhenPressingCtrlC ? 0 : 1
@@ -111,8 +104,6 @@ endfunction
111 104
112nnoremap <leader><leader>gl :call ToggleQuit()<CR> 105nnoremap <leader><leader>gl :call ToggleQuit()<CR>
113 106
114" Simply exit when closing the last buffer
115
116function! Bye() 107function! Bye()
117 if len(getbufinfo({'buflisted': 1})) == 1 && len(getwininfo()) == 1 108 if len(getbufinfo({'buflisted': 1})) == 1 && len(getwininfo()) == 1
118 if g:quitVimWhenPressingCtrlC 109 if g:quitVimWhenPressingCtrlC
@@ -128,16 +119,15 @@ endfunction
128" Ctrl-C rules!!! 119" Ctrl-C rules!!!
129nnoremap <silent> <C-c> :call Bye()<CR> 120nnoremap <silent> <C-c> :call Bye()<CR>
130 121
122" }}}
123
131" Don't unload a buffer when no longer shown in a window 124" Don't unload a buffer when no longer shown in a window
132" This allows you open a new buffer and leaves current buffer modified 125" This allows you open a new buffer and leaves current buffer modified
133set hidden 126set hidden
134 127
135
136" Put these in an autocmd group, so that you can revert them with:
137" ":augroup vimStartup | au! | augroup END" 128" ":augroup vimStartup | au! | augroup END"
138augroup vimStartup 129augroup vimStartup
139 au! 130 au!
140
141 " When editing a file, always jump to the last known cursor position. 131 " When editing a file, always jump to the last known cursor position.
142 " Don't do it when the position is invalid, when inside an event handler 132 " Don't do it when the position is invalid, when inside an event handler
143 " (happens when dropping a file on gvim) and for a commit message 133 " (happens when dropping a file on gvim) and for a commit message
@@ -148,38 +138,9 @@ augroup vimStartup
148 \ | endif 138 \ | endif
149augroup END 139augroup END
150 140
151" Set filetype for beancount 141" }}}
152autocmd BufRead,BufNewFile *.bean call PrepareBean() 142" TABSIZE ----------------{{{
153function PrepareBean()
154 set filetype=beancount
155 silent !setsid fava ~/bean/main.bean &>/dev/null
156 autocmd VimLeave * silent !killall fava
157endfunction
158
159" Set filetype for index.html
160autocmd BufWrite *.html,*.js,*.css call ReloadServer()
161function ReloadServer()
162 silent !browser-sync reload &>/dev/null
163endfunction
164
165" Hide the first line of a file if editing password file
166" TODO a better way to determine a file is related to password-store, now use
167" files under /dev/shm as filter
168autocmd BufRead /dev/shm/*.txt call SetPasswordFile()
169function SetPasswordFile()
170 setlocal foldminlines=0
171 setlocal foldmethod=manual
172 function s:custom()
173 return "Password"
174 endfunction
175 setlocal foldtext=s:custom()
176 norm! ggzfl
177endfunction
178 143
179
180"----------------------------------------------------------------------
181" TABSIZE
182"----------------------------------------------------------------------
183set expandtab 144set expandtab
184set shiftwidth=2 145set shiftwidth=2
185set autoindent 146set autoindent
@@ -187,10 +148,9 @@ set tabstop=4
187set softtabstop=0 148set softtabstop=0
188set smartindent 149set smartindent
189 150
151" }}}
152" ENCODING_PREFERENCE ----------------{{{
190 153
191"----------------------------------------------------------------------
192" ENCODING_PREFERENCE
193"----------------------------------------------------------------------
194if has('multi_byte') 154if has('multi_byte')
195 set encoding=utf-8 155 set encoding=utf-8
196 set fileencoding=utf-8 156 set fileencoding=utf-8
@@ -198,18 +158,13 @@ if has('multi_byte')
198 set fileencodings=utf-8,big5,ucs-bom,gbk,gb18030,euc-jp,latin1 158 set fileencodings=utf-8,big5,ucs-bom,gbk,gb18030,euc-jp,latin1
199endif 159endif
200 160
201 161" }}}
202"---------------------------------------------------------------------- 162" FOLDING ----------------{{{
203" FOLDING
204"----------------------------------------------------------------------
205set foldenable " Allow fold 163set foldenable " Allow fold
206set foldmethod=indent " Fold contents by indent 164set foldmethod=indent " Fold contents by indent
207set foldlevel=2 " Expand all by default 165set foldlevel=2
208 166" }}}
209 167" BACKUP ----------------{{{
210"----------------------------------------------------------------------
211" BACKUP
212"----------------------------------------------------------------------
213 168
214" Allow backup 169" Allow backup
215set backup 170set backup
@@ -222,42 +177,13 @@ set backupdir=~/.vim/tmp
222 177
223" backup when write file 178" backup when write file
224set writebackup 179set writebackup
225 180" }}}
226"---------------------------------------------------------------------- 181" MISC ----------------{{{
227" MISC
228"----------------------------------------------------------------------
229
230" 顯示括號匹配的時間
231set matchtime=2
232
233" 顯示最後一行
234set display=lastline
235
236" 允許下方顯示目錄
237set wildmenu wildoptions=pum,fuzzy
238
239" Improve performance
240set lazyredraw
241
242" Format of error message
243set errorformat+=[%f:%l]\ ->\ %m,[%f:%l]:%m
244
245" 顯示分隔符號
246set listchars=tab:\|\ ,trail:.,extends:>,precedes:<
247
248" 遇到Unicode值大於255的文本,不必等到空格再折行
249set formatoptions+=m
250
251" 合併兩行中文時,不在中間加空格
252set formatoptions+=B
253 182
254" Use Unix way to add newline 183" Use Unix way to add newline
255set ffs=unix,dos,mac 184set ffs=unix,dos,mac
256 185
257
258"----------------------------------------------------------------------
259" Ignore these suffixes when find/complete 186" Ignore these suffixes when find/complete
260"----------------------------------------------------------------------
261set suffixes=.bak,~,.o,.h,.info,.swp,.obj,.pyc,.pyo,.egg-info,.class 187set suffixes=.bak,~,.o,.h,.info,.swp,.obj,.pyc,.pyo,.egg-info,.class
262 188
263set wildignore=*.o,*.obj,*~,*.exe,*.a,*.pdb,*.lib "stuff to ignore when tab completing 189set wildignore=*.o,*.obj,*~,*.exe,*.a,*.pdb,*.lib "stuff to ignore when tab completing
@@ -276,3 +202,4 @@ set wildignore+=*.ppt,*.pptx,*.docx,*.xlt,*.xls,*.xlsx,*.odt,*.wps
276set wildignore+=*.msi,*.crx,*.deb,*.vfd,*.apk,*.ipa,*.bin,*.msu 202set wildignore+=*.msi,*.crx,*.deb,*.vfd,*.apk,*.ipa,*.bin,*.msu
277set wildignore+=*.gba,*.sfc,*.078,*.nds,*.smd,*.smc 203set wildignore+=*.gba,*.sfc,*.078,*.nds,*.smd,*.smc
278set wildignore+=*.linux2,*.win32,*.darwin,*.freebsd,*.linux,*.android 204set wildignore+=*.linux2,*.win32,*.darwin,*.freebsd,*.linux,*.android
205" }}}
diff --git a/vim/init/config.vim b/vim/init/config.vim
index 2d37b66..ec9f090 100644
--- a/vim/init/config.vim
+++ b/vim/init/config.vim
@@ -184,8 +184,36 @@ augroup InitFileTypesGroup
184 au FileType markdown setlocal foldexpr=MarkdownLevel() 184 au FileType markdown setlocal foldexpr=MarkdownLevel()
185 au FileType markdown setlocal foldmethod=expr 185 au FileType markdown setlocal foldmethod=expr
186 186
187 " 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
189 " files under /dev/shm as filter
190 autocmd BufRead /dev/shm/*.txt call SetPasswordFile()
191 function SetPasswordFile()
192 setlocal foldminlines=0
193 setlocal foldmethod=manual
194 function s:custom()
195 return "Password"
196 endfunction
197 setlocal foldtext=s:custom()
198 norm! ggzfl
199 endfunction
200
201 " Set filetype for beancount
202 autocmd BufRead,BufNewFile *.bean call PrepareBean()
203 function PrepareBean()
204 set filetype=beancount
205 silent !setsid fava ~/bean/main.bean &>/dev/null
206 autocmd VimLeave * silent !killall fava
207 endfunction
208
209 " Set filetype for index.html
210 autocmd BufWrite *.html,*.js,*.css call ReloadServer()
211 function ReloadServer()
212 silent !browser-sync reload &>/dev/null
213 endfunction
214
187 " quickfix: hide line number 215 " quickfix: hide line number
188 au FileType qf setlocal nonumber 216 au FileType quickfix setlocal nonumber
189 217
190 " 强制对某些扩展名的 filetype 进行纠正 218 " 强制对某些扩展名的 filetype 进行纠正
191 au BufNewFile,BufRead *.as setlocal filetype=actionscript 219 au BufNewFile,BufRead *.as setlocal filetype=actionscript
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim
index 3360a53..f7098a6 100644
--- a/vim/init/keymaps.vim
+++ b/vim/init/keymaps.vim
@@ -2,28 +2,13 @@
2" 2"
3" Only for key mapping 3" Only for key mapping
4" 4"
5" COMMON_MAPPING
6" MANAGE_VIMRC
7" MOVING_WITH_READLINE
8" INSERT_SURROUNDING
9" JUMP_TO_TABS_WITH_ALT
10" MANAGE_TABS
11" MANAGE_BUFFERS
12" MANAGE_WINDOWS
13" FOLDING
14" SURROURD_WITH_CHAR
15" REDIRECTION_WITH_BUFFER
16" QUICK_SUBSTITUTE
17" GIT_TIG
18" 终端支持 5" 终端支持
19" 编译运行 6" 编译运行
20" 7"
21"====================================================================== 8"======================================================================
22" vim: set ts=4 sw=4 tw=78 noet : 9" vim: set ts=4 sw=4 tw=78 noet :
23 10
24"---------------------------------------------------------------------- 11" COMMON_MAPPING ----------------{{{
25" COMMON_MAPPING
26"----------------------------------------------------------------------
27 12
28" Space for searching 13" Space for searching
29map <space> / 14map <space> /
@@ -135,18 +120,13 @@ nnoremap <leader>so V:so<CR>
135nnoremap <leader><leader>so :source ~/.vimrc<CR> 120nnoremap <leader><leader>so :source ~/.vimrc<CR>
136vnoremap so :source<CR> 121vnoremap so :source<CR>
137 122
138 123" }}}
139"---------------------------------------------------------------------- 124" MANAGE_VIMRC ----------------{{{
140" MANAGE_VIMRC
141"----------------------------------------------------------------------
142nnoremap <leader>e :scriptnames<space> 125nnoremap <leader>e :scriptnames<space>
143nnoremap <leader>ee :edit $MYVIMRC<CR> 126nnoremap <leader>ee :edit $MYVIMRC<CR>
144autocmd! BUFWRITEPOST $MYVIMRC source $MYVIMRC 127autocmd! BUFWRITEPOST $MYVIMRC source $MYVIMRC
145 128" }}}
146 129" MOVING_WITH_READLINE ----------------{{{
147"----------------------------------------------------------------------
148" MOVING_WITH_READLINE
149"----------------------------------------------------------------------
150inoremap <C-f> <Right> 130inoremap <C-f> <Right>
151inoremap <C-b> <Left> 131inoremap <C-b> <Left>
152inoremap <C-a> <C-o>0 132inoremap <C-a> <C-o>0
@@ -178,19 +158,15 @@ noremap <m-j> gj
178noremap <m-k> gk 158noremap <m-k> gk
179inoremap <m-j> <c-\><c-o>gj 159inoremap <m-j> <c-\><c-o>gj
180inoremap <m-k> <c-\><c-o>gk 160inoremap <m-k> <c-\><c-o>gk
181 161" }}}
182"---------------------------------------------------------------------- 162" INSERT_SURROUNDING ----------------{{{
183" INSERT_SURROUNDING
184"----------------------------------------------------------------------
185inoremap ' ''<Left> 163inoremap ' ''<Left>
186inoremap " ""<Left> 164inoremap " ""<Left>
187inoremap ( ()<Left> 165inoremap ( ()<Left>
188inoremap [ []<Left> 166inoremap [ []<Left>
189inoremap { {}<Left> 167inoremap { {}<Left>
190 168" }}}
191"---------------------------------------------------------------------- 169" JUMP_TO_TABS_WITH_ALT ----------------{{{
192" JUMP_TO_TABS_WITH_ALT
193"----------------------------------------------------------------------
194noremap <silent><A-1> :tabn 1<CR> 170noremap <silent><A-1> :tabn 1<CR>
195noremap <silent><A-2> :tabn 2<CR> 171noremap <silent><A-2> :tabn 2<CR>
196noremap <silent><M-3> :tabn 3<CR> 172noremap <silent><M-3> :tabn 3<CR>
@@ -209,11 +185,8 @@ inoremap <silent><M-6> <Esc>:tabn 6<CR>
209inoremap <silent><M-7> <Esc>:tabn 7<CR> 185inoremap <silent><M-7> <Esc>:tabn 7<CR>
210inoremap <silent><M-8> <Esc>:tabn 8<CR> 186inoremap <silent><M-8> <Esc>:tabn 8<CR>
211inoremap <silent><M-9> <Esc>:tablast<CR> 187inoremap <silent><M-9> <Esc>:tablast<CR>
212 188" }}}
213 189" MANAGE_TABS ----------------{{{
214"----------------------------------------------------------------------
215" MANAGE_TABS
216"----------------------------------------------------------------------
217 190
218" Useful mappings for managing tabs 191" Useful mappings for managing tabs
219map <leader>tn :tabnew<CR> 192map <leader>tn :tabnew<CR>
@@ -246,11 +219,8 @@ function! Tab_MoveRight()
246 exec 'tabmove '.l:tabnr 219 exec 'tabmove '.l:tabnr
247 endif 220 endif
248endfunc 221endfunc
249 222" }}}
250 223" MANAGE_BUFFERS ----------------{{{
251"----------------------------------------------------------------------
252" MANAGE_BUFFERS
253"----------------------------------------------------------------------
254 224
255" Open a new buffer 225" Open a new buffer
256nmap <leader><leader>b :enew<CR> 226nmap <leader><leader>b :enew<CR>
@@ -294,18 +264,43 @@ function! s:SwitchDiffForGitHEAD()
294endfunction 264endfunction
295com! SwitchDiffForGitHEAD call s:SwitchDiffForGitHEAD() 265com! SwitchDiffForGitHEAD call s:SwitchDiffForGitHEAD()
296nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR> 266nnoremap <C-w>D <Cmd>silent! SwitchDiffForGitHEAD<CR>
297 267" }}}
298 268" MANAGE_WINDOWS ----------------{{{
299"----------------------------------------------------------------------
300" MANAGE_WINDOWS
301"----------------------------------------------------------------------
302nnoremap <leader><leader>sb :windo set scrollbind!<CR> 269nnoremap <leader><leader>sb :windo set scrollbind!<CR>
303 270
304 271" 窗口切换:ALT+SHIFT+hjkl
305"---------------------------------------------------------------------- 272" 传统的 CTRL+hjkl 移动窗口不适用于 vim 8.1 的终端模式,CTRL+hjkl 在
306" FOLDING 273" bash/zsh 及带文本界面的程序中都是重要键位需要保留,不能 tnoremap 的
307"---------------------------------------------------------------------- 274"----------------------------------------------------------------------
275noremap <m-H> <c-w>h
276noremap <m-L> <c-w>l
277noremap <m-J> <c-w>j
278noremap <m-K> <c-w>k
279inoremap <m-H> <esc><c-w>h
280inoremap <m-L> <esc><c-w>l
281inoremap <m-J> <esc><c-w>j
282inoremap <m-K> <esc><c-w>k
308 283
284if has('terminal') && exists(':terminal') == 2 && has('patch-8.1.1')
285 " vim 8.1 支持 termwinkey ,不需要把 terminal 切换成 normal 模式
286 " 设置 termwinkey 为 CTRL 加减号(GVIM),有些终端下是 CTRL+?
287 " 后面四个键位是搭配 termwinkey 的,如果 termwinkey 更改,也要改
288 set termwinkey=<c-_>
289 tnoremap <m-H> <c-_>h
290 tnoremap <m-L> <c-_>l
291 tnoremap <m-J> <c-_>j
292 tnoremap <m-K> <c-_>k
293 tnoremap <m-q> <c-\><c-n>
294elseif has('nvim')
295 " neovim 没有 termwinkey 支持,必须把 terminal 切换回 normal 模式
296 tnoremap <m-H> <c-\><c-n><c-w>h
297 tnoremap <m-L> <c-\><c-n><c-w>l
298 tnoremap <m-J> <c-\><c-n><c-w>j
299 tnoremap <m-K> <c-\><c-n><c-w>k
300 tnoremap <m-q> <c-\><c-n>
301endif
302" }}}
303" FOLDING ----------------{{{
309" Set foldmethod 304" Set foldmethod
310noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR> 305noremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR>
311 306
@@ -317,11 +312,8 @@ nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo'
317" Open fold in next line 312" Open fold in next line
318nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo' 313nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo'
319nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO' 314nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO'
320 315" }}}
321 316" SURROURD_WITH_CHAR ----------------{{{
322"----------------------------------------------------------------------
323" SURROURD_WITH_CHAR
324"----------------------------------------------------------------------
325vnoremap S sa 317vnoremap S sa
326vnoremap ' <ESC>`<i'<ESC>`>la'<ESC> 318vnoremap ' <ESC>`<i'<ESC>`>la'<ESC>
327vnoremap q <ESC>`<i"<ESC>`>la"<ESC> 319vnoremap q <ESC>`<i"<ESC>`>la"<ESC>
@@ -331,11 +323,9 @@ vnoremap { <ESC>`<i{<ESC>`>la}<ESC>
331vnoremap ` <ESC>`<i`<ESC>`>la`<ESC> 323vnoremap ` <ESC>`<i`<ESC>`>la`<ESC>
332vnoremap <space> <ESC>`<i<space><ESC>`>la<space><ESC> 324vnoremap <space> <ESC>`<i<space><ESC>`>la<space><ESC>
333vnoremap Q <ESC>`<i「<ESC>`>la」<ESC> 325vnoremap Q <ESC>`<i「<ESC>`>la」<ESC>
326" }}}
327" REDIRECTION_WITH_BUFFER ----------------{{{
334 328
335
336"----------------------------------------------------------------------
337" REDIRECTION_WITH_BUFFER
338"----------------------------------------------------------------------
339" Usage: 329" Usage:
340" :Redir hi ............. show the full output of command ':hi' in a scratch window 330" :Redir hi ............. show the full output of command ':hi' in a scratch window
341" :Redir !ls -al ........ show the full output of command ':!ls -al' in a scratch window 331" :Redir !ls -al ........ show the full output of command ':!ls -al' in a scratch window
@@ -362,12 +352,10 @@ endfunction
362 352
363command! -nargs=1 -complete=command Redir silent call Redir(<q-args>) 353command! -nargs=1 -complete=command Redir silent call Redir(<q-args>)
364nnoremap <leader>rr :Redir<space> 354nnoremap <leader>rr :Redir<space>
355" }}}
356" QUICK_SUBSTITUTE ----------------{{{
365 357
366 358" Usage: Press <TAB> n times for area, and <CR> for substitute
367"----------------------------------------------------------------------
368" QUICK_SUBSTITUTE
369" Press <TAB> n times for area, and <CR> for substitute
370"----------------------------------------------------------------------
371 359
372" substitute across file 360" substitute across file
373vnoremap <leader>s y:%s//<C-R>0/g<LEFT><LEFT> 361vnoremap <leader>s y:%s//<C-R>0/g<LEFT><LEFT>
@@ -395,21 +383,16 @@ vnoremap <TAB> <Cmd>call ExpandSelectionBySearch('/')<CR>
395vnoremap <S-TAB> <Cmd>call ExpandSelectionBySearch('?')<CR> 383vnoremap <S-TAB> <Cmd>call ExpandSelectionBySearch('?')<CR>
396vnoremap <CR> <Cmd>call SubstituteBySearch()<CR> 384vnoremap <CR> <Cmd>call SubstituteBySearch()<CR>
397 385
398 386" }}}
399"---------------------------------------------------------------------- 387" GIT_TIG ----------------{{{
400" GIT_TIG
401"----------------------------------------------------------------------
402let g:tig_explorer_keymap_commit_split = '<C-s>' 388let g:tig_explorer_keymap_commit_split = '<C-s>'
403let g:tig_explorer_keymap_commit_vsplit = '<C-v>' 389let g:tig_explorer_keymap_commit_vsplit = '<C-v>'
404nnoremap <C-t> <Cmd>Tig<CR> 390nnoremap <C-t> <Cmd>Tig<CR>
405nnoremap <C-t>s <Cmd>TigStatus<CR> 391nnoremap <C-t>s <Cmd>TigStatus<CR>
406nnoremap <C-t>b <Cmd>TigBlame<CR> 392nnoremap <C-t>b <Cmd>TigBlame<CR>
407nnoremap <C-t>d :vertical TigOpenFileWithCommit <C-R>+ % 0<CR> 393nnoremap <C-t>d :vertical TigOpenFileWithCommit <C-R>+ % 0<CR>
408 394" }}}
409 395" Markdown items (temproray solution) ----------------{{{
410"----------------------------------------------------------------------
411" Markdown items (temproray solution)
412"----------------------------------------------------------------------
413 396
414" Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX" 397" Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX"
415" autocmd FileType markdown nnoremap <buffer> <leader>i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }'<CR><CR> 398" autocmd FileType markdown nnoremap <buffer> <leader>i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }'<CR><CR>
@@ -417,53 +400,14 @@ nnoremap <C-t>d :vertical TigOpenFileWithCommit <C-R>+ % 0<CR>
417 400
418" Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] " 401" Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] "
419" nnoremap <leader>x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }'<CR><CR> 402" nnoremap <leader>x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }'<CR><CR>
420 403" }}}
421 404" Common system command ----------------{{{
422"----------------------------------------------------------------------
423" Common command
424"----------------------------------------------------------------------
425" Show date selector 405" Show date selector
426nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR> 406nnoremap <leader>dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null'<CR><CR>
427nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR> 407nnoremap <leader>dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null'<CR><CR>
428nnoremap <leader>dt :r !date +\%H:\%m<CR>A 408nnoremap <leader>dt :r !date +\%H:\%m<CR>A
429 409" }}}
430 410" Compile ----------------{{{
431"----------------------------------------------------------------------
432" 窗口切换:ALT+SHIFT+hjkl
433" 传统的 CTRL+hjkl 移动窗口不适用于 vim 8.1 的终端模式,CTRL+hjkl 在
434" bash/zsh 及带文本界面的程序中都是重要键位需要保留,不能 tnoremap 的
435"----------------------------------------------------------------------
436noremap <m-H> <c-w>h
437noremap <m-L> <c-w>l
438noremap <m-J> <c-w>j
439noremap <m-K> <c-w>k
440inoremap <m-H> <esc><c-w>h
441inoremap <m-L> <esc><c-w>l
442inoremap <m-J> <esc><c-w>j
443inoremap <m-K> <esc><c-w>k
444
445if has('terminal') && exists(':terminal') == 2 && has('patch-8.1.1')
446 " vim 8.1 支持 termwinkey ,不需要把 terminal 切换成 normal 模式
447 " 设置 termwinkey 为 CTRL 加减号(GVIM),有些终端下是 CTRL+?
448 " 后面四个键位是搭配 termwinkey 的,如果 termwinkey 更改,也要改
449 set termwinkey=<c-_>
450 tnoremap <m-H> <c-_>h
451 tnoremap <m-L> <c-_>l
452 tnoremap <m-J> <c-_>j
453 tnoremap <m-K> <c-_>k
454 tnoremap <m-q> <c-\><c-n>
455elseif has('nvim')
456 " neovim 没有 termwinkey 支持,必须把 terminal 切换回 normal 模式
457 tnoremap <m-H> <c-\><c-n><c-w>h
458 tnoremap <m-L> <c-\><c-n><c-w>l
459 tnoremap <m-J> <c-\><c-n><c-w>j
460 tnoremap <m-K> <c-\><c-n><c-w>k
461 tnoremap <m-q> <c-\><c-n>
462endif
463
464
465
466"----------------------------------------------------------------------
467" 编译运行 C/C++ 项目 411" 编译运行 C/C++ 项目
468" 详细见:http://www.skywind.me/blog/archives/2084 412" 详细见:http://www.skywind.me/blog/archives/2084
469"---------------------------------------------------------------------- 413"----------------------------------------------------------------------
@@ -501,7 +445,6 @@ if has('win32') || has('win64')
501endif 445endif
502 446
503 447
504"----------------------------------------------------------------------
505" F5 运行当前文件:根据文件类型判断方法,并且输出到 quickfix 窗口 448" F5 运行当前文件:根据文件类型判断方法,并且输出到 quickfix 窗口
506"---------------------------------------------------------------------- 449"----------------------------------------------------------------------
507function! ExecuteFile() 450function! ExecuteFile()
@@ -548,7 +491,6 @@ endfunc
548 491
549 492
550 493
551"----------------------------------------------------------------------
552" F2 在项目目录下 Grep 光标下单词,默认 C/C++/Py/Js ,扩展名自己扩充 494" F2 在项目目录下 Grep 光标下单词,默认 C/C++/Py/Js ,扩展名自己扩充
553" 支持 rg/grep/findstr ,其他类型可以自己扩充 495" 支持 rg/grep/findstr ,其他类型可以自己扩充
554" 不是在当前目录 grep,而是会去到当前文件所属的项目目录 project root 496" 不是在当前目录 grep,而是会去到当前文件所属的项目目录 project root
@@ -569,3 +511,4 @@ else
569 \ --include='*.js' --include='*.vim' 511 \ --include='*.js' --include='*.vim'
570 \ '<root>' <CR> 512 \ '<root>' <CR>
571endif 513endif
514" }}}
diff --git a/vim/lua/mappings.lua b/vim/lua/mappings.lua
index d9a34d2..159971c 100644
--- a/vim/lua/mappings.lua
+++ b/vim/lua/mappings.lua
@@ -1,21 +1,13 @@
1-- For NvChad
1-- require "nvchad.mappings" 2-- require "nvchad.mappings"
3vim.keymap.set("n", "<leader>ch", "<cmd>NvCheatsheet<CR>", { desc = "toggle nvcheatsheet" })
4vim.keymap.set("n", "<leader>th", "<cmd>Telescope themes<CR>", { desc = "telescope nvchad themes" })
2 5
3-- add yours here 6-- General
4
5vim.keymap.set("i", "jk", "<ESC>") 7vim.keymap.set("i", "jk", "<ESC>")
6vim.keymap.set("n", "<leader>co", "<cmd>cd ~/.config/nvim<CR><cmd>pwd<CR>") 8vim.keymap.set("n", "cdconfig", "<cmd>cd ~/.config/nvim<CR><cmd>pwd<CR>")
7vim.cmd("command! W execute 'SudaWrite %'") 9vim.cmd("command! W execute 'SudaWrite %'")
8 10
9-- map({ "n", "i", "v" }, "<C-s>", "<cmd> w <cr>")
10
11vim.keymap.set("n", "<Esc>", "<cmd>noh<CR>", { desc = "general clear highlights" })
12
13-- map("n", "<C-c>", "<cmd>%y+<CR>", { desc = "file copy whole" })
14
15-- map("n", "<leader>n", "<cmd>set nu!<CR>", { desc = "toggle line number" })
16-- map("n", "<leader>rn", "<cmd>set rnu!<CR>", { desc = "toggle relative number" })
17vim.keymap.set("n", "<leader>ch", "<cmd>NvCheatsheet<CR>", { desc = "toggle nvcheatsheet" })
18
19-- global lsp mappings 11-- global lsp mappings
20vim.keymap.set("n", "<leader>ds", vim.diagnostic.setloclist, { desc = "lsp diagnostic loclist" }) 12vim.keymap.set("n", "<leader>ds", vim.diagnostic.setloclist, { desc = "lsp diagnostic loclist" })
21 13
@@ -25,21 +17,15 @@ vim.keymap.set("n", "<C-n>", "<cmd>NvimTreeToggle<CR>", { desc = "nvimtree toggl
25-- telescope 17-- telescope
26vim.keymap.set("n", "<leader>f", "<cmd>Telescope oldfiles<CR>", { desc = "telescope find oldfiles" }) 18vim.keymap.set("n", "<leader>f", "<cmd>Telescope oldfiles<CR>", { desc = "telescope find oldfiles" })
27vim.keymap.set("n", "<leader>b", "<cmd>Telescope buffers<CR>", { desc = "telescope find buffers" }) 19vim.keymap.set("n", "<leader>b", "<cmd>Telescope buffers<CR>", { desc = "telescope find buffers" })
28vim.keymap.set( 20vim.keymap.set("n", "//", "<cmd>Telescope current_buffer_fuzzy_find<CR>", { desc = "telescope find in current buffer" })
29"n",
30"<leader>/",
31"<cmd>Telescope current_buffer_fuzzy_find<CR>",
32{ desc = "telescope find in current buffer" }
33)
34vim.keymap.set("n", "<leader>sf", "<cmd>Telescope find_files<cr>", { desc = "telescope find files" }) 21vim.keymap.set("n", "<leader>sf", "<cmd>Telescope find_files<cr>", { desc = "telescope find files" })
35vim.keymap.set( 22vim.keymap.set(
36"n", 23 "n",
37"<leader>sF", 24 "<leader>sF",
38"<cmd>Telescope find_files follow=true no_ignore=true hidden=true<CR>", 25 "<cmd>Telescope find_files follow=true no_ignore=true hidden=true<CR>",
39{ desc = "telescope find all files" } 26 { desc = "telescope find all files" }
40) 27)
41vim.keymap.set("n", "<leader>sg", "<cmd>Telescope live_grep<CR>", { desc = "telescope live grep" }) 28vim.keymap.set("n", "<leader>sg", "<cmd>Telescope live_grep<CR>", { desc = "telescope live grep" })
42
43vim.keymap.set("n", "<leader>gf", "<cmd>Telescope git_files<CR>", { desc = "telescope git files" }) 29vim.keymap.set("n", "<leader>gf", "<cmd>Telescope git_files<CR>", { desc = "telescope git files" })
44vim.keymap.set("n", "<leader>sH", "<cmd>Telescope help_tags<CR>", { desc = "telescope help page" }) 30vim.keymap.set("n", "<leader>sH", "<cmd>Telescope help_tags<CR>", { desc = "telescope help page" })
45vim.keymap.set("n", "<leader>sm", "<cmd>Telescope marks<CR>", { desc = "telescope marks" }) 31vim.keymap.set("n", "<leader>sm", "<cmd>Telescope marks<CR>", { desc = "telescope marks" })
@@ -49,171 +35,148 @@ vim.keymap.set("n", "<leader>sk", "<cmd>Telescope keymaps<CR>", { desc = "telesc
49vim.keymap.set("n", "<leader>pt", "<cmd>Telescope terms<CR>", { desc = "telescope pick hidden term" }) 35vim.keymap.set("n", "<leader>pt", "<cmd>Telescope terms<CR>", { desc = "telescope pick hidden term" })
50 36
51vim.keymap.set("n", "<leader>ss", function() 37vim.keymap.set("n", "<leader>ss", function()
52 local current_filetype = vim.bo.filetype 38 local current_filetype = vim.bo.filetype
53 local cwd = os.getenv("HOME") .. "/snippets" 39 local cwd = os.getenv("HOME") .. "/snippets"
54 require("telescope.builtin").find_files({ 40 require("telescope.builtin").find_files({
55 prompt_title = "Press <C-T> to edit a snippet", 41 prompt_title = "Press <C-T> to edit a snippet",
56 default_text = current_filetype .. "_", 42 default_text = current_filetype == "" and "" or current_filetype .. "_",
57 cwd = cwd, 43 cwd = cwd,
58 attach_mappings = function(prompt_bufnr, map) 44 attach_mappings = function(prompt_bufnr, map)
59 local get_prompt_or_entry = function() 45 local get_prompt_or_entry = function()
60 local file_list = require("telescope.actions.state").get_selected_entry() 46 local file_list = require("telescope.actions.state").get_selected_entry()
61 if file_list then 47 if file_list then
62 return file_list[1] 48 return file_list[1]
63 else 49 else
64 local current_picker = require("telescope.actions.state").get_current_picker(prompt_bufnr) 50 local current_picker = require("telescope.actions.state").get_current_picker(prompt_bufnr)
65 return current_picker:_get_prompt() 51 return current_picker:_get_prompt()
66 end 52 end
67 end 53 end
68 54
69 local edit_snippet = function() 55 local edit_snippet = function()
70 local file = get_prompt_or_entry() 56 local file = get_prompt_or_entry()
71 require("telescope.actions").close(prompt_bufnr) 57 require("telescope.actions").close(prompt_bufnr)
72 local prefix_filetype = string.match(file, "([^_]+)") 58 local prefix_filetype = string.match(file, "([^_]+)")
73 vim.cmd(":vs") 59 vim.cmd(":vs")
74 vim.cmd(":e " .. cwd .. "/" .. file) 60 vim.cmd(":e " .. cwd .. "/" .. file)
75 vim.bo.filetype = prefix_filetype 61 vim.bo.filetype = prefix_filetype
76 vim.bo.bufhidden = "wipe" 62 vim.bo.bufhidden = "wipe"
77 vim.cmd("set filetype?") 63 vim.cmd("set filetype?")
78 end 64 end
79 65
80 local insert_selected_snippet = function() 66 local insert_selected_snippet = function()
81 local file = get_prompt_or_entry() 67 local file = get_prompt_or_entry()
82 local path = cwd .. "/" .. file 68 local path = cwd .. "/" .. file
83 if vim.fn.filereadable(path) ~= 0 then 69 if vim.fn.filereadable(path) ~= 0 then
84 local snippet_content = vim.fn.readfile(path) 70 local snippet_content = vim.fn.readfile(path)
85 require("telescope.actions").close(prompt_bufnr) 71 require("telescope.actions").close(prompt_bufnr)
86 vim.fn.setreg('"', snippet_content) 72 vim.fn.setreg('"', snippet_content)
87 print("Snippet saved to register") 73 print("Snippet saved to register")
88 else 74 else
89 edit_snippet() 75 edit_snippet()
90 end 76 end
91 end 77 end
92 78
93 map("i", "<CR>", insert_selected_snippet) 79 map("i", "<CR>", insert_selected_snippet)
94 map("i", "<C-T>", edit_snippet) 80 map("i", "<C-T>", edit_snippet)
95 map("n", "<CR>", insert_selected_snippet) 81 map("n", "<CR>", insert_selected_snippet)
96 82
97 return true 83 return true
98 end, 84 end,
99 }) 85 })
100end, { desc = "[S]earch [S]nippets" }) 86end, { desc = "[S]earch [S]nippets" })
101 87
102vim.keymap.set("n", "<leader>sd", function() 88vim.keymap.set("n", "<leader>sd", function()
103 require("telescope.builtin").oldfiles({ 89 require("telescope.builtin").oldfiles({
104 prompt_title = "CD to", 90 prompt_title = "CD to",
105 attach_mappings = function(prompt_bufnr, map) 91 attach_mappings = function(prompt_bufnr, map)
106 local cd_prompt = function() 92 local cd_prompt = function()
107 local file = require("telescope.actions.state").get_selected_entry()[1] 93 local file = require("telescope.actions.state").get_selected_entry()[1]
108 local path = string.match(file, "(.*[/\\])") 94 local path = string.match(file, "(.*[/\\])")
109 require("telescope.actions").close(prompt_bufnr) 95 require("telescope.actions").close(prompt_bufnr)
110 vim.api.nvim_feedkeys(":cd " .. path, "n", true) 96 vim.api.nvim_feedkeys(":cd " .. path, "n", true)
111 end 97 end
112 98
113 map("i", "<CR>", cd_prompt) 99 map("i", "<CR>", cd_prompt)
114 map("n", "<CR>", cd_prompt) 100 map("n", "<CR>", cd_prompt)
115 101
116 return true 102 return true
117 end, 103 end,
118 }) 104 })
119end, { desc = "Search Directory" }) 105end, { desc = "Search Directory" })
120 106
121-- map("n", "<leader>ma", "<cmd>Telescope marks<CR>", { desc = "telescope find marks" })
122-- map("n", "<leader>cm", "<cmd>Telescope git_commits<CR>", { desc = "telescope git commits" })
123-- map("n", "<leader>gt", "<cmd>Telescope git_status<CR>", { desc = "telescope git status" })
124
125-- terminal
126-- map("t", "<C-x>", "<C-\\><C-N>", { desc = "terminal escape terminal mode" })
127
128-- new terminals 107-- new terminals
129vim.keymap.set("n", "<leader><leader>h", function()
130 require("nvchad.term").new({ pos = "sp" })
131end, { desc = "terminal new horizontal term" })
132vim.keymap.set("n", "<leader>v", function()
133 require("nvchad.term").new({ pos = "vsp" })
134end, { desc = "terminal new vertical window" })
135-- toggleable
136vim.keymap.set({ "n", "t" }, "<A-v>", function() 108vim.keymap.set({ "n", "t" }, "<A-v>", function()
137 require("nvchad.term").toggle({ pos = "vsp", id = "vtoggleTerm" }) 109 require("nvchad.term").toggle({ pos = "vsp", id = "vtoggleTerm" })
138end, { desc = "terminal toggleable vertical term" }) 110end, { desc = "terminal toggleable vertical term" })
139vim.keymap.set("t", "<C-x>", "<C-\\><C-N>", { desc = "terminal escape terminal mode" }) 111vim.keymap.set("t", "<C-x>", "<C-\\><C-N>", { desc = "terminal escape terminal mode" })
140vim.keymap.set({ "t" }, "<A-e>", "<C-\\><C-N><C-W>|<C-W>_i", { desc = "terminal toggleable vertical term" }) 112vim.keymap.set({ "t" }, "<A-e>", "<C-\\><C-N><C-W>|<C-W>_i", { desc = "terminal toggleable vertical term" })
141vim.keymap.set({ "n", "t" }, "<A-t>", function() 113vim.keymap.set({ "n", "t" }, "<A-t>", function()
142 require("nvchad.term").toggle({ pos = "sp", id = "htoggleTerm" }) 114 require("nvchad.term").toggle({ pos = "sp", id = "htoggleTerm" })
143end, { desc = "terminal new horizontal term" }) 115end, { desc = "terminal new horizontal term" })
144vim.keymap.set({ "n", "t" }, "<A-i>", function() 116vim.keymap.set({ "n", "t" }, "<A-i>", function()
145 require("nvchad.term").toggle({ pos = "float", id = "floatTerm" }) 117 require("nvchad.term").toggle({ pos = "float", id = "floatTerm" })
146end, { desc = "terminal toggle floating term" }) 118end, { desc = "terminal toggle floating term" })
147vim.keymap.set("n", "<leader>th", "<cmd>Telescope themes<CR>", { desc = "telescope nvchad themes" }) 119
148 120
149-- whichkey 121-- whichkey
150vim.keymap.set("n", "<leader>wK", "<cmd>WhichKey <CR>", { desc = "whichkey all keymaps" }) 122vim.keymap.set("n", "<leader>wK", "<cmd>WhichKey <CR>", { desc = "whichkey all keymaps" })
151
152vim.keymap.set("n", "<leader>wk", function() 123vim.keymap.set("n", "<leader>wk", function()
153 vim.cmd("WhichKey " .. vim.fn.input("WhichKey: ")) 124 vim.cmd("WhichKey " .. vim.fn.input("WhichKey: "))
154end, { desc = "whichkey query lookup" }) 125end, { desc = "whichkey query lookup" })
155 126
127
156-- blankline 128-- blankline
157vim.keymap.set("n", "<leader>cc", function() 129vim.keymap.set("n", "<leader>cc", function()
158 local config = { scope = {} } 130 local config = { scope = {} }
159 config.scope.exclude = { language = {}, node_type = {} } 131 config.scope.exclude = { language = {}, node_type = {} }
160 config.scope.include = { node_type = {} } 132 config.scope.include = { node_type = {} }
161 local node = require("ibl.scope").get(vim.api.nvim_get_current_buf(), config) 133 local node = require("ibl.scope").get(vim.api.nvim_get_current_buf(), config)
162 134
163 if node then 135 if node then
164 local start_row, _, end_row, _ = node:range() 136 local start_row, _, end_row, _ = node:range()
165 if start_row ~= end_row then 137 if start_row ~= end_row then
166 vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { start_row + 1, 0 }) 138 vim.api.nvim_win_set_cursor(vim.api.nvim_get_current_win(), { start_row + 1, 0 })
167 vim.api.nvim_feedkeys("_", "n", true) 139 vim.api.nvim_feedkeys("_", "n", true)
168 end 140 end
169 end 141 end
170end, { desc = "blankline jump to current context" }) 142end, { desc = "blankline jump to current context" })
171 143
172-- vim.cmd("let g:mkdp_browser = 'surf'") 144
173vim.cmd("let g:mkdp_browser = 'firefox'") 145-- [ Configure Hop ]
174vim.g.mkdp_preview_options = { 146vim.keymap.set("n", "<space>", ":HopWord<CR>")
175 mkit = { breaks = true }, 147vim.keymap.set("n", "<C-.>", ":HopChar1<CR>")
176 toc = { 148
177 containerClass = "toc", 149
178 format = "function format(x, htmlencode) { return `<span>${htmlencode(x)}</span>`; }", 150-- [ Aerial ]"" "<cmd>AerialNext<CR>", {})
179 callback = "console.log('foo')", 151vim.keymap.set("n", "gL", "<cmd>Telescope aerial<CR>")
180 }, 152vim.keymap.set("n", "gl", function()
181 } 153 require("aerial").toggle({ direction = "left" })
182 154end)
183 -- [ Configure Hop ] 155
184 vim.keymap.set("n", "<space>", ":HopWord<CR>") 156
185 vim.keymap.set("n", "<C-.>", ":HopChar1<CR>") 157--[ TrunZen ]
186 158vim.keymap.set("n", "<leader>z", ":TZAtaraxis<CR>")
187 -- [ Configure vim-surround ] 159
188 vim.cmd("vmap s S") 160
189 161-- Use floating window for translation
190 -- [ Aerial ]"" "<cmd>AerialNext<CR>", {}) 162vim.keymap.set("v", "<leader><leader>tz", function()
191 vim.keymap.set("n", "gL", "<cmd>Telescope aerial<CR>") 163 vim.cmd('norm o^zt"ty')
192 vim.keymap.set("n", "gl", function() 164 local translated_text = vim.fn.system("trans -t zh-TW -b", vim.fn.getreg("t"))
193 require("aerial").toggle({ direction = "left" }) 165 local lines = vim.split(translated_text, "\n")
194 end) 166 table.remove(lines)
195 167
196 --[ TrunZen ] 168 local new_buf = vim.api.nvim_create_buf(false, true)
197 vim.keymap.set("n", "<leader>z", ":TZAtaraxis<CR>") 169 vim.api.nvim_buf_set_lines(new_buf, 0, -1, true, lines)
198 170
199 vim.keymap.set("v", "<leader><leader>tz", function() 171 vim.api.nvim_open_win(new_buf, true, {
200 vim.cmd('norm o^zt"ty') 172 relative = "cursor",
201 local translated_text = vim.fn.system("trans -t zh-TW -b", vim.fn.getreg("t")) 173 width = 80,
202 local lines = vim.split(translated_text, "\n") 174 height = #lines,
203 table.remove(lines) 175 row = #lines,
204 176 col = 0,
205 local new_buf = vim.api.nvim_create_buf(false, true) 177 })
206 vim.api.nvim_buf_set_lines(new_buf, 0, -1, true, lines) 178
207 179 vim.cmd("setl nocul nonu nornu")
208 vim.api.nvim_open_win(new_buf, true, { 180 vim.cmd("hi ActiveWindow guibg=#2a5a6a guifg=White | setl winhighlight=Normal:ActiveWindow")
209 relative = "cursor", 181 vim.cmd(":silent! %s/\\%x1b\\[[0-9;]*m//g")
210 width = 80, 182end, { desc = "Description" })
211 height = #lines,
212 row = #lines,
213 col = 0,
214 })
215
216 vim.cmd("setl nocul nonu nornu")
217 vim.cmd("hi ActiveWindow guibg=#2a5a6a guifg=White | setl winhighlight=Normal:ActiveWindow")
218 vim.cmd(':silent %s/\\%x1b\\[[0-9;]*m//g')
219 end, { desc = "Description" })
diff --git a/vim/lua/plugins/init.lua b/vim/lua/plugins/init.lua
index 7cff057..373f4cc 100644
--- a/vim/lua/plugins/init.lua
+++ b/vim/lua/plugins/init.lua
@@ -191,8 +191,14 @@ return {
191 end, 191 end,
192 init = function() 192 init = function()
193 vim.g.mkdp_preview_options = { 193 vim.g.mkdp_preview_options = {
194 mkit = {}, 194 mkit = { breaks = true },
195 toc = {
196 containerClass = "toc",
197 format = "function format(x, htmlencode) { return `<span>${htmlencode(x)}</span>`; }",
198 callback = "console.log('foo')",
199 },
195 } 200 }
201 vim.cmd("let g:mkdp_browser = 'firefox'")
196 end, 202 end,
197 }, 203 },
198 204
@@ -283,6 +289,9 @@ return {
283 { 289 {
284 "tpope/vim-surround", 290 "tpope/vim-surround",
285 lazy = false, 291 lazy = false,
292 config = function()
293 vim.cmd("vmap s S")
294 end,
286 }, 295 },
287 296
288 { 297 {