Vim JavaScript 代码折叠

Vim JavaScript 代码折叠

我一直试图在 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 () { ... }());

答案1

为了简单起见,一个快速的解决方法是将 javascript.vim 文件中的折叠行更改为:

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

在接下来的几周内,我将尝试对整个文件进行彻底检查,以确保它与 ECMA5 和各种 HTML5 API 和更新的最新变化保持同步,但此补丁应该可以在此期间修复一些问题。

答案2

我发现此替换语法文件工作得很好,它甚至可以折叠复杂的原型对象。它专门针对 Mozilla 和 Dojo 项目中常用的 JS,这看起来非常像你正在做的事情。

相关内容