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

Sar*_*els 5 oracle vim plsql 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
Run Code Online (Sandbox Code Playgroud)

我希望在Vim中打开它时可以创建折叠,这样我就可以进入一条FROM (线,zc在命令模式下点击,并从该行开始的内联视图被折叠.用一个命令折叠所有折叠也不错.

Cas*_*bel 4

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

" for all windows
set foldmethod=syntax
" for the current window
setlocal foldmethod=syntax
Run Code Online (Sandbox Code Playgroud)

然后必须在语法定义中指定折叠,这是通过向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.
Run Code Online (Sandbox Code Playgroud)

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

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