From b827b89821a04794e6dd16ae326c6e0bef35f067 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Sat, 20 Jul 2024 21:19:47 +0800 Subject: Update --- vim/init/keymaps.vim | 125 +++++++++++------- vim/mini.lua | 357 ++++++++++++++++++++++++++++++++------------------- 2 files changed, 305 insertions(+), 177 deletions(-) diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index 5639e11..1a5e88a 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim @@ -1,6 +1,7 @@ "====================================================================== " Only for key mapping "====================================================================== +" vim: sw=2 ts=2 foldmethod=marker foldmarker={{{,}}} " COMMON_MAPPING ----------------{{{ @@ -8,17 +9,17 @@ map / " Escape normal mode by -imap l +inoremap l " Search for selected test vnoremap * y/\V=escape(@",'/\') -" Set wrap +" Set wrap nnoremap W :set wrap! " Fast saving function! s:WriteOrEnterFileName() - if !empty(expand('%')) | w! | else | call feedkeys(":w ") | endif + if !empty(expand('%')) | write! | else | call feedkeys(":w ") | endif endfunction nmap w :call WriteOrEnterFileName() @@ -38,27 +39,9 @@ augroup vimrc_CRfix autocmd CmdwinEnter * nnoremap augroup END -" Open terminal -" nnoremap , :terminal ++noclose -vnoremap , :terminal - -" Paste register 0 -nnoremap "0p - -" Toggle paste mode on and off -map pp :setlocal paste! - -" Copy from system clipboard -nnoremap P :r !xsel -ob -vnoremap Y "+y - -" Move one line up and down -nnoremap ddp -nnoremap ddkP - " In case ALT key is not working -" execute "set =\e1" " execute "set =\e2" +" execute "set =\e1" " execute "set =\e3" " execute "set =\e4" " execute "set =\e5" @@ -81,8 +64,6 @@ nnoremap S [s " Show full path by default nnoremap 1 -nnoremap S S - " Translate by Google API vnoremap Tz :!trans -t zh-TW -b vnoremap Te :!trans -t en-US -b @@ -192,6 +173,27 @@ inoremap :tablast " }}} +" }}} +" REGISTER {{{ +" Paste register 0 +nnoremap "0p + +" Toggle paste mode on and off +map pp :setlocal paste! + +" Copy from system clipboard +nnoremap P :r !xsel -ob +vnoremap Y "+y +" }}} +" EDIT {{{ + +" Move one line up and down +nnoremap ddp +nnoremap ddkP + +" Clear current line +nnoremap S S + " }}} " MANAGE_VIMRC ----------------{{{ @@ -395,18 +397,22 @@ endfunc noremap fm :e'set foldmethod='..&foldmethod noremap fc :e'set foldcolumn='..&foldcolumn +nnoremap zi zizz + " Show fold level when it changes nnoremap zm zm:set foldlevel nnoremap zr zr:set foldlevel " Fold all except selection -vnoremap zF :call UnfoldSelectionOnly() +vnoremap zF :call ToggleUnfoldSelection() " Resume -nnoremap zF :call ResumeFoldmethod()zv +nnoremap zF :call ToggleUnfoldSelection()zv + +nnoremap \z :call GrayOutOtherFolds() " Select current fold -xnoremap az :silent!normal![zV]z -xnoremap iz :silent!normal![zjV]zk +xnoremap az :silent! keepjumps normal![zV]z +xnoremap iz :silent! keepjumps normal![zjV]zk " Use l to open fold nnoremap l foldclosed('.') == -1 ? 'l' : 'zo' @@ -415,29 +421,49 @@ nnoremap l foldclosed('.') == -1 ? 'l' : 'zo' 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 -let b:original_foldmethod = "" -function! UnfoldSelectionOnly() - echo 'Unfold'..&foldmethod - let b:original_foldmethod = &foldmethod - let &foldmethod = "manual" - norm! zE - execute "0,'<-1fold" - execute "'>+1,$fold" +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 "0,'<-1fold" + execute "'>+1,$fold" + else + let b:unfold_selection = 0 + loadview + endif +endfunction + +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) + endif endfunction -function! ResumeFoldmethod() - norm! zE - let &foldmethod = empty(b:original_foldmethod) ? "indent" : b:original_foldmethod -endfunc " }}} " HIGHLIGHT ----------------{{{ " Disable highlight when is pressed -map :noh +noremap :noh function! HiFile() let i = 1 @@ -454,7 +480,7 @@ endfunction function! GetHighlightGroupName() let l:syntaxID = synID(line('.'), col('.'), 1) let l:groupName = synIDattr(l:syntaxID, 'name') - echo "Highlight Group Name: " . l:groupName + echo l:groupName endfunction nnoremap H :call GetHighlightGroupName() @@ -485,9 +511,12 @@ vnoremap ` ``>la` vnoremap Q ``>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 | '> 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\" @@ -543,7 +572,7 @@ autocmd Modechanged [vV\x16]*:* let g:search_not_in_register = 1 function! ExpandSelectionBySearch(sep) if g:search_not_in_register " Save current selection to register, and keep selection - execute 'norm ygv' + norm! ygv let g:search_not_in_register = 0 endif " Use register s to go to next search, counts/total is displayed in @@ -565,7 +594,7 @@ vnoremap call SubstituteBySearch() nnoremap si :exe ":sign place " .. line('.') .. " line=" .. line('.') .. " name=piet file=" .. expand("%:p") nnoremap sI :exe ":sign unplace * file=" .. expand("%:p") -" }} +" }}} " GIT_TIG ----------------{{{ let g:tig_explorer_keymap_commit_split = '' @@ -575,7 +604,7 @@ nnoremap s TigStatus nnoremap b TigBlame " }}} -" Markdown items (temproray solution) ----------------{{{ +" Tmp: Markdown items (temproray solution) ----------------{{{ " Toggle list item in markdown: "- [ ] XXX" -> "XXX" -> "- XXX" -> "- [ ] XXX" " autocmd FileType markdown nnoremap i V:!sed -E '/^ *- \[.\]/ { s/^( *)- \[.\] */\1/; q; }; /^ *[^[:space:]-]/ { s/^( *)/\1- /; q; }; /^ *- / { s/^( *)- /\1- [ ] /; q; }' @@ -584,14 +613,14 @@ nnoremap b TigBlame " Toggle task status: "- [ ] " -> "- [x]" -> "- [.] " -> "- [ ] " " nnoremap x V:!sed -E '/^ *- \[ \]/ { s/^( *)- \[ \]/\1- [x]/; q; }; /^ *- \[\x\]/ { s/^( *)- \[\x\]/\1- [.]/; q; }; /^ *- \[\.\]/ { s/^( *)- \[\.\]/\1- [ ]/; q; }' " }}} -" Common system command ----------------{{{ +" Tmp: Common system command ----------------{{{ " Show date selector nnoremap dd :r !sh -c 'LANG=en zenity --calendar --date-format="\%Y.\%m.\%d" 2>/dev/null' nnoremap dD :r !sh -c 'LANG=en zenity --calendar --date-format="\%a \%b \%d" 2>/dev/null' nnoremap dt :r !date +\%H:\%mA " }}} -" Compile ----------------{{{ +" Tmp: Compile ----------------{{{ " 编译运行 C/C++ 项目 " 详细见:http://www.skywind.me/blog/archives/2084 diff --git a/vim/mini.lua b/vim/mini.lua index d87c01c..b09dc88 100644 --- a/vim/mini.lua +++ b/vim/mini.lua @@ -29,14 +29,6 @@ require('mini.deps').setup({ }) add, now, later = MiniDeps.add, MiniDeps.now, MiniDeps.later -- }}} --- Disabled: mini.bufremote {{{ -add('echasnovski/mini.bufremove') -vim.g.bufremove_disable = true ---}}} --- Disabled: mini.animate --{{{ -add('echasnovski/mini.animate') -vim.g.animate_disable = true --- }}} -- mini.basics {{{ require('mini.basics').setup() -- }}} @@ -49,7 +41,7 @@ require('mini.extra').setup() -- }}} -- mini.colors {{{ require('mini.colors').setup() -vim.keymap.set( 'n', 'co', function() require('mini.colors').interactive() end) +vim.keymap.set( 'n', 'co', function() require('mini.colors').interactive() end) -- }}} -- mini.base16 {{{ require('mini.base16').setup({ @@ -75,7 +67,7 @@ require('mini.base16').setup({ -- Integers, Boolean, Constants, XML Attributes, Markup Link Url base09 = "#ef9062", -- Classes, Markup Bold, Search Text Background - base0A = "#a6e22e", + base0A = "#efca84", -- Strings, Inherited Class, Markup Code, Diff Inserted base0B = "#e5c463", -- Support, Regular Expressions, Escape Characters, Markup Quotes @@ -88,7 +80,9 @@ require('mini.base16').setup({ base0F = "#f9f8f5", }, use_cterm = true, -}) --}}} +}) + +--}}} -- mini.icons {{{ require('mini.icons').setup({ }) --}}} @@ -98,7 +92,7 @@ require('mini.tabline').setup {} for i = 1, 9, 1 do vim.keymap.set("n", string.format("", i), function() - vim.api.nvim_set_current_buf( vim.fn.getbufinfo({ buflisted=true })[i].bufnr) + vim.api.nvim_set_current_buf(vim.fn.getbufinfo({ buflisted=true })[i].bufnr) end, {silent = true}) end @@ -146,51 +140,6 @@ function status_config() }) end --- }}} --- Disabled: mini.clue {{{ --- local miniclue = require('mini.clue') --- miniclue.setup({ --- triggers = { --- -- Leader triggers --- { mode = 'n', keys = '' }, --- { mode = 'x', keys = '' }, --- --- -- Built-in completion --- { mode = 'i', keys = '' }, --- --- -- `g` key --- { mode = 'n', keys = 'g' }, --- { mode = 'x', keys = 'g' }, --- --- -- Marks --- { mode = 'n', keys = "'" }, --- { mode = 'n', keys = '`' }, --- { mode = 'x', keys = "'" }, --- { mode = 'x', keys = '`' }, --- --- -- Registers --- { mode = 'n', keys = '"' }, --- { mode = 'x', keys = '"' }, --- { mode = 'i', keys = '' }, --- { mode = 'c', keys = '' }, --- --- -- Window commands --- { mode = 'n', keys = '' }, --- --- -- `z` key --- { mode = 'n', keys = 'z' }, --- { mode = 'x', keys = 'z' }, --- }, --- --- clues = { --- -- Enhance this by adding descriptions for mapping groups --- miniclue.gen_clues.builtin_completion(), --- miniclue.gen_clues.g(), --- miniclue.gen_clues.marks(), --- miniclue.gen_clues.registers(), --- miniclue.gen_clues.windows(), --- miniclue.gen_clues.z(), --- }, -- }}} -- mini.comment {{{ require('mini.comment').setup({ @@ -232,7 +181,7 @@ require('mini.diff').setup({ -- }}} -- mini.map {{{ require('mini.map').setup() -vim.keymap.set( 'n', 'mp', function() require('mini.map').toggle() end, { buffer = bufnr, desc = '' }) +vim.keymap.set( 'n', '\\m', function() require('mini.map').toggle() end, { buffer = bufnr, desc = '' }) -- }}} -- mini.visits {{{ require('mini.visits').setup() @@ -261,10 +210,8 @@ require('mini.splitjoin').setup() -- mini.move {{{ require('mini.move').setup() -- }}} --- mini.pairs {{{ -require('mini.pairs').setup() --- }}} -- mini.hipatterns {{{ + local hipatterns = require('mini.hipatterns') hipatterns.setup({ highlighters = { @@ -278,11 +225,64 @@ hipatterns.setup({ hex_color = hipatterns.gen_highlighter.hex_color(), }, }) -vim.keymap.set( 'n', 'hi', function() - MiniHipatterns.toggle() - end, - { buffer = bufnr, desc = 'Toggle hex color highlight' } -) +vim.keymap.set( 'n', 'hi', function()MiniHipatterns.toggle() end, { buffer = bufnr, desc = 'Toggle hex color highlight' }) + +-- }}} +-- mini.pairs {{{ +require('mini.pairs').setup() +-- }}} +-- -- mini.clue {{{ +-- local miniclue = require('mini.clue') +-- miniclue.setup({ +-- triggers = { +-- -- Leader triggers +-- { mode = 'n', keys = '' }, +-- { mode = 'x', keys = '' }, +-- +-- -- Built-in completion +-- { mode = 'i', keys = '' }, +-- +-- -- `g` key +-- { mode = 'n', keys = 'g' }, +-- { mode = 'x', keys = 'g' }, +-- +-- -- Marks +-- { mode = 'n', keys = "'" }, +-- { mode = 'n', keys = '`' }, +-- { mode = 'x', keys = "'" }, +-- { mode = 'x', keys = '`' }, +-- +-- -- Registers +-- { mode = 'n', keys = '"' }, +-- { mode = 'x', keys = '"' }, +-- { mode = 'i', keys = '' }, +-- { mode = 'c', keys = '' }, +-- +-- -- Window commands +-- { mode = 'n', keys = '' }, +-- +-- -- `z` key +-- { mode = 'n', keys = 'z' }, +-- { mode = 'x', keys = 'z' }, +-- }, +-- +-- clues = { +-- -- Enhance this by adding descriptions for mapping groups +-- miniclue.gen_clues.builtin_completion(), +-- miniclue.gen_clues.g(), +-- miniclue.gen_clues.marks(), +-- miniclue.gen_clues.registers(), +-- miniclue.gen_clues.windows(), +-- miniclue.gen_clues.z(), +-- }, +-- -- }}} +-- -- mini.bufremote {{{ +add('echasnovski/mini.bufremove') +vim.g.bufremove_disable = true +--}}} +-- -- mini.animate --{{{ +add('echasnovski/mini.animate') +vim.g.animate_disable = true -- }}} -- Telescope {{{ add({ @@ -292,81 +292,85 @@ add({ }, hooks = { post_checkout = function() end }, }) --- add({ --- source = 'nvim-telescope/telescope-fzf-native.nvim', --- hooks = { post_checkout = function() --- vim.fn.system('make') --- end }, --- }) -- config {{{ require('telescope').setup({ - defaults = {-- {{{ - mappings = { - i = { - -- [""] = "move_selection_next", - -- [""] = "move_selection_previous", - [""] = require("telescope.actions.layout").toggle_preview, - [""] = false, - [""] = function(p_bufnr) - require("telescope.actions").send_selected_to_qflist(p_bufnr) - vim.cmd.cfdo("edit") - end, + defaults = { + mappings = { + i = { + -- [""] = "move_selection_next", + -- [""] = "move_selection_previous", + [""] = require("telescope.actions.layout").toggle_preview, + [""] = false, + [""] = function(p_bufnr) + require("telescope.actions").send_selected_to_qflist(p_bufnr) + vim.cmd.cfdo("edit") + end, + }, }, - }, - layout_config = { - horizontal = { - prompt_position = "bottom", + layout_config = { + horizontal = { + prompt_position = "bottom", + }, + vertical = { height = 0.8 }, + -- other layout configuration here + preview_cutoff = 0, }, - vertical = { height = 0.8 }, - -- other layout configuration here - preview_cutoff = 0, - }, - file_ignore_patterns = { - "node_modules" - }, -},-- }}} -pickers = {-- {{{ -buffers = { - show_all_buffers = true, - sort_lastused = true, - theme = "dropdown", - previewer = false, - mappings = { - i = { - [""] = "delete_buffer", + file_ignore_patterns = { + "node_modules" }, - n = { - [""] = "delete_buffer", - } }, -}, -},-- }}} -extensions = { - fzf = { - fuzzy = true, -- false will only do exact matching - override_generic_sorter = true, -- override the generic sorter - override_file_sorter = true, -- override the file sorter - case_mode = "smart_case", -- or "ignore_case" or "respect_case" - -- the default case_mode is "smart_case" + pickers = { + buffers = { + show_all_buffers = true, + sort_lastused = true, + theme = "dropdown", + previewer = false, + mappings = { + i = { + [""] = "delete_buffer", + }, + n = { + [""] = "delete_buffer", + } + }, + }, }, - aerial = { - -- Display symbols as .. - show_nesting = { - ["_"] = false, -- This key will be the default - json = true, -- You can set the option for specific filetypes - yaml = true, + extensions = { + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + -- the default case_mode is "smart_case" + }, + aerial = { + -- Display symbols as .. + show_nesting = { + ["_"] = false, -- This key will be the default + json = true, -- You can set the option for specific filetypes + yaml = true, + }, }, }, -}, }) -- }}} --- require("telescope").load_extension("fzf") +-- extensions {{{ +add({ + source = 'nvim-telescope/telescope-fzf-native.nvim', + hooks = { + post_install = function(config) + vim.cmd("make -C " .. config.path) + end + }, +}) +require("telescope").load_extension("fzf") -- require("telescope").load_extension("aerial") +-- }}} -- Keymaps {{{ vim.keymap.set("n", "f", "Telescope oldfiles", { desc = "telescope find oldfiles" }) vim.keymap.set("n", "b", "Telescope buffers", { desc = "telescope find buffers" }) -vim.keymap.set("n", "//", "Telescope current_buffer_fuzzy_find", { desc = "telescope find in current buffer" }) +vim.keymap.set("n", "/", "Telescope current_buffer_fuzzy_find", { desc = "telescope find in current buffer" }) vim.keymap.set("n", "sf", "Telescope find_files", { desc = "telescope find files" }) vim.keymap.set( "n", @@ -457,12 +461,12 @@ end, { desc = "Search Directory" })-- }}} -- toggleterm {{{ add({ -source = "akinsho/toggleterm.nvim", -hooks = { post_checkout = function() end }, + source = "akinsho/toggleterm.nvim", + hooks = { post_checkout = function() end }, }) require("toggleterm").setup{ -persist_size = false, -direction = 'float', + persist_size = false, + direction = 'float', } vim.keymap.set({ "n", "t" }, "", function() vim.cmd("ToggleTerm direction=float") end, { desc = "terminal toggle floating term" }) @@ -476,6 +480,7 @@ add({ depends = { "rbgrouleff/bclose.vim" }, hooks = { post_checkout = function() end }, }) +vim.cmd('nunmap bd') --}}} -- Disabled: suda {{{ @@ -515,3 +520,97 @@ add { } vim.keymap.set("n", "z", ":TZAtaraxis") -- }}} +-- nvim-tree {{{ +add { + source = "nvim-tree/nvim-tree.lua", +} +-- config {{{ +require("nvim-tree").setup { + filters = { + dotfiles = false, + }, + disable_netrw = true, + hijack_netrw = true, + hijack_cursor = true, + hijack_unnamed_buffer_when_opening = false, + sync_root_with_cwd = true, + update_focused_file = { + enable = true, + update_root = false, + }, + view = { + adaptive_size = false, + side = "left", + width = 30, + preserve_window_proportions = true, + }, + git = { + enable = true, + ignore = true, + }, + filesystem_watchers = { + enable = true, + }, + actions = { + open_file = { + resize_window = true, + }, + }, + renderer = { + root_folder_label = false, + highlight_git = true, + highlight_opened_files = "none", + + indent_markers = { + enable = true, + }, + + icons = { + show = { + file = true, + folder = true, + folder_arrow = true, + git = true, + }, + + glyphs = { + default = "󰈚", + symlink = "", + folder = { + default = "", + empty = "", + empty_open = "", + open = "", + symlink = "", + symlink_open = "", + arrow_open = "", + arrow_closed = "", + }, + git = { + unstaged = "✗", + staged = "✓", + unmerged = "", + renamed = "➜", + untracked = "★", + deleted = "", + ignored = "◌", + }, + }, + }, + }, +} +-- }}} +vim.keymap.set( + "n", + "", + "NvimTreeToggle", + { desc = "nvimtree toggle window" } +) +vim.keymap.set( + "n", + "e", + "NvimTreeFocus", + { desc = "nvimtree focus window" } +) + +-- }}} -- cgit v1.2.3-70-g09d2