/nvim-ide

A full featured IDE layer for Neovim. Heavily inspired by VSCode.

Primary LanguageLuaMIT LicenseMIT

███╗   ██╗██╗   ██╗██╗███╗   ███╗      ██╗██████╗ ███████╗
████╗  ██║██║   ██║██║████╗ ████║      ██║██╔══██╗██╔════╝
██╔██╗ ██║██║   ██║██║██╔████╔██║█████╗██║██║  ██║█████╗  
██║╚██╗██║╚██╗ ██╔╝██║██║╚██╔╝██║╚════╝██║██║  ██║██╔══╝  
██║ ╚████║ ╚████╔╝ ██║██║ ╚═╝ ██║      ██║██████╔╝███████╗
╚═╝  ╚═══╝  ╚═══╝  ╚═╝╚═╝     ╚═╝      ╚═╝╚═════╝ ╚══════╝

nvim-ide

Workflow Video

nvim-ide is a complete IDE layer for Neovim, heavily inspired by vscode.

It provides a default set of components, an extensible API for defining your own, IDE-like panels and terminal/utility windows, and the ability to swap between user defined panels.

This plugin is for individuals who are looking for a cohesive IDE experience from Neovim and are less concerned with mixing and matching from the awesome ecosystem of Neovim plugins.

The current set of default components include:

  • Bookmarks - Per-workspace collections of bookmarks with sticky support.
  • Branches - Checkout and administer the workspaces's git branches
  • Buffers - Display and administer the currently opened buffers.
  • CallHierarchy - Display an LSP's CallHierarchy request in an intuitive tree.
  • Changes - Display the current git status and stage/restore/commit/amend the diff.
  • Commits - Display the list of commits from HEAD, view a read only diff or checkout a commit and view a modifiable diff.
  • Explorer - A file explorer which supports file selection and recursive operations.
  • Outline - A real-time LSP powered source code outline supporting jumping and tracking.
  • TerminalBrowser - A terminal manager for creating, renaming, jumping-to, and deleting terminal instances.
  • Timeline - Displays the git history of a file, showing you how the file was manipulated over several commits.

We put a lot of efforts into writing docs/nvim-ide.txt, so please refer to this file for introduction, usage, and development information.

Getting started

Ensure you have Neovim v0.8.0 or greater.

  1. Get the plugin via your favorite plugin manager.

Plug:

Plug 'ldelossa/nvim-ide'

Packer.nvim:

use {
    'ldelossa/nvim-ide'
}
  1. Call the setup function (optionally with the default config):
-- default components
local bufferlist      = require('ide.components.bufferlist')
local explorer        = require('ide.components.explorer')
local outline         = require('ide.components.outline')
local callhierarchy   = require('ide.components.callhierarchy')
local timeline        = require('ide.components.timeline')
local terminal        = require('ide.components.terminal')
local terminalbrowser = require('ide.components.terminal.terminalbrowser')
local changes         = require('ide.components.changes')
local commits         = require('ide.components.commits')
local branches        = require('ide.components.branches')
local bookmarks       = require('ide.components.bookmarks')

require('ide').setup({
    -- The global icon set to use.
    -- values: "nerd", "codicon", "default"
    icon_set = "default",
    -- Component specific configurations and default config overrides.
    components = {
        -- The global keymap is applied to all Components before construction.
        -- It allows common keymaps such as "hide" to be overriden, without having
        -- to make an override entry for all Components.
        --
        -- If a more specific keymap override is defined for a specific Component
        -- this takes precedence.
        global_keymaps = {
            -- example, change all Component's hide keymap to "h"
            -- hide = h
        },
        -- example, prefer "x" for hide only for Explorer component.
        -- Explorer = {
        --     keymaps = {
        --         hide = "x",
        --     }
        -- }
    },
    -- default panel groups to display on left and right.
    panels = {
        left = "explorer",
        right = "git"
    },
    -- panels defined by groups of components, user is free to redefine the defaults
    -- and/or add additional.
    panel_groups = {
        explorer = { outline.Name, bufferlist.Name, explorer.Name, bookmarks.Name, callhierarchy.Name, terminalbrowser.Name },
        terminal = { terminal.Name },
        git = { changes.Name, commits.Name, timeline.Name, branches.Name }
    },
    -- workspaces config
    workspaces = {
        -- which panels to open by default, one of: 'left', 'right', 'both', 'none'
        auto_open = 'left',
    },
    -- default panel sizes for the different positions
    panel_sizes = {
        left = 30,
        right = 30,
        bottom = 15
    }
})
  1. Issue the "Workspace" command to begin discovering what's available.

  2. Begin reading ":h nvim-ide"

Best used with

nvim-ide is bested used with:

fuzzy-searching:

pretty notifications:

vscode-like "peek":

deeper git integration:

debugging: