LintaoAmons/cd-project.nvim

github github
project
stars 120
issues 6
subscribers 3
forks 14
CREATED

2024-01-21

UPDATED

last month


cd-project.nvim

I tried quite a lot Project Management plugins.

In the end,

I found all I need is an easier way to cd to another project directory.

How it works?

This plugin did nothing but provide a simpler way to add, persist and switch to directories.

HowItWorks

Install and Config

  • Work out of box with default config
-- using lazy.nvim
return {
  "LintaoAmons/cd-project.nvim",
  tag = "v0.11.0", -- Optional, You can use pin to a tag for stability
}
  • Or, you want to customise the behaviour
---@type CdProject.Config
local opts = {
  -- this json file is acting like a database to update and read the projects in real time.
  -- So because it's just a json file, you can edit directly to add more paths you want manually
  projects_config_filepath = vim.fs.normalize(vim.fn.stdpath("config") .. "/cd-project.nvim.json"),
  -- this controls the behaviour of `CdProjectAdd` command about how to get the project directory
  project_dir_pattern = { ".git", ".gitignore", "Cargo.toml", "package.json", "go.mod" },
  choice_format = "both",        -- optional, you can switch to "name" or "path"
  projects_picker = "telescope", -- optional, you can switch to `vim-ui`
  auto_register_project = false, -- optional, toggle on/off the auto add project behaviour
  -- do whatever you like by hooks
  hooks = {
    {
      callback = function(dir)
        vim.notify("switched to dir: " .. dir)
      end,
    },
    {
      callback = function(dir)
        vim.notify("switched to dir: " .. dir)
      end,                         -- required, action when trigger the hook
      name = "cd hint",            -- optional
      order = 1,                   -- optional, the exection order if there're multiple hooks to be trigger at one point
      pattern = "cd-project.nvim", -- optional, trigger hook if contains pattern
      trigger_point = "DISABLE",   -- optional, enum of trigger_points, default to `AFTER_CD`
      match_rule = function(dir)   -- optional, a function return bool. if have this fields, then pattern will be ignored
        return true
      end,
    },
  }
}

return {
    "LintaoAmons/cd-project.nvim",
    tag = "v0.10.0", -- Optional, You can also use tag to pin the plugin version for stability
    init = function() -- use init if you want enable auto_register_project, otherwise config is good
      require("cd-project").setup(opts)
    end,
  }

Hook examples

Commands and Workflow

Command Description
CdProject change working directory
CdProjectAdd add current project's directory to the database(json file)
CdProjectBack quickly switch between current project and previous project
CdProjectManualAdd Manually add a path and optionally give it a name
CdSearchAndAdd fuzzy find directories in $HOME using telescope and optional give it a name

CONTRIBUTING

Don't hesitate to ask me anything about the codebase if you want to contribute.

By telegram or 微信: CateFat

Self-Promotion