我一直试图在 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 个问题:
- 是否可以通过 修复代码折叠
~/.gvimrc
? - 我该如何修复代码折叠?
- 我如何使折叠的代码呈现这种形式
y = (function () { ... }());
?
答案1
为了简单起见,一个快速的解决方法是将 javascript.vim 文件中的折叠行更改为:
syn region javaScriptFunctionFold start="{" end="}" transparent fold
在接下来的几周内,我将尝试对整个文件进行彻底检查,以确保它与 ECMA5 和各种 HTML5 API 和更新的最新变化保持同步,但此补丁应该可以在此期间修复一些问题。
答案2
我发现此替换语法文件工作得很好,它甚至可以折叠复杂的原型对象。它专门针对 Mozilla 和 Dojo 项目中常用的 JS,这看起来非常像你正在做的事情。