neovim下window的快捷切换
在使用emacs的时候,喜欢加插件window-numbering。
这样在分屏之后的emacs里,通过配置快捷键leader+w+number 跳转到对应的windows,
而且该软件会在对应底部显示数字提示,非常方便。
另外:为什么不用快捷键leader+number,哈哈,因为留给了更频繁的bufer切换。
那么在neovim下面有对应的吗?
之前一直用c+w+方向键切换window,但是还是想着统一下快捷键,找了一圈没找到(其实也没认真找),那就自己实现一个呗。
需求
- 底部栏显示数字,知道当前window是对应数字几
- 可以设置快捷键leader+w+number 跳转到对应的windows
需要插件lualine.nvim
底部窗口数字显示在lualine插件上。
在针对lualine.nvim的自己配置文件上增加代码:
local function yuwindow()
local windows = vim.api.nvim_list_wins()
local filename = vim.fn.expand("%:p")
for i, win_handle in ipairs(windows) do
local b = vim.api.nvim_win_get_buf(win_handle)
local name = vim.api.nvim_buf_get_name(b)
if name == filename then
return "w["..i.."]"
end
end
return "no"
end
--省略
--当前的窗口下sections不做配置修改,因为没必要自己跳自己。
--在非选中的窗口下设置inactive_sections
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = { "filename", yuwindow },
lualine_x = { "location" },
lualine_y = {},
lualine_z = {},
},
-- 增加了yuwindow
窗口切换实现
直接上代码,对应快捷键配置在底部:
local M = {}
M.change_window = function(type)
local windows = vim.api.nvim_list_wins()
local win_handle
if #windows >= type then
win_handle = windows[type]
else
vim.notify("no window")
return
end
vim.api.nvim_set_current_win(win_handle)
vim.api.nvim_win_set_cursor(win_handle, { 1, 0 })
end
vim.keymap.set("n", "<leader>w1", "<Cmd>lua require 'yuyu.config.yuwindow'.change_window(1)<cr>", { desc = "open window1" })
vim.keymap.set("n", "<leader>w2", "<Cmd>lua require 'yuyu.config.yuwindow'.change_window(2)<cr>", { desc = "open window2" })
vim.keymap.set("n", "<leader>w3", "<Cmd>lua require 'yuyu.config.yuwindow'.change_window(3)<cr>", { desc = "open window3" })
vim.keymap.set("n", "<leader>w4", "<Cmd>lua require 'yuyu.config.yuwindow'.change_window(4)<cr>", { desc = "open window4" })
return M
里面的require 'yuyu.config.yuwindow’按实际路径替换。
结束
这样就ok了,可以按自己喜欢的高效跳转了。 但是有一个小问题,如果两个window打开的都是同一个文件,会导致无法跳转,因为代码是根据buf的名字对应window的,但是我觉得还ok,先分享了。