Lost in the ocean of your unordered and unorganized file-explorer looking for that project? Whaler has you covered.
Whaler is a Telescope extension to move blazingly fast between directories.
It is based on the concept of tmux-windowizer from ThePrimeagen which uses a set of directories and fzf to move to another directory in a new tmux session.
Whaler offers a fast experience to move between projects without having much hassle.
Whaler.nvim
does primarily the following things:
cwd
to the selected directory. (customizable)Whaler is a neovim telescope plugin extension.
It is recommended to put whaler
as a Telescope dependency.
Using lazy:
return {
"SalOrak/whaler"
}
Whaler does not have any mappings by default. It is up to you to create any mappings.
In the Telescope configuration file:
-- Telescope setup()
local telescope = require('telescope')
telescope.setup({
-- Your telescope setup here...
extensions = {
whaler = {
-- Whaler configuration
directories = { "path/to/dir", "path/to/another/dir", { path = "path/to/yet/another/dir", alias = "yet" } },
-- You may also add directories that will not be searched for subdirectories
oneoff_directories = { "path/to/project/folder", { path = "path/to/another/project", alias = "Project Z" } },
}
}
})
-- More config here
telescope.load_extension("whaler")
--
-- Open whaler using <leader>fw
vim.keymap.set("n", "<leader>fw", function()
local w = telescope.extensions.whaler.whaler
w({
-- Settings can also be called here
})
end,)
-- Or directly
vim.keymap.set("n", "<leader>fw", telescope.extensions.whaler.whaler)
In addition to passing strings into the directories
and oneoff_directories
parameters above one may also choose to use tables such as
{path="/path/to/dir", alias="Personal Projects"}
, this will modify the text
presented in the selection UI to show [Personal Projects] theproject
instead
of the full path to each of the project folders.
Now, pressing <leader>fw
will open a Telescope picker with the subdirectories of the specified directories for you to select.
Whaler supports a few configuration options. Here is the list of a default configuration:
whaler = {
directories = { "/home/user/projects", { path = "/home/user/work", alias = "work" } }, -- Absolute path directories to search. By default the list is empty.
oneoff_directories = { "/home/user/.config/nvim" }, -- Absolute path directories to append directly to list of projects. By default is empty.
auto_file_explorer = true, -- Whether to automatically open file explorer. By default is `true`
auto_cwd = true, -- Whether to automatically change current working directory. By default is `true`
file_explorer = "netrw", -- Automagically creates a configuration for the file explorer of your choice.
-- Options are "netrw"(default), "nvimtree", "neotree", "oil", "telescope_file_browser".
file_explorer_config = { -- (OPTIONAL) Map to configure what command is triggered by which plugin.
-- For basic configuration this is done automatically setting up the file_explorer config.
plugin_name = "netrw", -- Plugin. Should be installed.
command = "Explorer", -- The plugin command to open.
-- Command must accept a path as parameter
prefix_dir = " ", -- Prefix string to be appended after the command and before the directory path.
-- Example: In the `telescope_file_browser` the value is ` path=`.
-- The final command is `Telescope file_browser path=/path/to/dir`.
-- By default is " " (space)
},
theme = { -- Telescope theme default Whaler options.
results_title = false,
layout_strategy = "center",
previewer = false,
layout_config = {
height = 0.3,
width = 0.4
},
sorting_strategy = "ascending",
border = true,
}
}
By default Whaler.nvim
changes the current working directory (cwd) to the selected directory AND opens the file explorer (netrw
by default).
Changing auto_cwd
to false
will make Whaler to only open the file explorer in the selected directory while maintaining the previous current working directory.
Changing auto_file_explorer
to false
while keeping auto_cwd
enabled will make Whaler to change the current working directory to the selected one but without losing the current file.
Attention!: Setting both auto_cwd
and auto_file_explorer
to false will make Whaler almost useless as it won't affect to anything.
The file_explorer
is a shortcut that automatically create a file_explorer_config
with some basics commands. You can, for example, use the default netrw
but instead of using Explore
you can split it using VExplore
. To do the whaler setup config should be like
whaler = {
-- Some config here
file_explorer_config = {
plugin_name = "netrw", -- Plugin name.
command = "Vexplore", -- Vertical file explorer command
prefix_dir = " ", -- (Optional) By default is space.
},
}
Here I'll show some few use cases for Whaler.nvim
.
I'll be adding more but if you have any special use case please let me know and I'll add it here!
Using the following setup:
whaler = {
directories = { "/home/user/work" },
auto_file_explorer = false, -- Do not open file explorer
auto_cwd = true, -- But change working directory
}
Imaging you are starting a new project called harp inside your work path ("/home/user/work"
). This new project it is similar to another already developed project called Wheel but with some fundamental changes. You want to compare the starting files side by side. You can enter the harp project and open the starting file. Then execute Whaler.nvim
with the previous configuration setup and select the Wheel project. Notice that nothing really changed. But if you now find files in the current directory using Telescope find_files
it would display ALL the Wheel files available. You can then open the desired file in a vertical split (default to <C-v>
) and keep modifying the main file in the harp project having the developed main Wheel side by side.
Currently the following file explorers are supported out of the box:
sync_root_with_cwd = true
in the nvim-tree
setup function.There are MANY file explorers in the neovim community. This is NOT a replacement for any of them but an improvement whilst using Telescope.
But there are many extensions and projects that do relatively the same thing.
Check them out:
You can find more telescope extensions in the Telescope Extensions Wiki.
If you use or prefer any other let me know and I'll add them here.