keybindings.lua
Branches > main > 46734e3 > files / nvim / lua / keybindings.lua
local keymap = vim.keymap.set
keymap("n", "<C-h>", "<C-w><C-h>")
keymap("n", "<C-l>", "<C-w><C-l>")
keymap("n", "<C-j>", "<C-w><C-j>")
keymap("n", "<C-k>", "<C-w><C-k>")
keymap("n", "U", "<C-r>")
keymap({"n", "v"}, "<C-left>", "b")
keymap({"n", "v"}, "<C-right>", "w")
keymap({"n", "v", "o"}, "H", "_")
keymap({"n", "v", "o"}, "L", "$")
keymap({"n", "v"}, "<Space>y", "\"+y")
keymap({"n", "v"}, "<Space>p", "\"+p")
keymap({"n", "v"}, "<Space>P", "\"+P")
keymap({"n", "v"}, "<Space>d", "\"+d")
keymap({"n", "v", "o"}, "J", "<C-d>")
keymap({"n", "v", "o"}, "K", "<C-u>")
keymap({"n", "v"}, "<C-d>", "<Nop>")
keymap({"n", "v"}, "<C-u>", "<Nop>")
keymap({"n", "v"}, "j", "gj")
keymap({"n", "v"}, "k", "gk")
keymap({"n", "v"}, "gj", "<cmd>later<cr>")
keymap({"n", "v"}, "gk", "<cmd>earlier<cr>")
keymap({"n", "v"}, "<Space>j", "J")
keymap("n", "<Esc>", "<CMD>noh<CR>")
keymap("n", "<Space>u", require("plugins.oil").open)
keymap("n", "<Space>f", function() require("fuzzy").fuzzy_find() end)
keymap({"n", "v", "o"}, ";", function()
local pos = require("jump").jump()
if pos then
vim.api.nvim_win_set_cursor(0, {pos.row, pos.col - 1})
end
return ""
end)
--- Either nil, "f/t", or "space"
--- TODO should probably be per-buffer :p
local last_n_type = nil
vim.api.nvim_create_autocmd("CmdlineLeave", {
callback = function()
local t = vim.fn.getcmdtype()
if t == "/" or t == "?" then
last_n_type = "search"
end
end})
for _, key in ipairs({"f", "F", "t", "T"}) do
vim.keymap.set({"n", "x", "o"}, key, function()
last_n_type = "f/t"
return key
end, {expr = true, noremap = true})
end
local function smart_n(reverse)
if last_n_type == nil then
return ""
elseif last_n_type == "f/t" then
local cs = vim.fn.getcharsearch()
if reverse then
return cs.forward == 1 and "," or ";"
else
return cs.forward == 1 and ";" or ","
end
elseif last_n_type == "search" then
if reverse then
return vim.v.searchforward == 1 and "N" or "n"
else
return vim.v.searchforward == 1 and "n" or "N"
end
end
end
vim.keymap.set({"n", "v", "o"}, "n", function() return smart_n(false) end, {expr = true, noremap = true})
vim.keymap.set({"n", "v", "o"}, "N", function() return smart_n(true) end, {expr = true, noremap = true})