Home

Awesome

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

My config as ref

-- using lazy.nvim
return { "LintaoAmons/cd-project.nvim" }
-- using lazy.nvim
return {
    "LintaoAmons/cd-project.nvim",
    -- Don't need call the setup function if you think you are good with the default configuration
    tag = "v0.6.1", -- 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({
        -- 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 = "vim-ui", -- optional, you can switch to `telescope`
        auto_register_project = false, -- optional, toggle on/off the auto add project behaviour
        -- do whatever you like by hooks
        hooks = {
          -- Run before cd to project, add a bookmark here, then can use `CdProjectBack` to switch back
          -- {
          --   trigger_point = "BEFORE_CD",
          --   callback = function(_)
          --     vim.print("before cd project")
          --     require("bookmarks").api.mark({name = "before cd project"})
          --   end,
          -- },
          -- Run after cd to project, find and open a file in the target project by smart-open
          -- {
          --   callback = function(_)
          --     require("telescope").extensions.smart_open.smart_open({
          --       cwd_only = true,
          --       filename_first = false,
          --     })
          --   end,
          -- },
        } 
      })
    end,
  }

Hook examples

Commands and Apis

CommandDescription
CdProjectchange working directory
CdProjectTabchange working directory in tab
CdProjectAddadd current project's directory to the database(json file)
CdProjectBackquickly switch between current project and previous project
CdProjectManualAddManually add a path and optionally give it a name
CdSearchAndAddfuzzy find directories in $HOME using telescope and optional give it a name

You can call the Apis provided by the plugin, to integrate into your own work flow

require("cd-project.api").some_method()

you can find the exported Apis at ./lua/cd-project/api.lua

CONTRIBUTING

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

By telegram or 微信: CateFat

Some Other Neovim Stuff