fix: smart indentation was counting \t as a character.
The code now counts the amount of characters up to a \t, which we know is already aligned.
This commit is contained in:
@@ -38,14 +38,20 @@ Map('n', 'gr', vim.lsp.buf.references, { desc = "Go to the reference" })
|
|||||||
-- smart tabulation
|
-- smart tabulation
|
||||||
Map('i', '<tab>', function()
|
Map('i', '<tab>', function()
|
||||||
local _, col = unpack(vim.api.nvim_win_get_cursor(0)) -- get cursor position
|
local _, col = unpack(vim.api.nvim_win_get_cursor(0)) -- get cursor position
|
||||||
local isindent = vim.api.nvim_get_current_line():sub(1, col):match('^%s*$')
|
local ln = vim.api.nvim_get_current_line():sub(1, col)
|
||||||
|
local isindent = ln:match('^%s*$')
|
||||||
local tabexpnd = vim.bo.expandtab
|
local tabexpnd = vim.bo.expandtab
|
||||||
local tabwidth = vim.bo.shiftwidth > 0 and vim.bo.shiftwidth or vim.bo.tabstop
|
local tabwidth = vim.bo.shiftwidth > 0 and vim.bo.shiftwidth or vim.bo.tabstop
|
||||||
|
|
||||||
if not tabexpnd and isindent then
|
if not tabexpnd and isindent then
|
||||||
return '\t'
|
return '\t'
|
||||||
else
|
else -- Compute the amount of spaces needed for the line.
|
||||||
local spaces = tabwidth - col % tabwidth
|
local i = col
|
||||||
|
while i >= 1 do
|
||||||
|
if ln:sub(i, i) == '\t' then break end
|
||||||
|
i = i - 1
|
||||||
|
end
|
||||||
|
local spaces = tabwidth - (col - i) % tabwidth
|
||||||
return string.rep(' ', spaces == 0 and tabwidth or spaces)
|
return string.rep(' ', spaces == 0 and tabwidth or spaces)
|
||||||
end
|
end
|
||||||
end, { expr = true, desc = "smart tabulation" })
|
end, { expr = true, desc = "smart tabulation" })
|
||||||
|
|||||||
Reference in New Issue
Block a user