Skip to content

πŸ’ YAML toolkit for Neovim users

License

Notifications You must be signed in to change notification settings

cuducos/yaml.nvim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

91 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

yaml.nvim Tests status

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 (")
:YAMLQuickfix yaml.quickfix() Generates a quickfix with key/value pairs
:YAMLTelescope yaml.telescope() Full path key/value fuzzy finder via Telescope if installed

Example GIF

Requirements

Telescope is optional.

What about older versions of Neovim?
  • For Neovim 0.7 or 0.8, pin to 7925bd2
  • For Neovim 0.5 or 0.6, pin to 155c23d

Install

{
  "cuducos/yaml.nvim",
  ft = { "yaml" }, -- optional
  dependencies = {
    "nvim-treesitter/nvim-treesitter",
    "nvim-telescope/telescope.nvim", -- optional
  },
}
use {
  "cuducos/yaml.nvim",
  ft = { "yaml" }, -- optional
  requires = {
    "nvim-treesitter/nvim-treesitter",
    "nvim-telescope/telescope.nvim" -- optional
  },
}

With vim-plug:

Plug 'nvim-telescope/telescope.nvim' " optional
Plug 'nvim-treesitter/nvim-treesitter'
Plug 'cuducos/yaml.nvim'

No YAML parser?

If you get a no parser for 'yaml' language error message, this means that you need to install a parser such as tree-sitter-yaml. If that is the case, you need to enable it in your config.

Here is an example, using lazy.nvim
{
  "nvim-treesitter/nvim-treesitter",
  build = ":TSUpdate",
  config = function()
    require("nvim-treesitter.configs").setup({
      ensure_installed = { "yaml" },
      },
  })
  end,
}

Configuration

File types

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" } })

Showing the YAML path and value

Neovim's winbar

vim.api.nvim_create_autocmd({ "FileType" }, {
  pattern = { "yaml" },
  callback = function()
    vim.api.nvim_create_autocmd({ "CursorMoved" }, {
      callback = function()
        vim.opt_local.winbar = require("yaml_nvim").get_yaml_key()
      end,
    })
  end,
})

You can also call get_yaml_key() instead of get_yaml_key_and_value() to show only the YAML key.

Neovim's statusline (with lualine.nvim)

require("lualine").setup({
  sections = {
    lualine_x = { require("yaml_nvim").get_yaml_key_and_value },
    -- etc
  }
})

Reporting bugs and contributing

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