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.
Post History
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 fold...
#2: Post edited
- 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()
" various 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?
- 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?
#1: Initial revision
Combining manual and automatic folding in Vim
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()
" various 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?
