Выделите пустые строки в начале и конце файла и более одной пустой строки - PullRequest
0 голосов
/ 04 октября 2018

В vim я хотел бы выделить пустые строки в начале и конце файла и более одной последовательной строки.Пример:

--- start of file
.
and empty line just before this line (at the beginning of the file)
more than one empty line will follow
.
.
empty lines at the end of file will follow
.
.
--- end of file

В приведенном выше примере строки с точкой должны быть выделены.

Я попытался сопоставить строки со следующим выражением, к сожалению, без удачи:

call matchadd('EmptyLines', '\n\s\*\n\s\*\n')

Как мне сопоставить все эти строки и выделить их (желательно всю строку)?

1 Ответ

0 голосов
/ 04 октября 2018

Специальные атомы регулярного выражения \%^ (:help start-of-file) и \%$ (:help end-of-file) помогут здесь.С их помощью вы можете сопоставлять пустые строки на границах буфера, например:

call matchadd('EmptyLines', '\%^\n\+')
call matchadd('EmptyLines', '^\n\+\%$')

К сожалению, существуют некоторые ограничения :

  • Выможет совпадать только с тем, что там есть, чего не так много в пустых строках.Vim просто выделит одну ячейку шириной (которая представляет символ новой строки).
  • В самой последней строке ничего не выделяется вообще.Если вы хотите увидеть какой-либо признак единственной пустой последней строки, вы можете удалить ^ из шаблона.Затем пустая конечная строка будет указана выделением перед этой строкой.

Варианты реализации

Используя :help signs, вы можете выделить полную ширинупустые строки и имеют дополнительное указание в знаковой колонке .Недостатком является то, что вы не можете просто определить шаблон для знаков.Вы должны явно разместить их в определенных строках и адаптировать эту позицию при каждом изменении содержимого буфера.Это будет означать определение некоторых :autocmd с и жить с низкой производительностью или принимать короткие задержки до обновления знаков.(Они предназначены для обозначения ошибок сборки, которые меняются не так часто и только по требованию.)


Вместо визуальной индикации, если ваша цель - избежать пустых ошибоклиний, вы также можете подключиться к событию BufWrite и либо напечатать предупреждение, либо полностью прервать :write, если такие строки найдены.Мой плагин DeleteTrailingWhitespace делает это (но для пробелов в конце отдельных строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...