2010-06-25 60 views
5

我已經看到了神奇的Vim命令,然後您可以添加到.vimrc中,以在打開特定類型的文件時創建摺疊。我記得有這樣的代碼會在每個Ruby方法和類中打開文件時創建摺疊。然後,用一個命令,我可以摺疊所有這些方法摺疊。有誰知道如何使用PL/SQL中的內聯視圖來完成此操作?說我有以下SQL:在Vim中使用.vimrc自動摺疊Oracle內聯視圖

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,並且有開始在內嵌視圖該行被摺疊。用一個命令摺疊所有摺疊也是很好的。

回答

3

摺疊基於語法通過設置激活foldmethodsyntax

" 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中的文件覆蓋整個系統。

+0

我嘗試添加摺疊,其中開始和結束只是括號,但不起作用,因爲SQL中的其他東西使用括號,例如'MAX(bar)'。設置'start =「FROM(」'也不起作用;它沒有識別出摺疊。 – 2010-06-25 20:23:30

0

我建議只是爲了避免多級SQL查詢。你總是可以創建一個視圖,一個臨時表。我知道這與湯姆凱特的理論相矛盾,但是這是PL/SQL 10年的實踐。將複雜的程序分成幾個更簡單的部分 部分。將複雜的SQL查詢劃分爲簡單的查詢。

在你的例子中,查詢很容易掌握,摺疊只會打擾。

對於嵌套的PL/SQL過程,相反的摺疊工作非常有用。 vim.org上有一個VIM腳本。