2013-08-31 46 views
0

1)我在我的.vimrc摺疊expr的(參見下的第三實施例:幫助摺疊EXPR部分),這使得一個摺疊用空行分開的段落中:兩個foldexpr可以共存在我的.vimrc中嗎?

set foldmethod=expr 
set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1 

我的大部分文件是段落文件(以我的.vimrc開頭)

2)但我有兩個或三個文本文件,這些文件只是沒有段落的列表,我希望能夠將除匹配項外的所有內容都摺疊到我的搜索。我在Vim的Wikia的發現(提示282)下面的「簡單的摺疊」(在提示的頁面的底部),我想實現:

:set foldexpr=getline(v:lnum)[email protected]/ 
:nnoremap <F8> :set foldmethod=expr<CR><Bar>zM 

我怎麼能有他們兩人的和平在我的共存。 vimrc?

  • 是setlocal(對於第二個foldexpr)的解決方案嗎?試過,失敗...
  • 是否有可能有一個摺疊表達式(第二個)只適用於兩個文件(file1.txt,file2.txt)?
  • 是否有可能合併2 foldexpr在一個?

感謝您的幫助

回答

4

選項foldexpr是本地的窗口,所以:

  • :set將建立全球和本地值。全局值將被用作未指定本地值的後續窗口的默認值。
  • :setlocal將僅確定本地值。

這不是很清楚,我什麼合併兩個表達式將意味着,當然你可以創建一個包含所有你想要的複雜邏輯摺疊功能。

絕對容易的是根據文件(或文件類型)爲foldexpr設置不同的值。爲此使用自動命令。

所以,整個事情可能是,在你的.vimrc:

" Default: for all files 
set foldmethod=expr 
set foldexpr=getline(v:lnum)=~'^\\s*$'&&getline(v:lnum+1)=~'\\S'?'<1':1 
nnoremap <F8> :setlocal foldmethod=expr<CR><Bar>zM 

" Only for specific files 
augroup NonDefaultFoldMethod 
    autocmd! 
    autocmd BufNewFile,BufRead file1.txt,file2.txt setlocal foldexpr=getline(v:lnum)[email protected]/ 
augroup end 

augroup/autocmd!成語是存在的,只是爲了避免,如果你的.vimrc源反覆重複的自動命令。建立自動命令時,這是最佳做法。

+0

(看來我以前的評論已經根除)它完美的工作。謝謝。 – ThG

相關問題