[Fix] Better support for the Visual Line Mode

* [FIX] Better support for the Visual Line Mode

* [FIX] Removed VBlockMode + listen for ModeChanged now
This commit is contained in:
Marco 2024-02-24 13:18:06 +01:00 committed by GitHub
parent d3fdcd343f
commit 980751083b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 2 deletions

View file

@ -1,5 +1,20 @@
local visual_utils = {} local visual_utils = {}
-- Get all the lines from "from" to "to" and return them as a single string
-- If "from" and "to" are the same, return the line at "from"
local function get_whole_lines(from, to)
local lines = {}
if from == to then
table.insert(lines, vim.api.nvim_buf_get_lines(0, from - 1, from, false)[1])
else
for i = from, to do
table.insert(lines, vim.api.nvim_buf_get_lines(0, i - 1, i, false)[1])
end
end
return table.concat(lines, "\n")
end
function visual_utils.get_selected_text() function visual_utils.get_selected_text()
local start_pos = vim.fn.getpos("v") local start_pos = vim.fn.getpos("v")
local end_pos = vim.fn.getpos(".") local end_pos = vim.fn.getpos(".")
@ -10,6 +25,10 @@ function visual_utils.get_selected_text()
start_pos, end_pos = end_pos, start_pos start_pos, end_pos = end_pos, start_pos
end end
if vim.api.nvim_get_mode().mode == 'V' then
return get_whole_lines(start_pos[2], end_pos[2])
end
if start_pos[2] == end_pos[2] then if start_pos[2] == end_pos[2] then
return vim.api.nvim_buf_get_lines(0, start_pos[2] - 1, start_pos[2], false)[1]:sub(start_pos[3], end_pos[3] - 1) return vim.api.nvim_buf_get_lines(0, start_pos[2] - 1, start_pos[2], false)[1]:sub(start_pos[3], end_pos[3] - 1)
else else

View file

@ -12,9 +12,8 @@ end, {})
local validModes = { local validModes = {
["v"] = true, ["v"] = true,
["V"] = true, ["V"] = true,
["^V"] = true,
} }
vim.api.nvim_create_autocmd({ "CursorMoved" }, { vim.api.nvim_create_autocmd({ "CursorMoved", "ModeChanged" }, {
callback = function() callback = function()
local mode = vim.api.nvim_get_mode().mode local mode = vim.api.nvim_get_mode().mode