aboutsummaryrefslogtreecommitdiffhomepage
path: root/vim/init/keymaps.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/init/keymaps.vim')
-rw-r--r--vim/init/keymaps.vim354
1 files changed, 181 insertions, 173 deletions
diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim
index e8cb61d..01726b9 100644
--- a/vim/init/keymaps.vim
+++ b/vim/init/keymaps.vim
@@ -168,6 +168,138 @@ nnoremap <C-k> ddkP
168nnoremap S S<ESC> 168nnoremap S S<ESC>
169 169
170" }}} 170" }}}
171" SURROUND {{{
172
173inoremap ' ''<Left>
174inoremap " ""<Left>
175inoremap ( ()<Left>
176inoremap [ []<Left>
177inoremap { {}<Left>
178
179vnoremap q <ESC>`<i"<ESC>`>la"<ESC>
180vnoremap ( <ESC>`<i(<ESC>`>la)<ESC>
181vnoremap [ <ESC>`<i[<ESC>`>la]<ESC>
182vnoremap { <ESC>`<i{<ESC>`>la}<ESC>
183vnoremap Q <ESC>`<i「<ESC>`>la」<ESC>
184" vnoremap ' <ESC>`<i'<ESC>`>la'<ESC>
185" vnoremap ` <ESC>`<i`<ESC>`>la`<ESC>
186
187function! AddSpaceForSelection()
188 " If visual selection by lines, add empty space at top and bottom
189 if line("'<") != line("'>") || (col("'<") == 1 && col("'>") == len(getline('.'))+1)
190 '< norm! O
191 '> norm! o
192 exe "norm! "..(line("'<")-1).."GV"..(line("'>")+1).."G"
193 " Otherwise, add space at start and end column
194 else
195 call cursor('.', col("'<"))
196 execute "norm! i\<space>"
197 call cursor('.', col("'>")+1)
198 execute "norm! a\<space>"
199 endif
200endfunction
201vnoremap <space> :<C-u>call AddSpaceForSelection()<CR>
202
203" }}}
204" SEARCH/SUBSTITUTE {{{
205
206" Search for selected test
207vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR>
208
209nnoremap g/ gv<esc>/\%V
210vnoremap g/ <esc>/\%V
211
212" Substitue across file
213vnoremap <leader>s y:%s//<C-R>0/g<LEFT><LEFT>
214
215" Usage: Press <TAB> n times for area, and <CR> for substitute
216let g:search_selection = 0
217" When leaving visual mode, resume search_selection
218autocmd Modechanged [vV\x16]*:* let g:search_selection = 0
219xmap <expr> <TAB> g:search_selection ? "//e<CR>" : "*:let g:search_selection = 1<CR>gv//e<CR>"
220xmap <expr> <S-TAB> g:search_selection ? "??<CR>" : "*:let g:search_selection = 1<CR>gv??<CR>"
221vnoremap <CR> :s//<C-R>0/g<Left><Left>
222
223" }}}
224" SIGN {{{
225
226nnoremap <leader><leader>sc :<C-\>e'set signcolumn='..&signcolumn<CR>
227
228nnoremap <leader>si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p")<CR>
229nnoremap <leader>sI :exe ":sign unplace * file=" .. expand("%:p")<CR>
230
231" }}}
232" FOLD {{{
233
234" Set fold options
235nnoremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR>
236nnoremap <leader><leader>fc :<C-\>e'set foldcolumn='..&foldcolumn<CR>
237
238" Toggle fold and foldcolumn
239nnoremap <expr> zi "zizz:silent set foldcolumn="..(&foldenable ? "0" : "auto:3").."\<CR>"
240
241" Show fold level when it changes
242nnoremap zm zm:set foldlevel?<CR>
243nnoremap zr zr:set foldlevel?<CR>
244
245" Fold all except selection
246vnoremap zF :<C-u>call ToggleUnfoldSelection()<CR>
247" Resume
248nnoremap zF :call ToggleUnfoldSelection()<CR>zv
249
250vnoremap \z :call GrayOutOthers()<CR>
251
252" Select current fold
253onoremap az :<C-U>silent! keepjumps normal![zV]z<CR>
254xnoremap az :<C-U>silent! keepjumps normal![zV]z<CR>
255onoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR>
256xnoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR>
257
258" Use l to open fold
259nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo'
260
261" Open fold in next line
262nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo'
263nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO'
264
265" Go to next fold and unfold
266nnoremap zJ zjzx
267nnoremap zK zkzx
268
269" Fold file except selection
270autocmd BufEnter * let b:unfold_selection = 0
271function! ToggleUnfoldSelection()
272 if !b:unfold_selection
273 let b:unfold_selection = 1
274 mkview
275 echo 'Unfold'..&foldmethod
276
277 let &foldmethod = "manual"
278 norm! zE
279 execute "1,'<-1fold"
280 execute "'>+1,$fold"
281 else
282 let b:unfold_selection = 0
283 loadview
284 endif
285endfunction
286
287autocmd BufEnter * let b:clear_matches = 0
288function! GrayOutOthers()
289 if b:clear_matches
290 let b:clear_matches = 0
291 call clearmatches()
292 else
293 let b:clear_matches = 1
294 let pos = getpos('.')
295 call matchadd('Folded', '\%<'.line("'<").'l')
296 call matchadd('Folded', '\%>'.line("'>").'l')
297 norm! zR
298 call setpos('.', pos)
299 endif
300endfunction
301
302" }}}
171" REGISTER {{{ 303" REGISTER {{{
172" Paste register 0 304" Paste register 0
173nnoremap <C-p> "0p 305nnoremap <C-p> "0p
@@ -278,49 +410,6 @@ nnoremap <expr> z> ":\<C-u>call ChangeUnfold(1,"..v:count..")\<CR>"
278nnoremap <expr> z< ":\<C-u>call ChangeUnfold(0,"..v:count..")\<CR>" 410nnoremap <expr> z< ":\<C-u>call ChangeUnfold(0,"..v:count..")\<CR>"
279 411
280"}}} 412"}}}
281" TERMINAL {{{
282
283" Use <leader>z to toggle
284let g:alacritty_extra_padding = 0
285function! ToggleWinPadding()
286 if g:alacritty_extra_padding
287 !alacritty msg config --window-id $WINDOWID --reset
288 call SetEmulaterBackground()
289 hi EndOfBuffer None
290 hi MsgArea None
291 else
292 redir => output | hi LineNr | redir END
293 let bg_color = matchstr(output, 'guibg=\zs[^\s]\+\ze')
294
295 try
296 exe "hi EndOfBuffer guifg="..bg_color.." guibg="..bg_color
297 exe "hi MsgArea guibg="..bg_color
298 endtry
299 exe "!alacritty msg config --window-id $WINDOWID window.padding.x=300 'colors.primary.background=\"\\"..bg_color.."\"'"
300 endif
301
302 let g:alacritty_extra_padding = !g:alacritty_extra_padding
303endfunc
304nnoremap <leader>z <Cmd>silent call ToggleWinPadding()<CR>
305
306" In case ALT key is not working
307" execute "set <M-2>=\e2"
308" execute "set <M-1>=\e1"
309" execute "set <M-3>=\e3"
310" execute "set <M-4>=\e4"
311" execute "set <M-5>=\e5"
312" execute "set <M-6>=\e6"
313" execute "set <M-7>=\e7"
314" execute "set <M-8>=\e8"
315" execute "set <M-9>=\e9"
316" execute "set <M-0>=\e0"
317" execute "set <M-f>=\ef"
318" execute "set <M-b>=\eb"
319" execute "set <M-d>=\ed"
320" execute "set <M-l>=\el"
321" execute "set <M-h>=\eh"
322
323"}}}
324" MANAGE_VIMRC {{{ 413" MANAGE_VIMRC {{{
325 414
326" source .vimrc 415" source .vimrc
@@ -341,11 +430,18 @@ nnoremap so :set<space>
341nnoremap <leader><leader>ft :<C-\>e'set filetype='..&filetype<CR> 430nnoremap <leader><leader>ft :<C-\>e'set filetype='..&filetype<CR>
342nnoremap <leader><leader>sw :<C-\>e'set shiftwidth='..&shiftwidth<CR> 431nnoremap <leader><leader>sw :<C-\>e'set shiftwidth='..&shiftwidth<CR>
343nnoremap <leader><leader>ts :<C-\>e'set tabstop='..&tabstop<CR> 432nnoremap <leader><leader>ts :<C-\>e'set tabstop='..&tabstop<CR>
344nnoremap \e :set expandtab!<CR>:set expandtab?<CR> 433nnoremap \E :set expandtab!<CR>:set expandtab?<CR>
434nnoremap \e :call ToggleEventIgnore()<CR>
345nnoremap \l :set list!<CR>:set list?<CR> 435nnoremap \l :set list!<CR>:set list?<CR>
346nnoremap \n :set nu!<CR>:set nu?<CR> 436nnoremap \n :set nu!<CR>:set nu?<CR>
347nnoremap \r :set relativenumber!<CR>:set rnu?<CR> 437nnoremap \r :set relativenumber!<CR>:set rnu?<CR>
348 438
439function! ToggleEventIgnore()
440 let operator = empty(&eventignore) ? "+=" : "-="
441 exe "set eventignore".operator.'all'
442 set eventignore?
443endfunc
444
349" Open a new buffer 445" Open a new buffer
350nnoremap <leader>B :enew<CR> 446nnoremap <leader>B :enew<CR>
351nnoremap <leader>O :e /tmp/buffer<CR> 447nnoremap <leader>O :e /tmp/buffer<CR>
@@ -380,6 +476,7 @@ function! CloseBufferSafely()
380 if &modified 476 if &modified
381 let answer = confirm("Save changes?", "&Yes\n&No\n&Cancel") 477 let answer = confirm("Save changes?", "&Yes\n&No\n&Cancel")
382 if answer == 1 | write | endif 478 if answer == 1 | write | endif
479 if answer == 2 && empty(bufname()) | bd! | return | endif
383 if answer == 3 | return | endif 480 if answer == 3 | return | endif
384 if answer == "" | return | endif 481 if answer == "" | return | endif
385 endif 482 endif
@@ -403,7 +500,7 @@ function! Bye()
403 elseif &diff 500 elseif &diff
404 silent call CloseBuffersForDiff() 501 silent call CloseBuffersForDiff()
405 elseif len(windows) >1 502 elseif len(windows) >1
406 quit 503 quit!
407 else 504 else
408 call CloseBufferSafely() 505 call CloseBufferSafely()
409 " silent! call CloseBufferSafely() 506 " silent! call CloseBufferSafely()
@@ -520,80 +617,52 @@ function! Tab_MoveRight()
520 endif 617 endif
521endfunc 618endfunc
522" }}} 619" }}}
523" FOLD {{{ 620" TERMINAL {{{
524
525" Set fold options
526nnoremap <leader><leader>fm :<C-\>e'set foldmethod='..&foldmethod<CR>
527nnoremap <leader><leader>fc :<C-\>e'set foldcolumn='..&foldcolumn<CR>
528
529" Toggle fold and foldcolumn
530nnoremap <expr> zi "zizz:silent set foldcolumn="..(&foldenable ? "0" : "auto:3").."\<CR>"
531
532" Show fold level when it changes
533nnoremap zm zm:set foldlevel?<CR>
534nnoremap zr zr:set foldlevel?<CR>
535
536" Fold all except selection
537vnoremap zF :<C-u>call ToggleUnfoldSelection()<CR>
538" Resume
539nnoremap zF :call ToggleUnfoldSelection()<CR>zv
540
541nnoremap \z :call GrayOutOtherFolds()<CR>
542
543" Select current fold
544onoremap az :<C-U>silent! keepjumps normal![zV]z<CR>
545xnoremap az :<C-U>silent! keepjumps normal![zV]z<CR>
546onoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR>
547xnoremap iz :<C-U>silent! keepjumps normal![zjV]zk<CR>
548
549" Use l to open fold
550nnoremap <expr> l foldclosed('.') == -1 ? 'l' : 'zo'
551
552" Open fold in next line
553nnoremap <expr> zo foldclosed('.') == -1 ? 'zjzo' : 'zo'
554nnoremap <expr> zO foldclosed('.') == -1 ? 'zjzO' : 'zO'
555
556" Go to next fold and unfold
557nnoremap zJ zjzx
558nnoremap zK zkzx
559
560" Fold file except selection
561autocmd BufEnter * let b:unfold_selection = 0
562function! ToggleUnfoldSelection()
563 if !b:unfold_selection
564 let b:unfold_selection = 1
565 mkview
566 echo 'Unfold'..&foldmethod
567 621
568 let &foldmethod = "manual" 622" Use <leader>z to toggle
569 norm! zE 623let g:alacritty_extra_padding = 0
570 execute "0,'<-1fold" 624function! ToggleWinPadding()
571 execute "'>+1,$fold" 625 if g:alacritty_extra_padding
626 !alacritty msg config --window-id $WINDOWID --reset
627 call SetEmulaterBackground()
628 hi EndOfBuffer None
629 hi MsgArea None
572 else 630 else
573 let b:unfold_selection = 0 631 redir => output | hi LineNr | redir END
574 loadview 632 let bg_color = matchstr(output, 'guibg=\zs[^\s]\+\ze')
575 endif
576endfunction
577 633
578autocmd BufEnter * let b:clear_matches = 0 634 try
579function! GrayOutOtherFolds() 635 exe "hi EndOfBuffer guifg="..bg_color.." guibg="..bg_color
580 if b:clear_matches 636 exe "hi MsgArea guibg="..bg_color
581 let b:clear_matches = 0 637 endtry
582 call clearmatches() 638 exe "!alacritty msg config --window-id $WINDOWID window.padding.x=300 'colors.primary.background=\"\\"..bg_color.."\"'"
583 else
584 let b:clear_matches = 1
585 let pos = getpos('.')
586 exe "norm! [zV]z\<C-c>"
587 call matchadd('Folded', '\%<'.line("'<").'l')
588 call matchadd('Folded', '\%>'.line("'>").'l')
589 norm! zR
590 call setpos('.', pos)
591 endif 639 endif
592endfunction
593 640
594" }}} 641 let g:alacritty_extra_padding = !g:alacritty_extra_padding
642endfunc
643nnoremap <leader>z <Cmd>silent call ToggleWinPadding()<CR>
644
645" In case ALT key is not working
646" execute "set <M-2>=\e2"
647" execute "set <M-1>=\e1"
648" execute "set <M-3>=\e3"
649" execute "set <M-4>=\e4"
650" execute "set <M-5>=\e5"
651" execute "set <M-6>=\e6"
652" execute "set <M-7>=\e7"
653" execute "set <M-8>=\e8"
654" execute "set <M-9>=\e9"
655" execute "set <M-0>=\e0"
656" execute "set <M-f>=\ef"
657" execute "set <M-b>=\eb"
658" execute "set <M-d>=\ed"
659" execute "set <M-l>=\el"
660" execute "set <M-h>=\eh"
661
662"}}}
595" HIGHLIGHT {{{ 663" HIGHLIGHT {{{
596 664
665nnoremap <leader>I :Inspect<CR>
597nnoremap <expr> \sy exists("g:syntax_on") ? ":syntax off <CR>" : ":syntax enable<CR>" 666nnoremap <expr> \sy exists("g:syntax_on") ? ":syntax off <CR>" : ":syntax enable<CR>"
598 667
599" Toggle conceallevel0/2 668" Toggle conceallevel0/2
@@ -630,39 +699,6 @@ nnoremap <silent> <leader>gh :call matchadd('MultiLineHighlight', '\%'.line('.')
630nnoremap <silent> <leader>gH :call clearmatches()<CR> 699nnoremap <silent> <leader>gH :call clearmatches()<CR>
631 700
632" }}} 701" }}}
633" SURROUND {{{
634
635inoremap ' ''<Left>
636inoremap " ""<Left>
637inoremap ( ()<Left>
638inoremap [ []<Left>
639inoremap { {}<Left>
640
641vnoremap q <ESC>`<i"<ESC>`>la"<ESC>
642vnoremap ( <ESC>`<i(<ESC>`>la)<ESC>
643vnoremap [ <ESC>`<i[<ESC>`>la]<ESC>
644vnoremap { <ESC>`<i{<ESC>`>la}<ESC>
645vnoremap Q <ESC>`<i「<ESC>`>la」<ESC>
646" vnoremap ' <ESC>`<i'<ESC>`>la'<ESC>
647" vnoremap ` <ESC>`<i`<ESC>`>la`<ESC>
648
649function! AddSpaceForSelection()
650 " If visual selection by lines, add empty space at top and bottom
651 if line("'<") != line("'>") || (col("'<") == 1 && col("'>") == len(getline('.'))+1)
652 '< norm! O
653 '> norm! o
654 exe "norm! "..(line("'<")-1).."GV"..(line("'>")+1).."G"
655 " Otherwise, add space at start and end column
656 else
657 call cursor('.', col("'<"))
658 execute "norm! i\<space>"
659 call cursor('.', col("'>")+1)
660 execute "norm! a\<space>"
661 endif
662endfunction
663vnoremap <space> :<C-u>call AddSpaceForSelection()<CR>
664
665" }}}
666" QUICKFIX {{{ 702" QUICKFIX {{{
667 703
668nnoremap <leader>cn :cn<CR> 704nnoremap <leader>cn :cn<CR>
@@ -694,34 +730,6 @@ command! -nargs=1 -complete=command Redir silent call Redir(<q-args>)
694command! -nargs=1 -complete=command R silent call Redir(<q-args>) 730command! -nargs=1 -complete=command R silent call Redir(<q-args>)
695nnoremap <leader>rr :Redir<space> 731nnoremap <leader>rr :Redir<space>
696" }}} 732" }}}
697" SEARCH/SUBSTITUTE {{{
698
699" Search for selected test
700vnoremap * y/\V<C-R>=escape(@",'/\')<CR><CR>
701
702nnoremap g/ gv<esc>/\%V
703vnoremap g/ <esc>/\%V
704
705" Substitue across file
706vnoremap <leader>s y:%s//<C-R>0/g<LEFT><LEFT>
707
708" Usage: Press <TAB> n times for area, and <CR> for substitute
709let g:search_selection = 0
710" When leaving visual mode, resume search_selection
711autocmd Modechanged [vV\x16]*:* let g:search_selection = 0
712xmap <expr> <TAB> g:search_selection ? "//e<CR>" : "*:let g:search_selection = 1<CR>gv//e<CR>"
713xmap <expr> <S-TAB> g:search_selection ? "??<CR>" : "*:let g:search_selection = 1<CR>gv??<CR>"
714vnoremap <CR> :s//<C-R>0/g<Left><Left>
715
716" }}}
717" SIGN {{{
718
719nnoremap <leader><leader>sc :<C-\>e'set signcolumn='..&signcolumn<CR>
720
721nnoremap <leader>si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p")<CR>
722nnoremap <leader>sI :exe ":sign unplace * file=" .. expand("%:p")<CR>
723
724" }}}
725" GIT_TIG {{{ 733" GIT_TIG {{{
726 734
727let g:tig_explorer_keymap_commit_split = '<C-s>' 735let g:tig_explorer_keymap_commit_split = '<C-s>'