Super keymaps
This commit is contained in:
@@ -38,56 +38,66 @@ vim.keymap.set('n', '<C-S-D>', function()
|
||||
vim.cmd.normal 'v`x'
|
||||
end, { desc = 'Select surrounding treesitter node' })
|
||||
|
||||
function get_node_around(node, start_pos, end_pos)
|
||||
local range = { vim.treesitter.get_node_range(node) }
|
||||
if
|
||||
(range[1] == start_pos[1] and range[2] > start_pos[2])
|
||||
or (range[3] == end_pos[1] and range[4] < end_pos[2])
|
||||
or (range[1] > start_pos[1])
|
||||
or (range[3] < end_pos[1])
|
||||
then
|
||||
get_node_around(node:parent(), start_pos, end_pos)
|
||||
elseif range[3] == end_pos[2] and range[4] < end_pos[3] then
|
||||
get_node_around(node:parent(), start_pos, end_pos)
|
||||
else
|
||||
return node
|
||||
end
|
||||
end
|
||||
|
||||
vim.keymap.set('v', '<C-S-D>', function()
|
||||
local start_pos = vim.api.nvim_win_get_cursor(0)
|
||||
local end_pos = vim.fn.getpos "'>"
|
||||
end_pos = { end_pos[2], end_pos[3] }
|
||||
local node = vim.treesitter.get_node()
|
||||
local parent = get_node_around(node:parent(), start_pos, end_pos)
|
||||
if not parent then
|
||||
return
|
||||
local start = vim.api.nvim_win_get_cursor(0)
|
||||
local start_row, start_column
|
||||
if start[2] == 0 then
|
||||
start_row = start[1] - 1
|
||||
start_column = 0
|
||||
else
|
||||
start_row = start[1]
|
||||
start_column = start[2] - 1
|
||||
end
|
||||
local range = { vim.treesitter.get_node_range(parent) }
|
||||
vim.api.nvim_win_set_cursor(0, { start_row, start_column })
|
||||
local node = vim.treesitter.get_node {}
|
||||
local range = { vim.treesitter.get_node_range(node) }
|
||||
vim.api.nvim_win_set_cursor(0, { range[3] + 1, range[4] - 1 })
|
||||
vim.fn.setpos("'x", { 0, range[1] + 1, range[2] + 1, 0 })
|
||||
vim.cmd.normal 'i'
|
||||
vim.cmd.normal 'v`x'
|
||||
end, { desc = 'Select surrounding treesitter node' })
|
||||
|
||||
local swappable_nodes = { 'argument', 'array_element_initializer', 'simple_parameter', 'string', 'integer', 'member_call_expression', 'method_declaration' }
|
||||
|
||||
local function closest_swappable_node(node)
|
||||
while node and not vim.list_contains(swappable_nodes, node:type()) do
|
||||
node = node:parent()
|
||||
end
|
||||
return node
|
||||
end
|
||||
|
||||
vim.keymap.set({ 'n' }, '<C-S-h>', function()
|
||||
local node = vim.treesitter.get_node()
|
||||
local prev_node = node:prev_sibling()
|
||||
local node = closest_swappable_node(vim.treesitter.get_node())
|
||||
if not node then
|
||||
return
|
||||
end
|
||||
local prev_node = node:prev_named_sibling()
|
||||
while prev_node and not vim.list_contains(swappable_nodes, prev_node:type()) do
|
||||
prev_node = prev_node:prev_named_sibling()
|
||||
end
|
||||
if prev_node == nil then
|
||||
return
|
||||
end
|
||||
require('nvim-treesitter.ts_utils').swap_nodes(node, prev_node)
|
||||
require('nvim-treesitter.ts_utils').swap_nodes(node, prev_node, 0, true)
|
||||
end, { desc = 'Swap with node to the left' })
|
||||
vim.keymap.set({ 'n' }, '<C-S-l>', function()
|
||||
local node = vim.treesitter.get_node()
|
||||
local next_node = node:next_sibling()
|
||||
local node = closest_swappable_node(vim.treesitter.get_node())
|
||||
if not node then
|
||||
return
|
||||
end
|
||||
local next_node = node:next_named_sibling()
|
||||
while next_node and not vim.list_contains(swappable_nodes, next_node:type()) do
|
||||
next_node = next_node:next_named_sibling()
|
||||
end
|
||||
if next_node == nil then
|
||||
return
|
||||
end
|
||||
require('nvim-treesitter.ts_utils').swap_nodes(node, next_node)
|
||||
require('nvim-treesitter.ts_utils').swap_nodes(node, next_node, 0, true)
|
||||
end, { desc = 'Swap with node to the right' })
|
||||
-- vim.keymap.set('n', '<C-S-j>', '<C-w>J', { desc = 'Move window to the lower' })
|
||||
-- vim.keymap.set('n', '<C-S-k>', '<C-w>K', { desc = 'Move window to the upper' })
|
||||
vim.keymap.set('n', '<C-S-j>', 'ddp', { desc = 'Move line down' })
|
||||
vim.keymap.set('n', '<C-S-k>', 'ddkP', { desc = 'Move line up' })
|
||||
vim.keymap.set('v', '<C-S-j>', 'do<Esc>p`[v`]', { desc = 'Move selection down' })
|
||||
vim.keymap.set('v', '<C-S-k>', 'dkO<Esc>p`[v`]', { desc = 'Move selection up' })
|
||||
|
||||
-- Keybinds to make split navigation easier.
|
||||
-- Use CTRL+<hjkl> to switch between windows
|
||||
|
||||
Reference in New Issue
Block a user