```lua
---@return string
function M.get_visual_selection()
local start_pos = vim.fn.getpos("'<")
local end_pos = vim.fn.getpos("'>")
local lines = vim.api.nvim_buf_get_lines(0, start_pos[2] - 1, end_pos[2], false)
if #lines == 1 then
lines[1] = lines[1]:sub(start_pos[3], end_pos[3])
else
lines[1] = lines[1]:sub(start_pos[3])
lines[#lines] = lines[#lines]:sub(1, end_pos[3])
end
return table.concat(lines, "\n")
end
```