Как исправить неправильный встроенный отступ Javascript в Vim?

Кажется, я не могу получить встроенный 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, видимый в первом случае?

Ответ 2

Самый полный и безошибочный отступ javascript script - тот, что был Preston Koprivica. Так называемый OOP script, который находится в предлагаемом ответе, имеет серьезные ошибки и не имеет правильного кода отступа, который имеет квадратные скобки.

Ответ 3

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

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

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

Ответ 4

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

vim-javascript гораздо более свежий и обновленный, чем Preston script.

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

Ответ 5

возможно, какая-то комбинация этих параметров должна быть в вашем файле 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

Ответ 6

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

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

Для этого требуется плагин IndentAnything

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

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

http://gist.github.com/371902

Ответ 7

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

Ответ 8

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

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