Image

Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

Welcome to the Power Users community on Codidact!

Power Users is a Q&A site for questions about the usage of computer software and hardware. We are still a small site and would like to grow, so please consider joining our community. We are looking forward to your questions and answers; they are the building blocks of a repository of knowledge we are building together.

Combining manual and automatic folding in Vim

+2
−0

I set up some custom logic in my ~/.vimrc to detect certain things that I want automatically folded in my Python code:

au FileType python setlocal foldmethod=expr
au FileType python setlocal foldexpr=Custom()

function Custom()
    " assorted custom folding logic...
endfunction

In order for the folding logic to be applied when the file is opened, the foldmethod has to be set to expr. But this also means that I cannot use manual folding commands like zf until I first issue :set foldmethod=manual.

I don't understand why it works like this. After all, the custom folding logic is only applied at startup; if for example I add some text that would have been folded by this rule, a fold is not automatically created, and I cannot even :call Custom() which appears to now not be in scope (and even if it could be called, I presumably would have to select the entire file, and even then it would presumably just compute the fold-level codes without actually folding anything).

Is there some way I can set things up so that foldmethod is automatically reset to manual after the initial folding is done? (Putting au FileType python setlocal foldmethod=expr at the end of the config file effectively just disables the custom folding.)

Is there some simple way to manually request re-folding according to the Custom() logic?

History

0 comment threads

Sign up to answer this question »