Simple tools to help developers working YAML in Neovim.
Assuming yaml = require("yaml_nvim") for the Lua API:
| Command | Lua API | Description | 
|---|---|---|
| :YAMLView | yaml.view() | Shows the full path and value of the current key/value pair | 
| :YAMLYank [register] | yaml.yank_all([register]) | Yanks the full path and value of the current key/value pair. The default register is the unnamed one ( ") | 
| :YAMLYankKey [register] | yaml.yank_key([register]) | Yanks the full path of the key for the current key/value pair. The default register is the unnamed one ( ") | 
| :YAMLYankValue [register] | yaml.yank_value([register]) | Yanks the value of the current key/value pair. The default register is the unnamed one ( ") | 
| :YAMLHighlight <key> | yaml.highlight(key) | Highlights the line(s) of an YAML key | 
| :YAMLRemoveHighlight | yaml.remove_highlight() | Removes the highlight created by :YAMLHighlight/yaml.highlight(key) | 
| :YAMLQuickfix | yaml.quickfix() | Generates a quickfix with key/value pairs | 
| :YAMLSnacks | yaml.snacks() | Full path key/value fuzzy finder via Snacks if installed | 
| :YAMLTelescope | yaml.telescope() | Full path key/value fuzzy finder via Telescope if installed | 
| :YAMLFzfLua | yaml.fzf_lua() | Full path key/value fuzzy finder via fzf-lua if installed | 
- Neovim 0.9 or newer
- YAML support in treesitterβ more on No YAML parser? bellow
Snacks, Telescope and fzf-lua are optional.
What about older versions of Neovim?
With lazy.nvim
{
  "cuducos/yaml.nvim",
  ft = { "yaml" }, -- optional
  dependencies = {
    "folke/snacks.nvim", -- optional
    "nvim-telescope/telescope.nvim", -- optional
    "ibhagwan/fzf-lua" -- optional
  },
}With packer.nvim:
use {
  "cuducos/yaml.nvim",
  ft = { "yaml" }, -- optional
  requires = {
    "folke/snacks.nvim", -- optional
    "nvim-telescope/telescope.nvim", -- optional
    "ibhagwan/fzf-lua", -- optional
  },
}With vim-plug:
Plug 'folke/snacks.nvim' " optional
Plug 'nvim-telescope/telescope.nvim' " optional
Plug 'ibhagwan/fzf-lua' " optional
Plug 'cuducos/yaml.nvim'If you get a no parser for 'yaml' language error message, this means you need to install a parser such as tree-sitter-yaml. From Neovim's official treesitter docs:
You can install more parsers manually, or with a plugin like
nvim-treesitter
Here is an example, using lazy.nvim and nvim-treesitter plugin
{
  "nvim-treesitter/nvim-treesitter",
  build = ":TSUpdate",
  config = function()
    require("nvim-treesitter.configs").setup({
      ensure_installed = { "yaml" },
      },
  })
  end,
}The plugin ignores other file types than YAML. By now the list of YAML file types includes yaml and eruby.yaml β we're are open to enhance this list, so PRs are welcomed.
If you want to manually change this list, you can pass a custom config:
require("yaml_nvim").setup({ ft = { "yaml",  "other yaml filetype" } })vim.api.nvim_create_autocmd({ "BufEnter", "CursorMoved" }, {
  pattern = { "*.yaml" },
  callback = function()
    vim.opt_local.winbar = require("yaml_nvim").get_yaml_key_and_value()
  end,
})You can also call get_yaml_key() instead of get_yaml_key_and_value() to show only the YAML key.
For non-named buffers
See #33, for example:
vim.api.nvim_create_autocmd({ "BufEnter", "FileType" }, {
  group = vim.api.nvim_create_augroup("bufent_winbar", { clear = true }),
  callback = function(opts)
    if vim.bo[opts.buf].filetype == "yaml" then
      vim.api.nvim_create_autocmd({ "CursorMoved" }, {
        group = vim.api.nvim_create_augroup("curs_winbar", { clear = true }),
        callback = function()
          vim.opt_local.winbar = require("yaml_nvim").get_yaml_key_and_value()
        end,
      })
    else
      vim.opt_local.winbar = ""
      vim.api.nvim_create_augroup("curs_winbar", { clear = true })
    end
  end,
})Neovim's statusline (with lualine.nvim)
require("lualine").setup({
  sections = {
    lualine_x = { require("yaml_nvim").get_yaml_key_and_value },
    -- etc
  }
})There is a mini toolchain to help you test the plugin in isolation using a container. It requires:
| Command | Description | 
|---|---|
| ./manage build | Builds the container | 
| ./manage test | Runs the tests inside the container | 
| ./manage nvim | Opens the container's Neovim with a sample YAML file | 
