Skip to content

TheLeoP/project.nvim

 
 

Repository files navigation

🗃️ project.nvim

project.nvim is an all in one Neovim plugin written in Lua that provides project management.

⚡ Requirements

  • Neovim >= 0.11.0

✨ Features

  • Automagically cd to project directory using LSP
  • If there's LSP, it uses pattern matching

📦 Installation

Install the plugin with your preferred package manager:

Plug 'TheLeoP/project.nvim'

lua << EOF
  -- There's no need to call `setup` unless you want to change the default settings
  require("project_nvim").setup {
  -- ...
  }
EOF
return {
  "TheLeoP/project.nvim",
  opts = {
  -- There's no need to create `opts` unless you want to change the default settings
  -- ...
  },
}

⚙️ Configuration

project.nvim comes with the following defaults:

{
  -- Manual mode doesn't automatically change your root directory, so you have
  -- the option to manually do so using `:ProjectRoot` command.
  manual_mode = false,

  -- Methods of detecting the root directory. **"lsp"** uses the native neovim
  -- lsp, while **"pattern"** uses vim-rooter like glob pattern matching. Here
  -- order matters: if one is not detected, the other is used as fallback. You
  -- can also delete or rearrange the detection methods.
  detection_methods = { "lsp", "pattern" },

  -- All the patterns used to detect root dir, when **"pattern"** is in
  -- detection_methods
  patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json" },

  -- Table of lsp clients to ignore by name
  -- eg: { "efm", ... }
  ignore_lsp = {},

  -- Don't calculate root dir on specific directories
  -- Ex: { "~/.cargo/*", ... }
  exclude_dirs = {},

  -- Show hidden files in telescope
  show_hidden = false,

  -- When set to false, you will get a message when project.nvim changes your
  -- directory.
  silent_chdir = true,

  -- What scope to change the directory, valid options are
  -- * global (default)
  -- * tab
  -- * win
  scope_chdir = "global",

  -- Whether or no to call find_files on project selection
  ---@type boolean|fun(prompt_bufnr: number): boolean
  find_files = true,
}

Pattern Matching

project.nvim's pattern engine uses the same expressions as vim-rooter, but for your convenience, I will copy paste them here:

To specify the root is a certain directory, prefix it with =.

patterns = { "=src" }

To specify the root has a certain directory or file (which may be a glob), just give the name:

patterns = { ".git", "Makefile", "*.sln", "build/env.sh" }

To specify the root has a certain directory as an ancestor (useful for excluding directories), prefix it with ^:

patterns = { "^fixtures" }

To specify the root has a certain directory as its direct ancestor / parent (useful when you put working projects in a common directory), prefix it with >:

patterns = { ">Latex" }

To exclude a pattern, prefix it with !.

patterns = { "!.git/worktrees", "!=extras", "!^fixtures", "!build/env.sh" }

List your exclusions before the patterns you do want.

API

Get a list of recent projects:

local recent_projects = require("project_nvim").get_recent_projects()

vim.print(recent_projects)

About

A project management solution for neovim.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Lua 100.0%