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

9 63

9 ответов:

наиболее полный и безошибочный скрипт отступа Javascript-это The one BY Preston Koprivica. так называемый сценарий ООП, который находится в предлагаемом ответе, имеет серьезные ошибки и не отступает код правильно, который имеет квадратные скобки.

использовать JavaScript Indent: JavaScript indenter (HTML indent включен) Престон Копривица. Спасибо за предупреждение от олигофрен - дайте ему право голоса.

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

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

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

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

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

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

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

У меня была такая же проблема. Это лучший из всех сценариев отступов 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

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

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

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

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