Skip to content

Instantly share code, notes, and snippets.

@pierodev0
Created April 22, 2025 10:34
Show Gist options
  • Save pierodev0/d2973a5c7aaa73b8e4d117602d34282f to your computer and use it in GitHub Desktop.
Save pierodev0/d2973a5c7aaa73b8e4d117602d34282f to your computer and use it in GitHub Desktop.
Oil.nvim dynamically remap h and l keys
-- Creamos un grupo de autocomandos para organizar mejor
-- Aplicar mapeos cuando se abre un buffer de oil
vim.api.nvim_create_autocmd("FileType", {
pattern = "oil",
callback = function()
local bufnr = vim.api.nvim_get_current_buf()
-- Establecer h para ir al directorio padre
vim.keymap.set("n", "h", function()
require("oil.actions").parent.callback()
end, { buffer = bufnr, nowait = true, desc = "Oil: Ir al directorio padre" })
-- Establecer l para seleccionar
vim.keymap.set("n", "l", function()
require("oil.actions").select.callback()
end, { buffer = bufnr, nowait = true, desc = "Oil: Seleccionar" })
end,
})
@pierodev0
Copy link
Author

pierodev0 commented Apr 22, 2025

This work with toggle gt from this question :

-- Create a global variable to control the toggle state
local toggle = false

vim.api.nvim_create_autocmd("FileType", {
	pattern = "oil",
	callback = function()
		local bufnr = vim.api.nvim_get_current_buf()

		local function set_oil_keymaps()
			vim.keymap.set("n", "h", function() require("oil.actions").parent.callback() end,
				{ buffer = bufnr, nowait = true, desc = "Oil: Go to parent directory" })
			vim.keymap.set("n", "l", function() require("oil.actions").select.callback() end,
				{ buffer = bufnr, nowait = true, desc = "Oil: Select" })

			-- Notification for Oil mode			
			vim.notify("Oil: File navigation mode (h = parent, l = select)")
		end

		local function set_normal_keymaps()
			vim.keymap.set("n", "h", "h", { buffer = bufnr, nowait = true, desc = "Normal: move cursor left" })
			vim.keymap.set("n", "l", "l", { buffer = bufnr, nowait = true, desc = "Normal: move cursor right" })

			-- Notification for Normal mode			
			vim.notify("Normal: Text navigation mode (h = left, l = right)")
		end

		local function toggle_keymaps()
			if toggle then
				set_oil_keymaps()
			else
				set_normal_keymaps()
			end
			toggle = not toggle
		end

		-- Set initial keymaps and show notification
		set_oil_keymaps()

		vim.keymap.set("n", "gt", toggle_keymaps, { buffer = bufnr, nowait = true, desc = "Toggle keymaps h/l in oil" })
	end,
})

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment