From a178d143fa3060822365665f15ad5b2d7950313c Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Wed, 7 Aug 2024 10:26:20 +0800 Subject: Update --- mutt/mutt.desktop | 1 + vim/init/basic.vim | 2 +- vim/init/config.vim | 10 +- vim/init/keymaps.vim | 354 ++++++++++++++++++++++++++------------------------- vim/mini.lua | 36 ++++-- 5 files changed, 212 insertions(+), 191 deletions(-) diff --git a/mutt/mutt.desktop b/mutt/mutt.desktop index f5bd528..7eb47d2 100755 --- a/mutt/mutt.desktop +++ b/mutt/mutt.desktop @@ -5,3 +5,4 @@ Exec=alacritty -e mutt %u MimeType=x-scheme-handler/mailto Terminal=true Type=Application +Categories=Email;Office;Network; diff --git a/vim/init/basic.vim b/vim/init/basic.vim index fd20476..83b4ae8 100644 --- a/vim/init/basic.vim +++ b/vim/init/basic.vim @@ -12,7 +12,7 @@ augroup Enter let bg_color = matchstr(output, 'guibg=\zs[^\s]\+\ze') exe "!alacritty msg config 'colors.primary.background=\"\\"..bg_color.."\"'" endfunc - autocmd VimEnter * call SetEmulaterBackground() + autocmd VimEnter * silent! call SetEmulaterBackground() augroup END "}}} " For Vimscript {{{ diff --git a/vim/init/config.vim b/vim/init/config.vim index 3870ac4..281caf5 100644 --- a/vim/init/config.vim +++ b/vim/init/config.vim @@ -137,7 +137,6 @@ augroup InitFileTypes if has_key(shebangMatch, l:filetype) let l:filetype = shebangMatch[l:filetype] endif - echo "filetype from shebang: ".l:filetype execute "set filetype=".l:filetype endif endfunc @@ -151,6 +150,8 @@ augroup InitFileTypes au FileType markdown call InitMarkdownFile() function! InitMarkdownFile() setlocal wrap sw=2 ts=2 + let g:markdown_apply_heading_level = 0 + nnoremap \fl :let markdown_apply_heading_level = !markdown_apply_heading_levelzX let b:in_frontmatter = 0 setlocal foldexpr=MarkdownLevel() foldmethod=expr @@ -159,7 +160,7 @@ augroup InitFileTypes call MarkdownHighlights() endfunc - function MarkdownHighlights() + function! MarkdownHighlights() syn match MarkdownHtmlDetails '^
' conceal cchar=▶ syn match MarkdownHtmlSummary '' conceal cchar= syn match MarkdownHtmlSummaryEnd '' conceal @@ -184,8 +185,9 @@ augroup InitFileTypes " Fold for heading and the following contents let hash_num = matchstr(getline(v:lnum), '^#\+') if !empty(hash_num) + let foldlevel = g:markdown_apply_heading_level ? len(hash_num) - 1 : 1 " HEADING - return len(hash_num) == 1 ? 0 : '>1' + return len(hash_num) == 1 ? 0 : '>'.foldlevel else " Contents return "=" @@ -201,7 +203,7 @@ augroup InitFileTypes " For heading, foltext() let origin = split(MarkdownFoldText()[2:], ' ') let heading = substitute(join(origin[:-3], ' '), '\#', ' ', 'g') - let lines = join(origin[-2:], ' ')[1:-2] + let lines = origin[-2][1:] let fills = repeat('.', 48 - strwidth(heading) - len(lines)) return heading.." "..fills.." "..lines endfunc 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 @@ -167,6 +167,138 @@ nnoremap ddkP " Clear current line nnoremap S S +" }}} +" SURROUND {{{ + +inoremap ' '' +inoremap " "" +inoremap ( () +inoremap [ [] +inoremap { {} + +vnoremap q ``>la" +vnoremap ( ``>la) +vnoremap [ ``>la] +vnoremap { ``>la} +vnoremap Q ``>la」 +" vnoremap ' ``>la' +" vnoremap ` ``>la` + +function! AddSpaceForSelection() + " If visual selection by lines, add empty space at top and bottom + if line("'<") != line("'>") || (col("'<") == 1 && col("'>") == len(getline('.'))+1) + '< norm! O + '> norm! o + exe "norm! "..(line("'<")-1).."GV"..(line("'>")+1).."G" + " Otherwise, add space at start and end column + else + call cursor('.', col("'<")) + execute "norm! i\" + call cursor('.', col("'>")+1) + execute "norm! a\" + endif +endfunction +vnoremap :call AddSpaceForSelection() + +" }}} +" SEARCH/SUBSTITUTE {{{ + +" Search for selected test +vnoremap * y/\V=escape(@",'/\') + +nnoremap g/ gv/\%V +vnoremap g/ /\%V + +" Substitue across file +vnoremap s y:%s//0/g + +" Usage: Press n times for area, and for substitute +let g:search_selection = 0 +" When leaving visual mode, resume search_selection +autocmd Modechanged [vV\x16]*:* let g:search_selection = 0 +xmap g:search_selection ? "//e" : "*:let g:search_selection = 1gv//e" +xmap g:search_selection ? "??" : "*:let g:search_selection = 1gv??" +vnoremap :s//0/g + +" }}} +" SIGN {{{ + +nnoremap sc :e'set signcolumn='..&signcolumn + +nnoremap si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p") +nnoremap sI :exe ":sign unplace * file=" .. expand("%:p") + +" }}} +" FOLD {{{ + +" Set fold options +nnoremap fm :e'set foldmethod='..&foldmethod +nnoremap fc :e'set foldcolumn='..&foldcolumn + +" Toggle fold and foldcolumn +nnoremap zi "zizz:silent set foldcolumn="..(&foldenable ? "0" : "auto:3").."\" + +" Show fold level when it changes +nnoremap zm zm:set foldlevel? +nnoremap zr zr:set foldlevel? + +" Fold all except selection +vnoremap zF :call ToggleUnfoldSelection() +" Resume +nnoremap zF :call ToggleUnfoldSelection()zv + +vnoremap \z :call GrayOutOthers() + +" Select current fold +onoremap az :silent! keepjumps normal![zV]z +xnoremap az :silent! keepjumps normal![zV]z +onoremap iz :silent! keepjumps normal![zjV]zk +xnoremap iz :silent! keepjumps normal![zjV]zk + +" Use l to open fold +nnoremap l foldclosed('.') == -1 ? 'l' : 'zo' + +" Open fold in next line +nnoremap zo foldclosed('.') == -1 ? 'zjzo' : 'zo' +nnoremap zO foldclosed('.') == -1 ? 'zjzO' : 'zO' + +" Go to next fold and unfold +nnoremap zJ zjzx +nnoremap zK zkzx + +" Fold file except selection +autocmd BufEnter * let b:unfold_selection = 0 +function! ToggleUnfoldSelection() + if !b:unfold_selection + let b:unfold_selection = 1 + mkview + echo 'Unfold'..&foldmethod + + let &foldmethod = "manual" + norm! zE + execute "1,'<-1fold" + execute "'>+1,$fold" + else + let b:unfold_selection = 0 + loadview + endif +endfunction + +autocmd BufEnter * let b:clear_matches = 0 +function! GrayOutOthers() + if b:clear_matches + let b:clear_matches = 0 + call clearmatches() + else + let b:clear_matches = 1 + let pos = getpos('.') + call matchadd('Folded', '\%<'.line("'<").'l') + call matchadd('Folded', '\%>'.line("'>").'l') + norm! zR + call setpos('.', pos) + endif +endfunction + " }}} " REGISTER {{{ " Paste register 0 @@ -277,49 +409,6 @@ endfunc nnoremap z> ":\call ChangeUnfold(1,"..v:count..")\" nnoremap z< ":\call ChangeUnfold(0,"..v:count..")\" -"}}} -" TERMINAL {{{ - -" Use z to toggle -let g:alacritty_extra_padding = 0 -function! ToggleWinPadding() - if g:alacritty_extra_padding - !alacritty msg config --window-id $WINDOWID --reset - call SetEmulaterBackground() - hi EndOfBuffer None - hi MsgArea None - else - redir => output | hi LineNr | redir END - let bg_color = matchstr(output, 'guibg=\zs[^\s]\+\ze') - - try - exe "hi EndOfBuffer guifg="..bg_color.." guibg="..bg_color - exe "hi MsgArea guibg="..bg_color - endtry - exe "!alacritty msg config --window-id $WINDOWID window.padding.x=300 'colors.primary.background=\"\\"..bg_color.."\"'" - endif - - let g:alacritty_extra_padding = !g:alacritty_extra_padding -endfunc -nnoremap z silent call ToggleWinPadding() - -" In case ALT key is not working -" execute "set =\e2" -" execute "set =\e1" -" execute "set =\e3" -" execute "set =\e4" -" execute "set =\e5" -" execute "set =\e6" -" execute "set =\e7" -" execute "set =\e8" -" execute "set =\e9" -" execute "set =\e0" -" execute "set =\ef" -" execute "set =\eb" -" execute "set =\ed" -" execute "set =\el" -" execute "set =\eh" - "}}} " MANAGE_VIMRC {{{ @@ -341,11 +430,18 @@ nnoremap so :set nnoremap ft :e'set filetype='..&filetype nnoremap sw :e'set shiftwidth='..&shiftwidth nnoremap ts :e'set tabstop='..&tabstop -nnoremap \e :set expandtab!:set expandtab? +nnoremap \E :set expandtab!:set expandtab? +nnoremap \e :call ToggleEventIgnore() nnoremap \l :set list!:set list? nnoremap \n :set nu!:set nu? nnoremap \r :set relativenumber!:set rnu? +function! ToggleEventIgnore() + let operator = empty(&eventignore) ? "+=" : "-=" + exe "set eventignore".operator.'all' + set eventignore? +endfunc + " Open a new buffer nnoremap B :enew nnoremap O :e /tmp/buffer @@ -380,6 +476,7 @@ function! CloseBufferSafely() if &modified let answer = confirm("Save changes?", "&Yes\n&No\n&Cancel") if answer == 1 | write | endif + if answer == 2 && empty(bufname()) | bd! | return | endif if answer == 3 | return | endif if answer == "" | return | endif endif @@ -403,7 +500,7 @@ function! Bye() elseif &diff silent call CloseBuffersForDiff() elseif len(windows) >1 - quit + quit! else call CloseBufferSafely() " silent! call CloseBufferSafely() @@ -520,80 +617,52 @@ function! Tab_MoveRight() endif endfunc " }}} -" FOLD {{{ - -" Set fold options -nnoremap fm :e'set foldmethod='..&foldmethod -nnoremap fc :e'set foldcolumn='..&foldcolumn - -" Toggle fold and foldcolumn -nnoremap zi "zizz:silent set foldcolumn="..(&foldenable ? "0" : "auto:3").."\" - -" Show fold level when it changes -nnoremap zm zm:set foldlevel? -nnoremap zr zr:set foldlevel? - -" Fold all except selection -vnoremap zF :call ToggleUnfoldSelection() -" Resume -nnoremap zF :call ToggleUnfoldSelection()zv - -nnoremap \z :call GrayOutOtherFolds() - -" Select current fold -onoremap az :silent! keepjumps normal![zV]z -xnoremap az :silent! keepjumps normal![zV]z -onoremap iz :silent! keepjumps normal![zjV]zk -xnoremap iz :silent! keepjumps normal![zjV]zk - -" Use l to open fold -nnoremap l foldclosed('.') == -1 ? 'l' : 'zo' - -" Open fold in next line -nnoremap zo foldclosed('.') == -1 ? 'zjzo' : 'zo' -nnoremap zO foldclosed('.') == -1 ? 'zjzO' : 'zO' - -" Go to next fold and unfold -nnoremap zJ zjzx -nnoremap zK zkzx - -" Fold file except selection -autocmd BufEnter * let b:unfold_selection = 0 -function! ToggleUnfoldSelection() - if !b:unfold_selection - let b:unfold_selection = 1 - mkview - echo 'Unfold'..&foldmethod +" TERMINAL {{{ - let &foldmethod = "manual" - norm! zE - execute "0,'<-1fold" - execute "'>+1,$fold" +" Use z to toggle +let g:alacritty_extra_padding = 0 +function! ToggleWinPadding() + if g:alacritty_extra_padding + !alacritty msg config --window-id $WINDOWID --reset + call SetEmulaterBackground() + hi EndOfBuffer None + hi MsgArea None else - let b:unfold_selection = 0 - loadview - endif -endfunction + redir => output | hi LineNr | redir END + let bg_color = matchstr(output, 'guibg=\zs[^\s]\+\ze') -autocmd BufEnter * let b:clear_matches = 0 -function! GrayOutOtherFolds() - if b:clear_matches - let b:clear_matches = 0 - call clearmatches() - else - let b:clear_matches = 1 - let pos = getpos('.') - exe "norm! [zV]z\" - call matchadd('Folded', '\%<'.line("'<").'l') - call matchadd('Folded', '\%>'.line("'>").'l') - norm! zR - call setpos('.', pos) + try + exe "hi EndOfBuffer guifg="..bg_color.." guibg="..bg_color + exe "hi MsgArea guibg="..bg_color + endtry + exe "!alacritty msg config --window-id $WINDOWID window.padding.x=300 'colors.primary.background=\"\\"..bg_color.."\"'" endif -endfunction -" }}} + let g:alacritty_extra_padding = !g:alacritty_extra_padding +endfunc +nnoremap z silent call ToggleWinPadding() + +" In case ALT key is not working +" execute "set =\e2" +" execute "set =\e1" +" execute "set =\e3" +" execute "set =\e4" +" execute "set =\e5" +" execute "set =\e6" +" execute "set =\e7" +" execute "set =\e8" +" execute "set =\e9" +" execute "set =\e0" +" execute "set =\ef" +" execute "set =\eb" +" execute "set =\ed" +" execute "set =\el" +" execute "set =\eh" + +"}}} " HIGHLIGHT {{{ +nnoremap I :Inspect nnoremap \sy exists("g:syntax_on") ? ":syntax off " : ":syntax enable" " Toggle conceallevel0/2 @@ -629,39 +698,6 @@ nnoremap gh :call matchadd('MultiLineHighlight', '\%'.line('.') " clear all the highlighted lines nnoremap gH :call clearmatches() -" }}} -" SURROUND {{{ - -inoremap ' '' -inoremap " "" -inoremap ( () -inoremap [ [] -inoremap { {} - -vnoremap q ``>la" -vnoremap ( ``>la) -vnoremap [ ``>la] -vnoremap { ``>la} -vnoremap Q ``>la」 -" vnoremap ' ``>la' -" vnoremap ` ``>la` - -function! AddSpaceForSelection() - " If visual selection by lines, add empty space at top and bottom - if line("'<") != line("'>") || (col("'<") == 1 && col("'>") == len(getline('.'))+1) - '< norm! O - '> norm! o - exe "norm! "..(line("'<")-1).."GV"..(line("'>")+1).."G" - " Otherwise, add space at start and end column - else - call cursor('.', col("'<")) - execute "norm! i\" - call cursor('.', col("'>")+1) - execute "norm! a\" - endif -endfunction -vnoremap :call AddSpaceForSelection() - " }}} " QUICKFIX {{{ @@ -693,34 +729,6 @@ endfunction command! -nargs=1 -complete=command Redir silent call Redir() command! -nargs=1 -complete=command R silent call Redir() nnoremap rr :Redir -" }}} -" SEARCH/SUBSTITUTE {{{ - -" Search for selected test -vnoremap * y/\V=escape(@",'/\') - -nnoremap g/ gv/\%V -vnoremap g/ /\%V - -" Substitue across file -vnoremap s y:%s//0/g - -" Usage: Press n times for area, and for substitute -let g:search_selection = 0 -" When leaving visual mode, resume search_selection -autocmd Modechanged [vV\x16]*:* let g:search_selection = 0 -xmap g:search_selection ? "//e" : "*:let g:search_selection = 1gv//e" -xmap g:search_selection ? "??" : "*:let g:search_selection = 1gv??" -vnoremap :s//0/g - -" }}} -" SIGN {{{ - -nnoremap sc :e'set signcolumn='..&signcolumn - -nnoremap si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p") -nnoremap sI :exe ":sign unplace * file=" .. expand("%:p") - " }}} " GIT_TIG {{{ diff --git a/vim/mini.lua b/vim/mini.lua index 8a19d63..398ebb4 100644 --- a/vim/mini.lua +++ b/vim/mini.lua @@ -345,9 +345,19 @@ Add { source = "adamheins/vim-highlight-match-under-cursor" } -- }}} +-- vim-livedown {{{ Add { source ='shime/vim-livedown' } +vim.keymap.set( 'n', '', ":LivedownToggle", { buffer = bufnr, desc = '' }) +-- }}} +-- Preview Image {{{ +Add { + source = 'qaiviq/vim-imager' +} +vim.cmd("let g:imager#filetypes = ['.md']") +vim.keymap.set( 'n', '\\i', ":ToggleImages", { buffer = bufnr, desc = '' }) +-- }}} -- Install Lazy {{{ @@ -425,20 +435,20 @@ require("lazy").setup({ } } -- keymaps {{{ - for i = 1, 9, 1 do - vim.keymap.set("n", string.format("", i), function() - vim.cmd("BufferLineGoToBuffer " .. i) - end, { silent = true }) - end - local opts = { noremap = true, silent = true } - vim.keymap.set("n", "", "BufferLineCyclePrev", opts) - vim.keymap.set("n", "", "BufferLineCycleNext", opts) - vim.keymap.set("n", "", "BufferLineMovePrev", opts) - vim.keymap.set("n", "", "BufferLineMoveNext", opts) - vim.keymap.set("n", "", "BufferLineTogglePin", opts) - -- }}} + for i = 1, 9, 1 do + vim.keymap.set("n", string.format("", i), function() + require("bufferline").go_to(i, true) + end, { silent = true }) end - }, + local opts = { noremap = true, silent = true } + vim.keymap.set("n", "", "BufferLineCyclePrev", opts) + vim.keymap.set("n", "", "BufferLineCycleNext", opts) + vim.keymap.set("n", "", "BufferLineMovePrev", opts) + vim.keymap.set("n", "", "BufferLineMoveNext", opts) + vim.keymap.set("n", "", "BufferLineTogglePin", opts) + -- }}} + end + }, -- }}} -- lualine {{{ { -- cgit v1.2.3-70-g09d2