nvim: add function to insert/update modeline

This commit is contained in:
tastytea 2022-08-09 13:28:46 +02:00
parent 08f834ff08
commit 1b6a74520c
Signed by: tastytea
SSH Key Fingerprint: SHA256:FBkvrOlhq5use1XEttyUGT4bUTDVA1ar9SgIc9P03cM

View File

@ -14,3 +14,42 @@ vim.api.nvim_create_autocmd(
callback = my_remove_trailing_whitespace callback = my_remove_trailing_whitespace
} }
) )
function my_insert_modeline()
local comment_string = vim.o.commentstring
local space_maybe = ''
if (string.match(comment_string, '%%s(.*)') ~= '') then
space_maybe = ' '
end
local fenc = vim.o.fileencoding
if (fenc == '') then
fenc = 'utf-8'
end
local modeline_elements = {
' vim: set',
' fenc=' .. fenc,
' ts=' .. vim.o.tabstop,
' sw=' .. vim.o.shiftwidth,
(vim.o.expandtab and ' et' or ' noet'),
' tw=' .. vim.o.textwidth,
':',
space_maybe
}
local modeline = comment_string:gsub('%%s', table.concat(modeline_elements))
modeline = modeline:gsub(' ', ' ')
local buffer = vim.api.nvim_win_get_buf(0)
local current = vim.api.nvim_buf_get_lines(buffer, -2, -1, true)[1]
if (current == modeline) then
print('modeline already exists')
elseif (string.match(current, 'vim:')) then
vim.api.nvim_buf_set_lines(buffer, -2, -1, true, { modeline })
print('modeline updated')
else
vim.api.nvim_buf_set_lines(buffer, -1, -1, true, { '', modeline })
print('modeline inserted')
end
end
vim.cmd([[command! ModelineInsert lua my_insert_modeline()]])