From a86b98129c07ff6ac4e259d5e28499471f47e57c Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Sun, 7 Jul 2024 21:57:22 +0800 Subject: Update --- vim/init.vim | 2 +- vim/init/keymaps.vim | 8 +- vim/lua/chadrc.lua | 6 +- vim/lua/mappings.lua | 2 + vim/lua/plugins/init.lua | 589 ++++++++++++++++++++++++----------------------- 5 files changed, 316 insertions(+), 291 deletions(-) (limited to 'vim') diff --git a/vim/init.vim b/vim/init.vim index 7c481b8..f2c7bb3 100644 --- a/vim/init.vim +++ b/vim/init.vim @@ -34,7 +34,7 @@ source ~/helper/vim/init/special_highlight.vim if has('nvim') " For neovim - source ~/.config/nvim/lazy.lua + source ~/helper/vim/lazy.lua else " For vim source ~/helper/vim/init/plugins.vim diff --git a/vim/init/keymaps.vim b/vim/init/keymaps.vim index 7be91b5..3360a53 100644 --- a/vim/init/keymaps.vim +++ b/vim/init/keymaps.vim @@ -35,6 +35,9 @@ noremap k (v:count == 0 ? 'gk' : 'k') " Search for selected test vnoremap * y/\V=escape(@",'/\') +" set buflisted +noremap st :set + " Disable highlight when is pressed map :noh @@ -64,9 +67,10 @@ command! W execute 'w !sudo -S tee %' edit! " Enter to open file nnoremap gf nnoremap gF :e + +" Remap in Quickfix, Cmdwin Location list augroup vimrc_CRfix au! - " Quickfix, Location list, &c. remap to work as expected autocmd BufReadPost quickfix nnoremap autocmd CmdwinEnter * nnoremap autocmd CmdwinEnter * nnoremap @@ -283,7 +287,7 @@ function! s:SwitchDiffForGitHEAD() if &diff windo | if &buftype == "nofile" | bdelete | endif else - vert new | set buftype=nofile nobuflisted + vert new | set buftype=nofile nobuflisted read !git show HEAD:# 0d_ | diffthis | wincmd p | diffthis endif diff --git a/vim/lua/chadrc.lua b/vim/lua/chadrc.lua index 851b78b..e19b897 100644 --- a/vim/lua/chadrc.lua +++ b/vim/lua/chadrc.lua @@ -32,14 +32,17 @@ M.ui = { -- For tabufline if M.ui.tabufline.enabled then + vim.keymap.set("n", "", function() local bufnrs = vim.tbl_filter(function(b) return 1 == vim.fn.buflisted(b) end, vim.api.nvim_list_bufs()) if #bufnrs == 1 or #vim.fn.getwininfo() > 1 then vim.cmd("silent quit") else - require("nvchad.tabufline").close_buffer() + -- require("nvchad.tabufline").close_buffer() + vim.cmd("bdelete") end end, { desc = "buffer close" }) + for i = 1, 9, 1 do vim.keymap.set("n", string.format("", i), function() vim.api.nvim_set_current_buf(vim.t.bufs[i]) @@ -51,6 +54,7 @@ if M.ui.tabufline.enabled then vim.keymap.set("n", "", function() vim.cmd("tabnext") end) vim.keymap.set("n", "", function() require("nvchad.tabufline").next() end, { desc = "buffer goto next" }) vim.keymap.set("n", "", function() require("nvchad.tabufline").prev() end, { desc = "buffer goto prev" }) + end diff --git a/vim/lua/mappings.lua b/vim/lua/mappings.lua index d223431..d9a34d2 100644 --- a/vim/lua/mappings.lua +++ b/vim/lua/mappings.lua @@ -70,8 +70,10 @@ vim.keymap.set("n", "ss", 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 diff --git a/vim/lua/plugins/init.lua b/vim/lua/plugins/init.lua index 393378a..7cff057 100644 --- a/vim/lua/plugins/init.lua +++ b/vim/lua/plugins/init.lua @@ -1,309 +1,324 @@ return { - -- Detect tabstop and shiftwidth automatically - "tpope/vim-sleuth", + -- Detect tabstop and shiftwidth automatically + "tpope/vim-sleuth", - -- Use sudo in command mode - { - "lambdalisue/suda.vim", - cmd = { "SudaWrite" }, - }, + -- Use sudo in command mode + { + "lambdalisue/suda.vim", + cmd = { "SudaWrite" }, + }, - -- For focus mode - { - "Pocco81/true-zen.nvim", - lazy = false, - cmd = { "TZAtaraxis", "TZMinimalist" }, - }, + -- For focus mode + { + "Pocco81/true-zen.nvim", + lazy = false, + cmd = { "TZAtaraxis", "TZMinimalist" }, + }, - -- hop.nvim: For quick jump - { - "smoka7/hop.nvim", - lazy = false, - version = "*", - opts = { - keys = "etovxqpdygfblzhckisuran", - }, - config = function() - require("hop").setup() - end, - }, + -- hop.nvim: For quick jump + { + "smoka7/hop.nvim", + lazy = false, + version = "*", + opts = { + keys = "etovxqpdygfblzhckisuran", + }, + config = function() + require("hop").setup() + end, + }, - { - "stevearc/conform.nvim", - lazy = false, - -- event = 'BufWritePre', -- uncomment for format on save - config = function() - require("configs.conform") + { + "stevearc/conform.nvim", + lazy = false, + -- event = 'BufWritePre', -- uncomment for format on save + config = function() + require("configs.conform") - vim.keymap.set("n", "F", function() - require("conform").format({ lsp_fallback = true }) - end, { desc = "format files" }) - end, - }, + vim.keymap.set("n", "F", function() + require("conform").format({ lsp_fallback = true }) + end, { desc = "format files" }) + end, + }, - { - -- Add indentation guides even on blank lines - "lukas-reineke/indent-blankline.nvim", - -- See `:help ibl` - enabled = true, - main = "ibl", - opts = { - indent = { char = "┊" }, - whitespace = { highlight = { "Whitespace", "NonText" } }, - }, - }, + { + -- Add indentation guides even on blank lines + "lukas-reineke/indent-blankline.nvim", + -- See `:help ibl` + enabled = true, + main = "ibl", + opts = { + indent = { char = "┊" }, + whitespace = { highlight = { "Whitespace", "NonText" } }, + }, + }, - { - "lewis6991/gitsigns.nvim", - opts = function() - return { - -- See `:help gitsigns.txt` - signs = { - add = { text = "+" }, - change = { text = "~" }, - delete = { text = "_" }, - topdelete = { text = "‾" }, - changedelete = { text = "~" }, - }, - on_attach = function(bufnr) - local gs = require("gitsigns") - vim.keymap.set( - "n", - "gp", - gs.prev_hunk, - { buffer = bufnr, desc = "[G]o to [P]revious Hunk" } - ) - vim.keymap.set("n", "gn", gs.next_hunk, { buffer = bufnr, desc = "[G]o to [N]ext Hunk" }) - vim.keymap.set("n", "hp", gs.preview_hunk, { buffer = bufnr, desc = "[P]review [H]unk" }) - vim.keymap.set("n", "hd", gs.diffthis, { buffer = bufnr, desc = "[h]unk [d]iff" }) - vim.keymap.set("n", "hD", function() - gs.diffthis("~") - end, { buffer = bufnr, desc = "[h]unk [d]iff for ~" }) - -- vim.keymap.set("n", "gb", gs.blame_line{full=true}, { desc = "Git Blame" }) - vim.keymap.set("n", "gb", gs.toggle_current_line_blame, { desc = "Blame Line" }) - vim.keymap.set("v", "hr", gs.reset_hunk, { buffer = bufnr, desc = "[h]unk [r]eset" }) - end, - } - end, - }, + { + "lewis6991/gitsigns.nvim", + opts = function() + return { + -- See `:help gitsigns.txt` + signs = { + add = { text = "+" }, + change = { text = "~" }, + delete = { text = "_" }, + topdelete = { text = "‾" }, + changedelete = { text = "~" }, + }, + on_attach = function(bufnr) + local gs = require("gitsigns") + vim.keymap.set( + "n", + "gp", + gs.prev_hunk, + { buffer = bufnr, desc = "[G]o to [P]revious Hunk" } + ) + vim.keymap.set("n", "gn", gs.next_hunk, { buffer = bufnr, desc = "[G]o to [N]ext Hunk" }) + vim.keymap.set("n", "hp", gs.preview_hunk, { buffer = bufnr, desc = "[P]review [H]unk" }) + vim.keymap.set("n", "hd", gs.diffthis, { buffer = bufnr, desc = "[h]unk [d]iff" }) + vim.keymap.set("n", "hD", function() + gs.diffthis("~") + end, { buffer = bufnr, desc = "[h]unk [d]iff for ~" }) + -- vim.keymap.set("n", "gb", gs.blame_line{full=true}, { desc = "Git Blame" }) + vim.keymap.set("n", "gb", gs.toggle_current_line_blame, { desc = "Blame Line" }) + vim.keymap.set("v", "hr", gs.reset_hunk, { buffer = bufnr, desc = "[h]unk [r]eset" }) + end, + } + end, + }, - { - "iberianpig/tig-explorer.vim", - lazy = false, - dependencies = { - "rbgrouleff/bclose.vim", - }, - }, - { - "epwalsh/obsidian.nvim", - version = "*", -- recommended, use latest release instead of latest commit - lazy = true, - ft = "markdown", - -- Replace the above line with this if you only want to load obsidian.nvim for markdown files in your vault: - -- event = { - -- -- If you want to use the home shortcut '~' here you need to call 'vim.fn.expand'. - -- -- E.g. "BufReadPre " .. vim.fn.expand "~" .. "/my-vault/**.md" - -- "BufReadPre path/to/my-vault/**.md", - -- "BufNewFile path/to/my-vault/**.md", - -- }, - dependencies = { - -- Required. - "nvim-lua/plenary.nvim", - }, - opts = { - workspaces = { - { - name = "log", - path = "~/log", - }, - }, - completion = { - -- Set to false to disable completion. - nvim_cmp = true, - -- Trigger completion at 2 chars. - min_chars = 2, - }, - mapping = { - -- Toggle check-boxes. - ["oc"] = { - action = function() - return require("obsidian").util.toggle_checkbox() - end, - opts = { buffer = true }, - }, - -- Smart action depending on context, either follow link or toggle checkbox. - [""] = { - action = function() - return require("obsidian").util.smart_action() - end, - opts = { buffer = true, expr = true }, - }, - }, - -- see below for full list of options 👇 - note_id_func = function(title) - return title - -- Create note IDs in a Zettelkasten format with a timestamp and a suffix. - -- In this case a note with the title 'My new note' will be given an ID that looks - -- like '1657296016-my-new-note', and therefore the file name '1657296016-my-new-note.md' - -- local suffix = "" - -- title = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower() - -- if title ~= nil and title ~= "" then - -- -- If title is given, transform it into valid file name. - -- suffix = "-" .. title - -- else - -- -- If title is nil, just add 4 random uppercase letters to the suffix. - -- for _ = 1, 4 do - -- suffix = suffix .. string.char(math.random(65, 90)) - -- end - -- suffix = "-" .. title - -- end - -- return tostring(os.time()) .. suffix - end, - -- Optional, for templates (see below). - templates = { - folder = "templates", - date_format = "%Y-%m-%d", - time_format = "%H:%M", - -- A map for custom variables, the key should be the variable and the value a function - substitutions = {}, - }, - }, - config = function() - vim.keymap.set("n", "oo", ":Obsidian", { buffer = true }) - vim.keymap.set("n", "ot", ":ObsidianTags", { buffer = true }) - vim.keymap.set("n", "os", ":ObsidianSearch", { buffer = true }) - vim.keymap.set("n", "oq", ":ObsidianQuickSwitch", { buffer = true }) - vim.keymap.set("v", "on", ":ObsidianLinkNew", { buffer = true }) - vim.keymap.set("n", "ol", ":ObsidianLinks", { buffer = true }) - end, - }, + { + "iberianpig/tig-explorer.vim", + lazy = false, + dependencies = { + "rbgrouleff/bclose.vim", + }, + config = function() + vim.keymap.del("n", "bd") + end, + }, + { + "epwalsh/obsidian.nvim", + version = "*", -- recommended, use latest release instead of latest commit + lazy = true, + ft = "markdown", + -- Replace the above line with this if you only want to load obsidian.nvim for markdown files in your vault: + -- event = { + -- -- If you want to use the home shortcut '~' here you need to call 'vim.fn.expand'. + -- -- E.g. "BufReadPre " .. vim.fn.expand "~" .. "/my-vault/**.md" + -- "BufReadPre path/to/my-vault/**.md", + -- "BufNewFile path/to/my-vault/**.md", + -- }, + dependencies = { + -- Required. + "nvim-lua/plenary.nvim", + }, + opts = { + workspaces = { + { + name = "log", + path = "~/log", + }, + }, + completion = { + -- Set to false to disable completion. + nvim_cmp = true, + -- Trigger completion at 2 chars. + min_chars = 2, + }, + mapping = { + -- Toggle check-boxes. + ["oc"] = { + action = function() + return require("obsidian").util.toggle_checkbox() + end, + opts = { buffer = true }, + }, + -- Smart action depending on context, either follow link or toggle checkbox. + [""] = { + action = function() + return require("obsidian").util.smart_action() + end, + opts = { buffer = true, expr = true }, + }, + }, + -- see below for full list of options 👇 + note_id_func = function(title) + return title + -- Create note IDs in a Zettelkasten format with a timestamp and a suffix. + -- In this case a note with the title 'My new note' will be given an ID that looks + -- like '1657296016-my-new-note', and therefore the file name '1657296016-my-new-note.md' + -- local suffix = "" + -- title = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower() + -- if title ~= nil and title ~= "" then + -- -- If title is given, transform it into valid file name. + -- suffix = "-" .. title + -- else + -- -- If title is nil, just add 4 random uppercase letters to the suffix. + -- for _ = 1, 4 do + -- suffix = suffix .. string.char(math.random(65, 90)) + -- end + -- suffix = "-" .. title + -- end + -- return tostring(os.time()) .. suffix + end, + -- Optional, for templates (see below). + templates = { + folder = "templates", + date_format = "%Y-%m-%d", + time_format = "%H:%M", + -- A map for custom variables, the key should be the variable and the value a function + substitutions = {}, + }, + }, + config = function() + vim.keymap.set("n", "oo", ":Obsidian", { buffer = true }) + vim.keymap.set("n", "ot", ":ObsidianTags", { buffer = true }) + vim.keymap.set("n", "os", ":ObsidianSearch", { buffer = true }) + vim.keymap.set("n", "oq", ":ObsidianQuickSwitch", { buffer = true }) + vim.keymap.set("v", "on", ":ObsidianLinkNew", { buffer = true }) + vim.keymap.set("n", "ol", ":ObsidianLinks", { buffer = true }) + end, + }, - { - "iamcco/markdown-preview.nvim", - cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, - ft = { "markdown" }, - build = function() - vim.fn["mkdp#util#install"]() - end, - init = function() - vim.g.mkdp_preview_options = { - mkit = {}, - } - end, - }, + { + "iamcco/markdown-preview.nvim", + cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, + ft = { "markdown" }, + build = function() + vim.fn["mkdp#util#install"]() + end, + init = function() + vim.g.mkdp_preview_options = { + mkit = {}, + } + end, + }, - { - "nvim-telescope/telescope.nvim", - opts = function() - return require("configs.telescope") - end, - }, + { + "nvim-telescope/telescope.nvim", + opts = function() + return require("configs.telescope") + end, + }, - { - "nvim-telescope/telescope-fzf-native.nvim", - build = "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release", - }, + { + "nvim-telescope/telescope-fzf-native.nvim", + build = "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release", + }, - { - "nvim-treesitter/nvim-treesitter", - dependencies = { - "nvim-treesitter/nvim-treesitter-textobjects", - }, - opts = function() - return require("configs.treesitter") - end, - }, + { + "nvim-treesitter/nvim-treesitter", + dependencies = { + "nvim-treesitter/nvim-treesitter-textobjects", + }, + opts = function() + return require("configs.treesitter") + end, + }, - { - "stevearc/aerial.nvim", - opts = {}, - -- Optional dependencies - dependencies = { - "nvim-treesitter/nvim-treesitter", - "nvim-tree/nvim-web-devicons", - }, - }, + { + "stevearc/aerial.nvim", + opts = {}, + -- Optional dependencies + dependencies = { + "nvim-treesitter/nvim-treesitter", + "nvim-tree/nvim-web-devicons", + }, + }, - -- { - -- 'numToStr/Comment.nvim', - -- lazy = true, - -- opts = { - -- opleader = { - -- ---Line-comment keymap - -- line = '', - -- ---Block-comment keymap - -- block = 'gb', - -- }, - -- } - -- }, + -- { + -- 'numToStr/Comment.nvim', + -- lazy = true, + -- opts = { + -- opleader = { + -- ---Line-comment keymap + -- line = '', + -- ---Block-comment keymap + -- block = 'gb', + -- }, + -- } + -- }, - { - "neovim/nvim-lspconfig", - lazy = false, - config = function() - require("nvchad.configs.lspconfig").defaults() - require("configs.lspconfig") - end, - }, - -- - { - "williamboman/mason.nvim", - opts = { - automatically_installation = true, - ensure_installed = { - "vim-language-server", - "lua-language-server", - "css-lsp", - "html-lsp", - "prettier", - "stylua", - }, - }, - }, + { + "neovim/nvim-lspconfig", + lazy = false, + config = function() + require("nvchad.configs.lspconfig").defaults() + require("configs.lspconfig") + end, + }, + -- + { + "williamboman/mason.nvim", + opts = { + automatically_installation = true, + ensure_installed = { + "vim-language-server", + "lua-language-server", + "css-lsp", + "html-lsp", + "prettier", + "stylua", + }, + }, + }, - { - "numToStr/Comment.nvim", - lazy = false, - opts = { - toggler = { - line = "", - block = "gb", - }, - opleader = { - line = "", - block = "gb", - }, - }, - }, + { + "numToStr/Comment.nvim", + lazy = false, + opts = { + toggler = { + line = "", + block = "gb", + }, + opleader = { + line = "", + block = "gb", + }, + }, + }, - { - "tpope/vim-surround", - lazy = false, - }, + { + "tpope/vim-surround", + lazy = false, + }, - { - "nvim-tree/nvim-tree.lua", - opts = function() - local opts = require("nvchad.configs.nvimtree") - opts.on_attach = function(bufnr) - local api = require("nvim-tree.api") - api.config.mappings.default_on_attach(bufnr) - vim.keymap.set("n", "l", api.node.open.edit, { buffer = bufnr, nowait = true }) - vim.keymap.set("n", "h", api.tree.change_root_to_parent, { buffer = bufnr, nowait = true }) - end - return opts - end, - }, - -- { - -- 'junegunn/goyo.vim', - -- lazy = false, - -- }, + { + "nvim-tree/nvim-tree.lua", + opts = function() + local opts = require("nvchad.configs.nvimtree") + opts.on_attach = function(bufnr) + local api = require("nvim-tree.api") + api.config.mappings.default_on_attach(bufnr) + vim.keymap.set("n", "l", api.node.open.edit, { buffer = bufnr, nowait = true }) + vim.keymap.set("n", "h", api.tree.change_root_to_parent, { buffer = bufnr, nowait = true }) + end + return opts + end, + }, - -- { - -- 'akinsho/bufferline.nvim', - -- lazy = false, - -- version = "*", - -- dependencies = 'nvim-tree/nvim-web-devicons' - -- } + { + "folke/which-key.nvim", + opts = { + presets = { + windows = true, -- default bindings on + nav = true, -- misc bindings to work with windows + z = true, -- bindings for folds, spelling and others prefixed with z + g = true, -- bindings for prefixed with g + }, + }, + }, + -- { + -- 'junegunn/goyo.vim', + -- lazy = false, + -- }, + + -- { + -- 'akinsho/bufferline.nvim', + -- lazy = false, + -- version = "*", + -- dependencies = 'nvim-tree/nvim-web-devicons' + -- } } -- cgit v1.2.3-70-g09d2