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

17

У меня есть этот бит 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-кода?

    
задан Ethan 31.10.2009 в 00:23
источник
  • Этот сценарий немного странный ... он повернется: var x = 1 + 2 + 3 + 4 + 5 + 6 + 7; в var x = 1 + 2 + 3 + 4 + 5 + 6 + 7; Есть и другие причудливые случаи, поэтому не запускайте их на весь файл ... –  gravitation 31.10.2009 в 06:23

5 ответов

2

Самая большая проблема заключается в том, что cindent не распознает этот тип синтаксиса: %pr_e% Он превратит это в следующее: % Co_de%

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

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

    
ответ дан Pierre-Antoine LaFayette 31.10.2009 в 16:31
источник
  • Самое смешное, что связанный сценарий jamessan, похоже, правильно обрабатывает этот случай, но для еще более простого кода (выше) он закручивает все это ... –  gravitation 31.10.2009 в 21:35
  • Я так смущен этим ответом. Конечно, JS-декодер сделает странные вещи с недопустимым синтаксисом ... –  tbranyen 09.06.2014 в 20:01
21

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

    
ответ дан Jichao 16.09.2010 в 03:34
источник
  • Отлично работает для меня vim-jsbeautify github.com/maksimr/vim-jsbeautify –  Eric 17.05.2016 в 14:57
9

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

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

pip install jsbeautifier

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

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

Вот и все.

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

    
ответ дан Nick Zalutskiy 21.11.2013 в 18:07
источник
  • Параметры, которые вы можете добавить в эту строку, которые могут быть полезны: - indent-size = 3 --indent-char = CHAR (пробел по умолчанию) --indent-with-tabs --space-in-paren You может видеть все команды, перейдя в командную строку и набрав «js-beautify». –  kash 11.02.2015 в 14:38
  • Лучшее! Зачем использовать equalprg вместо formatprg здесь? –  Niko Bellic 11.02.2017 в 03:00
8

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

Используйте этот плагин Ссылка для запуска форматирования в текущем буфере с помощью одной кнопки.

    
ответ дан the blizz 21.01.2013 в 09:42
источник
1

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

  

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

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

    
ответ дан jamessan 31.10.2009 в 02:22
источник
  • Я только что попробовал; это не идеально, но это намного лучше, чем сценарий по умолчанию. Благодаря! –  gravitation 31.10.2009 в 06:18