使用.vimrc在Vim中自动折叠Oracle内联视图

时间:2010-06-25 16:33:39

标签: oracle plsql vim folding

我之前看到了神奇的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,并从该行开始的内联视图是崩溃了。用一个命令折叠所有折叠也不错。

2 个答案:

答案 0 :(得分: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 ++语法的逐字括号非常相似。

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

答案 1 :(得分:0)

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

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

与嵌套的PL / SQL程序相反,折叠工作非常有用。 vim.org上有一个VIM脚本。