Я очень плохо знаком с регулярными выражениями, и мне нужна помощь.Сначала я объясню свою мотивацию и некоторые диаграммы, так как это очень трудно объяснить иначе.
Я недавно установил Направляющие Vim Indent , которые отображают эти вертикальные полосы / линейки, как показано ниже (картинка из githubaccount):
![Vertical Bars](https://i.stack.imgur.com/Mjedz.png)
Это достигается путем сопоставления пробелов в начале строки и добавления их либо к IndentGuidesEven
, либо к IndentGuidesOdd
.Проблема в том, что он не может сопоставить шаблон с пустыми строками, и вы получаете меньше, чем идеальное подсвечивание, например: ![Poor highlighting](https://i.stack.imgur.com/SnZpe.jpg)
Самое простое решение - удалить all empty / blankстроки, но код без пробелов может быть трудно читать.Я имел в виду преобразование кода в несколько этапов и, в конечном итоге, добавление пробелов, как показано ниже.
![Animation](https://i.stack.imgur.com/7ZmJs.gif)
То, что я делаю, это:
- удаление пробелов из всех строк только с пробелами
%s/\s\+$//e
- усечение всех нескольких пустых строк
%s/\n\{3,}/\r\r/e
- добавление пробелов в пустые строки
%s/^\ \(\ *\)\([^\ ]\)\(.*\)\n^\ *$\n^\ /\ \1\2\3\r\ \1\r\ /gc
что делает последнее утверждение, так это смотрит на три строки, где первая и третья не пустые, а вторая пустая.Но это приводит к проблемам, если первая строка, например, имеет отступ в 8 раз, а третья - только в 3 раза.В любом случае, найдя первый шаблон (в данном случае 8 отступов), использовать его в одном шаблоне поиска, чтобы строки 1 и 3 начинались с одинакового количества пробелов?Я уверен, что мог бы сделать это с помощью итеративной функции и начать, например, с 30 отступов, и вернуться назад, но это может быть немного неэффективно.
Я знаю, что строки только с пробелами плохие.Тем не менее, удаление пробелов является тривиальным, и я назначил ключ, чтобы сделать это автоматически.При необходимости я могу быстро удалить их.Кроме того, я знаю, что проблема более сложная, чем эта, и есть еще несколько случаев, которые нужно рассмотреть, однако я буду разбираться с этими случаями по мере их появления.
Любой совет относительно того, как я мог бы поступить в этом направлении