Опция 1 может использовать функцию search()
, например:
let b:has_trailing_spaces=!!search('\v\s+$', 'cwn')
search()
Функция возвращает номер совпавшей строки (они начинаются с 1) или 0, если ничего не найдено, !!
превращает его в 1 или 0, отбрасывая информацию о том, в какой строке search()
найден завершающий пробел.Без n
flag search()
перемещает курсор, что, я думаю, нежелательно.Без w
он может искать только в той части буфера, которая находится после курсора (действительно зависит от опции 'wrapscan'
).
Предлагаемая реализация варианта 2 - это хак, использующий InsertLeave
и '[
, ']
маркеры:
augroup CleanInsertedTrailingSpaces
autocmd!
autocmd InsertLeave * let wv=winsaveview() | keepjumps lockmarks '[,']s/\s\+$//e | call winrestview(wv)
augroup END
Предполагается, что вы добавляете только пробельные символы после ввода.Он сломается, если вы наведете курсор на линии в режиме вставки.Вы также можете попробовать добавить
autocmd CursorHold * if getpos("'.")[1]!=0 | let wv=winsaveview() | keepjumps lockmarks '.s/\s\+$//e | call winrestview(wv) | endif
, это должно удалить завершающие пробелы в строке последнего изменения (здесь не может использоваться только одна строка, '[
и ']
, поскольку они указывают на первую ипоследние строки часто бывают полезными).Обе автокоманды должны добавить информацию в дерево отмены.
Для опции 2 есть вторая опция: git annotate
может аннотировать текущее состояние файла, таким образом, вы можете использовать grep
для фильтрации строк, которые имеюти завершающие пробелы, и незавершенные изменения, и используйте ловушку для удаления ненужных пробелов из них перед фиксациейПечально, но hg annotate
не может этого сделать, поэтому вам придется написать что-то более сложное, возможно, на python.Я ничего не могу сказать о других системах VC.
Полагаю, было бы лучше, если бы вы использовали set list listchars+=trail:-
, чтобы увидеть такие пробелы и, таким образом, иметь возможность удалить их вручную, если они случайно появляются (лично я могу 'Я не забываю, что постоянно добавляю завершающие пробелы случайно, хотя в комментариях и документации они используются мной намеренно, чтобы указать, что абзац продолжается).Что вы делаете, чтобы появилась эта проблема?