2

Я пытался настроить сворачивание кода в Vim для JavaScript, но по умолчанию не работает правильно. У меня мало опыта работы с Vim, и мне трудно разобраться в файлах справки (что доказано моими неудачными попытками сделать это самостоятельно).

Код JavaScript, который создает проблемы более или менее, выглядит следующим образом:

var x = {};

x.prototype = (function () {
    // Variable declarations...
    var y;

    // Other content...

    y = (function () {
        // Stuff...
    }());

    // Other content continues... eg:
    return {
        // Other stuff...
    };
}());

Когда я сбрасываю y = (function () {}()); это выглядит так:

var x = {};

x.prototype = (function () {
    // Variable declarations...
    var y;

    // Other content...

    y = (function () {----------------------------------...

Обратите внимание, как исчезает остальная часть функции! На самом деле это должно выглядеть так:

var x = {};

x.prototype = (function () {
    // Variable declarations...
    var y;

    // Other content

    y = (function () {----------------------------------...

    // Other content continues... eg:
    return {
        // Other stuff...
    };
}());

Как я уже говорил выше, я попытался поиграться с файлом синтаксиса, но он только сломал фолдинг.

Для удобства ниже приведен раздел свертывания кода файла синтаксиса JavaScript:

if exists("javaScript_fold")
    syn match   javaScriptFunction  "\<function\>"
    syn region  javaScriptFunctionFold  start="\<function\>.*[^};]$" end="^\z1}.*$" transparent fold keepend

    syn sync match javaScriptSync   grouphere javaScriptFunctionFold "\<function\>"
    syn sync match javaScriptSync   grouphere NONE "^}"

    setlocal foldmethod=syntax
    setlocal foldtext=getline(v:foldstart)
else
    syn keyword javaScriptFunction  function
    syn match   javaScriptBraces       "[{}\[\]]"
    syn match   javaScriptParens       "[()]"
endif

syn sync fromstart
syn sync maxlines=100

У меня есть 3 вопроса:

  1. Можно ли исправить свертывание кода через ~/.gvimrc?
  2. Как мне исправить свертывание кода?
  3. Как заставить свернутый код принять эту форму y = (function () { ... }());?

2 ответа2

2

Я обнаружил, что этот файл синтаксиса замены работает очень хорошо, он сворачивает даже сложные объекты-прототипы. Он был специально нацелен на JS, обычно используемый в Mozilla и в проектах Dojo, что очень похоже на то, что вы делаете.

1

Чтобы упростить задачу, можно быстро исправить это, изменив строку в файле javascript.vim для сгиба на:

syn region javaScriptFunctionFold  start="{" end="}" transparent fold

В течение следующих нескольких недель я постараюсь пересмотреть весь файл, чтобы убедиться, что он соответствует последним изменениям для ECMA5 и различным API-интерфейсам и обновлениям HTML5, но этот патч должен исправить положение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .