I currently have a function like this in my Tree Sitter configuration, which gets called when setting up a buffer to use Tree Sitter:
function set_foldexpr()
-- Apply 'foldexpr' only when the user hasn't set it otherwise.
if vim.opt.foldmethod:get() == 'manual' then
vim.opt_local.foldmethod = 'expr'
vim.opt_local.foldexpr = 'nvim_treesitter#foldexpr()'
end
end
This works well enough for me, because I personally never use manual folds, so foldmethod=manual
might as well be “null” for my purposes.
But in general, is there a way to distinguish among these cases?
- The user has set an option in the current buffer, and it happens to be the same as the default value.
- The user has set an option globally, and it happens to be the same as the default value.
- The user has not set an option, so it is left at the default value.
In my opinion, it would be more “polite” to set foldmethod=expr
only in cases 2 and 3, but not case 1.