2013-08-31 2 views
0

1) У меня в .vimrc в выраже раза (см третьего примера в соответствии с: помочь складчато-выражу секции), что делает складку из пунктов, разделенных пустые строки:Может ли два foldexpr сосуществовать в моем .vimrc?

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

Большой часть моих файлы - это файлы с параграфами (для начала мой .vimrc)

2) Но у меня есть два или три текстовых файла, которые являются просто списками без абзацев, и я хотел бы иметь возможность сворачивать все, кроме совпадений с моим поиском , Я нашел в Vim Викии (Tip 282) следующее «Простой складной» (в нижней части страницы кончика в), которые я хотел бы реализовать:

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

Как я могу иметь оба они мирно сосуществует в моем. vimrc?

  • Является setlocal (для второго foldexpr) решением? Tried, failed ...
  • Возможно ли, чтобы выражение сгиба (второе) применимо только к двум файлам (file1.txt, file2.txt)?
  • Можно ли объединить 2 foldexpr в одном?

Спасибо за вашу помощь

ответ

4

Option 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

Смежные вопросы