nvim-ros2 is a simple lua plugin that adds useful features to enhance your development workflow while developing ROS 2 modules.
- Custom grammar with syntax highlights for ROS 2 interfaces following official conventions.
- After configuring the plugin, the grammar can be installed using
TSInstall ros2
.msgfile
.srvfile
.actionfile
- Telescope extension that adds pickers for ROS 2 components
- Configure
*.action,*.msg, and*.srvfiles asrosfiletype - Configure
*.launch,*.xacro, and*.urdffiles asxmlfiletype
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" },
},
}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" },
},
}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" },
},
}The functionalities here provided were validated using ROS 2 humble.








