20_[nvim0.5+从0单排]_lsp状态栏(lualine)标签页(bufferline)美化

视频与目录

项目
教程目录 https://blog.csdn.net/lxyoucan/article/details/120641546
B站视频 暂无

20_[nvim0.5+从0单排]_lsp状态栏标签页美化lualine bufferline

插件项目主页

以下两个插件配合完成。
https://github.com/nvim-lualine/lualine.nvim
https://github.com/akinsho/bufferline.nvim

为什么要更换状态栏与标签页插件?

主要原因如下:

  • 新的插件lua编写,性能更高
  • 新的插件支持lsp显示
  • 新的插件图标彩色显示

卸载vim-airline

修改~/.config/nvim/lua/plugins.lua文件,把以下内部删除或注释。
use {
“vim-airline/vim-airline”,
requires = {
“vim-airline/vim-airline-themes”,
–综合图标支持such vim-airline lightline, vim-startify
“ryanoasis/vim-devicons”
}
}

修改~/.config/nvim/init.vim文件,删除或注释以下一行。

source ~/.config/nvim/after/plugin/airline.rc.vim

删除以下配置文件 :

~/.config/nvim/after/plugin/airline.rc.vim

执行下以命令。

:PackerClean

插件安装

这里以packer为例,packer插件管理器安装方法:
修改~/.config/nvim/lua/plugins.lua文件,并增加如下内容:

     --状态栏插件
      use {
    
    
        "nvim-lualine/lualine.nvim",
        requires = {
    
    "kyazdani42/nvim-web-devicons", opt = true}
      }
      -- bufferline 显示标签页,与lualine配合使用
      use "akinsho/bufferline.nvim"

:wq退出重新打开nvim后,执行:PackerInstall 安装。

插件配置

~/.config/nvim/after/plugin/lualine.lua

内容如下:

local status, lualine = pcall(require, "lualine")
if (not status) then
  return
end

lualine.setup {
    
    
  options = {
    
    
    icons_enabled = true,
    theme = "auto",
    component_separators = {
    
    left = "", right = ""},
    section_separators = {
    
    left = "", right = ""},
    disabled_filetypes = {
    
    },
    always_divide_middle = true
  },
  sections = {
    
    
    lualine_a = {
    
    "mode"},
    lualine_b = {
    
    
      "branch",
      "diff"
      --{"diagnostics", sources = {"nvim_lsp"}}
    },
    lualine_c = {
    
    "filename"},
    lualine_x = {
    
    
      {
    
    "diagnostics", sources = {
    
    "nvim_lsp"}, symbols = {
    
    error = " ", warn = " ", info = " ", hint = " "}},
      "encoding",
      "fileformat",
      "filetype"
    },
    lualine_y = {
    
    "progress"},
    lualine_z = {
    
    "location"}
  },
  inactive_sections = {
    
    
    lualine_a = {
    
    },
    lualine_b = {
    
    },
    lualine_c = {
    
    "filename"},
    lualine_x = {
    
    "location"},
    lualine_y = {
    
    },
    lualine_z = {
    
    }
  },
  tabline = {
    
    },
  extensions = {
    
    }
}

配置文件如下:

~/.config/nvim/after/plugin/bufferline.lua

全部内容:

local status, bufferline = pcall(require, "bufferline")
if (not status) then
  return
end

