Отступ Javascript в VIM - PullRequest
       44

Отступ Javascript в VIM

15 голосов
/ 11 июля 2010

Я пытаюсь заставить VIM сделать отступ для Javascript с помощью '=' и связанных команд. Когда я пытаюсь автоматически сделать отступ, например:

   new function($) {
     $.fn.setCursorPosition = function(pos) { 
       if ($(this).setSelectionRange) {
         $(this).setSelectionRange(pos, pos);
       } else if ($(this).createTextRange) {
         var range = $(this).createTextRange();
         range.collapse(true);
         range.moveEnd('character', pos);
         range.moveStart('character', pos);
         range.select();
       }

Результат довольно абсурдный:

       new function($) {
       $.fn.setCursorPosition = function(pos) {
       if ($(this).setSelectionRange) {
       $(this).setSelectionRange(pos, pos);
       } else if ($(this).createTextRange) {
       var range = $(this).createTextRange();
       range.collapse(true);
       range.moveEnd('character', pos);
       range.moveStart('character', pos);
       range.select();
       }

Я установил set syntax=javascript и установил filetype на:

filetype detection:ON  plugin:ON  indent:ON

Хотя я попробовал каждую перестановку этого. Я пробовал каждую перестановку smartindent, autoindent и cindent, но, похоже, ничто не дает правильного эффекта, дающего Vim ожидаемый отступ. Я установил tabstop=4.

Я установил javascript.vim и IndentAnything, хотя, похоже, они не имеют никакого эффекта.

Буду очень признателен за любые предложения относительно правильной установки отступов Vim в JavaScript.

Ответы [ 7 ]

9 голосов
/ 07 сентября 2013

О, чувак, я просто потратил пару часов, чтобы понять ту же проблему.

Если у вас есть filetype indent on (что у вас есть), тогда несколько разных настроек отступа могут быть где-то установлены в файле. Если вы используете verbose set <option>?, вы можете увидеть, где он установлен и на что он установлен:

:verbose set autoindent?
:verbose set cindent?
:verbose set smartindent?
:verbose set indentexpr?

По умолчанию вы ожидаете увидеть только cindent, установленный по умолчанию для файла отступа:

cindent
Last set from $VIMRUNTIME/indent/javascript.vim

Где $VIMRUNTIME - путь, который вы получаете, когда запускаете :echo $VIMRUNTIME.

Все остальные не будут установлены, если вы не включите их (в вашем vimrc или плагине).

Для меня у меня был плагин (eclim), который устанавливал identexpr и вызывал эту проблему:

identexpr=EclimGetJavascriptIndent(V:lnum)
Last set from ~/.vim/bundle/eclim/indent/javascript.vim
5 голосов
/ 18 июня 2014

У меня была такая же проблема некоторое время назад, и решением был плагин "vim-javascript".Это пакет JavaScript для vim, обеспечивающий синтаксис и плагины отступа.

https://github.com/pangloss/vim-javascript

Установка очень проста.

Если вы используете возбудитель , используйте следующие шаги:

  cd ~/.vim/bundle
  git clone https://github.com/pangloss/vim-javascript.git

Если вы используете vundle используйтеследующие шаги:

Добавьте следующую строку в ваш файл vimrc:

Plugin "pangloss/vim-javascript"

и установите его:

:so ~/.vimrc
:PluginInstall
4 голосов
/ 11 июля 2010

Добавление двух закрывающих скобок и выбор всего блока с помощью vi{ обеспечили мне правильное автоматическое отступление в gvim 7.2 без плагинов.Возможно, вы захотите узнать, не работает ли ошибочный плагин, запустив vim с флагом --noplugins в командной строке.и попробуйте снова.

3 голосов
/ 12 июля 2010

На днях у меня были проблемы с MacVim 7.2 и файлом Lua, который не смог бы правильно создать отступ - даже после использования set syntax, set filetype и filetype indent on он не был правильно создан с отступом.

Я обнаружил добавление:

filetype plugin indent on

, чтобы мой .gvimrc файл решил проблему, по крайней мере, для меня. YMMV.

3 голосов
/ 12 июля 2010

Для меня это работает (не очень полезное утверждение, я знаю ;-)).Я полагаю, что тип файла не определяется правильно.

Что говорит

 :set filetype

?Он должен сообщать «javascript».

[EDIT] Подсказка: обратите внимание, что есть опция с именем 'filetype' и команда с именем: filetype.Чтобы получить справку для опции do: help 'filetype' для команды do: help: filetype.

3 голосов
/ 11 июля 2010

Я ненавижу говорить что-то бесполезное, как "Это работает для меня", но это так.Даже если в моем .vimrc и всех плагинах ничего нет, я получаю правильный отступ.

new function($) {
    $.fn.setCursorPosition = function(pos) { 
        if ($(this).setSelectionRange) {
            $(this).setSelectionRange(pos, pos);
        } else if ($(this).createTextRange) {
            var range = $(this).createTextRange();
            range.collapse(true);
            range.moveEnd('character', pos);
            range.moveStart('character', pos);
            range.select();
        }

Вы пытались загрузить vim с помощью переключателя --noplugins и временно переместить / переименовать ваш .vimrc, чтобы увидеть,все еще не работает?Я подозреваю, что другой параметр в вашем .vimrc или другом плагине может быть причиной конфликта.

0 голосов
/ 06 октября 2016

Для меня наличие более одного символа '(' перед символом '{' в той же строке, казалось, изменило алгоритм отступа, используемый '='. Удаление одного из '(', казалось, исправило '='для всех частей файла, кроме других областей области видимости '{...}', в которых также было несколько символов '(' на открывающей строке.

Я использую vim 7.4 в lubuntu

...