Почему vim autoindent работает непоследовательно - PullRequest
0 голосов
/ 21 апреля 2020

Использование vim 8.0.1365 на Macinto sh

Я не понимаю, почему автоиндент иногда завершается ошибкой.

Оба фрагмента кода ниже имеют отступ, как я хочу они должны быть, когда я запускаю форматтер (как по умолчанию, так и с отступом pangloss). Но когда я нахожусь в режиме вставки, автоиндент не работает для второго фрагмента кода.

Таким образом, код, подобный этому, автоматически индентируется как я хотел;

function SayHiToMom () {
    message = "Hello, best mom in the world";   <- This line auto-indents, as expected.
    send(message);                              <- and so does this one.
}

Но не этот код

 var svg = d3.select("#chart-area").append("svg")
     .attr("width", 400)   <- Here, no auto-indent occurs, but that's not really a surprise. I indent by hand.
     .attr("height", 400)  <- When I start a new line here, no auto-indent occurs, surprising and annoying.

1 Ответ

0 голосов
/ 22 апреля 2020

Если у вас включена поддержка типов файлов, Vim загружает плагин для типов файлов, когда вы загружаете файл определенного типа (например, JavaScript), и этот файл содержит несколько настроек. В случае JavaScript, одной из этих настроек является indentexpr, которая является функцией, которая вызывается для автоматического предоставления правильного отступа.

Похоже, что в этом случае она не обрабатывает этот случай автоматически, возможно, потому что никто никогда не рассматривал этот случай в коде. Vim изначально не понимает JavaScript, поэтому Vimscript должен делать все возможное.

Кроме того, возможно, что кто-то не делал такого поведения, потому что ваша строка не будет рассматриваться как продолжение строка, если кто-то использовал стиль JavaScript, когда вы не пишете точки с запятой в конце, а вместо этого ставите их в начале строки, если это необходимо для устранения неоднозначности. Vim должен поддерживать оба стиля JavaScript, даже если не все согласны с тем, что оба являются хорошей идеей.

Независимо от того, заголовок файла (в моей системе, /usr/share/vim/vim82/indent/javascript.vim) содержит URL GitHub, где Вы можете сообщить об этой проблеме и либо отправить патч, либо посмотреть, захочет ли кто-нибудь еще написать его. Вы также можете отключить значение indentexpr, написав в вашем .vimrc что-то вроде следующего:

au FileType javascript setl indentexpr=

В этом случае вы получите поведение по умолчанию autoindent.

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