Как исправить неправильный встроенный отступ 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 ответов:
наиболее полный и безошибочный скрипт отступа 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)
в случае если кто-то приходит сюда, обратите внимание
vim-javascript
bypangloss
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-(