Code Monkey home page Code Monkey logo

nvim-dap-ui's Introduction

nvim-dap-ui

Introduction

A UI for nvim-dap which provides a good out of the box configuration.

preview

Installation

Install with your favourite package manager alongside nvim-dap and nvim-nio

dein:

call dein#add("mfussenegger/nvim-dap")
call dein#add("nvim-neotest/nvim-nio")
call dein#add("rcarriga/nvim-dap-ui")

vim-plug

Plug 'mfussenegger/nvim-dap'
Plug 'nvim-neotest/nvim-nio'
Plug 'rcarriga/nvim-dap-ui'

packer.nvim

use { "rcarriga/nvim-dap-ui", requires = {"mfussenegger/nvim-dap", "nvim-neotest/nvim-nio"} }

It is highly recommended to use neodev.nvim to enable type checking for nvim-dap-ui to get type checking, documentation and autocompletion for all API functions.

require("neodev").setup({
  library = { plugins = { "nvim-dap-ui" }, types = true },
  ...
})

The default icons use codicons. It's recommended to use this fork which fixes alignment issues for the terminal. If your terminal doesn't support font fallback and you need to have icons included in your font, you can patch it via Font Patcher. There is a simple step by step guide here.

Configuration

nvim-dap-ui is built on the idea of "elements". These elements are windows which provide different features.

Elements are grouped into layouts which can be placed on any side of the screen. There can be any number of layouts, containing whichever elements desired.

Elements can also be displayed temporarily in a floating window.

Each element has a set of mappings for element-specific possible actions, detailed below for each element. The total set of actions/mappings and their default shortcuts are:

  • edit: e
  • expand: <CR> or left click
  • open: o
  • remove: d
  • repl: r
  • toggle: t

See :h dapui.setup() for configuration options and defaults.

Variable Scopes

image

Element ID: scopes

Displays the available scopes and variables within them.

Mappings:

  • edit: Edit the value of a variable
  • expand: Toggle showing any children of variable.
  • repl: Send variable to REPL

Threads and Stack Frames

image

Element ID: stacks

Displays the running threads and their stack frames.

Mappings:

  • open: Jump to a place within the stack frame.
  • toggle: Toggle displaying subtle frames

Watch Expressions

image

Element ID: watches

Allows creation of expressions to watch the value of in the context of the current frame. This uses a prompt buffer for input. To enter a new expression, just enter insert mode and you will see a prompt appear. Press enter to submit

Mappings:

  • expand: Toggle showing the children of an expression.
  • remove: Remove the watched expression.
  • edit: Edit an expression or set the value of a child variable.
  • repl: Send expression to REPL

Breakpoints

image

Element ID: breakpoints

List all breakpoints currently set.

Mappings:

  • open: Jump to the location the breakpoint is set
  • toggle: Enable/disable the selected breakpoint

REPL

Element ID: repl

The REPL provided by nvim-dap.

Console

Element ID: console

The console window used by nvim-dap for the integrated terminal.

Usage

To get started simply call the setup method on startup, optionally providing custom settings.

require("dapui").setup()

You can open, close and toggle the windows with corresponding functions:

require("dapui").open()
require("dapui").close()
require("dapui").toggle()

Each of the functions optionally takes either "sidebar" or "tray" as an argument to only change the specified component.

You can use nvim-dap events to open and close the windows automatically (:help dap-extensions)

local dap, dapui = require("dap"), require("dapui")
dap.listeners.before.attach.dapui_config = function()
  dapui.open()
end
dap.listeners.before.launch.dapui_config = function()
  dapui.open()
end
dap.listeners.before.event_terminated.dapui_config = function()
  dapui.close()
end
dap.listeners.before.event_exited.dapui_config = function()
  dapui.close()
end

Floating Elements

For elements that are not opened in the tray or sidebar, you can open them in a floating window.

image

require("dapui").float_element(<element ID>, <optional settings>)

If you do not provide an element ID, you will be queried to select one.

The optional settings can included the following keys:

  • width: number Width of the window
  • height: number Height of the window
  • enter: boolean Enter the floating window
  • position: string Position of floating window. center or nil

Call the same function again while the window is open and the cursor will jump to the floating window. The REPL will automatically jump to the floating window on open.

Evaluate Expression

For a one time expression evaluation, you can call a hover window to show a value

image

require("dapui").eval(<expression>)

If an expression is not provided it will use the word under the cursor, or if in visual mode, the currently highlighted text. You can define a visual mapping like so

vnoremap <M-k> <Cmd>lua require("dapui").eval()<CR>

Call the same function again while the window is open to jump to the eval window.

The same mappings as the variables element apply within the hover window.

nvim-dap-ui's People

Contributors

rcarriga avatar przepompownia avatar hiphish avatar mfussenegger avatar brotifypacha avatar rayjameson avatar badloop avatar adelarsq avatar albertfgu avatar alexvzyl avatar arsemy avatar reisz avatar dasupradyumna avatar david-kunz avatar farhanmustar avatar litoj avatar quitlox avatar epsilonku avatar lbrayner avatar mintelm avatar marko-cerovac avatar mikesmithgh avatar nyngwang avatar serranomorante avatar raj-magesh avatar robsonpeixoto avatar megalithic avatar thehamsta avatar littletealeaf avatar younger-1 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.