瀏覽代碼

feat(neovim): add `aerial.nvim`

Joe 4 月之前
父節點
當前提交
16c475dd5a
共有 1 個文件被更改,包括 72 次插入2 次删除
  1. 72 2
      .config/nvim/init.lua

+ 72 - 2
.config/nvim/init.lua

@@ -162,6 +162,7 @@ vim.pack.add({
     "https://github.com/nvim-treesitter/nvim-treesitter-context",
     "https://github.com/nvim-treesitter/nvim-treesitter-textobjects",
     "https://github.com/psliwka/vim-dirtytalk",
+    "https://github.com/stevearc/aerial.nvim",
     "https://github.com/tpope/vim-commentary"
 })
 
@@ -589,8 +590,12 @@ local function config_status_beast()
         {
             group = vim.api.nvim_create_augroup('StatusBeast',
                 { clear = true }),
-            callback =
-                require("status-beast").setup
+            callback = function (args)
+                if vim.bo[args.buf].filetype == "aerial" then
+                    return
+                end
+                require("status-beast").setup()
+            end
         })
     vim.diagnostic.config({
         virtual_lines = {
@@ -838,6 +843,70 @@ local function config_nvim_treesitter_context()
     end, { silent = true })
 end
 
+
+local function config_aerial()
+    require("aerial").setup({
+        backends = { "treesitter", "lsp" },
+        attach_mode = "global",
+        highlight_closest = true,
+        autojump = true,
+        layout = {
+            default_direction = "left",
+            width = 40,
+            placement = "window",
+            winopts = {
+                statuscolumn = ""
+            }
+        },
+        nerd_font = "auto",
+        icons = {
+            Array         = "[a]",
+            Boolean       = "[b]",
+            Class         = "[C]",
+            Constant      = "[const]",
+            Constructor   = "[Co]",
+            Enum          = "[E]",
+            EnumMember    = "[em]",
+            Event         = "[Ev]",
+            Field         = "[Fld]",
+            File          = "[File]",
+            Function      = "[F]",
+            Interface     = "[I]",
+            Key           = "[K]",
+            Method        = "[M]",
+            Module        = "[Mod]",
+            Namespace     = "[NS]",
+            Null          = "[-]",
+            Number        = "[n]",
+            Object        = "[o]",
+            Operator      = "[+]",
+            Package       = "[Pkg]",
+            Property      = "[P]",
+            String        = "[str]",
+            Struct        = "[S]",
+            TypeParameter = "[T]",
+            Variable      = "[V]",
+            Collapsed     = "▶",
+        },
+        on_attach = function(bufnr)
+            vim.keymap.set("n", "[[", "<cmd>AerialPrev<CR>", { buffer = bufnr })
+            vim.keymap.set("n", "]]", "<cmd>AerialNext<CR>", { buffer = bufnr })
+        end,
+    })
+    vim.keymap.set("n", "Sa", ":AerialOpen<CR>")
+    vim.keymap.set("n", "SA", ":AerialToggle!<CR>")
+    vim.api.nvim_create_autocmd({ "FileType", "BufEnter" }, {
+        group = vim.api.nvim_create_augroup("AerialConfig", { clear = true }),
+        callback = function(args)
+            for _, win in ipairs(vim.fn.getwininfo()) do
+                if (win.bufnr == args.buf) then
+                    vim.wo[win.winid].statuscolumn = ""
+                end
+            end
+        end,
+    })
+end
+
 local setup_plugins = function()
     config_jonathandarker()
     config_nvim_treesitter()
@@ -850,6 +919,7 @@ local setup_plugins = function()
     config_jxdash()
     config_nvim_treesitter_textobjects()
     config_nvim_treesitter_context()
+    config_aerial()
     config_telescope_file_browser()
     config_command_palette()
     config_maj_peg()