Можно использовать autocmd InsertLeave
для удаления пробелов из текущей строки при каждом выходе из режима вставки:
autocmd InsertLeave *.[ch] :call <SID>StripTrailingWhitespaces()
, и команда замены замены функции StripTrailingWhitespaces()
изменена на
s/\s\+$//e
Это будет работать, если все включенные строки не заканчиваются белым
пробелы, только последний. Это может изменить строки, которые вы не сделали
изменен, если вы входите и выходите из режима вставки (i
с последующим ESC
).
Это решение можно изменить, чтобы оно работало, если включить строки, заканчивающиеся пробелами (например, вставленные строки из унаследованного кода):
autocmd InsertEnter *.[ch] :let b:insert_start = line('.')
autocmd InsertLeave *.[ch] :call <SID>StripTrailingWhitespaces()
fun! StripTrailingWhitespaces()
let original_cursor = getpos('.')
exe b:insert_start . ',.s/\s\+$//e'
call setpos('.', original_cursor)
endfun
Если замена в строках из-за входа и выхода из режима вставки (i
с последующим ESC
) является проблемой, то решение может сохранить b:changedtick-variable
при входе в режим вставки и проверить его при выходе из режима вставки для обнаружения изменений .