Подтвердить что ты не робот

Как я могу форматировать JS-код в Vim?

У меня есть этот бит JavaScript...

 15   $('.ajax_edit_address').each(function() {
 16     $(this).ajaxForm({
 17       target: $(this).parents('table.address').find('tr.address_header').children(':first'),
 18       success: function(response) {
 19         $('input, select, textarea', '.ajax_edit_address').removeClass('updating');
 20       }
 21     });
 22   });

Отформатирован так, как мне нравится. Но позвольте сказать, что я только что закончил набирать что-то, и я хотел его убрать. Поэтому я запускаю форматировщик кода Vim на нем...

=7j

Результат...

 15   $('.ajax_edit_address').each(function() {
 16       $(this).ajaxForm({
 17 target: $(this).parents('table.address').find('tr.address_header').children(':first'),
 18 success: function(response) {
 19 $('input, select, textarea', '.ajax_edit_address').removeClass('updating');
 20 }     
 21 }); 
 22       });

У Vim, похоже, проблемы с функциями как аргументы метода.

Вот что я думаю, это соответствующая часть моего .vimrc...

:set cindent shiftwidth=2

" indent depends on filetype
:filetype indent on

:filetype plugin on

Есть ли что-то еще, что необходимо установить или настроить для форматирования JS-кода?

4b9b3361

Ответ 1

Самой большой проблемой, по-видимому, является то, что cindent не распознает этот тип синтаксиса:

test({
  var b = 2;
});

Это превратит это в это:

test({
    var b = 2;
    });

Если вы справитесь с этим случаем, я бы предположил, что отступ не будет таким ужасным для синтаксиса jQuery. Но для этого потребуется написать собственный файл отступа javascript. Кроме того, вам нужно будет отредактировать файл indent html, чтобы не использовать cindent для тегов скриптов с содержимым javascript.

Я не думаю, что кто-то успешно создал jQuery/prototype совместимый файл отступа для javascript. Существующие сценарии отступа javascript все испорчены.

Ответ 2

Плагин VIM Jsbeautify может корректно обрабатывать jQuery. Это версия vim для плагинов онлайн Jsbeautify.

Ответ 3

Существует гораздо более простое решение, которое не требует плагинов vim.

Установите js-beautify на ваш системный питон:

pip install jsbeautifier

Затем добавьте это в свой .vimrc:

autocmd FileType javascript setlocal equalprg=js-beautify\ --stdin

Что это.

Запустите :help equalprg, чтобы понять, почему это работает.

Ответ 4

Я бы порекомендовал CLI-версию einars/jsbeautify, которую вы можете найти здесь: https://github.com/einars/js-beautify. Это автономная версия www.jsbeautifier.org.

Используйте этот плагин https://github.com/Chiel92/vim-autoformat для запуска форматирования в текущем буфере с помощью одной кнопки.

Ответ 5

К сожалению, "cindent" просто не собирается выполнять эту работу, поскольку он очень привязан к синтаксису C. Поскольку весь отступ по умолчанию script для javascript действительно включает "cindent", это не очень помогает. Он даже говорит об этом в script!

"Сопровождающий: Нет! Хотите улучшить это?

Я не делаю ничего, кроме действительно базового javascript, поэтому я никогда не беспокоился, пытаясь найти что-нибудь лучше. Из быстрого обзора vim.org этот script выглядит так, как будто это может стоить того. Он более новый, поэтому он, вероятно, учитывает более сложный javascript, который используется в наши дни.