Заставить Vim игнорировать первый символ в строке при отступе - PullRequest
0 голосов
/ 11 сентября 2018

Всякий раз, когда мне приходится редактировать файлы Perl Mason, у меня всегда возникают проблемы с отступом строк из-за кода Perl, начинающегося с %. Например:

<div>
    <div>
%       if( !$something ) {
            <strong><% $title %></strong>
%       }
    </div>
</div>

Есть идеи, как я могу сказать Vim игнорировать % в начале строки и сделать отступ, как будто его там не было?

Я использую https://github.com/aming/vim-mason для поддержки смешанного синтаксиса Perl / HTLM, но я не думаю, что он что-то меняет.

1 Ответ

0 голосов
/ 11 сентября 2018

Это Perl-код, встроенный в HTML, поэтому отступ от $VIMRUNTIME/indent/html.vim. Это определяет 'indentexpr', реализованный HtmlIndent().

Вам нужно изменить эту реализацию, чтобы игнорировать % в первом столбце; всякий раз, когда он обращается к буферу (getline(), prevnonblank(), shiftwidth()), вам нужно перехватить, найти предыдущую строку, которая имеет такой % символ, и вместо этого вернуть значение для этого. (Если эти специальные строки могут также содержать HTML-теги, возможно, вам придется извлечь их из кода Perl и вернуть только те.) Это дает вам требуемый отступ.

К сожалению, это не тривиально, и вы должны раскошелиться на оригинальную реализацию. Однако, если вам удастся реализовать чистое решение, вы можете предложить добавить точки интеграции автору indent/html.vim. Если кроме Mason есть другие языки, которые используют эти префиксы поверх HTML, это будет дополнительным аргументом для добавления такой поддержки (и, возможно, даже ваших функций-обёрток).

...