通过一个插件来了解Neovim的Winbar属性

开发 前端
neovim的插件目前几乎都是用lua进行编写的,lua使用起来不仅效率高,而且配置起来也非常的方便,此外,neovim也在不断地完善自己的api,用户开发起来变得非常轻松。

window bar

window bar 是显示在每个窗口的上面的,默认它是不显示的,你需要配置才可以。你可以把它看成和底部的状态栏类似的东西,只不过它显示在窗口顶部。

图片

通过:h winbar命令可以查看它的帮助文档。我们可以通过配置选项来配置winbar的显示内容。

配置的命令是vim.opt.winbar=配置内容。

代码上下文

winbar 可以显示任何内容,但是我们更多的时候是希望它显示一些有意义的内容,比如文件名和一些代码的函数名,属性信息等,此外,我们还可以显示文件的状态,比如文件是否被修改了。

图片

函数api介绍

  • get_winbar 函数用来显示当前代码的上下文信息
  • get_location 函数用来获取当前代码的上下文。
  • get_modified 用来显示文件名,检查文件是否修改,如果修改显示图标。
  • WinBarSeparator, WinBarContext, and WinBarFilename 是用来显示自定义的高亮。

在代码中我们使用nvim-navic插件来帮助我们获取代码的上下文更详细的信息。

高亮配置

为了更好地显示窗口样式,我们可以通过修改winbar提供的高亮组样式来修改winbar的样式。

图片

  • WinBar 用来配置当前窗口的样式
  • WinBarNC 用来配置非当前窗口样式。

主要代码

local M = {}

local colors = require "config.colors"
local navic = require "nvim-navic"
local utils = require "utils"
local icons = require "config.icons"

vim.api.nvim_set_hl(0, "WinBarSeparator", { fg = colors.grey })
vim.api.nvim_set_hl(0, "WinBarFilename", { fg = colors.green, bg = colors.grey })
vim.api.nvim_set_hl(0, "WinBarContext", { fg = colors.green, bg = colors.grey })

M.winbar_filetype_exclude = {
"help",
"startify",
"dashboard",
"packer",
"neogitstatus",
"NvimTree",
"Trouble",
"alpha",
"lir",
"Outline",
"spectre_panel",
"toggleterm",
}

local excludes = function()
if vim.tbl_contains(M.winbar_filetype_exclude, vim.bo.filetype) then
vim.opt_local.winbar = nil
return true
end
return false
end

local function get_modified()
if utils.get_buf_option "mod" then
local mod = icons.git.Mod
return "%#WinBarFilename#" .. mod .. " " .. "%t" .. "%*"
end
return "%#WinBarFilename#" .. "%t" .. "%*"
end

local function get_location()
local location = navic.get_location()
if not utils.is_empty(location) then
return "%#WinBarContext#" .. " " .. icons.ui.ChevronRight .. " " .. location .. "%*"
end
return ""
end

function M.get_winbar()
if excludes() then
return ""
end
if navic.is_available() then
return "%#WinBarSeparator#"
.. "%="
.. ""
.. "%*"
.. get_modified()
.. get_location()
.. "%#WinBarSeparator#"
.. ""
.. "%*"
else
return "%#WinBarSeparator#" .. "%=" .. "" .. "%*" .. get_modified() .. "%#WinBarSeparator#" .. "" .. "%*"
end
end

return M

总结

neovim的插件目前几乎都是用lua进行编写的,lua使用起来不仅效率高,而且配置起来也非常的方便,此外,neovim也在不断地完善自己的api,用户开发起来变得非常轻松。

责任编辑:武晓燕 来源: 程序那些事儿
相关推荐

2020-09-01 13:10:42

JavaScript开发 技巧

2022-10-21 13:14:41

lua插件neovim

2016-03-08 09:52:22

xcode插件开发

2020-06-23 10:03:33

版本控制项目

2024-07-19 10:31:15

2020-09-02 07:22:17

JavaScript插件框架

2011-10-19 09:30:23

jQuery

2020-11-25 08:13:33

CPU主板GPU

2023-12-19 16:39:18

CSS开发前端

2020-12-01 17:46:24

FossilGit

2009-07-29 09:58:38

民工通过CCNACCNA

2014-04-03 10:46:12

Dockermaven

2012-05-10 16:46:09

Visual Stud

2021-08-16 08:53:07

Go 插件系统

2012-11-19 11:07:42

IBMdw

2023-12-12 08:08:17

插件PRPulsar

2020-10-12 10:58:15

IDEA插件监听

2011-01-19 13:19:39

Thunderbird插件

2023-01-18 17:05:54

NeoVim编辑器

2014-11-12 10:26:25

Bootstrap
点赞
收藏

51CTO技术栈公众号