Как исправить неверный встроенный отступ Javascript в Vim? - PullRequest
63 голосов
/ 06 марта 2009

Кажется, я не могу правильно вставить встроенный отступ Javascript в Vim. Учтите следующее:

  $(document).ready(function() {

  // Closing brace correctly indented
    $("input").focus(function() {
      $(this).closest("li").addClass("cur-focus");
    }); // <-- I had to manually unindent this

  // Closing brace incorrectly indented
    $("input").blur(function() {
      $(this).closest("li").removeClass("cur-focus");
      }); // <-- This is what it does by default. Argh!

  });

Кажется, Vim настаивает на автоматическом выравнивании закрывающей скобки, показанной во втором случае. Это делает то же самое, если я заново сделаю отступ для всего файла. Как заставить его автоматически делать отступы с использованием более стандартного стиля отступа JS, показанного в первом случае?

Ответы [ 9 ]

85 голосов
/ 15 ноября 2010

Самым полным и безошибочным сценарием отступления Javascript является , написанный Престоном Копривица . Так называемый сценарий ООП, который содержится в предлагаемом ответе, имеет серьезные ошибки и неправильно обрабатывает код с квадратными скобками.

82 голосов
/ 06 марта 2009

Использование Отступ JavaScript: отступ Javascript (HTML-отступ включен) Престон Копривица. Спасибо за хедз-ап от oligofren - проголосуйте за него.

17 голосов
/ 20 июля 2011

Сценарии, упомянутые выше, не форматируют синтаксис закрытия, часто используемый в jQuery:

$(function() {
  // only one level of indentation, not two
});

Этот скрипт лучше работает для меня: http://www.vim.org/scripts/script.php?script_id=2765

10 голосов
/ 09 декабря 2013

Большинство ответов даны с 2009 года и, честно говоря, устарели.

vim-javascript гораздо более свежий и актуальный, чем сценарий Престона.

Установка немного сложнее, если вы еще не начали использовать Vundle , но, похоже, она не страдает от проблем альтернатив.

7 голосов
/ 06 марта 2009

возможно, какая-то комбинация этих настроек должна быть в вашем файле VIMRC.

syntax on 
set syn=auto 
set showmatch 
filetype on 
filetype plugin on 
filetype indent on 
set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set expandtab
3 голосов
/ 20 апреля 2010

У меня была такая же проблема. Это лучший из всех сценариев отступов Javascript:

http://www.vim.org/scripts/script.php?script_id=1840

Требуется плагин IndentAnything

http://www.vim.org/scripts/script.php?script_id=1839

В качестве дополнительного бонуса я написал этот скрипт для отступа, который сделает блоки Javascript довольно красивыми. По умолчанию используется HTML-индентор по умолчанию (и IndentAnything, когда он находится внутри блока Javascript)

http://gist.github.com/371902

2 голосов
/ 29 апреля 2014

В случае, если кто-то придет сюда, обратите внимание на то, что vim-javascript на pangloss на https://github.com/pangloss/vim-javascript помогло мне до сих пор, т.е. Vim 7.4. И вышеупомянутые решения от олигофрена и Чарльза Ропера не помогли.

0 голосов
/ 04 октября 2018

Вам не нужно устанавливать специализированные плагины для Javascript, вы можете изучить встроенные опции Vim для отступов. У Vim довольно много опций, и некоторые из стилей отступа, такие как cindent, smartindent и indentexpr, имеют свои собственные опции.

Чтобы проверить, используете ли вы cindent или smartindent или indentexpr, выполните:

:set cindent?
:set smartindent?
:set indentexpr?

Несмотря на название, cindent относится не только к программам на C, но и ко многим языкам программирования, которые имеют примерно одинаковый синтаксис, включая Javascript. Посмотрите на :help C-indenting для документации об этом. Вы можете отрегулировать настройки, в частности, с помощью линии, подобной этой, см. :help 'cinoptions' и :help cinoptions-values. Вот пример конфигурации:

:au FileType js,javascript setlocal shiftwidth=2 softtabstop=2 cinoptions=j1,J1,(1s " see help cino-j cino-J cino-(
0 голосов
/ 08 марта 2009

Предполагая, что файл синтаксиса имеет хороший отступ для сценария Java, визуально выделите блок и нажмите =. Это работает для Java, поэтому я ожидаю, что он сделает что-то наполовину приличное для Java-скрипта. Результаты, вероятно, также зависят от настроек tabstop, expandtab и, возможно, shiftwidth.

gq также полезен, он форматирует строки, а не выравнивает их.

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