From 82ed7d4113c474f309ebeb5133873ccf0a2bcda2 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Sun, 21 Jul 2024 18:49:31 +0800 Subject: Update --- vim/mini.lua | 790 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 400 insertions(+), 390 deletions(-) (limited to 'vim/mini.lua') diff --git a/vim/mini.lua b/vim/mini.lua index 9f9c803..7b44fc0 100644 --- a/vim/mini.lua +++ b/vim/mini.lua @@ -1,10 +1,395 @@ -- vim: sw=2 foldmethod=marker foldmarker={{{,}}} -- Ref: https://github.com/echasnovski/mini.nvim --- TODO +-- https://lazy.folke.io/spec + +-- Install Lazy {{{ +-- Bootstrap lazy.nvim +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) +end +vim.opt.rtp:prepend(lazypath) +-- }}} +require("lazy").setup ({ + "tpope/vim-sleuth", + -- bufferline {{{ + { + "akinsho/bufferline.nvim", + dependencies = { + 'nvim-tree/nvim-web-devicons', -- OPTIONAL: for file icons + "tiagovla/scope.nvim", + }, + config = function() + require("bufferline").setup{ + options = { + tab_size = 14, + separator_style = { '', '' }, + themable = true, + buffer_close_icon = '', + close_icon = '', + groups = { + items = { + require('bufferline.groups').builtin.pinned:with({ icon = "󰐃" }) + } + } + }, + } + require("scope").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) + end, + -- }}} + }, + -- }}} + -- conform {{{ + { + "stevearc/conform.nvim", + opts = { + formatters_by_ft = { + lua = { "stylua" }, + }, + }, + config = function(_, opts) + require("conform").setup(opts) + end, + }, + -- }}} + -- Telescope {{{ + { + "nvim-telescope/telescope-fzf-native.nvim", + build = "make", + }, + { + "nvim-telescope/telescope.nvim", + lazy = false, + dependencies = { + 'nvim-lua/plenary.nvim', + "nvim-telescope/telescope-fzf-native.nvim", + }, + config = function() + -- extensions {{{ + require("telescope").load_extension("fzf") + -- require("telescope").load_extension("aerial") + -- }}} + -- 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, + }, + }, + layout_config = { + horizontal = { + prompt_position = "bottom", + }, + 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", + }, + 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" + }, + 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, + }, + }, + }, + }) + -- }}} + -- 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", "sf", "Telescope find_files", { desc = "telescope find files" }) + vim.keymap.set( + "n", + "sF", + "Telescope find_files follow=true no_ignore=true hidden=true", + { desc = "telescope find all files" } + ) + vim.keymap.set("n", "sg", "Telescope live_grep", { desc = "telescope live grep" }) + vim.keymap.set("n", "gf", "Telescope git_files", { desc = "telescope git files" }) + vim.keymap.set("n", "sH", "Telescope help_tags", { desc = "telescope help page" }) + vim.keymap.set("n", "sm", "Telescope marks", { desc = "telescope marks" }) + vim.keymap.set("n", "sj", "Telescope jumplist", { desc = "telescope marks" }) + vim.keymap.set("n", "tt", "Telescope", { desc = "telescope help page" }) + vim.keymap.set("n", "sk", "Telescope keymaps", { desc = "telescope keymaps" }) + vim.keymap.set("n", "pt", "Telescope terms", { desc = "telescope pick hidden term" }) + + vim.keymap.set("n", "ss", function() + local current_filetype = vim.bo.filetype + local cwd = os.getenv("HOME") .. "/snippets" + require("telescope.builtin").find_files({ + prompt_title = "Press to edit a snippet", + default_text = current_filetype == "" and "" or current_filetype .. "_", + cwd = cwd, + attach_mappings = function(prompt_bufnr, map) + local get_prompt_or_entry = function() + local file_list = require("telescope.actions.state").get_selected_entry() + if file_list then + return file_list[1] + else + local current_picker = require("telescope.actions.state").get_current_picker(prompt_bufnr) + return current_picker:_get_prompt() + end + end + + local edit_snippet = function() + local file = get_prompt_or_entry() + require("telescope.actions").close(prompt_bufnr) + local prefix_filetype = string.match(file, "([^_]+)") + vim.cmd(":vs") + vim.cmd(":e " .. cwd .. "/" .. file) + vim.bo.filetype = prefix_filetype + vim.bo.bufhidden = "wipe" + vim.cmd("set filetype?") + end + + local insert_selected_snippet = function() + local file = get_prompt_or_entry() + local path = cwd .. "/" .. file + if vim.fn.filereadable(path) ~= 0 then + local snippet_content = vim.fn.readfile(path) + require("telescope.actions").close(prompt_bufnr) + vim.fn.setreg('"', snippet_content) + print("Snippet saved to register") + else + edit_snippet() + end + end + + map("i", "", insert_selected_snippet) + map("i", "", edit_snippet) + map("n", "", insert_selected_snippet) + + return true + end, + }) + end, { desc = "[S]earch [S]nippets" }) + + vim.keymap.set("n", "sd", function() + require("telescope.builtin").oldfiles({ + prompt_title = "CD to", + attach_mappings = function(prompt_bufnr, map) + local cd_prompt = function() + local file = require("telescope.actions.state").get_selected_entry()[1] + local path = string.match(file, "(.*[/\\])") + require("telescope.actions").close(prompt_bufnr) + vim.api.nvim_feedkeys(":cd " .. path, "n", true) + end + + map("i", "", cd_prompt) + map("n", "", cd_prompt) + + return true + end, + }) + end, { desc = "Search Directory" })-- }}} + end, + }, + -- }}} + -- nvim-tree {{{ + { + "nvim-tree/nvim-tree.lua", + config = function() + -- 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 = "◌", + }, + }, + }, + }, + } + -- }}} + -- keymaps {{{ + vim.keymap.set( + "n", + "", + "NvimTreeToggle", + { desc = "nvimtree toggle window" } + ) + vim.keymap.set( + "n", + "e", + "NvimTreeFocus", + { desc = "nvimtree focus window" } + ) + -- }}} + end, + }, + -- }}} + -- which-key {{{ + { + "folke/which-key.nvim", + lazy = false, + config = function() + require('which-key').setup { + defaults = { + win = { + -- don't allow the popup to overlap with the cursor + no_overlap = false, + -- width = 1, + height = { min = 10, max = 25 }, + -- col = 0, + -- row = math.huge, + -- border = "none", + padding = { 1, 2 }, -- extra window padding [top/bottom, right/left] + title = true, + title_pos = "center", + zindex = 1000, + -- Additional vim.wo and vim.bo options + bo = {}, + wo = { + -- winblend = 10, -- value between 0-100 0 for fully opaque and 100 for fully transparent + }, + }, + } + } + end, + }, + -- }}} + -- Tig {{{ + { + "iberianpig/tig-explorer.vim", + dependencies = { "rbgrouleff/bclose.vim" }, + config = function() + vim.cmd('nunmap bd') + end, + }, + --}}} + -- toggleterm {{{ + { + "akinsho/toggleterm.nvim", + config = function() + require("toggleterm").setup { + persist_size = false, + direction = 'float', + } --- Install mini.nvim {{{ + vim.keymap.set({ "n", "t" }, "", function() vim.cmd("ToggleTerm direction=float") end, { desc = "terminal toggle floating term" }) + vim.keymap.set({ "n", "t" }, "", function() vim.cmd("ToggleTerm direction=horizontal") end, { desc = "terminal toggle floating term" }) + end, + }, + --}}} +}) +-- Install mini.nvim {{{ -- Put this at the top of 'init.lua' local path_package = vim.fn.stdpath('data') .. '/site' vim.o.packpath = path_package @@ -67,7 +452,7 @@ require('mini.base16').setup({ -- Integers, Boolean, Constants, XML Attributes, Markup Link Url base09 = "#ef9062", -- Classes, Markup Bold, Search Text Background - base0A = "#efca84", + base0A = "#a6e22e", -- Strings, Inherited Class, Markup Code, Diff Inserted base0B = "#e5c463", -- Support, Regular Expressions, Escape Characters, Markup Quotes @@ -79,14 +464,21 @@ require('mini.base16').setup({ -- Deprecated, Opening/Closing Embedded Language Tags, e.g. base0F = "#f9f8f5", }, - use_cterm = true, + use_cterm = false, }) +-- Override settings for search +vim.cmd('hi Search guibg=#e5c07b') + -- Resume terminal color for i = 1, 15, 1 do vim.cmd("let terminal_color_"..i.." = ''") end +-- Override settings for bufferline +vim.cmd('hi BufferLineTabSelected guibg=#f85e84') +vim.cmd('hi BufferLineTab guibg=Gray') + --}}} -- mini.icons {{{ require('mini.icons').setup({ @@ -180,9 +572,9 @@ vim.keymap.set( 'n', '\\m', function() require('mini.map').toggle() end, { desc -- mini.visits {{{ require('mini.visits').setup() vim.keymap.set( 'n', 'li', function() - MiniVisits.list_paths() - end, - { buffer = bufnr, desc = '' } + MiniVisits.list_paths() +end, +{ buffer = bufnr, desc = '' } ) -- }}} -- mini.completion {{{ @@ -288,399 +680,17 @@ require('mini.pairs').setup() -- }, -- -- }}} -- -- mini.bufremote {{{ -add('echasnovski/mini.bufremove') -vim.g.bufremove_disable = true +-- require('mini.bufremove') --}}} -- -- mini.animate --{{{ --- add('echasnovski/mini.animate') -- require("mini.animate").setup() -- -- }}} -- -- suda {{{ -- add { source = "lambdalisue/suda.vim" } -- }}} --- -- nvchad {{{ --- add { --- source = "Nvchad/base46" --- } --- add { --- source = "Nvchad/ui" --- } --- add { --- source = "NvChad/nvim-colorizer.lua" --- } --- require("colorizer").setup(opts) --- --- -- execute colorizer as soon as possible --- vim.defer_fn(function() --- require("colorizer").attach_to_buffer(0) --- end, 0) --- --- require('base46') --- require('nvchad') --- }}} --- Telescope {{{ -add({ - source = "nvim-telescope/telescope.nvim", - depends = { - 'nvim-lua/plenary.nvim', - }, - hooks = { post_checkout = function() 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, - }, - }, - layout_config = { - horizontal = { - prompt_position = "bottom", - }, - 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", - }, - 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" - }, - 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 {{{ -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", "sf", "Telescope find_files", { desc = "telescope find files" }) -vim.keymap.set( -"n", -"sF", -"Telescope find_files follow=true no_ignore=true hidden=true", -{ desc = "telescope find all files" } -) -vim.keymap.set("n", "sg", "Telescope live_grep", { desc = "telescope live grep" }) -vim.keymap.set("n", "gf", "Telescope git_files", { desc = "telescope git files" }) -vim.keymap.set("n", "sH", "Telescope help_tags", { desc = "telescope help page" }) -vim.keymap.set("n", "sm", "Telescope marks", { desc = "telescope marks" }) -vim.keymap.set("n", "sj", "Telescope jumplist", { desc = "telescope marks" }) -vim.keymap.set("n", "tt", "Telescope", { desc = "telescope help page" }) -vim.keymap.set("n", "sk", "Telescope keymaps", { desc = "telescope keymaps" }) -vim.keymap.set("n", "pt", "Telescope terms", { desc = "telescope pick hidden term" }) - -vim.keymap.set("n", "ss", function() - local current_filetype = vim.bo.filetype - local cwd = os.getenv("HOME") .. "/snippets" - require("telescope.builtin").find_files({ - prompt_title = "Press to edit a snippet", - default_text = current_filetype == "" and "" or current_filetype .. "_", - cwd = cwd, - attach_mappings = function(prompt_bufnr, map) - local get_prompt_or_entry = function() - local file_list = require("telescope.actions.state").get_selected_entry() - if file_list then - return file_list[1] - else - local current_picker = require("telescope.actions.state").get_current_picker(prompt_bufnr) - return current_picker:_get_prompt() - end - end - - local edit_snippet = function() - local file = get_prompt_or_entry() - require("telescope.actions").close(prompt_bufnr) - local prefix_filetype = string.match(file, "([^_]+)") - vim.cmd(":vs") - vim.cmd(":e " .. cwd .. "/" .. file) - vim.bo.filetype = prefix_filetype - vim.bo.bufhidden = "wipe" - vim.cmd("set filetype?") - end - - local insert_selected_snippet = function() - local file = get_prompt_or_entry() - local path = cwd .. "/" .. file - if vim.fn.filereadable(path) ~= 0 then - local snippet_content = vim.fn.readfile(path) - require("telescope.actions").close(prompt_bufnr) - vim.fn.setreg('"', snippet_content) - print("Snippet saved to register") - else - edit_snippet() - end - end - - map("i", "", insert_selected_snippet) - map("i", "", edit_snippet) - map("n", "", insert_selected_snippet) - - return true - end, - }) -end, { desc = "[S]earch [S]nippets" }) - -vim.keymap.set("n", "sd", function() - require("telescope.builtin").oldfiles({ - prompt_title = "CD to", - attach_mappings = function(prompt_bufnr, map) - local cd_prompt = function() - local file = require("telescope.actions.state").get_selected_entry()[1] - local path = string.match(file, "(.*[/\\])") - require("telescope.actions").close(prompt_bufnr) - vim.api.nvim_feedkeys(":cd " .. path, "n", true) - end - - map("i", "", cd_prompt) - map("n", "", cd_prompt) - - return true - end, - }) -end, { desc = "Search Directory" })-- }}} - --- }}} --- toggleterm {{{ - -add({ - source = "akinsho/toggleterm.nvim", - hooks = { post_checkout = function() end }, -}) -require("toggleterm").setup{ - persist_size = false, - direction = 'float', -} - -vim.keymap.set({ "n", "t" }, "", function() vim.cmd("ToggleTerm direction=float") end, { desc = "terminal toggle floating term" }) -vim.keymap.set({ "n", "t" }, "", function() vim.cmd("ToggleTerm direction=horizontal") end, { desc = "terminal toggle floating term" }) - ---}}} --- Tig {{{ - -add({ - source = "iberianpig/tig-explorer.vim", - depends = { "rbgrouleff/bclose.vim" }, - hooks = { post_checkout = function() end }, -}) -vim.cmd('nunmap bd') - ---}}} --- which-key {{{ -add({ - source = "folke/which-key.nvim", - checkout = "stable", -}) -require('which-key').setup { - defaults = { - win = { - -- don't allow the popup to overlap with the cursor - no_overlap = false, - -- width = 1, - height = { min = 10, max = 25 }, - -- col = 0, - -- row = math.huge, - -- border = "none", - padding = { 1, 2 }, -- extra window padding [top/bottom, right/left] - title = true, - title_pos = "center", - zindex = 1000, - -- Additional vim.wo and vim.bo options - bo = {}, - wo = { - -- winblend = 10, -- value between 0-100 0 for fully opaque and 100 for fully transparent - }, - }, - } -} --- }}} -- true-zen {{{ add { source = "Pocco81/true-zen.nvim", } 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" } -) - --- }}} --- bufferline {{{ -add { - source = "akinsho/bufferline.nvim", - depends = { - 'nvim-tree/nvim-web-devicons', -- OPTIONAL: for file icons - }, -} -require("bufferline").setup{ - options = { - themable = true, - buffer_close_icon = '', - close_icon = '', - groups = { - items = { - require('bufferline.groups').builtin.pinned:with({ icon = "󰐃" }) - } - } - }, -} - --- Since mini.base16 override highlight for bufferline --- Set it directly -vim.cmd('hi BufferLineTabSelected guibg=#f85e84') -vim.cmd('hi BufferLineTab guibg=Gray') - --- 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) --- }}} ---}}} -- cgit v1.2.3-70-g09d2