This neovim plugin allows you to cycle folds open or closed.
If you find any problems or have suggestions for improvements, do open an issue! :)
This plugin is inspired by and borrows (heavily!) from vim-fold-cycle.
With packer:
use {
'jghauser/fold-cycle.nvim',
config = function()
require('fold-cycle').setup()
end
}
The following functions expose the functionality of the plugin:
require('fold-cycle').open()
: Open the next level of (nested) foldsrequire('fold-cycle').close()
: Close the next level of (nested) foldsrequire('fold-cycle').open_all()
: Open a fold and all its nested foldsrequire('fold-cycle').close_all()
: Close a fold and all its nested foldsrequire('fold-cycle').toggle_all()
: Toggle a fold and its nested folds closed/open
See the next section for how to create keymaps for these functions.
The setup function allows adjusting various settings. By default it sets the following:
require('fold-cycle').setup({
open_if_max_closed = true, -- closing a fully closed fold will open it
close_if_max_opened = true, -- opening a fully open fold will close it
softwrap_movement_fix = false -- see below
})
If you're on Neovim <0.9, I suggest setting softwrap_movement_fix
to true
. When set to true, the plugin remaps j
/k
to gj
/gk
(when softwrap is enabled) allowing you to move up and down through softwrapped lines. Moreover -- and this is why this functionality is included with this plugin -- the setting fixes this annoying neovim bug that makes navigating folds more difficult. This setting should preserve all the normal operations of j
/k
when softwrap is disabled and when j
/k
is used with v:count
(e.g. 5k
or 2j
).
The plugin doesn't set any keymaps by default. I use the following:
vim.keymap.set('n', '<tab>',
function() return require('fold-cycle').open() end,
{silent = true, desc = 'Fold-cycle: open folds'})
vim.keymap.set('n', '<s-tab>',
function() return require('fold-cycle').close() end,
{silent = true, desc = 'Fold-cycle: close folds'})
vim.keymap.set('n', 'zC',
function() return require('fold-cycle').close_all() end,
{remap = true, silent = true, desc = 'Fold-cycle: close all folds'})