Краткий ответ
Тот факт, что пропуск происходит довольно случайно, указывает на то, что пустые строки на самом деле не пусты. Они содержат пробелы или другие специальные символы.
Переместите курсор на эти «пустые» строки и нажмите $
, чтобы увидеть, действительно ли они пусты.
Как избежать таких проблем:
(Да, у других тоже была ваша проблема.)
Сделать vim показывать пробельные символы
У Vim есть способ показать этих персонажей. Используйте set list
и определите listchars
. Из справки vim для listchars:
Strings to use in 'list' mode and for the :list command. It is a
comma separated list of string settings.
[...]
lcs-space
space:c Character to show for a space. When omitted, spaces
are left blank.
lcs-trail
trail:c Character to show for trailing spaces. When omitted,
trailing spaces are blank. Overrides the "space"
setting for trailing spaces.
См. :help :list
и :help listchars
для получения дополнительной информации.
Выделите конечные пробелы
Я нахожу довольно раздражающим то, что всегда отображается символ для любого пробела, и мои глаза слишком плохи, чтобы видеть маленькую точку в конце строки (для конечных пробелов). Поэтому я использую группу выделения, чтобы показать все завершающие пробельные символы:
" Show trailing whitespace
highlight ExtraWhitespace ctermbg=red " define highlight group
match ExtraWhitespace /\s\+$/ " define pattern
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/ " apply match to all buffers
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/ " don't match while in insert
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches() " It's good for the RAM
Автоматическое удаление конечных пробелов
Существует также способ автоматического удаления этих символов при записи в буфер - но есть некоторые предостережения (вспомните о двойном замыкающем пробеле у разметки для разрывов строк).
Vim wiki имеет хорошее объяснение.
Самое простое (но, возможно, не самое лучшее) решение - добавить
autocmd BufWritePre * %s/\s\+$//e
в .vimrc
или соответствующие ftplugin
файлы.
Лично у меня есть функция в моем vimrc
, и я отключаю ее для типов файлов, где она мне не нужна / не нужна.
Вас также может заинтересовать Заставить {и} игнорировать строки, содержащие только пробелы
Отказ
Могут быть символы, которые не являются пробелами, но также не отображаются vim по умолчанию. У меня никогда не было этой проблемы, но то, что я сказал в «Коротком ответе», все еще применимо.