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

6

我以前看过一些神奇的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个回答

4

基于语法的折叠是通过将 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++ 语法的 fold-by-braces 相当相似,只是括号不同。
默认的语法文件通常保存在 Linux 上的 /usr/share/vim/vimXX/syntax(可能在 Windows 上是 <vim-directory>\vimXX\syntax?),其中 XX 是版本号,不带句点(例如 72)。这些文件可以被 /usr/share/vim/vimfiles/syntax 中的系统范围内的文件或 ~/.vim/syntax 中的每个用户的文件覆盖。

我尝试添加起始和结束仅为括号的折叠,但这不起作用,因为 SQL 中还有很多其他使用括号的内容,例如 MAX(bar)。设置 start="FROM (" 也不起作用;它无法识别该位置的折叠。 - Sarah Vessels

0

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

在您的示例中,查询非常容易理解,折叠只会干扰。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接