Skip to content

nvim-ros2 is a simple lua plugin that adds useful features to enhance your development workflow while developing ROS 2 modules.

License

Notifications You must be signed in to change notification settings

ErickKramer/nvim-ros2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

11 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฎ ๐Ÿข nvim-ros2

nvim-ros2 is a simple lua plugin that adds useful features to enhance your development workflow while developing ROS 2 modules.

๐Ÿช„ Features

๐ŸŒณ Treesitter Parser

  • Custom grammar with syntax highlights for ROS 2 interfaces following official conventions.
  • After configuring the plugin, the grammar can be installed using TSInstall ros2

โœจ Highlights Examples

  • .msg file

ROS 2 msg

  • .srv file

ROS 2 srv

  • .action file

ROS 2 action

๐Ÿ”ญ Telescope

  • Telescope extension that adds pickers for ROS 2 components

Active Actions with info preview

telescope actions

Active interfaces with show preview

telescope interfaces

Active Nodes with info preview

telescope nodes

Active Services with type preview

telescope services

Active topics with info preview

telescope topics_info

Autocommands

  • Configure *.action, *.msg, and *.srv files as ros filetype
  • Configure *.launch, *.xacro, and *.urdf files as xml filetype

๐Ÿงฐ Installation

Configuration

Lazy.nvim

Default (Telescope)

return {
  "ErickKramer/nvim-ros2",
  dependencies = {
    "nvim-lua/plenary.nvim",
    "nvim-telescope/telescope.nvim",
    "nvim-treesitter/nvim-treesitter",
  },
  opts = {
    -- picker = "telescope", -- Default
    autocmds = true,
    treesitter = true,
  },
  keys = {
    { "<leader>li", function() require("nvim-ros2").pickers.interfaces() end, desc = "[ROS 2]: List interfaces" },
    { "<leader>ln", function() require("nvim-ros2").pickers.nodes() end, desc = "[ROS 2]: List nodes" },
    { "<leader>la", function() require("nvim-ros2").pickers.actions() end, desc = "[ROS 2]: List actions" },
    { "<leader>lt", function() require("nvim-ros2").pickers.topics_info() end, desc = "[ROS 2]: List topics with info" },
    { "<leader>le", function() require("nvim-ros2").pickers.topics_echo() end, desc = "[ROS 2]: List topics with echo" },
    { "<leader>ls", function() require("nvim-ros2").pickers.services() end, desc = "[ROS 2]: List services" },
  },
}

Snacks.nvim

return {
  "ErickKramer/nvim-ros2",
  dependencies = {
    "folke/snacks.nvim",
    "nvim-treesitter/nvim-treesitter",
  },
  opts = {
    picker = "snacks",
    autocmds = true,
    treesitter = true,
  },
  keys = {
    { "<leader>li", function() require("nvim-ros2").pickers.interfaces() end, desc = "[ROS 2]: List interfaces" },
    { "<leader>ln", function() require("nvim-ros2").pickers.nodes() end, desc = "[ROS 2]: List nodes" },
    { "<leader>la", function() require("nvim-ros2").pickers.actions() end, desc = "[ROS 2]: List actions" },
    { "<leader>lt", function() require("nvim-ros2").pickers.topics_info() end, desc = "[ROS 2]: List topics with info" },
    { "<leader>le", function() require("nvim-ros2").pickers.topics_echo() end, desc = "[ROS 2]: List topics with echo" },
    { "<leader>ls", function() require("nvim-ros2").pickers.services() end, desc = "[ROS 2]: List services" },
  },
}

Fzf-lua

return {
  "ErickKramer/nvim-ros2",
  dependencies = {
    "ibhagwan/fzf-lua",
    "nvim-treesitter/nvim-treesitter",
  },
  opts = {
    picker = "fzf",
    autocmds = true,
    treesitter = true,
  },
  keys = {
    { "<leader>li", function() require("nvim-ros2").pickers.interfaces() end, desc = "[ROS 2]: List interfaces" },
    { "<leader>ln", function() require("nvim-ros2").pickers.nodes() end, desc = "[ROS 2]: List nodes" },
    { "<leader>la", function() require("nvim-ros2").pickers.actions() end, desc = "[ROS 2]: List actions" },
    { "<leader>lt", function() require("nvim-ros2").pickers.topics_info() end, desc = "[ROS 2]: List topics with info" },
    { "<leader>le", function() require("nvim-ros2").pickers.topics_echo() end, desc = "[ROS 2]: List topics with echo" },
    { "<leader>ls", function() require("nvim-ros2").pickers.services() end, desc = "[ROS 2]: List services" },
  },
}

Related Projects

Disclaimer

The functionalities here provided were validated using ROS 2 humble.

ROS humble

About

nvim-ros2 is a simple lua plugin that adds useful features to enhance your development workflow while developing ROS 2 modules.

Topics

Resources

License

Stars

Watchers

Forks