Как я могу отформатировать код JS в Vim? - PullRequest
19 голосов
/ 31 октября 2009

У меня есть немного 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?

Ответы [ 5 ]

21 голосов
/ 16 сентября 2010

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

10 голосов
/ 21 ноября 2013

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

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

pip install jsbeautifier

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

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

Вот и все.

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

8 голосов
/ 21 января 2013

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

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

2 голосов
/ 31 октября 2009

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

test({
  var b = 2;
});

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

test({
    var b = 2;
    });

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

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

0 голосов
/ 31 октября 2009

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

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

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

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