Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,8 @@ local ts_repeat_move = require "nvim-treesitter-textobjects.repeatable_move"

-- Repeat movement with ; and ,
-- ensure ; goes forward and , goes backward regardless of the last direction
vim.keymap.set({ "n", "x", "o" }, ";", ts_repeat_move.repeat_last_move_next, { expr = true })
vim.keymap.set({ "n", "x", "o" }, ",", ts_repeat_move.repeat_last_move_previous, { expr = true })
vim.keymap.set({ "n", "x", "o" }, ";", ts_repeat_move.repeat_last_move_next)
vim.keymap.set({ "n", "x", "o" }, ",", ts_repeat_move.repeat_last_move_previous)

-- vim way: ; goes to the direction you were moving.
-- vim.keymap.set({ "n", "x", "o" }, ";", ts_repeat_move.repeat_last_move)
Expand Down
7 changes: 3 additions & 4 deletions lua/nvim-treesitter-textobjects/repeatable_move.lua
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,17 @@ M.make_repeatable_move = function(move_fn)
end

---@param opts_extend TSTextObjects.MoveOpts?
---@return string?
M.repeat_last_move = function(opts_extend)
if not M.last_move then
return
end
local opts = vim.tbl_deep_extend('force', M.last_move.opts, opts_extend or {})
if M.last_move.func == 'f' or M.last_move.func == 't' then
return opts.forward and ';' or ','
vim.cmd([[normal! ]] .. vim.v.count1 .. (opts.forward and ';' or ','))
elseif M.last_move.func == 'F' or M.last_move.func == 'T' then
return opts.forward and ',' or ';'
vim.cmd([[normal! ]] .. vim.v.count1 .. (opts.forward and ',' or ';'))
else
return M.last_move.func(opts, unpack(M.last_move.additional_args))
M.last_move.func(opts, unpack(M.last_move.additional_args))
end
end

Expand Down
23 changes: 13 additions & 10 deletions scripts/minimal_init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ require('nvim-treesitter-textobjects').setup({
})

local select = require('nvim-treesitter-textobjects.select')

for _, mode in ipairs({ 'x', 'o' }) do
vim.keymap.set(mode, 'am', function()
select.select_textobject('@function.outer', 'textobjects')
Expand Down Expand Up @@ -125,6 +126,7 @@ end)

-- move
local move = require('nvim-treesitter-textobjects.move')

vim.keymap.set({ 'n', 'x', 'o' }, ']m', function()
move.goto_next_start('@function.outer')
end)
Expand Down Expand Up @@ -393,19 +395,20 @@ vim.keymap.set({ 'n', 'x', 'o' }, '[[E', function()
move.goto_previous_end('@scopename.inner')
end)

-- repeat
local ts_repeat_move = require('nvim-treesitter-textobjects.repeatable_move')

-- Repeat movement with ; and ,
-- ensure ; goes forward and , goes backward regardless of the last direction
-- vim.keymap.set({ "n", "x", "o" }, ";", ts_repeat_move.repeat_last_move_next, { expr = true })
-- vim.keymap.set({ "n", "x", "o" }, ",", ts_repeat_move.repeat_last_move_previous, { expr = true })

local repeat_move = require('nvim-treesitter-textobjects.repeatable_move')
vim.keymap.set({ 'n', 'x', 'o' }, ';', ts_repeat_move.repeat_last_move_next)
vim.keymap.set({ 'n', 'x', 'o' }, ',', ts_repeat_move.repeat_last_move_previous)

-- vim way: ; goes to the direction you were moving.
vim.keymap.set({ 'n', 'x', 'o' }, ';', repeat_move.repeat_last_move, { expr = true })
vim.keymap.set({ 'n', 'x', 'o' }, ',', repeat_move.repeat_last_move_opposite, { expr = true })
-- vim.keymap.set({ 'n', 'x', 'o' }, ';', ts_repeat_move.repeat_last_move)
-- vim.keymap.set({ 'n', 'x', 'o' }, ',', ts_repeat_move.repeat_last_move_opposite)

-- Optionally, make builtin f, F, t, T also repeatable with ; and ,
vim.keymap.set({ 'n', 'x', 'o' }, 'f', repeat_move.builtin_f_expr, { expr = true })
vim.keymap.set({ 'n', 'x', 'o' }, 'F', repeat_move.builtin_F_expr, { expr = true })
vim.keymap.set({ 'n', 'x', 'o' }, 't', repeat_move.builtin_t_expr, { expr = true })
vim.keymap.set({ 'n', 'x', 'o' }, 'T', repeat_move.builtin_T_expr, { expr = true })
vim.keymap.set({ 'n', 'x', 'o' }, 'f', ts_repeat_move.builtin_f_expr, { expr = true })
vim.keymap.set({ 'n', 'x', 'o' }, 'F', ts_repeat_move.builtin_F_expr, { expr = true })
vim.keymap.set({ 'n', 'x', 'o' }, 't', ts_repeat_move.builtin_t_expr, { expr = true })
vim.keymap.set({ 'n', 'x', 'o' }, 'T', ts_repeat_move.builtin_T_expr, { expr = true })
Loading