-- remove trailing whitespace function my_remove_trailing_whitespace() local curpos = vim.api.nvim_win_get_cursor(0) vim.cmd([[keeppatterns %s/\s\+$//e]]) vim.api.nvim_win_set_cursor(0, curpos) end vim.api.nvim_create_autocmd( { 'BufWritePre' }, { pattern = { '*.lua', '*.cpp', '*.hpp' }, 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()]])