Display buffer vertically. It aims to be as easy to use as a stack of books.
pile.nvim is a Neovim plugin that provides a vertical buffer sidebar, similar to how books are stacked in a pile. It offers an intuitive and simple way to browse, rename, and manage open buffers. Inspired by the user-friendly experience of oil.nvim, but designed for vertical organization.
- ✅ Session Management: Auto-restore previous buffers on startup
- ✅ Named Sessions: Save and switch between different buffer sets
- ✅ Custom Buffer Order: Freely reorder buffers and persist the order
- ✅ Vertical sidebar listing all open buffers
- ✅ Easily switch between buffers with keyboard shortcuts
- ✅ Smart duplicate filename resolution
- ✅ Visual window indicators
- 🚧 Editable buffer names within the sidebar for quick renaming (not implemented yet)
- 🚧 Automatically updates file names when a buffer is renamed (not implemented yet)
- 🚧 LSP integration: Automatically updates import paths when a file is renamed (not implemented yet)
- Neovim 0.5 or later
- nui.nvim - Required for UI components
- LSP configuration for full renaming functionality (optional)
Using Lazy.nvim
{
'shabaraba/pile.nvim',
dependencies = {
'MunifTanjim/nui.nvim', -- Required dependency
},
opts = {}
}Using Packer.nvim
use {
'shabaraba/pile.nvim',
requires = { 'MunifTanjim/nui.nvim' }, -- Required dependency
config = function()
require('pile').setup()
end
}Using vim-plug
Plug 'MunifTanjim/nui.nvim' " Required dependency
Plug 'shabaraba/pile.nvim'To configure pile.nvim, add the following setup function to your Neovim config:
require('pile').setup({
-- Session management
session = {
auto_save = true, -- Auto-save session on exit
auto_restore = true, -- Auto-restore session on startup
preserve_order = true, -- Preserve buffer order
},
-- Window indicator
window_indicator = {
enabled = true, -- Show window indicators
colors = { -- Color palette for indicators
"#E06C75", "#98C379", "#E5C07B", "#61AFEF",
"#C678DD", "#56B6C2", "#D19A66", "#ABB2BF",
},
},
-- Debug settings
debug = {
enabled = false,
level = "info", -- "error", "warn", "info", "debug", "trace"
},
})- Open Buffers: The sidebar shows all open buffers, with the current buffer highlighted.
:PileToggle " Toggle the sidebar
:PileGoToNextBuffer " Switch to next buffer
:PileGoToPrevBuffer " Switch to previous buffer:PileSaveSession [name] " Save current buffers to session
:PileRestoreSession [name] " Restore session
:PileCreateSession <name> " Create new named session
:PileSwitchSession <name> " Switch to another session
:PileDeleteSession <name> " Delete a session
:PileListSessions " List all sessions:PileMoveBufferUp " Move current buffer up in sidebar
:PileMoveBufferDown " Move current buffer down in sidebarSet up convenient keybindings in your init.lua:
-- Basic operations
vim.api.nvim_set_keymap('n', '<leader>ps', ':PileToggle<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>pn', ':PileGoToNextBuffer<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>pp', ':PileGoToPrevBuffer<CR>', { noremap = true, silent = true })
-- Session management
vim.api.nvim_set_keymap('n', '<leader>pss', ':PileSaveSession<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>psr', ':PileRestoreSession<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>psl', ':PileListSessions<CR>', { noremap = true, silent = true })
-- Buffer reordering
vim.api.nvim_set_keymap('n', '<leader>pmu', ':PileMoveBufferUp<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>pmd', ':PileMoveBufferDown<CR>', { noremap = true, silent = true })While in the sidebar:
<CR>: Open the selected bufferq/<Esc>: Close sidebar
Buffer Operations (Vim-like):
dd: Cut buffer (delete + save to register)yy: Yank buffer (copy to register without deleting)p: Paste buffers below cursorP: Paste buffers above cursorD: Delete buffer immediately (without saving to register)d(visual mode): Cut multiple selected buffersy(visual mode): Yank multiple selected buffers
Buffer Reordering:
- Normal mode:
<C-j>: Move current buffer down<C-k>: Move current buffer up
- Visual mode:
VorShift+V: Select line (start visual line mode)j/k: Extend selection<C-j>: Move selected buffers down<C-k>: Move selected buffers up
Note: The register is automatically cleared when you leave the sidebar window.
- Auto-save: When you exit Neovim, current buffers are saved to the "default" session
- Auto-restore: On startup, buffers from the last session are automatically restored
- Named sessions: Create multiple sessions for different projects or workflows
- Buffer order: Your custom buffer order is preserved across sessions
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
This project is licensed under the MIT License.