vim.opt.termguicolors = true
bufferline.setup {
    
    
  options = {
    
    
    --numbers = "ordinal" | "buffer_id" | "both" | function({ ordinal, id, lower, raise }): string,
    --numbers = "both",
    --- @deprecated, please specify numbers as a function to customize the styling
    --number_style = "superscript" | "subscript" | "" | { "none", "subscript" }, -- buffer_id at index 1, ordinal at index 2
    --number_style = "none",
    close_command = "bdelete! %d", -- can be a string | function, see "Mouse actions"
    right_mouse_command = "bdelete! %d", -- can be a string | function, see "Mouse actions"
    left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions"
    middle_mouse_command = nil, -- can be a string | function, see "Mouse actions"
    -- NOTE: this plugin is designed with this icon in mind,
    -- and so changing this is NOT recommended, this is intended
    -- as an escape hatch for people who cannot bear it for whatever reason
    indicator_icon = "",
    buffer_close_icon = "",
    modified_icon = "●",
    close_icon = "",
    left_trunc_marker = "",
    right_trunc_marker = "",
    --- name_formatter can be used to change the buffer's label in the bufferline.
    --- Please note some names can/will break the
    --- bufferline so use this at your discretion knowing that it has
    --- some limitations that will *NOT* be fixed.
    name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr"
      -- remove extension from markdown files for example
      if buf.name:match("%.md") then
        return vim.fn.fnamemodify(buf.name, ":t:r")
      end
    end,
    max_name_length = 15,
    max_prefix_length = 12, -- prefix used when a buffer is de-duplicated
    tab_size = 15,
    --diagnostics = false | "nvim_lsp" | "coc",
    diagnostics = "nvim_lsp",
    diagnostics_update_in_insert = false,
    --[[diagnostics_indicator = function(count, level, diagnostics_dict, context)
      return "(" .. count .. ")"
    end,]]
    -- rest of config ...

    --- count is an integer representing total count of errors
    --- level is a string "error" | "warning"
    --- diagnostics_dict is a dictionary from error level ("error", "warning" or "info")to number of errors for each level.
    --- this should return a string
    --- Don't get too fancy as this function will be executed a lot
    diagnostics_indicator = function(count, level, diagnostics_dict, context)
      local icon = level:match("error") and " " or " "
      return " " .. icon .. count
    end,
    -- NOTE: this will be called a lot so don't do any heavy processing here
    custom_filter = function(buf_number)
      --如果是defx则隐藏
      local finded, _ = string.find(vim.bo[buf_number].filetype, "defx")
      if finded ~= nil then
        return false
      end
      return true
    end,
    --offsets = {
    
    {filetype = "NvimTree", text = "File Explorer" | function , text_align = "left" | "center" | "right"}},
    --show_buffer_icons = true | false, -- disable filetype icons for buffers
    show_buffer_icons = true, -- disable filetype icons for buffers
    --show_buffer_close_icons = true | false,
    show_buffer_close_icons = false,
    --show_close_icon = true | false,
    show_close_icon = false,
    --show_tab_indicators = true | false,
    show_tab_indicators = true,
    persist_buffer_sort = true, -- whether or not custom sorted buffers should persist
    -- can also be a table containing 2 custom separators
    -- [focused and unfocused]. eg: { '|', '|' }
    --separator_style = "slant" | "thick" | "thin" | {"any", "any"},
    separator_style = "thin",
    --enforce_regular_tabs = false | true,
    enforce_regular_tabs = false,
    --always_show_bufferline = true | false,
    always_show_bufferline = true
    --[[sort_by = "id" | "extension" | "relative_directory" | "directory" | "tabs" | function(buffer_a, buffer_b)
        -- add custom logic
        return buffer_a.modified > buffer_b.modified
      end]]
  }
}

--按键映射
--nnoremap <silent> gb :BufferLinePick<CR>
vim.api.nvim_set_keymap("n", "gb", "<Cmd>BufferLinePick<CR>", {
    
    noremap = true, silent = true})

vim.api.nvim_set_keymap("n", "<leader>1", "<Cmd>BufferLineGoToBuffer 1<CR>", {
    
    noremap = true, silent = true})
vim.api.nvim_set_keymap("n", "<leader>2", "<Cmd>BufferLineGoToBuffer 2<CR>", {
    
    noremap = true, silent = true})
vim.api.nvim_set_keymap("n", "<leader>3", "<Cmd>BufferLineGoToBuffer 3<CR>", {
    
    noremap = true, silent = true})
vim.api.nvim_set_keymap("n", "<leader>4", "<Cmd>BufferLineGoToBuffer 4<CR>", {
    
    noremap = true, silent = true})
vim.api.nvim_set_keymap("n", "<leader>5", "<Cmd>BufferLineGoToBuffer 5<CR>", {
    
    noremap = true, silent = true})
vim.api.nvim_set_keymap("n", "<leader>6", "<Cmd>BufferLineGoToBuffer 6<CR>", {
    
    noremap = true, silent = true})
vim.api.nvim_set_keymap("n", "<leader>7", "<Cmd>BufferLineGoToBuffer 7<CR>", {
    
    noremap = true, silent = true})
vim.api.nvim_set_keymap("n", "<leader>8", "<Cmd>BufferLineGoToBuffer 8<CR>", {
    
    noremap = true, silent = true})
vim.api.nvim_set_keymap("n", "<leader>9", "<Cmd>BufferLineGoToBuffer 9<CR>", {
    
    noremap = true, silent = true})


教程结束,感谢观看!

猜你喜欢

转载自blog.csdn.net/lxyoucan/article/details/121449307