Easypick is a neovim plugin that lets you easily create Telescope pickers (see telescope.nvim) from arbitrary console commands.
use {'axkirillov/easypick.nvim', requires = 'nvim-telescope/telescope.nvim'}
local easypick = require("easypick")
-- only required for the example to work
local get_default_branch = "git remote show origin | grep 'HEAD branch' | cut -d' ' -f5"
local base_branch = vim.fn.system(get_default_branch) or "main"
easypick.setup({
pickers = {
-- add your custom pickers here
-- below you can find some examples of what those can look like
-- list files inside current folder with default previewer
{
-- name for your custom picker, that can be invoked using :Easypick <name> (supports tab completion)
name = "ls",
-- the command to execute, output has to be a list of plain text entries
command = "ls",
-- specify your custom previwer, or use one of the easypick.previewers
previewer = easypick.previewers.default()
},
-- diff current branch with base_branch and show files that changed with respective diffs in preview
{
name = "changed_files",
command = "git diff --name-only $(git merge-base HEAD " .. base_branch .. " )",
previewer = easypick.previewers.branch_diff({base_branch = base_branch})
},
-- list files that have conflicts with diffs in preview
{
name = "conflicts",
command = "git diff --name-only --diff-filter=U --relative",
previewer = easypick.previewers.file_diff()
},
}
})
After the setup is called the Easypick command becomes available with all your pickers added to tab completion.
Running the :Easypick command with no arguments should result in the picker picker being called
A one off picker can be created by calling
require('easypick').one_off('type your command here')
This will open up a picker just for the typed in command with default selection action and previewer
The default action opens a file. Specify the action
field in your picker config if you want a custom action.
easypick.actions.nvim_commandf(template)
takes a template string and inserts the selected entry at the %s
position, then executes the command.
For example '!make %s'
will insert the entry at %s
position and execute the corresponding command
More recipes are available in wiki