5

我之前见过神奇的 Vim 命令,您可以将其添加到 .vimrc 以在打开特定类型的文件时创建折叠。我记得有这样的代码会在打开文件时在每个 Ruby 方法和类中创建折叠。然后,通过一个命令,我可以折叠所有这些方法折叠。有谁知道如何使用 PL/SQL 中的内联视图来做到这一点?假设我有以下 SQL:

SELECT blah,
       teh_max
FROM (
       SELECT blah,
              MAX(bar) AS teh_max
       FROM (
              SELECT blah,
                     bar
              FROM foo
            )
       GROUP BY blah
     )
ORDER BY blah

我希望在 Vim 中打开它时创建折叠,以便我可以转到FROM (一行,zc在命令模式下点击,然后折叠从该行开始的内联视图。用一个命令折叠所有折叠也很好。

4

2 回答 2

3

foldmethod通过设置为激活基于语法的折叠syntax

" for all windows
set foldmethod=syntax
" for the current window
setlocal foldmethod=syntax

然后必须在语法定义中指定折叠,这是通过向fold应该增加折叠级别的区域提供参数来完成的。引用文档:

The "fold" argument makes the fold level increase by one for this item.
Example: 
   :syn region myFold start="{" end="}" transparent fold
   :syn sync fromstart
   :set foldmethod=syntax
This will make each {} block form one fold.

因此,您必须进入您关心的任何文件类型的语法文件,并将fold参数添加到适当的区域,或者可能添加到您自己的区域中。在您的情况下,它看起来与 C/C++ 语法的大括号折叠非常相似,但括号除外。

默认语法文件通常保存在/usr/share/vim/vimXX/syntaxLinux 上(可能是<vim-directory>\vimXX\syntax在 Windows 上?),其中 XX 是不带句点的版本号(例如 72)。这些可能会被系统范围内的文件覆盖,/usr/share/vim/vimfiles/syntax或者每个用户被~/.vim/syntax.

于 2010-06-25T17:05:22.730 回答
0

我建议只是避免多级 SQL 查询。你总是可以创建一个视图,一个临时表。我知道这与 Tom Kyte 的理论相矛盾,但这是 10 年的 PL/SQL 实践。将复杂的程序分成几个简单的部分。将复杂的 SQL 查询划分为简单的查询。

在您的示例中,查询很容易掌握,折叠只会打扰。

相反,对于嵌套的 PL/SQL 过程,折叠非常有用。vim.org 上有一个 VIM 脚本。

于 2017-10-03T01:24:12.093 回答