<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>GitHub Lua Weekly Trending</title>
    <description>Weekly Trending of Lua in GitHub</description>
    <pubDate>Sat, 18 Apr 2026 01:44:31 GMT</pubDate>
    <link>http://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>neovim/nvim-lspconfig</title>
      <link>https://github.com/neovim/nvim-lspconfig</link>
      <description>&lt;p&gt;Quickstart configs for Nvim LSP&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;nvim-lspconfig&lt;/h1&gt; 
&lt;p&gt;nvim-lspconfig is a collection of LSP server configurations for the &lt;a href=&quot;https://neovim.io/doc/user/lsp.html&quot;&gt;Nvim LSP client&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;View &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/doc/configs.md&quot;&gt;all configs&lt;/a&gt;, or run &lt;code&gt;:help lspconfig-all&lt;/code&gt; from Nvim.&lt;/p&gt; 
&lt;h2&gt;Important ⚠️&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;require(&#39;lspconfig&#39;)&lt;/code&gt; (the legacy &quot;framework&quot; of nvim-lspconfig) &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/issues/3693&quot;&gt;is &lt;strong&gt;deprecated&lt;/strong&gt;&lt;/a&gt; in favor of &lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-config&quot;&gt;vim.lsp.config&lt;/a&gt; (Nvim 0.11+). 
  &lt;ul&gt; 
   &lt;li&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lua/lspconfig.lua&quot;&gt;lspconfig.lua&lt;/a&gt; &lt;em&gt;module&lt;/em&gt; will be dropped. Calls to &lt;code&gt;require(&#39;lspconfig&#39;)&lt;/code&gt; will show a warning, which will later become an error.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;nvim-lspconfig itself is &lt;strong&gt;NOT deprecated&lt;/strong&gt;. It provides server-specific configs. 
  &lt;ul&gt; 
   &lt;li&gt;The configs live in the &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lsp/&quot;&gt;lsp/&lt;/a&gt; directory. &lt;code&gt;vim.lsp.config&lt;/code&gt; automatically finds them and merges them with any local &lt;code&gt;lsp/*.lua&lt;/code&gt; configs defined by you or a plugin.&lt;/li&gt; 
   &lt;li&gt;The old configs in &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lua/lspconfig/&quot;&gt;lua/lspconfig/&lt;/a&gt; are &lt;strong&gt;deprecated&lt;/strong&gt; and will be removed.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Migration instructions&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Upgrade to Nvim 0.11+&lt;/li&gt; 
 &lt;li&gt;(Optional) Use &lt;code&gt;vim.lsp.config(&#39;…&#39;)&lt;/code&gt; (not &lt;code&gt;require&#39;lspconfig&#39;.….setup{}&lt;/code&gt;) to &lt;em&gt;customize&lt;/em&gt; or &lt;em&gt;define&lt;/em&gt; a config.&lt;/li&gt; 
 &lt;li&gt;Use &lt;code&gt;vim.lsp.enable(&#39;…&#39;)&lt;/code&gt; (not &lt;code&gt;require&#39;lspconfig&#39;.….setup{}&lt;/code&gt;) to &lt;em&gt;enable&lt;/em&gt; a config, so that it activates for its &lt;code&gt;filetypes&lt;/code&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;These configs are &lt;strong&gt;best-effort and supported by the community (you).&lt;/strong&gt; See &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/#contributions&quot;&gt;contributions&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Ask questions on &lt;a href=&quot;https://github.com/neovim/neovim/discussions&quot;&gt;GitHub Discussions&lt;/a&gt;, not the issue tracker.&lt;/li&gt; 
 &lt;li&gt;If you found a bug in Nvim LSP (&lt;code&gt;:help lsp&lt;/code&gt;), &lt;a href=&quot;https://github.com/neovim/neovim/issues/new?assignees=&amp;amp;labels=bug%2Clsp&amp;amp;template=lsp_bug_report.yml&quot;&gt;report it to Neovim core&lt;/a&gt;. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Do not&lt;/strong&gt; report it here. Only configuration data lives here.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Install&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://luarocks.org/modules/neovim/nvim-lspconfig&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/neovim/nvim-lspconfig?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Requires Nvim 0.11.3+. 
  &lt;ul&gt; 
   &lt;li&gt;Support for Nvim 0.10 &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/issues/3693&quot;&gt;will be removed&lt;/a&gt;. Upgrade Nvim and nvim-lspconfig before reporting an issue.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;With Nvim 0.12+, you can use the builtin &lt;code&gt;vim.pack&lt;/code&gt; plugin manager:&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.pack.add{
  { src = &#39;https://github.com/neovim/nvim-lspconfig&#39; },
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Or install nvim-lspconfig using Vim&#39;s &quot;packages&quot; feature:&lt;pre&gt;&lt;code&gt;git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Or use a 3rd-party plugin manager.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Quickstart&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Install a language server, e.g. &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/doc/configs.md#pyright&quot;&gt;pyright&lt;/a&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm i -g pyright
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Enable its config in your init.lua (&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-quickstart&quot;&gt;:help lsp-quickstart&lt;/a&gt;).&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.enable(&#39;pyright&#39;)
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Ensure your project/workspace contains a root marker as specified in &lt;code&gt;:help lspconfig-all&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Open a code file in Nvim. LSP will attach and provide diagnostics.&lt;pre&gt;&lt;code&gt;nvim main.py
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt; to see the status or to troubleshoot.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;See &lt;code&gt;:help lspconfig-all&lt;/code&gt; for the full list of server-specific details. For servers not on your &lt;code&gt;$PATH&lt;/code&gt; (e.g., &lt;code&gt;jdtls&lt;/code&gt;, &lt;code&gt;elixirls&lt;/code&gt;), you must manually set the &lt;code&gt;cmd&lt;/code&gt; parameter:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.config(&#39;jdtls&#39;, {
  cmd = { &#39;/path/to/jdtls&#39; },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Commands&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:LspInfo&lt;/code&gt; (alias to &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;) shows the status of active and configured language servers.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:lsp enable [&amp;lt;config_name&amp;gt;]&lt;/code&gt; (&lt;code&gt;:LspStart&lt;/code&gt; for Nvim 0.11 or older) Start the requested server name. Will only successfully start if the command detects a root directory matching the current config.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:lsp disable [&amp;lt;config_name&amp;gt;]&lt;/code&gt; (&lt;code&gt;:LspStop&lt;/code&gt; for Nvim 0.11 or older) Stops the given server. Defaults to stopping all servers active on the current buffer. To force stop use &lt;code&gt;:LspStop!&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:lsp restart [&amp;lt;client_name&amp;gt;]&lt;/code&gt; (&lt;code&gt;:LspRestart&lt;/code&gt; for Nvim 0.11 or older) Restarts the given client, and attempts to reattach to all previously attached buffers. Defaults to restarting all active servers.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;p&gt;Nvim sets default options and mappings when LSP is active in a buffer:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-defaults&quot;&gt;:help lsp-defaults&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neovim.io/doc/user/diagnostic.html#diagnostic-defaults&quot;&gt;:help diagnostic-defaults&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To customize, see:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-attach&quot;&gt;:help lsp-attach&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-buf&quot;&gt;:help lsp-buf&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Extra settings can be specified for each LSP server. With Nvim 0.11+ you can &lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-config&quot;&gt;extend a config&lt;/a&gt; by calling &lt;code&gt;vim.lsp.config(&#39;…&#39;, {…})&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.config(&#39;rust_analyzer&#39;, {
  -- Server-specific settings. See `:help lsp-quickstart`
  settings = {
    [&#39;rust-analyzer&#39;] = {},
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Config priority&lt;/h3&gt; 
&lt;p&gt;Configs are sourced in this order:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;lsp/&lt;/code&gt; in &#39;runtimepath&#39;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;after/lsp/&lt;/code&gt; in &#39;runtimepath&#39;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;vim.lsp.config()&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;If you install nvim-lspconfig or similar plugins, the order that configs are applied depends on the load order. To ensure that your own config &quot;wins&quot; and overrides the others, use &lt;code&gt;after/lsp/&lt;/code&gt; and/or &lt;code&gt;vim.lsp.config()&lt;/code&gt; to override/extend the defaults.&lt;/p&gt; 
&lt;h2&gt;Creating a config&lt;/h2&gt; 
&lt;h3&gt;As code&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Run &lt;code&gt;:lua vim.lsp.config(&#39;foo&#39;, {cmd={&#39;true&#39;}})&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;:lua vim.lsp.enable(&#39;foo&#39;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;, the new config is listed under &quot;Enabled Configurations&quot;. 😎&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;As a file&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create a file &lt;code&gt;after/lsp/foo.lua&lt;/code&gt; somewhere on your &#39;runtimepath&#39;.&lt;pre&gt;&lt;code&gt;:exe &#39;edit&#39; stdpath(&#39;config&#39;) .. &#39;/after/lsp/foo.lua&#39;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Add this code to the file (or copy any of the examples from the &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lsp/&quot;&gt;lsp/ directory&lt;/a&gt; in this repo):&lt;pre&gt;&lt;code&gt;return {
  cmd = { &#39;true&#39; },
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Save the file (with &lt;code&gt;++p&lt;/code&gt; to ensure its parent directory is created).&lt;pre&gt;&lt;code&gt;:write ++p
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Enable the config.&lt;pre&gt;&lt;code&gt;:lua vim.lsp.enable(&#39;foo&#39;)
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;, the new config is listed under &quot;Enabled Configurations&quot;. 🌈&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;LSP Settings Type Annotations&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;nvim-lspconfig&lt;/code&gt; generates Lua type definitions for each supported LSP server. By manually adding annotations (e.g., &lt;code&gt;---@type lspconfig.settings.server_name&lt;/code&gt;), you enable auto-completion and diagnostics for your server settings.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;---@type vim.lsp.Config
local config = {
  ---@type lspconfig.settings.lua_ls
  settings = {
    Lua = {
      runtime = {
        version = &#39;LuaJIT&#39;,
      },
      workspace = {
        preloadFileSize = 10000,
        library = {
          vim.env.VIMRUNTIME,
        }
      },
    },
  },
}

vim.lsp.config(&#39;lua_ls&#39;, config)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;p&gt;Start with &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt; to troubleshoot. The most common reasons a language server does not start or attach are:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Language server is not installed. nvim-lspconfig does not install language servers for you. You should be able to run the &lt;code&gt;cmd&lt;/code&gt; defined in the config from the command line and see that the language server starts. If the &lt;code&gt;cmd&lt;/code&gt; is a name instead of an absolute path, ensure it is on your &lt;code&gt;$PATH&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Missing filetype plugins. Some languages are not detected by Nvim because they have not yet been added to the filetype detection system. Ensure &lt;code&gt;:set filetype?&lt;/code&gt; shows the filetype and not an empty value.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Not triggering root detection. Some language servers require a &quot;workspace&quot;, which is found by looking for an ancestor directory that contains a &quot;root marker&quot;. The most common root marker is &lt;code&gt;.git/&lt;/code&gt;, but each config defines other &quot;root marker&quot; names. Root markers/directories are listed in &lt;code&gt;:help lspconfig-all&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;You can also explicitly set a root instead of relying on automatic detection by enabling &lt;code&gt;&#39;exrc&#39;&lt;/code&gt; and adding an &lt;code&gt;.nvim.lua&lt;/code&gt; at the desired root dir with the following code:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.config(&#39;&amp;lt;client name&amp;gt;&#39;, {
  root_dir = vim.fn.fnamemodify(debug.getinfo(1, &#39;S&#39;).source:sub(2), &#39;:p:h&#39;),
})
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Note that prior to nvim 0.12 &lt;code&gt;exrc&lt;/code&gt; file is executed only if it&#39;s inside of a cwd where you start &lt;code&gt;nvim&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Bug reports&lt;/h2&gt; 
&lt;p&gt;If you found a bug with LSP functionality, &lt;a href=&quot;https://github.com/neovim/neovim/issues/new?assignees=&amp;amp;labels=bug%2Clsp&amp;amp;template=lsp_bug_report.yml&quot;&gt;report it to Neovim core&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Before reporting a bug, check your logs and the output of &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;. Add this to your init.lua to enable verbose logging:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.log.set_level(&#39;debug&#39;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Attempt to run the language server, then run &lt;code&gt;:LspLog&lt;/code&gt; to open the log. Most of the time, the reason for failure is present in the logs.&lt;/p&gt; 
&lt;h2&gt;Contributions&lt;/h2&gt; 
&lt;p&gt;If a language server is missing from &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/doc/configs.md&quot;&gt;configs.md&lt;/a&gt;, contributing a new configuration for it helps others, especially if the server requires special setup. Follow these steps:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Read &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Create a new file at &lt;code&gt;lsp/&amp;lt;server_name&amp;gt;.lua&lt;/code&gt;. 
  &lt;ul&gt; 
   &lt;li&gt;Copy an &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/tree/master/lsp&quot;&gt;existing config&lt;/a&gt; to get started. Most configs are simple. For an extensive example see &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/raw/master/lsp/texlab.lua&quot;&gt;texlab.lua&lt;/a&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Ask questions on &lt;a href=&quot;https://github.com/neovim/neovim/discussions&quot;&gt;GitHub Discussions&lt;/a&gt; or in the &lt;a href=&quot;https://app.element.io/#/room/#neovim:matrix.org&quot;&gt;Neovim Matrix room&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Release process&lt;/h2&gt; 
&lt;p&gt;To publish a release:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Create and push a new &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/tags&quot;&gt;tag&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;After pushing the tag, a &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/.github/workflows/release.yml&quot;&gt;GitHub action&lt;/a&gt; will automatically package the plugin and publish the release to LuaRocks.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Copyright Neovim contributors. All rights reserved.&lt;/p&gt; 
&lt;p&gt;nvim-lspconfig is licensed under the terms of the Apache 2.0 license.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/LICENSE.md&quot;&gt;LICENSE.md&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/cd82705b180d7c5550892521cad6fa25665fa3a3f82075fce688a8e5c843b8eb/neovim/nvim-lspconfig" medium="image" />
      
    </item>
    
    <item>
      <title>iDvel/rime-ice</title>
      <link>https://github.com/iDvel/rime-ice</link>
      <description>&lt;p&gt;Rime 配置：雾凇拼音 | 长期维护的简体词库&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;雾凇拼音&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0.txt&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPL--3.0--only-34ad9b&quot; alt=&quot;License: GPL 3.0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/iDvel/rime-ice/releases/&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/iDvel/rime-ice?filter=!nightly&quot; alt=&quot;GitHub Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/iDvel/rime-ice/actions/workflows/release.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/iDvel/rime-ice/release.yml&quot; alt=&quot;GitHub Actions Workflow Status&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/stars/iDvel/rime-ice&quot; alt=&quot;GitHub Repo stars&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/demo.webp&quot; alt=&quot;demo&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;功能齐全，词库体验良好，长期更新修订。&lt;/p&gt; 
&lt;br /&gt; 
&lt;p&gt;&lt;a href=&quot;https://rime.im/&quot;&gt;Rime Input Method Engine / 中州韵输入法引擎&lt;/a&gt; 是一个跨平台的输入法算法框架。&lt;/p&gt; 
&lt;p&gt;基于这一框架，Rime 开发者与其他开源社区的参与者在多个平台上创造了不同的输入法前端实现。&lt;/p&gt; 
&lt;p&gt;这里是 Rime 的一份配置仓库，用户需要下载 &lt;a href=&quot;https://github.com/rime/librime/#frontends&quot;&gt;各平台对应的前端&lt;/a&gt;，并将此配置应用到配置目录。&lt;/p&gt; 
&lt;p&gt;雾凇拼音提供了一套开箱即用的完整配置，包含输入方案（全拼、常见双拼）、长期维护的开源词库及各项扩展功能。&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://dvel.me/posts/rime-ice/&quot;&gt;详细介绍&lt;/a&gt; | &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/133&quot;&gt;常见问题&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/CHANGELOG.md&quot;&gt;更新日志&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.mintimate.cc/zh/demo/fcitx5Online.html&quot;&gt;在线体验&lt;/a&gt;（由 &lt;a href=&quot;https://github.com/rimeinn/fcitx5-rime.js&quot;&gt;fcitx5-rime.js&lt;/a&gt; 支持，感谢 &lt;a href=&quot;https://github.com/Mintimate&quot;&gt;@Mintimate&lt;/a&gt; 友情构建）&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;基本套路&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;简体 | 全拼 | 双拼&lt;/li&gt; 
 &lt;li&gt;主要功能 
  &lt;ul&gt; 
   &lt;li&gt;轻量的英文输入，支持中英混输&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://dvel.me/posts/make-rime-en-better/&quot;&gt;优化英文输入体验&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;拆字反查（&lt;kbd&gt;uU&lt;/kbd&gt;+拼音），拆字辅码（拼音+&lt;kbd&gt;`&lt;/kbd&gt;+拆字辅码）&lt;/li&gt; 
   &lt;li&gt;自整理的 Emoji&lt;/li&gt; 
   &lt;li&gt;以词定字（左右中括号：&lt;kbd&gt;[&lt;/kbd&gt;、&lt;kbd&gt;]&lt;/kbd&gt;）&lt;/li&gt; 
   &lt;li&gt;长词优先&lt;/li&gt; 
   &lt;li&gt;Unicode（&lt;kbd&gt;U&lt;/kbd&gt;+Unicode 码位）&lt;/li&gt; 
   &lt;li&gt;数字、人民币大写（&lt;kbd&gt;R&lt;/kbd&gt;+数字）&lt;/li&gt; 
   &lt;li&gt;日期、时间、星期（详见方案 &lt;code&gt;/date_translator&lt;/code&gt; 节点）&lt;/li&gt; 
   &lt;li&gt;农历（转写：&lt;kbd&gt;N&lt;/kbd&gt;+八位数字；获取当前农历：全拼&lt;kbd&gt;nl&lt;/kbd&gt;，双拼&lt;kbd&gt;lunar&lt;/kbd&gt;）&lt;/li&gt; 
   &lt;li&gt;简易计算器（&lt;kbd&gt;cC&lt;/kbd&gt;+算式）&lt;/li&gt; 
   &lt;li&gt;UUID（&lt;kbd&gt;uuid&lt;/kbd&gt;）&lt;/li&gt; 
   &lt;li&gt;常见错音错字提示&lt;/li&gt; 
   &lt;li&gt;置顶候选项（详见方案 &lt;code&gt;/pin_cand_filter&lt;/code&gt; 节点）&lt;/li&gt; 
   &lt;li&gt;所有标点符号直接上屏&lt;/li&gt; 
   &lt;li&gt;特殊符号、字符输入（全拼&lt;kbd&gt;v&lt;/kbd&gt;+首字母缩写；双拼&lt;kbd&gt;V&lt;/kbd&gt;+首字母缩写）&lt;/li&gt; 
   &lt;li&gt;拼音纠错（模糊音）&lt;/li&gt; 
   &lt;li&gt;更多默认未启用的功能请参考 &lt;code&gt;lua/&lt;/code&gt; 及方案注释&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;简体字表、词库 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/iDvel/The-Table-of-General-Standard-Chinese-Characters&quot;&gt;通用规范汉字表&lt;/a&gt;（by 中华人民共和国教育部）8K 常用汉字&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://www.unicode.org/Public/&quot;&gt;Unihan 字库&lt;/a&gt;（by Unicode lnc | &lt;a href=&quot;https://www.unicode.org/license.txt&quot;&gt;UNICODE LICENSE V3&lt;/a&gt;）40K 大字库， &lt;strong&gt;默认未启用&lt;/strong&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://zh.wikipedia.org/wiki/%E7%8E%B0%E4%BB%A3%E6%B1%89%E8%AF%AD%E5%B8%B8%E7%94%A8%E8%AF%8D%E8%A1%A8&quot;&gt;现代汉语常用词表&lt;/a&gt;（by 中国国家语言文字工作委员会）&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;http://bbs.pinyin.thunisoft.com/forum.php?mod=viewthread&amp;amp;tid=30049&quot;&gt;华宇野风词库&lt;/a&gt;（by 野风）&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/rime/rime-essay-simp&quot;&gt;简化字八股文&lt;/a&gt;（by rime | &lt;a href=&quot;https://github.com/rime/rime-essay-simp/raw/master/LICENSE&quot;&gt;LGPL&lt;/a&gt;）&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/thunlp/THUOCL&quot;&gt;清华大学开源词库&lt;/a&gt;（by THUNLP | &lt;a href=&quot;https://github.com/thunlp/THUOCL/raw/master/LICENSE&quot;&gt;MIT&lt;/a&gt;）&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://ai.tencent.com/ailab/nlp/en/download.html&quot;&gt;腾讯词向量&lt;/a&gt;（@Huandeep &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/24&quot;&gt;整理&lt;/a&gt; | by Tencent AI Lab | &lt;a href=&quot;https://creativecommons.org/licenses/by/3.0/&quot;&gt;CC BY 3.0&lt;/a&gt;）&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;词库修订 
  &lt;ul&gt; 
   &lt;li&gt;校对大量异形词、错别字、错误注音&lt;/li&gt; 
   &lt;li&gt;全词库完成注音&lt;/li&gt; 
   &lt;li&gt;同义多音字注音&lt;/li&gt; 
   &lt;li&gt;参考 
    &lt;ul&gt; 
     &lt;li&gt;《现代汉语词典》&lt;/li&gt; 
     &lt;li&gt;《同义词词林》&lt;/li&gt; 
     &lt;li&gt;《新华成语大词典》&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;http://www.jiaodui.org/bbs/&quot;&gt;校对标准论坛&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Rime、Squirrel、Weasel 常用配置项的详尽注释&lt;/li&gt; 
&lt;/ul&gt; 
&lt;br /&gt; 
&lt;h2&gt;长期维护词库&lt;/h2&gt; 
&lt;p&gt;因为没有找到一份比较好的词库，干脆自己维护一个。综合了几个不错的词库，精心调教了很多。&lt;/p&gt; 
&lt;p&gt;词库简介：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;字表：&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;&lt;code&gt;8105&lt;/code&gt; 常用字表，《通用规范汉字表》+基本的扩充。&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;code&gt;41448&lt;/code&gt; Unihan 大字表，默认未启用。&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;词库：&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;base&lt;/code&gt; 基础词库，含两字词及调频。&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;ext&lt;/code&gt; 扩展词库，小词库，含多音字注音。&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;tencent&lt;/code&gt; 扩展词库，大词库，无注音（由 Rime 自动注音），含非多音字、只发一种音的多音字、同义多音字。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;纯手搓的 Emoji&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;英文词库：&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;en&lt;/code&gt; 20k 左右的常见单词 + 少许补充。&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;en_ext&lt;/code&gt; 扩展词库，大部分是缩写或互联网相关。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;维护内容主要是异形词、错别字的校对，错误注音的修正，缺失的常用词汇的增添，词频的调整。&lt;/p&gt; 
&lt;p&gt;欢迎在词库方面提 issue &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/666&quot;&gt;#666&lt;/a&gt; ，我会及时更新修正。&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;使用说明&lt;/h2&gt; 
&lt;h3&gt;选择和安装 RIME 前端&lt;/h3&gt; 
&lt;p&gt;要使用雾凇拼音默认提供的所有功能，请保证&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;您的 RIME 前端提供的 librime 版本 ≥ 1.8.5 且&lt;/li&gt; 
 &lt;li&gt;含有 librime-lua 依赖&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;以下是主流平台上的一些 RIME 前端安装建议。部分信息具有时效性，请以当下具体情况为准：&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;系统&lt;/th&gt; 
   &lt;th&gt;RIME 前端&lt;/th&gt; 
   &lt;th&gt;雾凇拼音版本要求&lt;/th&gt; 
   &lt;th&gt;备注&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Android&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/fcitx5-android/fcitx5-android/releases&quot;&gt;fcitx5-android&lt;/a&gt; + plugin.rime（小企鹅输入法）&lt;/td&gt; 
   &lt;td&gt;≥ 0.0.8&lt;/td&gt; 
   &lt;td&gt;暂不支持九宫格&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Android&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/osfans/trime&quot;&gt;Trime&lt;/a&gt;（同文输入法）&lt;/td&gt; 
   &lt;td&gt;≥ 3.2.11&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;iOS&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://apps.apple.com/cn/app/%E4%BB%93%E8%BE%93%E5%85%A5%E6%B3%95/id6446617683&quot;&gt;Hamster&lt;/a&gt;（仓输入法）&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
   &lt;td&gt;闭源；有内购&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
   &lt;td&gt;ibus + &lt;a href=&quot;https://github.com/rime/ibus-rime&quot;&gt;ibus-rime&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;librime ≥ 1.8.5 且装有 librime-lua&lt;/td&gt; 
   &lt;td&gt;部分发行版需手动安装 librime-lua&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
   &lt;td&gt;fcitx4 + &lt;a href=&quot;https://github.com/fcitx/fcitx-rime&quot;&gt;fcitx-rime&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;完整模式：librime ≥ 1.8.5 且装有 librime-lua&lt;/td&gt; 
   &lt;td&gt;仅支持 Linux 的 fcitx4 + fcitx-rime；配置目录为 &lt;code&gt;$HOME/.config/fcitx/rime/&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Linux&lt;/td&gt; 
   &lt;td&gt;fcitx5 + &lt;a href=&quot;https://github.com/fcitx/fcitx5-rime&quot;&gt;fcitx5-rime&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;librime ≥ 1.8.5 且装有 librime-lua&lt;/td&gt; 
   &lt;td&gt;部分发行版需手动安装 librime-lua&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/rime/squirrel&quot;&gt;Squirrel&lt;/a&gt;（鼠须管）&lt;/td&gt; 
   &lt;td&gt;≥ 1.0.0&lt;/td&gt; 
   &lt;td&gt;0.16.0 - 0.18.0 版本请参考&lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/1062&quot;&gt;🔗&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;macOS&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/fcitx-contrib/fcitx5-macos&quot;&gt;fcitx5-macos&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;N/A&lt;/td&gt; 
   &lt;td&gt;支持&lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/941&quot;&gt;卷轴模式&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Windows&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/rime/weasel&quot;&gt;Weasel&lt;/a&gt;（小狼毫）&lt;/td&gt; 
   &lt;td&gt;≥ 0.15.0&lt;/td&gt; 
   &lt;td&gt;0.14.3 可手动更新 &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/197&quot;&gt;rime.dll&lt;/a&gt;（但不支持彩色 emoji）&lt;br /&gt;Weasel 当下有兼容性问题，建议安装其他输入法备用&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Linux 依赖问题的具体解释请参考 &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/840&quot;&gt;#840&lt;/a&gt;。&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;本仓库中提供的 fcitx4 兼容（&lt;code&gt;others/fcitx4/&lt;/code&gt;）仅支持 &lt;strong&gt;Linux + fcitx4 + fcitx-rime&lt;/strong&gt;。 不适用于 fcitx5、ibus、macOS、Windows 等其他前端或平台。&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;雾凇拼音的部分配置可能要求更高的 librime 或者客户端版本，这些功能已在具体配置文件中注明。&lt;/p&gt; 
&lt;p&gt;以下安装方式，选择其一：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E6%89%8B%E5%8A%A8%E5%AE%89%E8%A3%85&quot;&gt;手动安装&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#git-%E5%AE%89%E8%A3%85&quot;&gt;Git 安装&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E4%B8%9C%E9%A3%8E%E7%A0%B4-plum&quot;&gt;东风破 plum&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2%E8%84%9A%E6%9C%AC&quot;&gt;自动部署脚本&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E4%BB%93%E8%BE%93%E5%85%A5%E6%B3%95-hamster&quot;&gt;仓输入法&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#arch-linux&quot;&gt;Arch Linux&lt;/a&gt;（AUR）&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;手动安装&lt;/h3&gt; 
&lt;p&gt;您可以将仓库打包下载，将所有文件复制粘贴到 RIME 前端的配置目录，重新部署。&lt;/p&gt; 
&lt;p&gt;只需要使用或者更新词库的话，可以手动粘贴覆盖 &lt;code&gt;cn_dicts&lt;/code&gt; &lt;code&gt;en_dicts&lt;/code&gt; &lt;code&gt;opencc&lt;/code&gt; 三个文件夹。&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;雾凇拼音中多个文件可能与其他方案同名冲突，如果是新手想一键安装，建议&lt;strong&gt;备份原先配置，清空配置目录&lt;/strong&gt;再导入。&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;单独使用词库注意事项：&lt;code&gt;rime_ice.dict.yaml&lt;/code&gt; 下面包含了大写字母，这和配置有些许绑定，可以直接删除，详细说明：&lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/356&quot;&gt;#356&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;您也可以前往 &lt;a href=&quot;https://github.com/iDvel/rime-ice/releases&quot;&gt;Release&lt;/a&gt; 界面，下载特定版本的词典文件（具体描述见 Release 说明），覆盖配置目录的对应文件。&lt;/p&gt; 
&lt;h3&gt;Git 安装&lt;/h3&gt; 
&lt;p&gt;您如果熟悉 git 常用操作，可以使用 git clone 命令将本仓库克隆到对应前端的用户目录。由于本库提交历史较多且更改频繁，添加 &lt;code&gt;--depth&lt;/code&gt; 参数可以显著减少传输体积。&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git clone https://github.com/iDvel/rime-ice.git Rime --depth 1

# 更新
cd Rime
git pull
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;通过 checkout 命令，您也可以实现更新部分文件的效果。&lt;/p&gt; 
&lt;h3&gt;东风破 &lt;a href=&quot;https://github.com/rime/plum&quot;&gt;plum&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;选择配方（&lt;code&gt;others/recipes/*.recipe.yaml&lt;/code&gt;）来进行安装或更新。&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;/plum/ 简易安装教程&lt;/summary&gt; 
 &lt;hr /&gt; 
 &lt;p&gt;安装 plum&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 请先安装 git 和 bash，并加入环境变量
# 请确保和 github.com 的连接稳定
cd ~
git clone https://github.com/rime/plum.git plum
# 卸载 plum 只需要删除 ~/plum 文件夹即可
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;使用 plum&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cd ~/plum
bash rime-install &amp;lt;recipe_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;部分发行版可能需要手动指定安装位置&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 为 fictx5 安装
rime_frontend=fcitx5-rime bash rime-install &amp;lt;recipe_name&amp;gt;

# 为 fcitx4 安装
rime_frontend=fcitx-rime bash rime-install &amp;lt;recipe_name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;hr /&gt; 
&lt;/details&gt; 
&lt;p&gt;词库配方只是更新具体词库文件，并不更新 &lt;code&gt;rime_ice.dict.yaml&lt;/code&gt; 和 &lt;code&gt;melt_eng.dict.yaml&lt;/code&gt;，因为用户可能会挂载其他词库。如果更新后部署时报错，可能是增、删、改了文件名，需要检查上面两个文件和词库的对应关系。&lt;/p&gt; 
&lt;p&gt;℞ 安装或更新全部文件&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bash rime-install iDvel/rime-ice:others/recipes/full
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;℞ 安装或更新所有词库文件（包含下面三个）&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bash rime-install iDvel/rime-ice:others/recipes/all_dicts
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;℞ 安装或更新拼音词库文件（ &lt;code&gt;cn_dicts/&lt;/code&gt; 目录内所有文件）&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bash rime-install iDvel/rime-ice:others/recipes/cn_dicts
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;℞ 安装或更新英文词库文件（ &lt;code&gt;en_dicts/&lt;/code&gt; 目录内所有文件）&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bash rime-install iDvel/rime-ice:others/recipes/en_dicts
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;℞ 安装或更新 opencc （ &lt;code&gt;opencc/&lt;/code&gt; 目录内所有文件）&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bash rime-install iDvel/rime-ice:others/recipes/opencc
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;下面这个配方会在 &lt;code&gt;radical_pinyin.custom.yaml&lt;/code&gt; 和 &lt;code&gt;melt_eng.custom.yaml&lt;/code&gt; 里将 &lt;code&gt;speller/algebra&lt;/code&gt; 修改为对应的双拼拼写，选择一个自己使用的双拼作为参数。&lt;/p&gt; 
&lt;p&gt;℞ 双拼补丁&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bash rime-install iDvel/rime-ice:others/recipes/config:schema=flypy
bash rime-install iDvel/rime-ice:others/recipes/config:schema=double_pinyin
bash rime-install iDvel/rime-ice:others/recipes/config:schema=mspy
bash rime-install iDvel/rime-ice:others/recipes/config:schema=sogou
bash rime-install iDvel/rime-ice:others/recipes/config:schema=abc
bash rime-install iDvel/rime-ice:others/recipes/config:schema=ziguang
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;℞ 下载特定版本的配置&lt;/p&gt; 
&lt;p&gt;在仓库后加 &lt;code&gt;@tag&lt;/code&gt; 即可，例如：&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;bash rime-install iDvel/rime-ice@2024.05.21:others/recipes/full
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;仓输入法 &lt;a href=&quot;https://github.com/imfuxiao/Hamster&quot;&gt;Hamster&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;参考 &lt;a href=&quot;https://github.com/imfuxiao/Hamster/wiki/%E5%A6%82%E4%BD%95%E5%AF%BC%E5%85%A5%22%E9%9B%BE%E6%B7%9E%E6%8B%BC%E9%9F%B3%E8%BE%93%E5%85%A5%E6%96%B9%E6%A1%88%22&quot;&gt;如何导入&quot;雾凇拼音输入方案&quot;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;仓输入法目前已内置雾凇拼音。&lt;/p&gt; 
&lt;p&gt;使用九宫格，需要同时启用九宫格方案（输入方案设置）和九宫格布局（键盘设置 - 键盘布局 - 中文 9 键）。&lt;/p&gt; 
&lt;h3&gt;自动部署脚本&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/Mark24Code/rime-auto-deploy&quot;&gt;Mark24Code/rime-auto-deploy&lt;/a&gt; 一个自动部署脚本，集成了雾凇拼音，帮助无痛快速安装、部署 Rime 输入法（中州韵、小狼毫，鼠须管）以及部署配置。&lt;/p&gt; 
&lt;h3&gt;Arch Linux&lt;/h3&gt; 
&lt;p&gt;使用 AUR helper 安装 &lt;a href=&quot;https://aur.archlinux.org/packages/rime-ice-git&quot;&gt;rime-ice-git&lt;/a&gt; 包即可。&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# paru 默认会每次重新评估 pkgver，所以有新的提交时 paru 会自动更新，
# yay 默认未开启此功能，可以通过此命令开启
# yay -Y --devel --save

paru -S rime-ice-git
# yay -S rime-ice-git
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;推荐使用&lt;a href=&quot;https://github.com/rime/home/wiki/Configuration#%E8%A3%9C%E9%9D%AA&quot;&gt;补丁&lt;/a&gt;的方式启用。&lt;/p&gt; 
&lt;p&gt;参考下面的配置示例，修改对应输入法框架用户目录（见下）中的 &lt;code&gt;default.custom.yaml&lt;/code&gt; 文件&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;iBus 为 &lt;code&gt;$HOME/.config/ibus/rime/&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Fcitx5 为 &lt;code&gt;$HOME/.local/share/fcitx5/rime/&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;details&gt; 
 &lt;summary&gt;default.custom.yaml&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;patch:
  # 仅使用「雾凇拼音」的默认配置，配置此行即可
  __include: rime_ice_suggestion:/
  # 以下根据自己所需自行定义，仅做参考。
  # 针对对应处方的定制条目，请使用 &amp;lt;recipe&amp;gt;.custom.yaml 中配置，例如 rime_ice.custom.yaml
  __patch:
    key_binder/bindings/+:
      # 开启逗号句号翻页
      - { when: paging, accept: comma, send: Page_Up }
      - { when: has_menu, accept: period, send: Page_Down }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Linux Fcitx4&lt;/h3&gt; 
&lt;p&gt;如果您使用的是 Linux + Fcitx4，可使用仓库自带脚本自动备份并同步配置：&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash others/fcitx4/install_to_fcitx4.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;如果系统较旧（例如 &lt;code&gt;librime &amp;lt; 1.8.5&lt;/code&gt; 或缺少 &lt;code&gt;librime-lua&lt;/code&gt;），可使用兼容模式（禁用 Lua 扩展功能，仅保留基础拼音/词库能力）：&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash others/fcitx4/install_to_fcitx4.sh --legacy-no-lua
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;说明：默认执行 &lt;code&gt;bash others/fcitx4/install_to_fcitx4.sh&lt;/code&gt; 时，脚本会自动检测环境；若版本过旧或缺少 &lt;code&gt;librime-lua&lt;/code&gt;，会自动切换到兼容模式。&lt;/p&gt; 
&lt;p&gt;兼容模式（&lt;code&gt;--legacy-no-lua&lt;/code&gt;）会关闭以下 Lua 扩展能力：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;以词定字（&lt;code&gt;[&lt;/code&gt;、&lt;code&gt;]&lt;/code&gt;）&lt;/li&gt; 
 &lt;li&gt;日期、时间、星期&lt;/li&gt; 
 &lt;li&gt;农历&lt;/li&gt; 
 &lt;li&gt;UUID&lt;/li&gt; 
 &lt;li&gt;Unicode 输入（&lt;code&gt;U&lt;/code&gt; 前缀）&lt;/li&gt; 
 &lt;li&gt;数字、金额大写（&lt;code&gt;R&lt;/code&gt; 前缀）&lt;/li&gt; 
 &lt;li&gt;简易计算器（&lt;code&gt;cC&lt;/code&gt; 前缀）&lt;/li&gt; 
 &lt;li&gt;错音错字提示&lt;/li&gt; 
 &lt;li&gt;英文自动大写&lt;/li&gt; 
 &lt;li&gt;v 模式 symbols 优先&lt;/li&gt; 
 &lt;li&gt;置顶候选项&lt;/li&gt; 
 &lt;li&gt;长词优先&lt;/li&gt; 
 &lt;li&gt;英文候选降权&lt;/li&gt; 
 &lt;li&gt;部件拆字辅码（&lt;code&gt;search.lua&lt;/code&gt;）&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;兼容模式仍保留：基础拼音输入、词库、&lt;code&gt;melt_eng&lt;/code&gt; 英文输入、中英混输、简繁切换、Emoji、用户短语。&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;感谢 ❤️&lt;/h2&gt; 
&lt;p&gt;特别感谢上文已经提及的词库、词典的作者、贡献者及整理者；特别感谢以及下列词库、方案、脚本的作者及贡献者（提及的均为 GitHub id）：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;@mozillazg 开发的汉字转拼音工具和数据库（MIT）&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tumuyan/rime-melt&quot;&gt;melt_eng&lt;/a&gt;（@tumuyan | &lt;a href=&quot;https://github.com/tumuyan/rime-melt/raw/master/LICENSE&quot;&gt;Apache 2.0&lt;/a&gt;） ：提供了部分（约 1000 条）英文词汇以及原始英文方案参考；&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mirtlecn/rime-radical-pinyin&quot;&gt;部件拆字方案&lt;/a&gt;（@mirtlecn | &lt;a href=&quot;https://github.com/mirtlecn/rime-radical-pinyin/raw/master/LICENSE&quot;&gt;GPL 3.0&lt;/a&gt;）：提供的拆字反查和候选筛选插件；&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tumuyan/rime-melt/raw/master/lua/melt.lua&quot;&gt;长词优先插件&lt;/a&gt;（@tumuyan | &lt;a href=&quot;https://github.com/tumuyan/rime-melt/raw/master/LICENSE&quot;&gt;Apache 2.0&lt;/a&gt;）&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/shewer/librime-lua-script/raw/main/lua/component/unicode.lua&quot;&gt;Unicode 插件&lt;/a&gt;（@shewer | &lt;a href=&quot;https://github.com/shewer/librime-lua-script/raw/main/lua/component/unicode.lua&quot;&gt;MIT&lt;/a&gt;）&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/yanhuacuo/98wubi/raw/master/lua/number.lua&quot;&gt;数字、人民币大写插件&lt;/a&gt;（@98wubi）&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/boomker/rime-fast-xhup&quot;&gt;农历插件&lt;/a&gt;（@boomker | &lt;a href=&quot;https://github.com/boomker/rime-fast-xhup/raw/master/LICENSE&quot;&gt;LGPL 3.0&lt;/a&gt;）&lt;/li&gt; 
 &lt;li&gt;未能在此处详述的、在本库源码注释中提及的项目及作者给予的帮助和参考&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;感谢 &lt;a href=&quot;http://www.jiaodui.org/bbs/&quot;&gt;校对标准论坛&lt;/a&gt; 的存在。&lt;/p&gt; 
&lt;p&gt;感谢 &lt;a href=&quot;https://github.com/Huandeep&quot;&gt;@Huandeep&lt;/a&gt; 整理的多个词库。&lt;/p&gt; 
&lt;p&gt;感谢 &lt;a href=&quot;https://github.com/mirtlecn&quot;&gt;@Mirtle&lt;/a&gt; 完善的多个功能。&lt;/p&gt; 
&lt;p&gt;感谢 &lt;a href=&quot;https://github.com/Lithium-7&quot;&gt;@Lithium-7&lt;/a&gt; 对词库的大量修订。&lt;/p&gt; 
&lt;p&gt;感谢所有贡献者。&lt;/p&gt; 
&lt;!-- 搜狗转 Rime：[lewangdev/scel2txt](https://github.com/lewangdev/scel2txt) --&gt; 
&lt;p&gt;Thanks to JetBrains for the OSS development license.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jb.gg/OpenSourceSupport&quot;&gt;&lt;img src=&quot;https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg?sanitize=true&quot; alt=&quot;JetBrains&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;br /&gt; 
&lt;h2&gt;赞助 ☕&lt;/h2&gt; 
&lt;p&gt;如果觉得项目不错，可以请 Dvel 吃个煎饼馃子。&lt;/p&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/sponsor.webp&quot; alt=&quot;请 Dvel 吃个煎饼馃子&quot; width=&quot;300&quot; /&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/169cdd3df5235020dac4c6bb046b21cf6d2fe46671f8f2a1353ccbb27d1c8de9/iDvel/rime-ice" medium="image" />
      
    </item>
    
    <item>
      <title>amzxyz/rime_wanxiang</title>
      <link>https://github.com/amzxyz/rime_wanxiang</link>
      <description>&lt;p&gt;万象拼音：基于rime生态打造，全方位对标大厂体验，内置大语料与AI辅助炼制的向量词库和语法模型，全带调编码词库，让输入行云流水，开箱即用。更有PRO版带来辅助码创新体验，支持7种辅助码。集成超级注释、候选反查筛选、快符、手动排序、tips等特色扩展功能，让你保证大厂体验的同时，深度享受 Rime 超强自定义的便利。详见README。Q群：11033572满 / 11631066&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;万象系列方案 &lt;a href=&quot;https://deepwiki.com/amzxyz/rime_wanxiang&quot;&gt;&lt;img src=&quot;https://deepwiki.com/badge.svg?sanitize=true&quot; alt=&quot;Ask DeepWiki&quot; /&gt;&lt;/a&gt;&lt;/h1&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🌌 万象拼音——基于深度优化的词库和语法模型&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;💎 核心基石：&lt;/strong&gt; &amp;gt; &lt;a href=&quot;https://github.com/amzxyz/RIME-LMDG&quot;&gt;万象词库&lt;/a&gt; 经 AI 与海量语料深度优化(目前已进入手动维护期)，是一款专为“语句流”“类大厂”打造的全方案立体词库。它将&lt;strong&gt;带调拼音标注、词组构成与精准词频&lt;/strong&gt;作为体验基石，以日常与专业词汇为主体，结合语法模型，为您带来精准、流畅的输入体验。&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;开放生态&lt;/strong&gt;：支持高度自定义，鼓励通过“词库 + 转写”打造您的专属输入方案。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;持续打磨&lt;/strong&gt;：我们极度重视数据准确与时效，欢迎随时反馈。&lt;/li&gt; 
 &lt;li&gt;📝 &lt;strong&gt;&lt;a href=&quot;https://docs.qq.com/smartsheet/DWHZsdnZZaGh5bWJI?viewId=vUQPXH&amp;amp;tab=BB08J2&quot;&gt;万象词库问题收集反馈表&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🚀 核心功能亮点&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;🧪 全能拼音标注&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;全词库自带音调。独家支持多种带调方案、声调注释，以及&lt;strong&gt;整句拼音串上屏&lt;/strong&gt;。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;⚖️ 极致权重与分词&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;采用“错位构词法”死磕首选权重与分词，能词能句能单，结合语法模型，实现行云流水的输入快感。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;🔍 深度反查系统&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;字库全面，已支持至 &lt;strong&gt;Unicode 17 (U17)&lt;/strong&gt; 标准。提供&lt;strong&gt;两分、多分、笔画&lt;/strong&gt;三种反查方式，轻松搞定生僻字。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;🧩 创新 Lua 扩展&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;支持符号包裹、Tips 扩展显示、输入后辅筛等丰富功能；并带来&lt;strong&gt;手动实时排序、无感造词不调频、输入统计&lt;/strong&gt;等创新交互。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;⌨️ 全面辅码兼容&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;底层支持全拼/双拼转换，以及&lt;strong&gt;拼音 + 辅助码&lt;/strong&gt;的自由组合。内置第三方墨奇码、鹤形、自然码、虎码首末等 8 种主流辅码方案。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;🌟 项目愿景&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;极致变革与追求&lt;/strong&gt;：万象致力于提升rime输入法音码基础体验，带来由内而外的输入变革，深入影响体验的每一处细节，都持续追求&lt;strong&gt;最优、最精&lt;/strong&gt;！&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h3&gt;✨ 效果预览 &amp;amp; 版本对比&lt;/h3&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202502200358104987_%E6%95%88%E6%9E%9C.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;万象拼音提供两个主要版本，请根据您的输入习惯选择：&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;版本差异&lt;/th&gt; 
   &lt;th&gt;🟢 标准版 (Standard)&lt;/th&gt; 
   &lt;th&gt;🔵 增强版 (Pro)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;方案文件&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;wanxiang.schema.yaml&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;wanxiang_pro.schema.yaml&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;支持类型&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;全拼、任意双拼&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;仅支持双拼&lt;/strong&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;自动调频&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;默认开启&lt;/td&gt; 
   &lt;td&gt;默认关闭&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;用户词记录&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;自动记录，无差别积累&lt;/td&gt; 
   &lt;td&gt;手动造词 `` 引导，词库可控，或者无感造词&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;用户词位置&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;wanxiang.userdb&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;zc.userdb&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;辅助码&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;仅基于声调的辅助&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;7种辅助码可选&lt;/strong&gt;，兼声调辅助&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;全场景辅筛&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;`引导支持两分、多分、笔画、声调&lt;/td&gt; 
   &lt;td&gt;`引导支持两分、多分、笔画、声调、辅助码&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;简码策略&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;全拼开启转写简码，双拼未开启&lt;/td&gt; 
   &lt;td&gt;自带部分数据但未配置 (推荐自设)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;词库格式&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;你 ➩ &lt;code&gt;nǐ&lt;/code&gt; ➩ 1000&lt;/td&gt; 
   &lt;td&gt;你 ➩ &lt;code&gt;nǐ;re&lt;/code&gt; ➩ 1000&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h3&gt;🚀 新手快速入门&lt;/h3&gt; 
&lt;p&gt;如果您不了解 Rime 的基础（如用户目录、部署、皮肤等），建议先阅读以下教程了解基础运行特性，后面只说万象怎么用，默认认为你已有基础：&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;📚 &lt;strong&gt;基础教程&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://www.mintimate.cc/zh/guide/installRime.html&quot;&gt;Oh My Rime - Rime 安装指南&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://xishansnow.github.io/posts/41ac964d.html&quot;&gt;Rime 参数配置详解&lt;/a&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;重要⚠️: 一定要学会读配置,yaml语法配置不是编程不是代码,中间的注释足以让你理解功能,README.md只能说是一个抽象后的概念总结,最后的修改还是要去改配置,使用rime绕不开配置文件,如果能遍历一次配置,将很大程度上帮助理解功能设计、参数,在未来有需求的时候想起哪里能配置,所以大可收起我不是程序员我只想使用这种心态。从成本的角度看配置收益会更大，结合readme将配置层与应用层结合起来将能用好rime。&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;💡 友情提示&lt;/strong&gt; 如果您是第一次使用万象，&lt;strong&gt;请暂时放下过往对 Rime 配置的固有经验&lt;/strong&gt;。万象拥有一套独特的自动化配置逻辑，建议严格按照以下步骤先将方案“跑起来”，体验功能后再进行深度定制。&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h4&gt;1. 📦 快速部署 (通用步骤)&lt;/h4&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;安装&lt;/strong&gt;：将方案文件解压，直接放入 Rime 的 &lt;strong&gt;用户目录&lt;/strong&gt; 中。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;em&gt;注：您可以手动下载 Release 包，或使用万象工具箱下载,图形化简单高效易于更新 见:&lt;a href=&quot;https://raw.githubusercontent.com/amzxyz/rime_wanxiang/wanxiang/#5--%E4%B8%87%E8%B1%A1%E5%B7%A5%E5%85%B7%E7%AE%B1-pc-%E7%AB%AF%E7%A5%9E%E5%99%A8&quot;&gt;万象工具箱&lt;/a&gt;&lt;/em&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;strong&gt;部署&lt;/strong&gt;：点击“重新部署”按钮，等待完成。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;切换方案&lt;/strong&gt;：在输入状态下，输入 &lt;strong&gt;&lt;code&gt;/&lt;/code&gt; (斜杠)&lt;/strong&gt; 引导指令切换双拼/全拼方案（如 &lt;code&gt;/flypy&lt;/code&gt;）。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;ul&gt; 
 &lt;li&gt;切换后请根据提示&lt;strong&gt;再次重新部署&lt;/strong&gt;。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;⚙️ 切换指令背后的逻辑&lt;/strong&gt; 该指令会自动修改 4 个补丁文件的输入类型。 若根目录无自定义文件，脚本会自动从 &lt;code&gt;custom&lt;/code&gt; 文件夹复制模版并修改；若根目录已存在自定义文件，则只修改输入方案参数，&lt;strong&gt;绝不会覆盖您的原有配置&lt;/strong&gt;。&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;pre&gt;&lt;code&gt;/flypy    → 小鹤双拼
/mspy     → 微软双拼
/zrm      → 自然码
/sogou    → 搜狗双拼
/znabc    → 智能ABC
/ziguang  → 紫光双拼
/pyjj     → 拼音加加
/gbpy     → 国标双拼
/lxsq     → 乱序17
/pinyin   → 全拼
/wxsp     → 万象双拼
/zrlong   → 自然龙(反查是全拼)
/hxlong   → 汉心龙(反查是全拼)
/jjf      → 间接辅助
/zjf      → 直接辅助
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;2. 🍎 iOS 平台特殊操作指南&lt;/h4&gt; 
&lt;p&gt;iOS 平台由于沙盒机制限制，需要额外的文件同步操作。&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;仓输入法 (Hamster)&lt;/strong&gt; 必须手动将键盘文件覆盖到应用文件才能生效：&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;下载与设置&lt;/strong&gt;：仓设置首页 -&amp;gt; 输入方案设置 -&amp;gt; 右上角 &lt;code&gt;+&lt;/code&gt; -&amp;gt; 方案下载 -&amp;gt; 下载万象方案（如标准版）。然后再勾选“万象系列方案”并取消之前的方案。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;切换输入类型&lt;/strong&gt;：在体验输入法界面，长按 &lt;code&gt;/&lt;/code&gt; (不要上划)，输入切换指令（如 &lt;code&gt;/flypy&lt;/code&gt;为小鹤双拼），等待提示“已切换至相应方案···”。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;覆盖 (关键步骤)&lt;/strong&gt;：仓设置首页 -&amp;gt; 文件管理 -&amp;gt; &lt;strong&gt;使用键盘文件覆盖应用文件&lt;/strong&gt;。（注意⚠️：如果您开启了iCloud同步功能，需要继续执行：仓设置首页 -&amp;gt; iCloud同步 -&amp;gt; &lt;strong&gt;拷贝应用文件至iCloud&lt;/strong&gt;，如果不执行则会重新部署时会重新部署iCloud中的方案而导致无法使用万象）&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;部署&lt;/strong&gt;：仓设置首页 -&amp;gt; RIME -&amp;gt; 重新部署。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;strong&gt;元书输入法 (Hamster3)&lt;/strong&gt; 需要配置正则以实现自动文件复制：&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;从 &lt;code&gt;RimeSharedSupport&lt;/code&gt; 目录中复制 &lt;code&gt;include_keyboard_rime_files.txt&lt;/code&gt; 文件到万象方案目录下。&lt;/li&gt; 
 &lt;li&gt;编辑该文件，在底部新增以下正则表达式：&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-regex&quot;&gt;^.*[.]custom.*$

&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h4&gt;3. 🧠 语法模型安装 (推荐)&lt;/h4&gt; 
&lt;p&gt;为了获得更精准的整句预测体验，建议安装语法模型。&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;安装步骤&lt;/strong&gt;：下载语法模型文件，直接放置于 Rime &lt;strong&gt;用户文件夹根目录&lt;/strong&gt;，&lt;strong&gt;无需任何额外配置&lt;/strong&gt;。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Android 用户特别警告&lt;/strong&gt;：&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;⚠️ &lt;strong&gt;关于 Fcitx5 (小企鹅) 等前端的权限问题&lt;/strong&gt; 部分安卓前端（如 Fcitx5）的数据存储在系统 &lt;code&gt;/data&lt;/code&gt; 目录下，受严格的 Linux 权限控制。&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;错误做法&lt;/strong&gt;：使用 MT 管理器等工具直接复制文件。这会导致文件所有者/权限组不一致，引发读取失败。&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;故障表现&lt;/strong&gt;：输入法部署报错、极其卡顿、提示内存溢出。&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;正确做法&lt;/strong&gt;：&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;ol&gt; 
  &lt;li&gt;使用输入法 App 自带的“导入文件”功能（调用安卓标准存储框架）。&lt;/li&gt; 
  &lt;li&gt;(Root 用户) 手动复制后，务必修正文件的 &lt;code&gt;chown&lt;/code&gt; 和 &lt;code&gt;chmod&lt;/code&gt; 权限。&lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/blockquote&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;💡 &lt;strong&gt;性能与资源说明&lt;/strong&gt; 语法模型是一个用于大数据遍历的&lt;strong&gt;静态二进制模块&lt;/strong&gt;，旨在弥补单纯词库的不足。&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;资源消耗&lt;/strong&gt;：主要利用 CPU 算力进行计算，&lt;strong&gt;内存占用极低&lt;/strong&gt;。&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;非膨胀数据&lt;/strong&gt;：它与那些“越用越大”的热加载用户数据完全不同，它的大小是固定的，不会导致系统臃肿，请放心使用。&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h4&gt;4. 🛠️ 进阶配置：Custom Patch (长期稳定之选)&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;强烈推荐长期使用者掌握此方法。&lt;/strong&gt; &lt;code&gt;custom.yaml&lt;/code&gt; 是对方案文件的最后一道补丁，属于您个人的私有配置，&lt;strong&gt;永远不会被软件升级所覆盖&lt;/strong&gt;。&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;⚙️ 运行机制&lt;/strong&gt; 在“快速运行”步骤中，通过 &lt;code&gt;/&lt;/code&gt; 指令切换方案时，脚本实际上已经帮您完成了 &lt;code&gt;custom&lt;/code&gt; 文件的初始化（从 &lt;code&gt;custom&lt;/code&gt; 文件夹复制模版到根目录）。 &lt;strong&gt;请务必注意：&lt;/strong&gt; 模版里的内容只是示例！请打开文件详细阅读每一行，保留需要的，删除不需要的，理解每一行代码的含义后再保存。&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;⚠️ 核心操作原则&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;文件位置原则&lt;/strong&gt;：&lt;/li&gt; 
&lt;/ol&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;custom&lt;/code&gt; 文件必须位于 &lt;strong&gt;用户目录根目录&lt;/strong&gt; (与 &lt;code&gt;wanxiang.schema.yaml&lt;/code&gt; 同级)。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;切勿&lt;/strong&gt;直接修改 &lt;code&gt;custom/&lt;/code&gt; 文件夹里的文件！那里只是“仓库”，修改那里不会生效。&lt;/li&gt; 
 &lt;li&gt;更多方法参照custom目录携带的patch方法论。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;strong&gt;补丁对应关系&lt;/strong&gt;：&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;wanxiang.custom.yaml  👉 补丁对象：wanxiang.schema.yaml
default.custom.yaml   👉 补丁对象：全局配置 (通常留给前端控制)
squirrel.custom.yaml  👉 补丁对象：Mac 鼠须管外观
weasel.custom.yaml    👉 补丁对象：Win 小狼毫外观

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;尽量不要在 &lt;code&gt;default.custom.yaml&lt;/code&gt; 里修改输入方案配置**！任何对方案的修改（如模糊音、快捷键）都必须针对具体的 &lt;code&gt;schema&lt;/code&gt; 进行 Patch。&lt;code&gt;default&lt;/code&gt; 文件请留给输入法前端程序去自动管理。&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h4&gt;5. 🧰 万象工具箱 (PC 端神器)&lt;/h4&gt; 
&lt;p&gt;PC 端用户推荐使用 &lt;strong&gt;Wanxiang Tools (All-in-one)&lt;/strong&gt;，内置在线更新器，一站式解决下载、覆盖、部署问题。&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;智能更新&lt;/strong&gt;：自动检测 GitHub / CNB 源，自动下载并解压覆盖。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;白名单保护 (White-list)&lt;/strong&gt;：支持受控的文件覆盖。即使下载包里有同名文件，只要您设置了白名单，工具就不会覆盖您的私人文件（需要您配置严密）。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;双重重置模式&lt;/strong&gt;：&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;构建重置&lt;/strong&gt;：清空 &lt;code&gt;build&lt;/code&gt; 目录，强制重新编译（解决奇怪的缓存 bug）。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;纯净重置&lt;/strong&gt;：仅保留白名单文件，其余全部替换为官方最新版（彻底解决文件改名、弃用残留问题）。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;👉 &lt;strong&gt;&lt;a href=&quot;https://github.com/amzxyz/RIME-LMDG/releases/tag/tool&quot;&gt;点击下载万象工具箱&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h4&gt;6. 📜 第三方更新脚本&lt;/h4&gt; 
&lt;p&gt;如果您偏好轻量级脚本或非 Windows 环境，可以使用社区贡献的更新工具：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Python / PowerShell 脚本&lt;/strong&gt;： 👉 &lt;a href=&quot;https://github.com/rimeinn/rime-wanxiang-update-tools&quot;&gt;rime-wanxiang-update-tools&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Go 语言更新器&lt;/strong&gt;： 👉 &lt;a href=&quot;https://github.com/ca-x/rime-wanxiang-updater&quot;&gt;rime-wanxiang-updater&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h4&gt;7. 🌿 东风破 (Plum) 管理器&lt;/h4&gt; 
&lt;p&gt;如果您熟悉命令行操作，推荐使用 Plum (东风破) 进行安装和更新。请确保您已安装小狼毫、鼠须管或 Fcitx5 等前端。&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;💻 运行环境要求&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;操作系统&lt;/th&gt; 
   &lt;th&gt;环境要求&lt;/th&gt; 
   &lt;th&gt;备注&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;macOS / Linux&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;✅ &lt;strong&gt;无需处理&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;系统已内置 Bash，直接运行即可。&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Windows&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;🛠️ &lt;strong&gt;需要 Git Bash&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;通常随 &lt;a href=&quot;https://git-scm.com/download/win&quot;&gt;Git for Windows&lt;/a&gt; 自动安装。&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;🚫 &lt;strong&gt;Windows 用户注意&lt;/strong&gt;： Windows 自带的 &lt;strong&gt;PowerShell&lt;/strong&gt; 或 &lt;strong&gt;CMD&lt;/strong&gt; 无法直接运行东风破脚本，&lt;strong&gt;必须&lt;/strong&gt; 使用 Git Bash 终端。&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;🔽 点击展开：万象系列方案安装命令 (完整列表)&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ol&gt; 
  &lt;li&gt;先安装plum，这是维护在万象仓库plum分支的版本，去掉了默认方案，修改了默认路径，直接复制2个命令粘贴终端直接执行，打开终端的目录由你决定&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-base&quot;&gt;git clone -b plum --depth 1 https://github.com/amzxyz/rime_wanxiang.git
cd plum
&lt;/code&gt;&lt;/pre&gt; 
 &lt;ol start=&quot;2&quot;&gt; 
  &lt;li&gt;配置用户目录变量，检查状态是否正常：&lt;br /&gt; 对于小狼毫、鼠须管、Fcitx5已经默认配置了变量&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-base&quot;&gt;export rime_frontend=&#39;rime/weasel&#39;
export rime_frontend=&#39;rime/squirrel&#39;
export rime_frontend=&#39;fcitx5/fcitx5-rime&#39;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;但对于Linux、Mac使用ibus、fcitx前端就需要自己设置变量，这个变量可以终端执行，但最好直接写入~/.zshrc&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-base&quot;&gt;export rime_frontend=rime/ibus-rime
export rime_frontend=fcitx/fcitx-rime
&lt;/code&gt;&lt;/pre&gt; 
 &lt;ol start=&quot;3&quot;&gt; 
  &lt;li&gt;有了上面的工具后你可以切换到刚刚拉取下来的脚本所在目录，执行以下对应的安装目录，即可实现安装和更新&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;h5&gt;基础版（完整）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-base:plum/full
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;基础版（仅词库）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-base:plum/dicts
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;自然码辅助版（完整）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-zrm-fuzhu:plum/full
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;自然码辅助版（仅词库）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-zrm-fuzhu:plum/dicts
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;墨奇辅助版（完整）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-moqi-fuzhu:plum/full
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;墨奇辅助版（仅词库）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-moqi-fuzhu:plum/dicts
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;小鹤辅助版（完整）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-flypy-fuzhu:plum/full
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;小鹤辅助版（仅词库）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-flypy-fuzhu:plum/dicts
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;虎码辅助版（完整）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-tiger-fuzhu:plum/full
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;虎码辅助版（仅词库）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-tiger-fuzhu:plum/dicts
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;五笔辅助版（完整）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-wubi-fuzhu:plum/full
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;五笔辅助版（仅词库）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-wubi-fuzhu:plum/dicts
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h4&gt;汉心辅助版（完整）&lt;/h4&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-hanxin-fuzhu:plum/full
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;汉心辅助版（仅词库）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-hanxin-fuzhu:plum/dicts
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;首右辅助版（完整）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-shouyou-fuzhu:plum/full
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h5&gt;首右辅助版（仅词库）&lt;/h5&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install amzxyz/rime_wanxiang@wanxiang-shouyou-fuzhu:plum/dicts
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h4&gt;8. 📂 自定义扩展-线上数据获取&lt;/h4&gt; 
&lt;p&gt;&lt;strong&gt;在线数据源清单与用途：&lt;/strong&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;文件名&lt;/th&gt; 
   &lt;th&gt;用途&lt;/th&gt; 
   &lt;th&gt;安装位置&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;renming.dict.yaml&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;人名词库，按需下载，pro使用万象工具箱刷新编码即可&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;下载后复制内容，追加到根目录的 &lt;code&gt;wanxiang.dict.yaml&lt;/code&gt; 中。&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;wuzhong.dict.yaml&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;物种词库，含动物植物分类等词条，按需下载，pro使用万象工具箱刷新编码即可&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;下载后复制内容，追加到根目录的 &lt;code&gt;wanxiang.dict.yaml&lt;/code&gt; 中。&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;9. 📂 数据管理&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;文件名&lt;/th&gt; 
   &lt;th&gt;用途&lt;/th&gt; 
   &lt;th&gt;注意事项&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;lua/data/chinese_english.txt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;中文翻译英文数据库&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/replacer.userdb中。&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;lua/data/english_chinese.txt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;英文翻译中文数据库&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/replacer.userdb中。&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;lua/data/emoji.txt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;emoji数据库&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/replacer.userdb中。&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;lua/data/abbrev.txt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;公共简码数据库&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/replacer.userdb中。&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;lua/data/t9_abbrev.txt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;t9用公共简码数据库&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/replacer.userdb中。数字为键&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;lua/data/*Phrases.txt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;OpenCC简繁转换词组数据库&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/replacer.userdb中。HK香港TW台湾&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;lua/data/*Characters.txt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;OpenCC简繁转换单字数据库&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/replacer.userdb中。ST简繁、TS繁简&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;tips_show.txt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;Tips 自带数据&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于tips.userdb&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;input_statistics.lua&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;输入统计lua创建的实时数据&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/stats.userdb&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;super_sequence.lua&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;strong&gt;手动排序lua创建的实时数据&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;数据库位于lua/sequence.userdb&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;答疑&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/amzxyz/RIME-LMDG/wiki/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E5%85%B3%E9%97%AD%E8%B0%83%E9%A2%91%E4%BB%A5%E5%8F%8A%E4%B8%8E%E4%B9%8B%E5%85%B3%E8%81%94%E7%9A%84%E6%8E%AA%E6%96%BD%E6%9C%89%E5%93%AA%E4%BA%9B&quot;&gt;为什么PRO版本默认关闭调频的说明&lt;/a&gt; &lt;code&gt;enable_user_dict: false # 是否开启自动调频，true为开启&lt;/code&gt;&lt;/p&gt; 
&lt;h3&gt;功能一览&lt;/h3&gt; 
&lt;h4&gt;辅助码系统&lt;/h4&gt; 
&lt;p&gt;万象内置多套辅助码，不同的辅助码规则不同，可前往相应的资源下学习。以自然码举例采用“拼音+部首读音”的自然逻辑，无需记忆字根，在双拼/全拼基础上直接追加部首声母即可筛选。整体套路是三码出字、四码出词。&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202407041144502563_%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20240704121653.png&quot; alt=&quot;截图_选择区域_20240704121653.png&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;直接辅助码 (仅 PRO 版)&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;基本用法&lt;/strong&gt;：输入双拼后直接追加部首声母。 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;示例&lt;/em&gt;：输入“镇”字，双拼 &lt;code&gt;vf&lt;/code&gt; + 金字旁声母 &lt;code&gt;j&lt;/code&gt; → &lt;code&gt;vfj&lt;/code&gt;。&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;进阶&lt;/em&gt;：若未出现，可继续输入主体部件的声母进一步筛选。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202407041147131421_%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20240704121809.png&quot; alt=&quot;截图_选择区域_20240704121809.png&quot; /&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;重码处理与聚拢&lt;/strong&gt;：当“双拼+辅码”与现有词组重码时（均为4码），系统优先显示词组以保证整句流畅。此时在编码末尾追加 &lt;code&gt;/&lt;/code&gt;，即可强制系统忽略词组，优先展示带辅码的单字。（ps.从与词组重码率的角度来判断辅助码的好坏也是一项重要指标）&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202408210142513354_%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20240821093644.png&quot; alt=&quot;截图_选择区域_20240821093644.png&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202408210143144721_%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20240821093701.png&quot; alt=&quot;截图_选择区域_20240821093701.png&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;间接辅助码 (仅 PRO 版)&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;基本用法&lt;/strong&gt;：使用 &lt;code&gt;/&lt;/code&gt; 作为分隔符引导辅助码（格式：&lt;code&gt;拼音/辅码&lt;/code&gt;）。 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;示例&lt;/em&gt;：&lt;code&gt;ni/re&lt;/code&gt;。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;特性&lt;/strong&gt;：若不输入 &lt;code&gt;/&lt;/code&gt;，系统将其视为普通拼音，绝不干扰整句切分。相比直接辅助码，此模式更适合新手或轻量级用户，无需担心重码干扰节奏。由于是对当前字的施加，所以必须提前考虑好，这与后面的辅筛，后筛选行程鲜明对比。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;⚙️&lt;strong&gt;候选筛选 (输入后辅筛)&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;功能非常强大，主要分为两个大类，注意由于万象支持很多辅助码和输入类型，下面的举例请不要直接套用&lt;/p&gt; 
&lt;p&gt;1、首句，定点改字（仅pro）辅助码来自词库携带的辅助码&lt;/p&gt; 
&lt;p&gt;该功能由多个片段组成的句子才生效，因为固定词库的词条有筛选就够了，无需修改，多用于常用字的变异纠正。&lt;/p&gt; 
&lt;p&gt;输入预期：有没有啥问题，输出结果：又没有啥问题，希望改掉“又”，变成“有”，只需要通过引导符 &lt;code&gt;`&lt;/code&gt; (Tab上方的键)输入“有”的辅助码&lt;code&gt;uo&lt;/code&gt;发现把“没”给改了，因为“眉”也是&lt;code&gt;uo&lt;/code&gt;，此时我们继续追加&lt;code&gt;uo9&lt;/code&gt;声调，就落点到了“ybUO9”自然出“有”，最终得到：有没有啥问题。&lt;/p&gt; 
&lt;p&gt;输入预期：真的是咯，输出结果：真的失落，这次要改两个字，我直接说结论：`后面输入 or0kk即可，or0定位是，kk定位咯。&lt;/p&gt; 
&lt;p&gt;2、辅筛，候选词过滤(base、pro均可)&lt;/p&gt; 
&lt;p&gt;这个功能与上面的功能其实工作在一条线上，怎么用完全看你的怎么想，你想着修改句子那就修改句子，你想筛选候选那就筛选候选，从来不用你使用复杂的方式，一切都工作在`这个符号后面。&lt;/p&gt; 
&lt;p&gt;当句子命中修改他将会保留下来，如果没命中但命中了辅筛，那么他将消失，呈现出来是辅筛的结果，无需复杂引导。&lt;/p&gt; 
&lt;p&gt;针对当前输入的候选词，可通过引导符 &lt;code&gt;`&lt;/code&gt; (Tab上方的键) 进行二次筛选：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;操作&lt;/strong&gt;：输入主拼音 -&amp;gt; 按 &lt;code&gt;`&lt;/code&gt; -&amp;gt; 输入部首读音首字母。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;示例&lt;/strong&gt;：输入拼音后，按 &lt;code&gt;`&lt;/code&gt; 再按 &lt;code&gt;j&lt;/code&gt; (jin) 筛选金字旁；按 &lt;code&gt;mu&lt;/code&gt; (mu) 筛选木字旁。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202407041149125588_%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20240704121635.png&quot; alt=&quot;截图_选择区域_20240704121635.png&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202407041149524870_%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20240704121611.png&quot; alt=&quot;截图_选择区域_20240704121611.png&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;对于单字：实际上我们同时支持，&lt;code&gt;两分：你(ni`rfer，ni`re)、多分：莫（mu`ckrida）、笔画：你ni`pspzhpd&lt;/code&gt;&lt;br /&gt; 对于词组，假设 &lt;strong&gt;“老实说”&lt;/strong&gt; 的辅助码序列构造为：&lt;code&gt;tb&lt;/code&gt; (老) + &lt;code&gt;gt&lt;/code&gt; (实) + &lt;code&gt;yd&lt;/code&gt; (说) = &lt;strong&gt;&lt;code&gt;tbgtyd&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;在输入拼音 &lt;code&gt;lkuiuo&lt;/code&gt; 后，按下引导符（默认 &lt;strong&gt;`&lt;/strong&gt;），你可以这样筛选：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;精准打击&lt;/strong&gt;：输入 &lt;strong&gt;&lt;code&gt;gt&lt;/code&gt;&lt;/strong&gt; —— 匹配到“实”字，筛选出包含“实”的词。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;跨字组合&lt;/strong&gt;：输入 &lt;strong&gt;&lt;code&gt;tg&lt;/code&gt;&lt;/strong&gt; —— 匹配 &lt;code&gt;t&lt;/code&gt; (老) 和 &lt;code&gt;g&lt;/code&gt; (实)。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;极致模糊&lt;/strong&gt;：输入 &lt;strong&gt;&lt;code&gt;ty&lt;/code&gt;&lt;/strong&gt; —— 匹配 &lt;code&gt;t&lt;/code&gt; (老) 和 &lt;code&gt;y&lt;/code&gt; (说)。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;任意跳跃&lt;/strong&gt;：输入 &lt;strong&gt;&lt;code&gt;bd&lt;/code&gt;&lt;/strong&gt; —— 匹配 &lt;code&gt;b&lt;/code&gt; (老的尾码) 和 &lt;code&gt;d&lt;/code&gt; (说的尾码)。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;只要你的输入符合 &lt;strong&gt;&lt;code&gt;.*t.*b.*g.*t.*y.*d.*&lt;/code&gt;&lt;/strong&gt; 的正则逻辑，都能精准命中！&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;声调反查支持&lt;/strong&gt; 我们还支持在反查符号后面任意位置按顺序输入数字声调7890,单字只有第一个输入的数字生效，词组，按字数生效&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;例如&lt;/strong&gt; 单字：ni`r9e、ni`rf9er 词组：nihk`n9zr9e 为了用户方便声调可随意插入，程序会提取数字应用声调过滤，并将剩余字母编码组成按上面提到的逻辑执行&lt;/p&gt; 
&lt;p&gt;对于pro版本还可以设置词库中携带的辅助码用于反查，这就类似间接辅助码的功能了，但不同的是间接辅助能够句中任意，而反查只能作用于词库中已有的词组。&lt;/p&gt; 
&lt;p&gt;注意刻意设计&lt;strong&gt;词组匹配不支持笔画&lt;/strong&gt;这也是为了规避复杂度&lt;/p&gt; 
&lt;p&gt;在你的方案文件中配置 &lt;code&gt;wanxiang_lookup&lt;/code&gt;：&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;wanxiang_lookup:
  tags: [ abc ]            # 生效的 tag
  key: &quot;`&quot;                 # 反查引导符 (建议使用默认，避免与分词符 &#39; 冲突)
  lookup: [ wanxiang_reverse ] # 反查数据库
  data_source: [ aux, db ] # 【核心】数据源优先级：写在前面的优先！
                               # aux: 从词库注释(辅助码)提取
                               # db: 从反查数据库(拆字/五笔画等)提取
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;反查、笔画都必须wanxiang_reverse.custom配置，默认全拼加大写五笔画，你可以根据自己习惯定制五笔画对应的编码转写，反查则切换为对应的双拼全拼，这个文件与主方案类似，都是在根用户目录生效，打开就明白了。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;输入前反查&lt;/strong&gt; 通过 拼音状态下&lt;code&gt; `〔反查：部件|笔画〕&lt;/code&gt; 来引导拆字模式 举例 &lt;code&gt;震&lt;/code&gt; 假设你不认识，你可以通过&lt;code&gt;雨和辰&lt;/code&gt; 来合并输入，拼音状态输入后，继续输入其它字符字母&lt;code&gt; `〔反查：部件|笔画〕&lt;/code&gt;会消失如下图，输入 &lt;code&gt;yu if&lt;/code&gt; 即雨 辰，结果出现了我们要的震字，且给出了辅助码 &lt;code&gt;y&lt;/code&gt; 和 &lt;code&gt;i&lt;/code&gt; ，&lt;code&gt;y&lt;/code&gt;是雨的声母&lt;code&gt;y&lt;/code&gt;，&lt;code&gt;i&lt;/code&gt;是辰的声母&lt;code&gt;ch&lt;/code&gt;，同时兼容通过hspnz代表横竖撇捺折五笔画。功能3是功能4的另一种表现形式,或者叫用法。这个功能依赖wanxiang_reverse.schema.yaml方案,可以通过custom配置成任意全拼双拼以匹配主方案一致的输入方式,因此是不是输入jn=jin需要看你具体的双拼类型。&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202409280324599355_%E6%88%AA%E5%9B%BE_%E9%80%89%E6%8B%A9%E5%8C%BA%E5%9F%9F_20240928112256.png&quot; alt=&quot;截图_选择区域_20240928112256.png&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;声调辅助筛选&lt;/strong&gt; 句子中间或者单字输入时需要可以使用更精确的聚拢方式&quot;声调辅助&quot;，7890数字按键代表1234声，轻声归并到4声，在功能4中我们可以在双拼两码后面3个编码的位置任意插入声调与两位辅助码混合使用，就是除了不用斜杠了，我们还顺序自由了，下面由两个图片说明问题,其实在键盘上想要安排四个按键是很难得,不是占用这个按键就是占用另外的,还有得朋友觉得离得远,还有得更是不需要声调,要把候选做成9个。这些都是存在的情况,现在的处理也是妥协后的结果,要想完全不占用按键类似的办法可以改成大写字母来代表,像地球拼音则是使用大于小于号这一片的符号来表示,我们的词库有声调这个基础,一定程度上还是要利用起来：&lt;/p&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202505120222182012_截图_选择区域_20250512101814.png&quot; height=&quot;130&quot; width=&quot;520&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/20250512022217432_截图_选择区域_20250512101752.png&quot; height=&quot;130&quot; width=&quot;520&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202505120222163619_截图_选择区域_20250512101713.png&quot; height=&quot;130&quot; width=&quot;520&quot; /&gt; 
&lt;p&gt;⚙️&lt;strong&gt;大写辅助筛选&lt;/strong&gt; 在输入辅助码的时候可以穿插输入小写、大写、声调来定位，如：你ni/ni9/niRE/niR9E/nirE/niRe/ni9RE/niRE9/nire9/ni9re/nir9e.&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;自学习双模式输入预测&lt;/strong&gt; 支持上屏后弹出预测候选或者输入上文后继续输入下文匹配到数据则置顶，两种模式相辅相成，开关中打开预测即可，最好是在手机上两种模式全开，在PC上面只开上下文调频具体详见：&lt;a href=&quot;https://github.com/amzxyz/rime_wanxiang/wiki/user_predict.lua%EF%BC%9ARime-%E6%99%BA%E8%83%BD%E8%81%94%E6%83%B3%E4%B8%8E%E8%AF%AD%E5%A2%83%E8%AE%B0%E5%BF%86%E5%BC%95%E6%93%8E&quot;&gt;user_predict.lua：Rime 智能联想与语境记忆引擎&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;14/18键设定：&lt;/strong&gt; 在万象的的各主方案的custom示例文件中我们已经预设了相关&lt;em&gt;18jian&lt;/em&gt;、&lt;em&gt;14jian&lt;/em&gt;的转写段落，位于wanxiang_algebra文件末尾，他的作用就是将方案原来的编码转换成键盘能打出来的字母或者数字，最终相呼应自然就能打出字了，当然这一切都可以自定义在custom文件中归你管理：&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;18jian:
  __append:
    - xlit/qwertyuiopasdfghjklzxcvbnm/qwwrryuiipassffhjjlzxxvbbm
14jian:
  __append:
    - xlit/qwertyuiopasdfghjklzxcvbnm/qqeettuuooaaddggjjlzzccbbm
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;开启方式，就是将相应的段落引用到custom头部的拼写运算后面&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;patch:
  speller/algebra:
    __patch:
      #- wanxiang_algebra:/模糊音
      - wanxiang_algebra:/base/全拼
      - wanxiang_algebra:/18jian    #引用到这里即可，⚠️注意，这一行必须是最后一行，不管前面有什么
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;⚙️&lt;strong&gt;英文方案：&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;①支持英文整句，支持与万象拼音挂接使用，支持独立使用，能在输入中自动完成句中空格的添加&lt;/p&gt; 
&lt;p&gt;②尾部~的含义，在输入句子的时候，当最后一个单词还未输入完全，如this is english只输入到了eng~这个时候就会出现~代表了一个不在词库中、未稳定的状态，这能保证你的输入视觉上的完美，也可以随时上屏。其本质是空码补全，因此有时候输入一个如scx~时候你可以空格上屏也可以拍下回车，兼容多种习惯。 这里还要提到pro版本在开启字符集过滤的时候，有很多三码为空，比如输入: 你来 当编码输入到 nil实际上是一个生僻字，但被字符集过滤删除，变为空码，而这个特性能让“你”依然显示到候选中并注释中显示~，同样代表这是一种派生，不稳定的状态，当nill完整输入完毕一个词汇将呈现出来，这与基础版nil就能打出&quot;你来&quot;是有极大的差异性的。&lt;/p&gt; 
&lt;p&gt;③输入hello则得到hello，输入首字母大写Hello则得到Hello和一众首字母大写的联想词，输入前两码大写HEllo则得到全为大写的HELLO和一众大写英文。&lt;/p&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260133175234_首字母大写.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260133175362_双字母大写.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;p&gt;④ 英文智能加空格&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;模式选择&lt;/strong&gt;：支持 &lt;code&gt;off&lt;/code&gt; (关闭)、&lt;code&gt;before&lt;/code&gt; (总是前加)、&lt;code&gt;after&lt;/code&gt; (总是后加) 及 &lt;code&gt;smart&lt;/code&gt; (智能模式) 四种策略。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;智能连续逻辑&lt;/strong&gt;：在 &lt;code&gt;smart&lt;/code&gt; 模式下，仅从连续输入的&lt;strong&gt;第二个单词&lt;/strong&gt;开始自动前加空格。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;状态打断机制&lt;/strong&gt;：手动输入【空格】或【回车】将立即重置加空格状态，有效避免在行首或手动分词后出现多余空格。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;超时自动销毁&lt;/strong&gt;：支持配置状态有效期（默认 5 秒）。若在非输入中停顿超时，自动清除加空状态，防止光标重新定位（如跳转至行首）后误输出空格，但输入中只要不上屏都能继续保持。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;路径/网址优化&lt;/strong&gt;：输入 &lt;code&gt;\&lt;/code&gt; 或 &lt;code&gt;/&lt;/code&gt; 符号后，自动将加空逻辑延后 3 个单词，确保分次输入文件路径或 URL 时内容不被空格截断。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;⚙️&lt;strong&gt;英文数字字母汉字的混合输入&lt;/strong&gt; 混合输入:字母、汉字、数字、用于连接的特殊符号等组合，以及英文混输，我们统一放在了wanxiang_mixedcode.schema.yaml混合编码方案里，此功能无需引导，直接输入，不参与组句，类似：1000wclips、AD钙奶、PN结、Type-C以及纯英文，同样可以通过custom来定义你所使用的双拼。&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202509260105536966_%E6%B7%B7%E5%90%88%E7%BC%96%E7%A0%81.jpg&quot; alt=&quot;东风5C&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;整合说明&lt;/strong&gt; 万象方案整合度很高，我们不希望使用户文件夹变得复杂，功能5中我们将两类习惯的五笔画和多分拆字和两分拆字整合到了一起，可以认为是4个挂接方案；在功能6中，我们将 英文输入、中英混合编码、以及一些其他混合编码整合到了一起，共享方案转写，两个功能都保证了可配置性，都能与你所使用的双拼契合， 对于词库也都整合到了dicts里面，为了能更好的统一更新和分发，仓库中我们支持基础版本词库、携带pro的辅助码版本词库、英文词库、混合词库4个类别，在release中各自归类，最终做到了根目录15个文件、4个文件夹示人，其中的custom目录还携带了用户自定义的法宝秘籍，能称得上简约而不简单。&lt;/p&gt; 
&lt;h4&gt;其他亮点功能&lt;/h4&gt; 
&lt;p&gt;⚙️&lt;strong&gt;日期、时间、节日、节气、问候模板：&lt;/strong&gt; 可以在按键配置的地方定制引导前缀&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;key_binder/shijian_keys: [&quot;/&quot;, &quot;o&quot;]&lt;/code&gt; 这样的配置以为你你可以/sj也可以osj，某些方案o有别的作用时候可以去掉o,灵活处理。&lt;/p&gt; 
&lt;p&gt;输入后N0101四位数模式下,可以输入月日，如果输入完整的八个数字则可以显示年月日，还有他强大的自定义能力，类型、格式、顺序、候选数，每一样都可以自定义，安全的占位逻辑和转译方式，该模式下只要是合法的月日格式、年月日各式都可以在输入完毕后直接用数字上屏，同时也兼容qwerty代表123456等上屏&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;#shijian:仅支持修改前缀，为了固定习惯，后两码写死，如有需求lua中修改
#时间：osj 或者 /sj
#日期：orq 或者 /rq
#日期差：orc 或者 /rc 
#之所以单独列出是为了保证rq能直接数字上屏，这个功能需要输入数字，所以/rc这一步不能上屏，
#但我们把逻辑后置用来代表结束就能在结束时也使用数字上屏，使用方法：
#/rc26p,/rc26+,/rc26p= 随意一个都是加上这个差值，得到未来日期；
#/rc26-,/rc26o 随意一个都是减去这个差值，得到过去日期
#以此实现了主键盘不用刻意按下shift，-=两个按键直接按，手机上也有op兼容可用，小键盘-+直接用
#农历：onl 或者 /nl
#星期：oxq 或者 /xq
#今年第几周：oww 或者 /ww
#节气：ojq 或者 /jq
#日期+时间：odt 或者 /dt
#时间戳：ott 或者 /tt
#/utc查询热门城市UTC时间
#大写N日期：N20250315 或者N0312不带年
#节日：ojr 或者 /jr
#问候模板：/day 或者 oday
# 通用日期时间格式化函数（供 /rq、/sj、/dt、N0101、N20150101 场景复用）
# 支持转义：
#   \X       —— 转义单个字符 X，按字面量输出（如 \Y \m \H 等）
#   [[...]]  —— 区块整体按字面量输出
#
# 约定占位符：
# 【日期】
#   Y  四位年份           0000-9999  例：2025
#   y  两位年份           00-99      例：25
#   m  月（前导零）        01-12      例：02
#   n  月（不带前导零）     1-12       例：2
#   d  日（前导零）        01-31      例：09
#   j  日（不带前导零）     1-31       例：9
#
# 【时间】
#   H  24小时（前导零）   00-23      例：08
#   G  24小时（不带零）   0-23       例：8
#   I  12小时（前导零）   01-12      例：08
#   l  12小时（不带零）   1-12       例：8   （注意是小写 L）
#   M  分钟（前导零）     00-59      例：05
#   S  秒（前导零）       00-59      例：09
#   p  am/pm（小写）     am / pm
#   P  AM/PM（大写）     AM / PM
# 【时区】
#   O  带冒号格式        +08:00、-04:30、+05:45
#   o  不带冒号格式      +0800、-0430、+0545
date_formats:
  - &quot;Y年m月d日&quot;
  - &quot;Y-m-d&quot;
  - &quot;Y/m/d&quot;
  - &quot;Y.m.d&quot;
  - &quot;Ymd&quot;
  - &quot;Y年n月j日&quot;
  - &quot;y年n月j日&quot;
  - &quot;n月j日&quot;
time_formats:
  - &quot;H:M&quot;
  - &quot;H点M分&quot;
  - &quot;H:M:S&quot;
  - &quot;H时M分S秒&quot;
  - &quot;下午I:M&quot;
  - &quot;I:M P&quot;
datetime_formats:
  - &quot;Y-m-d H:M:S&quot;
  - &quot;Y-m-dTH:M:S O&quot;
  - &quot;YmdHMS&quot;
  - &quot;Y年m月d日 H点M分&quot;
  - &quot;y/m/d I:M p&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260107542641_N20250102.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260108069991_N0102.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;p&gt;⚙️&lt;strong&gt;Unicode：&lt;/strong&gt; 大写 U 开头，如 U62fc 得到「拼」。&lt;/p&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260111366093_U码.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;p&gt;⚙️&lt;strong&gt;数字、金额大写：&lt;/strong&gt; 大写 R 开头，如 R1234 得到「一千二百三十四、壹仟贰佰叁拾肆元整」。输入后该模式下可以采用qwerty...依次代表123456上屏，也可以按下方向键上下进行候选的选择。&lt;/p&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260124573417_金额大写.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;p&gt;⚙️ &lt;strong&gt;/引导模式：&lt;/strong&gt; 通过输入 /sx 快捷输入关于“数学”的特殊符号，具体能输入什么可以打开 wanxiang_symbols.yaml学习。以及前述提到的日期、时间等的引导都共用斜杠开头，可以理解为一种命令模式。其中/wx可以查询仓库连接和当前版本&lt;/p&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260126183029_符号数学.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260126173818_符号大于.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260126167252_符号圆点.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;p&gt;⚙️&lt;strong&gt;输入统计Lua：&lt;/strong&gt; 触发方式：/rtj日统计，/ztj周统计，/ytj月统计，/ntj年统计，/tj生涯。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;计算器：&lt;/strong&gt; 通过输入大写V引导继续输入如：V3+5 候选框就会有8和3+5=8，基础功能 &lt;code&gt;+ - * / % ^&lt;/code&gt; 还支持 &lt;code&gt;sin(x) cos(x)&lt;/code&gt; 等众多运算方式，打开super_calculator.lua阅读相关用法。&lt;/p&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260127113759_计算器1.png&quot; height=&quot;80&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260127126065_计算器2.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;p&gt;⚙️&lt;strong&gt;自动上屏：&lt;/strong&gt; 例如：三位、四位简码唯一时，自动上屏如&lt;code&gt;jjkw岌岌可危&lt;/code&gt; &lt;code&gt;zmhu怎么回事&lt;/code&gt; 。默认未开启，方案文件中&lt;code&gt;speller:&lt;/code&gt;字段下取消注释这两句开启 &lt;code&gt;# auto_select: true # auto_select_pattern: ^[a-z]+/|^[a-df-zA-DF-Z]\w{3}|^e\w{4}&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;空码回溯：&lt;/strong&gt; 当输入的时候前面编码有候选，但继续输入无候选了，此时会将上一次的候选显示到候选中并在注释中显示了一个&lt;code&gt;~&lt;/code&gt;作为表示一种不稳固状态，在英文输入句子的时候也会有这个状态的出现。这样的设计省去了回退键，可以直接空格上屏，同时他也能极大的减少三码是为空给用户带来的异常感知。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;数字后自动半角：&lt;/strong&gt; 当中文状态输入数字的时候后面立即输入,。将自动转换为数字分割符，例如科学记数法1000,000 小数点 3.1415,如果你加入冒号:还可以优雅的输入时间12:30，当然你还可以双击输入的符号恢复全角符号的输出。但若你完全没有场景使用该功能，则可以通过patch，将其修改为commit&lt;br /&gt; &lt;code&gt;punctuator/digit_separators: &quot;,.&quot; &amp;gt; punctuator/digit_separators: commit&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;错音错字提示：&lt;/strong&gt; 例如：输入&lt;code&gt;gei yu给予&lt;/code&gt;，获得&lt;code&gt;jǐ yǔ&lt;/code&gt;提示，此功能与全拼、双拼类型无关全部支持；&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202509260127525844_错音给予.jpg&quot; height=&quot;80&quot; /&gt; &lt;img src=&quot;https://storage.deepin.org/thread/202509260127524705_错音崩溃.jpg&quot; height=&quot;80&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;快符Lua：&lt;/strong&gt; 例如通过 &lt;code&gt;a/&lt;/code&gt; ，快速自动上屏“！”符号或者定义为任意字符，享受26字母的扩展。其中值设置为&lt;code&gt;repeat&lt;/code&gt;则意味着按下对应按键能否重复上一次上屏的内容。位于方案中quick_symbol_text段落是可以自定义映射关系的，对于特殊需求用户还可以修改正则表达式让引导策略发生变化，如首字符引导；&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;超级tips：&lt;/strong&gt; 支持将表情、化学式、翻译、简码 提示等等你能想到得数据获得提示显示并将通过一个自定义按键直接上屏，默认为“，” 也表现为逗号，避免了这类内容占用候选框，轻量化提示与上屏的能力。如果你设置逗号句号为翻页，逗号翻页如果正好是首选匹配，句号作为下一页则不干扰，当想要回到第一页，此时已经不匹配tips，此时逗号就不被tips占用了，就可以用于翻页。也可以将触发键变更为其他，位于key_binder/tips_key: &quot;comma&quot;。对于加载的类型可以屏蔽某一种，位于tips/disabled_types: []，括号内填入# 可选项为：偏旁，符号，化学式，时间，符号，组字，翻译，表情，货币，车牌, 单位等禁用类型。通过Control+t 进行开关。&lt;br /&gt; ⚠️仓输入法、超越输入法设置按键交由rime去处理，没有特殊需求应该一律交给rime，如需关闭将tips开关reset 0即可；&lt;br /&gt; ⚠️某些前端开启嵌入与窗口交互有bug，在开启tips的时候可能会造成异常的编码上屏，此时可以关闭tips在这些窗口使用输入法。&lt;/p&gt; 
&lt;p&gt;化学式：&lt;img src=&quot;https://storage.deepin.org/thread/202509260128462735_tips化学式.jpg&quot; height=&quot;80&quot; /&gt;符号：&lt;img src=&quot;https://storage.deepin.org/thread/202509260128454675_tips符号.jpg&quot; height=&quot;80&quot; /&gt;表情：&lt;img src=&quot;https://storage.deepin.org/thread/202509260128457494_tips表情.jpg&quot; height=&quot;80&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;短语格式化Lua：&lt;/strong&gt; 将首页自定义短语中（custom phrase），诸如\n \s \t 等行中标识符转换为实际的换行、空格、制表符等等，支持重复字符声明，使得类似输入jys可以打出一首带格式的《静夜思》，使用\3的形式表示前面的字符重复N次。同时还支持对于动态变量的输入自定义，如时间、日期、时刻等等，打开文件即可看到完整占位说明，这个格式化也不拘泥于custom_phrase.txt，而是任何能产生候选的位置都支持，如super_replace提供的功能txt中都可以自定义，比如我在other.txt写入了 此时此刻 孪生一个 午时八刻 这样的候选。&lt;/p&gt; 
&lt;p&gt;例：&lt;code&gt;静夜思\n\s\3李白\n床前明月光\n疑似地上霜\n举头望明月\n低头思故乡 jys&lt;/code&gt;&lt;/p&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260129305342_格式化.jpg&quot; height=&quot;260&quot; /&gt; 
&lt;p&gt;⚙️&lt;strong&gt;成对符号包裹Lua：&lt;/strong&gt; 将输入中的短语通过输入追加\a 这样的末尾编码，触发相对于a这个字母映射的成对符号，例如：&lt;code&gt; sj mk lq lh ji\k=《三毛流浪记》&lt;/code&gt;可以通过custom自定义符号和触发方式。&lt;/p&gt; 
&lt;p&gt;工作逻辑：输入词汇编码 &amp;gt; 按下锁定按钮\ &amp;gt; 按下映射字符\a &amp;gt; 《候选包裹成对符号》&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://storage.deepin.org/thread/202509260130219621_首选成对符号1.jpg&quot; height=&quot;80&quot; /&gt; &lt;img src=&quot;https://storage.deepin.org/thread/202509260130208277_首选成对符号2.jpg&quot; height=&quot;80&quot; /&gt; &lt;img src=&quot;https://storage.deepin.org/thread/202509260130199763_首选成对符号3.jpg&quot; height=&quot;80&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;输入模式切换Lua：&lt;/strong&gt; 使用shift+space来进行中文候选词、英文候选词、混合候选词之间切换，默认为混合编码输入模式。这种是通过单一方案过滤得到的，当切换到英文模式的时候也可以用来输入英文整句。你也可以单独启用英文方案，可自定义快捷键在英文方案与中文方案之间切换，也是可以的。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;超级注释Lua：&lt;/strong&gt; 任意长度候选词的辅助码提示能力，默认开启1个字的辅助码，可以在方案文件中定义更长的长度。Ctrl+a可以实时在开启辅助码提示、开启声调全拼提示、关闭注释 三个状态循环，Ctrl+c开启拆分辅助提示，优先级高于普通辅助提示。辅助码、拆分提示仅PRO有。cand_type则能配置候选类型外显标识符号，如∞代表多片段组成的句子，小加号代表记录的用户词，一起一些其他可配置项。&lt;/p&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260134283927_辅助码提示.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260134278003_声调提示.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;img src=&quot;https://storage.deepin.org/thread/202509260134284782_拆分提示.jpg&quot; height=&quot;80&quot; /&gt; 
&lt;p&gt;⚙️&lt;strong&gt;输入码音调显示Lua：&lt;/strong&gt; 通过Ctrl+s可以使得输入码实时动态显示全拼并加音调，这是万象特色功能，你可以通过shift+enter上屏当前显示的编码字符串；&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;用户按需造词（仅PRO）：&lt;/strong&gt; 默认通过&lt;code&gt;``&lt;/code&gt;引导的方式进入用户词自造词模式，继续输入则&lt;code&gt;``&lt;/code&gt;前缀消失，后面打出来的字上屏后完成造词。 pro版本讲究自主可控，由于辅助码的使用在很多时候不熟悉的时候可能会上屏更加异常的词汇或者生僻字，有的用户还不会使用Esc退出输入，而是选择直接敲下空格。按需造词可以有效把控造出的词是有意义的，而且默认靠后，原因简单基本上有意义的高频词万象已经提供，你应该使用辅助码将其前置。&lt;strong&gt;重点&lt;/strong&gt;：在此基础上我们还支持“后触发”当你输入编码后发现没有你要的行业词汇，此时在后面双击&lt;code&gt;``&lt;/code&gt; 就可以在不删除编码的情况下完成造词。还有一个是次选造词，如果次选是你想要的，并且是词库组合成的，上屏就会记录下来。&lt;/p&gt; 
&lt;p&gt;总结一下，造词功能由：①&lt;code&gt;``&lt;/code&gt;起始的主动造词，②&lt;code&gt;``&lt;/code&gt;在编码后面的主动造词，③次选造词。三个特性构成&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;中文无感造词Lua（仅PRO）：&lt;/strong&gt; 在关闭调频的情况下，通过逐步选字选词的方式上屏将为你记录整段，且不会产生小碎片，所造词汇与db用户词是一回事，遵循用户词管理的相关逻辑，其中直接上屏不造词。相比按需造词更加不打断输入。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;英文造词Lua：&lt;/strong&gt; 在任意英文输入编码后面，如：&lt;code&gt;nihao\\&lt;/code&gt;末尾输入两个就可以触发英文造词。然后空格上屏他就记录到了en.userdb，导出和同步与用户词逻辑一致。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;用户词删除：&lt;/strong&gt; 使用Ctrl+del是rime系统删除用户词,就可以将用户词标记为c&amp;lt;=0，这在rime系统中就表现为不使用，假性删除。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;字符集过滤（Lua）：&lt;/strong&gt; 默认开启过滤，写在charset.dict.yaml的就是可以通过的字表，默认为8105+𰻞𰻞，如果你想什么字在小字集模式可以通过可以写在这里，配套开关【小字集、大字集】，快捷键Ctrl+g ，万象的字符集过滤其实不仅仅是这点，首先我们提供了一个二进制滤镜数据库charset_reverse.bin，内部通过编码层对字做出来标记，也就是除了字符范围，还标记了繁体适用范围.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# a,通用规范汉字表
# b,GB2312,
# g,GBK,
# T,Big5,(台港澳常用)
# j,简体,OpenCC (t2s)
# f,通用繁体,OpenCC (s2t)
# h,香港繁体, OpenCC (s2hk)
# t,台湾繁体, OpenCC (s2tw)
# u,基本区,U+4E00 - U+9FFF
# A-I,扩展 A-I 区,U+3400 及各扩展区 (支持到 Ext-I)
# c,兼容区汉字
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;我们在配置中还可以联动简繁转换的开关，对不同开关想要显示的范围进行配置，注意字母可以列出多个base: aj，还可以单独定义这个开关下对应的基黑白名单，他可以用来微调预设的范围，比如8105其实没有“囧”但常用我们就可以加入白名单里面，让开启过滤的时候能显示出来&lt;br /&gt; 同时不同的option开关之间是求并集，也就是说假设你切换到了s2hk意味着所有香港繁体字都能显示出来，合起来就是8105+香港繁体，这样就不会因为开启了字符集过滤导致某些繁体字丢失显示不出来。这样的设计让你能随意新增开关，定义开关对应的过滤范围，以及对于简繁转换的联动。&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;charset:
  - option: charset_filter
    base: a  #可以填入多个类别如aj
    addlist:
      - &quot;诶濛硷氽尛躝〇冇吔咗囧屌鲶芶咲畑垅𰻝𰻞龍朙&quot;
    blacklist: []
  - option: s2t
    base: f
    addlist: []
    blacklist: []
  - option: s2hk
    base: h
    addlist: []
    blacklist: []
  - option: s2tw
    base: t
    addlist: []
    blacklist: []
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;⚙️&lt;strong&gt;超级替换(lua):&lt;/strong&gt; super_replacer.lua一个通过lua创建的用来替代自带OpenCC组件的增强组件，用于实现候选词的动态替换、追加。&lt;/p&gt; 
&lt;h4&gt;🛠️ Super Replacer 参数配置手册&lt;/h4&gt; 
&lt;h5&gt;1. 核心全局参数&lt;/h5&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;参数&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;说明&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;示例值&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;db_name&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;数据库/词库加载路径&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;lua/replacer&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;delimiter&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;多个候选词之间的分隔符&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;&quot;|&quot;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;comment_format&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;注释显示的样式模板（&lt;code&gt;%s&lt;/code&gt; 为占位符）&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;&quot;〔%s〕&quot;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;chain&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;流水线模式&lt;/strong&gt;：&lt;code&gt;true&lt;/code&gt; 串行处理（A-&amp;gt;B），&lt;code&gt;false&lt;/code&gt; 并行处理&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h6&gt;2. 任务项配置 (&lt;code&gt;types&lt;/code&gt;)&lt;/h6&gt; 
&lt;p&gt;每个 &lt;code&gt;- option&lt;/code&gt; 代表一个具体的功能模块，其核心参数如下：&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;参数&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;说明&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;可选值 / 示例&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;option&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;绑定的开关名称（需在 &lt;code&gt;switches&lt;/code&gt; 中定义）&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;emoji&lt;/code&gt;, &lt;code&gt;s2t&lt;/code&gt;实际的开关名称 &lt;code&gt;true&lt;/code&gt; (常驻开启)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;mode&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;处理模式&lt;/strong&gt;（决定结果如何呈现）&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;append&lt;/code&gt;, &lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;comment&lt;/code&gt;, &lt;code&gt;abbrev&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;comment_mode&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;注释继承模式&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;none&lt;/code&gt; (空), &lt;code&gt;append&lt;/code&gt; (继承), &lt;code&gt;text&lt;/code&gt; (原词变注释)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;sentence&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;是否开启&lt;strong&gt;句子级别&lt;/strong&gt;替换（整句转换）&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;true&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;生效的输入段类型（通常对应拼音）&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;[abc]&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;prefix&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;数据检索前缀（用于隔离不同功能的数据）&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;_em_&lt;/code&gt;, &lt;code&gt;_en_&lt;/code&gt;, &lt;code&gt;_abbr_&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;files&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;关联的数据源文件列表（支持多个）&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;[lua/data/xxx.txt]&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h5&gt;3. 四大模式 (&lt;code&gt;mode&lt;/code&gt;) 详解&lt;/h5&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;模式&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;行为描述&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;典型场景&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;append&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;新增候选&lt;/strong&gt;：在原词后面添加新候选词&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;哈哈&lt;/code&gt; -&amp;gt; &lt;code&gt;1.哈哈 2.😄&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;replace&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;替换原词&lt;/strong&gt;：将原始候选词直接修改为目标词&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;软件&lt;/code&gt; -&amp;gt; &lt;code&gt;軟體&lt;/code&gt; (简转繁)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;comment&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;仅注释&lt;/strong&gt;：不改变候选文字，仅在括号内提示&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;hello&lt;/code&gt; -&amp;gt; &lt;code&gt;hello〔你好〕&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;&lt;code&gt;abbrev&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;strong&gt;简码模式&lt;/strong&gt;：匹配&lt;strong&gt;输入编码&lt;/strong&gt;而非文本&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;zm&lt;/code&gt; (编码) -&amp;gt; &lt;code&gt;1.怎么 2.在吗&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h5&gt;4. 数据文件 (&lt;code&gt;.txt&lt;/code&gt;) 编写规范&lt;/h5&gt; 
&lt;p&gt;数据文件需放置于 &lt;code&gt;files&lt;/code&gt; 指定路径，使用 &lt;strong&gt;Tab (制表符)&lt;/strong&gt; 分隔：&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;code&gt;匹配内容 [Tab] 替换内容1 | 替换内容2&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong&gt;举例：&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;火 🔥&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;apple 苹果&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;yyds 永远的神&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;⚙️&lt;strong&gt;手动排序（Lua）：&lt;/strong&gt; ①词典候选类型：对选中的候选词操作，使用Ctrl+j向左一步，Ctrl+k向右一步，Ctrl+l(零)移除选中排序信息，Ctrl+p 置顶选中候选。其作用于当时编码与候选词；②动态生成的Lua候选，很多时候我们对日期、时间等输出格式首选有着自己的追求，复杂的配置又往往提升了使用难度，于是我们基于排序Lua实现了动态内容的按序号索引的排序，也就是说该序号下原本生成的格式整个发生了位置变化，使用方法一致。信息储存于Lua文件夹下排序数据库中sequence.userdb，支持导出导入数据便于多设备共用。&lt;/p&gt; 
&lt;p&gt;状态标识：按下ctrl键会显示数据库中已经储存的被移动过的候选，圆点-表示移动过但回到了原位， 其他±各自代表移动的幅度与趋势。&lt;/p&gt; 
&lt;p&gt;排序信息同步：&lt;/p&gt; 
&lt;p&gt;A 先点击同步，多见于右键菜单，保证创建了相应的同步目录，如没有自定义则位于用户目录下/sync&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;打开用户目录，会有installation.yaml文件，打开后会有如下信息，我们将installation_id认为是设备id，初次会创建自动串号，你也可以将其修改为当前设备名称&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;distribution_code_name: &quot;fcitx-rime&quot;
distribution_name: Rime
distribution_version: 5.1.9
install_time: &quot;Mon Jun 23 18:47:55 2025&quot;
installation_id: &quot;ff9b2823-8733-44bb-a497-daf382b74ca5&quot;  #这里可以随意编辑，比如修改为windows
rime_version: 1.13.1
update_time: &quot;Sat Sep  6 16:08:56 2025&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;得到这个id后我们就可以下一步构建出同步文件的名称sequence_设备id.txt&lt;/p&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;首先确定一个主要管理设备，在/sync中创建一个描述设备清单的文件 &lt;code&gt;sequence_device_list.txt&lt;/code&gt;，这个清单告诉程序要读取同目录下哪些文件进行合并&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-内部内容为：&quot;&gt;sequence_deepin.txt
sequence_windows.txt
sequence_iPhone.txt
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;按「部署」，会进行以下几步：&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;①、自动导出数据到 &lt;code&gt;sequence_deepin.txt&lt;/code&gt; 文件(假设为当前设备)，因此这个当前设备文件会被覆盖，请不要手动修改避免丢失；&lt;/p&gt; 
&lt;p&gt;②、读取列表中列出的文件，按时序以保留最新动作为依据进行去重合并，合并后数据将会回写到 &lt;code&gt;sequence_deepin.txt&lt;/code&gt; 文件；&lt;/p&gt; 
&lt;p&gt;③、将合并后的文件导入db数据库，完成数据合并，注意p=0的重置后的编码不会导入数据库，如数据库原本有对应的词汇，将删除对应的键。&lt;/p&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;通过云同步将/sync完成同步到windows设备，同步后，编辑 &lt;code&gt;sequence_device_list.txt&lt;/code&gt;将sequence_windows.txt写入文件，让同步程序再次完成多端同步&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;此时目录中已经存在如下文件，此时重新部署，稍作等待将会完成&lt;code&gt;sequence_windows.txt&lt;/code&gt;的输出&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sequence_device_list.txt&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sequence_deepin.txt&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sequence_windows.txt&lt;/code&gt; #同步后新增&lt;/p&gt; 
&lt;p&gt;再次手动完成手动云同步，及时让文件对齐。&lt;/p&gt; 
&lt;p&gt;B 重复以上操作完成更多设备的添加和同步&lt;/p&gt; 
&lt;p&gt;由于此流程为模拟rime同步的方式，rime的同步本质上就是多端的数据合并的过程，可靠性可能相较于原生较弱一些，尤其是iPhone可能遇到更多问题。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;声调辅助回退（Lua）：&lt;/strong&gt; 万象是将7890用来代表1234声，轻声归并到了4，我们支持在例如输入ni9后发现我可能要4声，ni0，此时我们无需删除数字9而是直接输入对的0，类似手动在7890之间轮巡，能有效快速提升声调辅助的效率，减少使用负担，也是万象独创功能。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;固定已经输入的语句（Lua）：&lt;/strong&gt; 万象支持在输入中，通过按下F1锁定当前输入的候选，双击F1锁定上一个N-1句子长度记忆的句子，翻译成现实逻辑就是，我输入了四五个字了我发后面发生变化，我立马锁定，这样后续继续输入前面几乎不会跟着变了。如果我输入错了一个音节发现前面变了，此时双击F1相当于回溯了一个音节。，其原理实际上就是利用自动补齐每个字的双大写辅助码，起到定词定字的效果，为了避免编码区长度太长，我将连续的两个大写字母转换成一个向右趋势的视觉符号&quot;›&quot;该功能在输入中占用F1,用户自行修改位于force_upper_aux:下。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;小键盘有妙用（Lua）：&lt;/strong&gt; auto模式：可配置输入中数字跟在字母后面不上屏。compose模式：可配置数字持续不上屏，不用区分先后。select模式：小键盘行为对齐主键盘。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;删除键限制（Lua）：&lt;/strong&gt; 可以在输入中当持续按下删除编码为0时会卡住，抬起重新按下才能继续删除已经上屏内容，避免误删除上屏内容。目前仅PC可用，也是万象独创功能。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;输入长度限制（Lua）：&lt;/strong&gt; 对两类场景进行限制，避免数据并发卡顿：1、重复输入8个连续相同的字母，aaaaaaaa会提示:已超最大重复声母。因为连续多个的重复字母会造成严重的卡顿；2、分词片段限制在30个，也就是30个字，过长的语句价值不大还会造成卡顿。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;Tab循环切换音节：&lt;/strong&gt; 当输入多个字词时想要给前面补充辅助码，可以多次按下tab循环切换，这种可能比那些复杂的快捷键好用一些，同样逻辑的按键还包含ctrl+tab相当于逐字确认，错了可以补充编码，对了继续按下直到全部上屏；&lt;/p&gt; 
&lt;p&gt;⚙️**“候选切割机”（Lua）：** 这个功能是有候选的时候，通过按下ctrl+1~0中的10组组合键直接上屏首选前N个字，编码按现有音节分割后续编码保留，一般来说在输入句子的时候由于读音和构词的相似性，以及模型数据的偏差可能会出现错误的连续，这个时候恰当的切割让前面正确的直接上屏，残留的编码一般自动变为首选正确的选项了，此时上屏或继续切割或者使用tab补充编码。这个功能在base双拼中具备更高的确定性，而在pro版本中如果遇到直接辅助码的聚拢，那么此时候选估计与你初心不一致，此时可以考虑借助多次按下单引号来循环分词或许能得到你要的候选，如未得到直接esc重新输入更为高效。更为激进的用法直接上屏正确的部分，后面的编码直接遗弃，现在没有写进去，或许可以作为一个选项，如果你也像这样可以issue告诉我，我们可以改造成布尔选项；&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;翻译模式：&lt;/strong&gt; 输入状态按下Ctrl+E快捷键进入翻译模式，原理是opencc查表进行中英文互译，能否翻译取决于词表的丰富度；&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;万能键斜杠/：&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;符号扩展输入： rime(大部分前端)是一种最小化ui的输入法，除了输入界面几乎看不到ui设置界面及符号表情面板的组件，因此我们在想要输入一些符号表情等特殊内容的时候会根据类型，设计一个触发条件，这个条件类似以什么编码开始作为标识、或者是某种tag状态。万象又是一个兼容多种输入类型的方案，我们无法找到一个绝对的空码字母作为触发条件，或多或少会冲突，因此我们选择了斜杠作为引导条件，例如/sx可以打出加减乘除等等，/yd可以打出圆点集合等等；&lt;/li&gt; 
 &lt;li&gt;辅助码聚拢： 我们在转写中将四个字母+/作为高权重的编码，意思就是侧重输入单字，而四个字母则采用abbrev，这种情况有词的情况有限出词，没词才会变成单字，毕竟我们是一个语句流方案，核心还是想输入多长就输入多长的类大厂习惯的输入法，因此单字就不能像字词音形方案那样四码定位一个字；&lt;/li&gt; 
 &lt;li&gt;间接辅助码引导： 直接辅助码我们是在四个编码末尾追加斜杠/，而间接辅助是在两个编码即双拼后面加斜杠，意思就是后面继续输入编码就能用辅助码对这个单字进行筛选，如果不加斜杠，就与正常的双拼无异，这时vs g=中国就能被打出来，不习惯直接辅助的可以选用这种方式；&lt;/li&gt; 
 &lt;li&gt;短码英文前置： 对于英文词典中我们常常遇到us以及United States这种缩写，那么在你水平一般的情况下输入两个字母前面可能是一大堆重要的中文词汇和单字，那么这个例子就显得不恰当了，不重要，这个时候输入us/就可以让us编码相关的英文词条前置，此时次选就是United States，有的时候是能输出对应大写，支持1-3个字母，因为但凡输入四个字母以上基本上会获得直接的前置了；&lt;/li&gt; 
 &lt;li&gt;快符： 输入一个单字母+/完成对应映射上屏，a/这样，还能定义某个按键是用来重复上屏之前的内容例如q/最终形成自己的习惯，原本分号引导包括数字都能用，但是分号太过珍贵，方案层面就不占用了；&lt;/li&gt; 
 &lt;li&gt;上屏斜杠自己： 通过双击斜杠直接上屏他自己；&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;⚙️&lt;strong&gt;按键设置思考：&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;我们说有舍有得，如何合理安排这些按键是一个重要课题，很多新手上来就要遵循自己以前的习惯，但那些习惯又何尝不是其他软件灌输给你的，我们何曾思考过合理性，对于rime不思考就定义不好，定义不好不如继续用大厂。对于万象斜杠/是不可能被挪作他用的，因此莫要针对这件事提问，修改的地方过多没有精力教学。反斜杠是顿号、分号有次选需求、引号要分词，中括号要以词定字，逗号句号在没有tips的时候更倾向于随语句一起上屏，节约按键，在有tips的时候句号在手机电脑上任何键盘大概率都能直接按，因此默认-=作为翻页，这与老祖宗ABC时期用法一样，某种程度7890代表的1234声调与-=凑在一起构成了一个筛选区，在重新选择rime作为输入法的时候我还是建议重新思考一下自己所谓的习惯&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;⚙️&lt;strong&gt;自定义短语：&lt;/strong&gt; 将根目录中的custom_phrase.txt文本以表导入到rime，实现实际的编码对应你想要的输出，床前明月光\tcqm，其中\t代表制表符，不能输入的复制前面的行修改可见字符，尽量不要使用记事本编辑，换一个更高级的文本编辑器。这个功能主要用来短编码输入长短语、符号数字串等等各种需要置顶的内容，一定要根据万象的初始化在wanxiang.custom中修改名称避免更新被覆盖丢失数据。&lt;/p&gt; 
&lt;p&gt;⚙️&lt;strong&gt;自定义词库：&lt;/strong&gt; 自定义词库首先要利用工具将你自己的词库刷成与万象同类型的声调、或者声调+辅助码的形态，因为主词库要参与转写。对于custom_phrase则需要手动编辑编码为实际输入的编码。&lt;/p&gt; 
&lt;p&gt;要保证每个字编码与chars完全一致，这是基础，不再赘述。&lt;/p&gt; 
&lt;h5&gt;固定词库：&lt;/h5&gt; 
&lt;p&gt;#packs法，要保证外部名称&lt;code&gt;userxx.dict.yaml&lt;/code&gt;与里面&lt;code&gt;name: userxx&lt;/code&gt;一致，&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;patch:
  translator/packs/+:
    - userxx
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;#重命名法，重命名用户根目录&lt;code&gt;wanxiang.dict.yaml&lt;/code&gt;为&lt;code&gt;wanxianguser.dict.yaml&lt;/code&gt;，避免更新被覆盖&lt;/p&gt; 
&lt;p&gt;#所有主方案文件中使用了这个固定词库的位置都要变更&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;patch:
  translator/dictionary: wanxianguser
  user_dict_set/dictionary: wanxianguser
  add_user_dict/dictionary: wanxianguser
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;用户词库迁移：&lt;/h5&gt; 
&lt;p&gt;一个前置知识：同步是将用户词按时序合并导入导出的本地操作。&lt;/p&gt; 
&lt;p&gt;⚠️请不要将这个rime文件夹部署到同步软件下面，这将造成数据库被同步锁定无法正常工作，同步的最高级目录为/sync&lt;/p&gt; 
&lt;p&gt;确认你的同步目录，默认用户目录下面的/sync，如果自定义在installation.yaml文件中写入&lt;/p&gt; 
&lt;p&gt;linux\mac\android这样写：&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sync_dir: &quot;/home/amz/sync&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;windows这样写：&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sync_dir: &quot;D:\\home\\amz\\sync&quot;  #双引号
sync_dir: &#39;D:\home\amz\sync&#39;     #单引号
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;你还可以将installation_id字段改成一个可辨识的名称如按系统命名&lt;/p&gt; 
&lt;p&gt;知道了这些以后你可以创建以下文件夹，他们的名称来自installation_id字段&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;xxx/sync/windows
xxx/sync/linux
xxx/sync/ios
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;你完全可以在用户目录看到wanxiang.userdb，他就是你实时工作的数据库PRO版本是zc.userdb，当你点击右键菜单，同步用户数据时&lt;/p&gt; 
&lt;p&gt;系统将会将用户词库以txt方式释放到&lt;code&gt;xxx/sync/windows/wanxiang.userdb.txt&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;每一个wanxiang.userdb.txt表头都有一个表头&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Rime user dictionary
#@/db_name	zc
#@/db_type	userdb
#@/rime_version	1.13.1
#@/tick	793
#@/user_id	ff9b2823-8733-44bb-a497-daf382b74ca5
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;关注db_name必须与用户词典文件名一致，且不管多个设备不同设备文件夹下面的文件名称都应该一致，看起来都是wanxiang.userdb.txt&lt;/p&gt; 
&lt;p&gt;关注user_id=windows(设备文件夹名称)=installation_id字段必须保持一致&lt;/p&gt; 
&lt;p&gt;如果只有一个设备，你完全可以在同步后删除用户目录的&lt;code&gt;userdb&lt;/code&gt;，手动编辑&lt;code&gt;xxx/sync/windows/wanxiang.userdb.txt&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;注意这里的编辑必须是经过预处理格式与万象编码完全一致的情形下，万象提供的工具就可以完成声调标注和辅助码标注&lt;/p&gt; 
&lt;p&gt;编辑好文件，确保放入设备目录，点击同步即可导入数据库&lt;/p&gt; 
&lt;p&gt;你还可以将你迁移的数据txt内部设备名称都修改成linux，并将文件放入xxx/sync/linux&lt;/p&gt; 
&lt;p&gt;此时点击同步也能将用户词与windows文件夹下面的合并一起导入数据库，模拟多设备同步，这也是未来真正的多设备同步逻辑&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/amzxyz/RIME-LMDG/releases/tag/tool&quot;&gt;词库刷拼音辅助码工具&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;⚙️&lt;strong&gt;万象双拼：&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/amzxyz/rime_wanxiang/wiki/%E4%B8%87%E8%B1%A1%E5%8F%8C%E6%8B%BC%E5%BE%97%E7%94%B1%E6%9D%A5&quot;&gt;参考万象拼音得由来&lt;/a&gt;&lt;/p&gt; 
&lt;img alt=&quot;pay&quot; src=&quot;./custom/万象双拼.png&quot; /&gt; 
&lt;h2&gt;生态&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/Mintimate/oh-my-rime&quot;&gt;薄荷拼音&lt;/a&gt; :使用万象词库的综合性方案，特别是其修改的地球拼音能够继承万象的词库声调编码。&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/yuanz-12/wanxiang_yoemin&quot;&gt;鸢鸣万象&lt;/a&gt; :一个基于万象拼音生态融合李氏三拼与辅助码能力的手机用方案。&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/zhhwux/wxzhh&quot;&gt;万象虎&lt;/a&gt; : 一个基于万象生态的虎码整句方案。&lt;/p&gt; 
&lt;h2&gt;鸣谢&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;感谢网友的热情提报问题，使得模型和词库体验进一步提升。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;赞赏&lt;/h2&gt; 
&lt;p&gt;如果觉得项目好用，可以请AMZ喝咖啡&lt;/p&gt; 
&lt;img alt=&quot;pay&quot; src=&quot;./custom/赞赏.jpg&quot; height=&quot;312&quot; width=&quot;446&quot; /&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/aa0144166976d0b5fc6ebca8cb4536db34c770f2d1e440c24652f25ae7508589/amzxyz/rime_wanxiang" medium="image" />
      
    </item>
    
    <item>
      <title>nvim-telescope/telescope.nvim</title>
      <link>https://github.com/nvim-telescope/telescope.nvim</link>
      <description>&lt;p&gt;Find, Filter, Preview, Pick. All lua, all the time.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;telescope.nvim&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://luarocks.org/modules/Conni2461/telescope.nvim&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/Conni2461/telescope.nvim?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Gaze deeply into unknown regions using the power of the moon.&lt;/p&gt; 
&lt;h2&gt;What Is Telescope?&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;telescope.nvim&lt;/code&gt; is a highly extendable fuzzy finder over lists. Built on the latest awesome features from &lt;code&gt;neovim&lt;/code&gt; core. Telescope is centered around modularity, allowing for easy customization.&lt;/p&gt; 
&lt;p&gt;Community driven builtin &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#pickers&quot;&gt;pickers&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#sorters&quot;&gt;sorters&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#previewers&quot;&gt;previewers&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/TTTja6t.gif&quot; alt=&quot;Preview&quot; /&gt; &lt;sub&gt;For more showcases of Telescope, please visit the &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/wiki/Showcase&quot;&gt;Showcase section&lt;/a&gt; in the Telescope Wiki&lt;/sub&gt;&lt;/p&gt; 
&lt;h2&gt;Telescope Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#getting-started&quot;&gt;Getting Started&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#usage&quot;&gt;Usage&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#customization&quot;&gt;Customization&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#default-mappings&quot;&gt;Default Mappings&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#pickers&quot;&gt;Pickers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#previewers&quot;&gt;Previewers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#sorters&quot;&gt;Sorters&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#layout-display&quot;&gt;Layout&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#themes&quot;&gt;Themes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#vim-commands&quot;&gt;Commands&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#autocmds&quot;&gt;Autocmds&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#extensions&quot;&gt;Extensions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#api&quot;&gt;API&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#media&quot;&gt;Media&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/raw/master/doc/telescope_changelog.txt&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;This section should guide you to run your first builtin pickers.&lt;/p&gt; 
&lt;h3&gt;Requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/v0.11.6&quot;&gt;Neovim &amp;gt;=v0.11.7&lt;/a&gt; built &lt;strong&gt;with LuaJIT&lt;/strong&gt; (check &lt;code&gt;:version&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-lua/plenary.nvim&quot;&gt;nvim-lua/plenary.nvim&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;Only the &lt;strong&gt;latest version&lt;/strong&gt; (&lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/stable&quot;&gt;&lt;code&gt;stable&lt;/code&gt;&lt;/a&gt;) and the &lt;strong&gt;latest commit of &lt;code&gt;HEAD&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/nightly&quot;&gt;&lt;code&gt;nightly&lt;/code&gt;&lt;/a&gt;) are tested and supported; before opening an issue, download the latest available release and confirm that the problem persists.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Recommended dependencies&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;BurntSushi/ripgrep&lt;/a&gt; is required for &lt;code&gt;live_grep&lt;/code&gt; and &lt;code&gt;grep_string&lt;/code&gt; and is the first priority for &lt;code&gt;find_files&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/fd&quot;&gt;sharkdp/fd&lt;/a&gt; (finder)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;devicons&lt;/a&gt; (icons)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;We also strongly suggest installing a native telescope sorter to significantly improve sorting performance:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope-fzf-native.nvim&quot;&gt;telescope-fzf-native.nvim&lt;/a&gt; or&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope-fzy-native.nvim&quot;&gt;telescope-fzy-native.nvim&lt;/a&gt;. For more information and a performance benchmark take a look at the &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/wiki/Extensions&quot;&gt;Extensions&lt;/a&gt; wiki.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Installation&lt;/h3&gt; 
&lt;p&gt;We recommend pinning to the latest release &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/tags&quot;&gt;tag&lt;/a&gt;, e.g. using &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &#39;nvim-telescope/telescope.nvim&#39;, version = &#39;*&#39;,
    dependencies = {
        &#39;nvim-lua/plenary.nvim&#39;,
        -- optional but recommended
        { &#39;nvim-telescope/telescope-fzf-native.nvim&#39;, build = &#39;make&#39; },
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Checkhealth&lt;/h3&gt; 
&lt;p&gt;Make sure you call &lt;code&gt;:checkhealth telescope&lt;/code&gt; after installing telescope to ensure everything is set up correctly.&lt;/p&gt; 
&lt;p&gt;After this setup you can continue reading here or switch to &lt;code&gt;:help telescope&lt;/code&gt; to get an understanding of how to use Telescope and how to configure it.&lt;/p&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;Try the command &lt;code&gt;:Telescope find_files&lt;/code&gt; to see if &lt;code&gt;telescope.nvim&lt;/code&gt; is installed correctly.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local builtin = require(&#39;telescope.builtin&#39;)
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;ff&#39;, builtin.find_files, { desc = &#39;Telescope find files&#39; })
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;fg&#39;, builtin.live_grep, { desc = &#39;Telescope live grep&#39; })
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;fb&#39;, builtin.buffers, { desc = &#39;Telescope buffers&#39; })
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;fh&#39;, builtin.help_tags, { desc = &#39;Telescope help tags&#39; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#pickers&quot;&gt;builtin pickers&lt;/a&gt; for a list of all builtin functions.&lt;/p&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;p&gt;This section should help you explore available options to configure and customize your &lt;code&gt;telescope.nvim&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Unlike most vim plugins, &lt;code&gt;telescope.nvim&lt;/code&gt; can be customized by either applying customizations globally, or individually per picker.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Global Customization&lt;/strong&gt; affecting all pickers can be done through the main &lt;code&gt;setup()&lt;/code&gt; method (see defaults below)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Individual Customization&lt;/strong&gt; affecting a single picker by passing &lt;code&gt;opts&lt;/code&gt; to builtin pickers (e.g. &lt;code&gt;builtin.find_files(opts)&lt;/code&gt;) see &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/wiki/Configuration-Recipes&quot;&gt;Configuration recipes&lt;/a&gt; wiki page for ideas.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Telescope setup structure&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;telescope&#39;).setup{
  defaults = {
    -- Default configuration for telescope goes here:
    -- config_key = value,
    mappings = {
      i = {
        -- map actions.which_key to &amp;lt;C-h&amp;gt; (default: &amp;lt;C-/&amp;gt;)
        -- actions.which_key shows the mappings for your picker,
        -- e.g. git_{create, delete, ...}_branch for the git_branches picker
        [&quot;&amp;lt;C-h&amp;gt;&quot;] = &quot;which_key&quot;
      }
    }
  },
  pickers = {
    -- Default configuration for builtin pickers goes here:
    -- picker_name = {
    --   picker_config_key = value,
    --   ...
    -- }
    -- Now the picker_config_key will be applied every time you call this
    -- builtin picker
  },
  extensions = {
    -- Your extension configuration goes here:
    -- extension_name = {
    --   extension_config_key = value,
    -- }
    -- please take a look at the readme of the extension you want to configure
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To look at what default configuration options exist please read: &lt;code&gt;:help telescope.setup()&lt;/code&gt;. For picker specific &lt;code&gt;opts&lt;/code&gt; please read: &lt;code&gt;:help telescope.builtin&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;To embed the above code snippet in a &lt;code&gt;.vim&lt;/code&gt; file (for example in &lt;code&gt;after/plugin/telescope.nvim.vim&lt;/code&gt;), wrap it in &lt;code&gt;lua &amp;lt;&amp;lt; EOF code-snippet EOF&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;lua &amp;lt;&amp;lt; EOF
require(&#39;telescope&#39;).setup{
  -- ...
}
EOF
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Default Mappings&lt;/h2&gt; 
&lt;p&gt;Mappings are fully customizable. Many familiar mapping patterns are set up as defaults.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Mappings&lt;/th&gt; 
   &lt;th&gt;Action&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-n&amp;gt;/&amp;lt;Down&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Next item&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-p&amp;gt;/&amp;lt;Up&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Previous item&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;j/k&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Next/previous (in normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;H/M/L&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Select High/Middle/Low (in normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gg/G&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Select the first/last item (in normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Confirm selection&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-x&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Go to file selection as a split&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Go to file selection as a vsplit&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-t&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Go to a file in a new tab&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-u&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll up in preview window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-d&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll down in preview window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-f&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll left in preview window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-k&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll right in preview window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;M-f&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll left in results window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;M-k&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll right in results window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-/&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Show mappings for picker actions (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;?&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Show mappings for picker actions (normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-c&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close telescope (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;Esc&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close telescope (in normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;Tab&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Toggle selection and move to next selection&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;S-Tab&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Toggle selection and move to prev selection&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-q&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Send all items not filtered to quickfixlist (qflist)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;M-q&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Send all selected items to qflist&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&amp;lt;C-w&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Insert cword in original window into prompt (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&amp;lt;C-a&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Insert cWORD in original window into prompt (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&amp;lt;C-f&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Insert cfile in original window into prompt (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&amp;lt;C-l&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Insert cline in original window into prompt (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;To see the full list of mappings, check out &lt;code&gt;lua/telescope/mappings.lua&lt;/code&gt; and the &lt;code&gt;default_mappings&lt;/code&gt; table.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: you can use &lt;code&gt;&amp;lt;C-/&amp;gt;&lt;/code&gt; and &lt;code&gt;?&lt;/code&gt; in insert and normal mode, respectively, to show the actions mapped to your picker.&lt;/p&gt; 
&lt;p&gt;Much like &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#pickers&quot;&gt;builtin pickers&lt;/a&gt;, there are a number of &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/raw/master/lua/telescope/actions/init.lua&quot;&gt;actions&lt;/a&gt; you can pick from to remap your telescope buffer mappings, or create a new custom action:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Built-in actions
local transform_mod = require(&#39;telescope.actions.mt&#39;).transform_mod

-- or create your custom action
local my_cool_custom_action = transform_mod({
  x = function(prompt_bufnr)
    print(&quot;This function ran after another action. Prompt_bufnr: &quot; .. prompt_bufnr)
    -- Enter your function logic here. You can take inspiration from lua/telescope/actions.lua
  end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To remap telescope mappings, please read &lt;code&gt;:help telescope.defaults.mappings&lt;/code&gt;. To do picker specific mappings, its suggested to do this with the &lt;code&gt;pickers&lt;/code&gt; table in &lt;code&gt;telescope.setup&lt;/code&gt;. Each picker accepts a &lt;code&gt;mappings&lt;/code&gt; table like its explained in &lt;code&gt;:help telescope.defaults.mappings&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Pickers&lt;/h2&gt; 
&lt;p&gt;Built-in functions. Ready to be bound to any key you like.&lt;/p&gt; 
&lt;h3&gt;File Pickers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.find_files&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists files in your current working directory, respects .gitignore&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_files&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Fuzzy search through the output of &lt;code&gt;git ls-files&lt;/code&gt; command, respects .gitignore&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.grep_string&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Searches for the string under your cursor or selection in your current working directory&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.live_grep&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Search for a string in your current working directory and get results live as you type, respects .gitignore. (Requires &lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;ripgrep&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Vim Pickers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.buffers&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists open buffers in current neovim instance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.oldfiles&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists previously open files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.commands&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists available plugin/user commands and runs them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.tags&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists tags in current directory with tag location file preview (users are required to run ctags -R to generate tags or update when introducing new changes)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.command_history&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists commands that were executed recently, and reruns them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.search_history&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists searches that were executed recently, and reruns them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.help_tags&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists available help tags and opens a new window with the relevant help info on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.man_pages&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists manpage entries, opens them in a help window on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.marks&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists vim marks and their value&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.colorscheme&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists available colorschemes and applies them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.quickfix&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists items in the quickfix list&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.quickfixhistory&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all quickfix lists in your history and open them with &lt;code&gt;builtin.quickfix&lt;/code&gt; or quickfix window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.loclist&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists items from the current window&#39;s location list&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.jumplist&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Jump List entries&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.vim_options&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists vim options, allows you to edit the current value on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.registers&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists vim registers, pastes the contents of the register on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.autocommands&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists vim autocommands and goes to their declaration on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.spell_suggest&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists spelling suggestions for the current word under the cursor, replaces word with selected suggestion on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.keymaps&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists normal mode keymappings&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.filetypes&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all available filetypes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.highlights&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all available highlights&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.current_buffer_fuzzy_find&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Live fuzzy search inside of the currently open buffer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.current_buffer_tags&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all of the tags for the currently open buffer, with a preview&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.resume&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists the results incl. multi-selections of the previous picker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.pickers&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists the previous pickers incl. multi-selections (see &lt;code&gt;:h telescope.defaults.cache_picker&lt;/code&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Neovim LSP Pickers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_references&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP references for word under the cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_incoming_calls&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP incoming calls for word under the cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_outgoing_calls&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP outgoing calls for word under the cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_document_symbols&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP document symbols in the current buffer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_workspace_symbols&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP document symbols in the current workspace&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_dynamic_workspace_symbols&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Dynamically Lists LSP for all workspace symbols&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.diagnostics&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Diagnostics for all open buffers or a specific buffer. Use option &lt;code&gt;bufnr=0&lt;/code&gt; for current buffer.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_implementations&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Goto the implementation of the word under the cursor if there&#39;s only one, otherwise show all options in Telescope&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_definitions&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Goto the definition of the word under the cursor, if there&#39;s only one, otherwise show all options in Telescope&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_type_definitions&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Goto the definition of the type of the word under the cursor, if there&#39;s only one, otherwise show all options in Telescope&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Git Pickers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_commits&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists git commits with diff preview, checkout action &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;, reset mixed &lt;code&gt;&amp;lt;C-r&amp;gt;m&lt;/code&gt;, reset soft &lt;code&gt;&amp;lt;C-r&amp;gt;s&lt;/code&gt; and reset hard &lt;code&gt;&amp;lt;C-r&amp;gt;h&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_bcommits&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists buffer&#39;s git commits with diff preview and checks them out on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_bcommits_range&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists buffer&#39;s git commits in a range of lines. Use options &lt;code&gt;from&lt;/code&gt; and &lt;code&gt;to&lt;/code&gt; to specify the range. In visual mode, lists commits for the selected lines&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_branches&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all branches with log preview, checkout action &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;, track action &lt;code&gt;&amp;lt;C-t&amp;gt;&lt;/code&gt;, rebase action&lt;code&gt;&amp;lt;C-r&amp;gt;&lt;/code&gt;, create action &lt;code&gt;&amp;lt;C-a&amp;gt;&lt;/code&gt;, switch action &lt;code&gt;&amp;lt;C-s&amp;gt;&lt;/code&gt;, delete action &lt;code&gt;&amp;lt;C-d&amp;gt;&lt;/code&gt; and merge action &lt;code&gt;&amp;lt;C-y&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_status&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists current changes per file with diff preview and add action. (Multi-selection still WIP)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_stash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists stash items in current repository with ability to apply them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Treesitter Picker&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.treesitter&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Function names, variables, ... using treesitter &lt;a href=&quot;https://github.com/nvim-treesitter/nvim-treesitter/raw/main/CONTRIBUTING.md#locals&quot;&gt;&lt;code&gt;locals&lt;/code&gt; queries&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Lists Picker&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.planets&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Use the telescope...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.builtin&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Built-in pickers and run them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.reloader&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Lua modules and reload them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.symbols&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists symbols inside a file &lt;code&gt;data/telescope-sources/*.json&lt;/code&gt; found in your rtp. More info and symbol sources can be found &lt;a href=&quot;https://github.com/nvim-telescope/telescope-symbols.nvim&quot;&gt;here&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Previewers&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Previewers&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.vim_buffer_cat.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Default previewer for files. Uses vim buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.vim_buffer_vimgrep.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Default previewer for grep and similar. Uses vim buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.vim_buffer_qflist.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Default previewer for qflist. Uses vim buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.cat.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Terminal previewer for files. Uses &lt;code&gt;cat&lt;/code&gt;/&lt;code&gt;bat&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.vimgrep.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Terminal previewer for grep and similar. Uses &lt;code&gt;cat&lt;/code&gt;/&lt;code&gt;bat&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.qflist.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Terminal previewer for qflist. Uses &lt;code&gt;cat&lt;/code&gt;/&lt;code&gt;bat&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The default previewers are from now on &lt;code&gt;vim_buffer_&lt;/code&gt; previewers. They use vim buffers for displaying files and use tree-sitter or regex for file highlighting.&lt;/p&gt; 
&lt;p&gt;These previewers are using &lt;code&gt;vim.filetype&lt;/code&gt; to guess the filetype for the selected file. The guessing is done by inspecting the filename, the head of the file(shebang) and the tail of the file (modeline). If you have trouble with filetype detection you should read &lt;code&gt;:help vim.filetype&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;We need to do it manually because we can&#39;t determine the filetype in the traditional way: We don&#39;t do &lt;code&gt;bufload&lt;/code&gt; and instead read the file asynchronously with &lt;code&gt;vim.uv.fs_&lt;/code&gt; and attach only a highlighter; otherwise the speed of the previewer would slow down considerably.&lt;/p&gt; 
&lt;p&gt;If you want to configure the &lt;code&gt;vim_buffer_&lt;/code&gt; previewer (e.g. you want the line to wrap), do this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.api.nvim_create_autocmd(&quot;User&quot;, {
  pattern = &quot;TelescopePreviewerLoaded&quot;,
  callback = function(args)
    if args.data.filetype ~= &quot;help&quot; then
      vim.wo.number = true
    elseif args.data.bufname:match(&quot;*.csv&quot;) then
      vim.wo.wrap = false
    end
  end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A data field is passed to the callback, which contains the filetype and the buffer name.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  title: string, # preview window title
  filetype: string,
  bufname: string,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Sorters&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Sorters&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.get_fuzzy_file&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Telescope&#39;s default sorter for files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.get_generic_fuzzy_sorter&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Telescope&#39;s default sorter for everything else&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.get_levenshtein_sorter&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Using Levenshtein distance algorithm (don&#39;t use 😄)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.get_fzy_sorter&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Using fzy algorithm&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.fuzzy_with_index_bias&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Used to list stuff with consideration to when the item is added&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;A &lt;code&gt;Sorter&lt;/code&gt; is called by the &lt;code&gt;Picker&lt;/code&gt; on each item returned by the &lt;code&gt;Finder&lt;/code&gt;. It returns a number, which is equivalent to the &quot;distance&quot; between the current &lt;code&gt;prompt&lt;/code&gt; and the &lt;code&gt;entry&lt;/code&gt; returned by a &lt;code&gt;finder&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Layout (display)&lt;/h2&gt; 
&lt;p&gt;Layout can be configured by choosing a specific &lt;code&gt;layout_strategy&lt;/code&gt; and specifying a particular &lt;code&gt;layout_config&lt;/code&gt; for that strategy. For more details on available strategies and configuration options, see &lt;code&gt;:help telescope.layout&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Some options for configuring sizes in layouts are &quot;resolvable&quot;. This means that they can take different forms, and will be interpreted differently according to which form they take. For example, if we wanted to set the &lt;code&gt;width&lt;/code&gt; of a picker using the &lt;code&gt;vertical&lt;/code&gt; layout strategy to 50% of the screen width, we would specify that width as &lt;code&gt;0.5&lt;/code&gt;, but if we wanted to specify the &lt;code&gt;width&lt;/code&gt; to be exactly 80 characters wide, we would specify it as &lt;code&gt;80&lt;/code&gt;. For more details on resolving sizes, see &lt;code&gt;:help telescope.resolve&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;As an example, if we wanted to specify the layout strategy and width, but only for this instance, we could do something like:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;telescope.builtin&#39;).find_files({layout_strategy=&#39;vertical&#39;,layout_config={width=0.5}})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If we wanted to change the width for every time we use the &lt;code&gt;vertical&lt;/code&gt; layout strategy, we could add the following to our &lt;code&gt;setup()&lt;/code&gt; call:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;telescope&#39;).setup({
  defaults = {
    layout_config = {
      vertical = { width = 0.5 }
      -- other layout configuration here
    },
    -- other defaults configuration here
  },
  -- other configuration values here
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Themes&lt;/h2&gt; 
&lt;p&gt;Common groups of settings can be set up to allow for themes. We have some built in themes but are looking for more cool options.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/SorAcXv.png&quot; alt=&quot;dropdown&quot; /&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Themes&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;themes.get_dropdown&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A list like centered list. &lt;a href=&quot;https://i.imgur.com/SorAcXv.png&quot;&gt;dropdown&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;themes.get_cursor&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/pull/878&quot;&gt;A cursor relative list.&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;themes.get_ivy&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Bottom panel overlay. &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/pull/771&quot;&gt;Ivy #771&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;To use a theme, simply append it to a builtin function:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;nnoremap &amp;lt;Leader&amp;gt;f :lua require&#39;telescope.builtin&#39;.find_files(require(&#39;telescope.themes&#39;).get_dropdown({}))&amp;lt;cr&amp;gt;
&quot; Change an option
nnoremap &amp;lt;Leader&amp;gt;f :lua require&#39;telescope.builtin&#39;.find_files(require(&#39;telescope.themes&#39;).get_dropdown({ winblend = 10 }))&amp;lt;cr&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or use with a command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;Telescope find_files theme=dropdown
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or you can configure it in the pickers table in &lt;code&gt;telescope.setup&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;telescope&#39;).setup{
  defaults = {
    -- ...
  },
  pickers = {
    find_files = {
      theme = &quot;dropdown&quot;,
    }
  },
  extensions = {
    -- ...
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Themes should work with every &lt;code&gt;telescope.builtin&lt;/code&gt; function. If you wish to make a theme, check out &lt;code&gt;lua/telescope/themes.lua&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Vim Commands&lt;/h2&gt; 
&lt;p&gt;All &lt;code&gt;telescope.nvim&lt;/code&gt; functions are wrapped in &lt;code&gt;vim&lt;/code&gt; commands for easy access, tab completions and setting options.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;&quot; Show all builtin pickers
:Telescope

&quot; Tab completion
:Telescope |&amp;lt;tab&amp;gt;
:Telescope find_files

&quot; Setting options
:Telescope find_files prompt_prefix=🔍

&quot; If the option accepts a Lua table as its value, you can use, to connect each
&quot; command string, e.g.: find_command, vimgrep_arguments are both options that
&quot; accept a Lua table as a value. So, you can configure them on the command line
&quot;like so:
:Telescope find_files find_command=rg,--ignore,--hidden,--files prompt_prefix=🔍
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;for more information and how to realize more complex commands please read &lt;code&gt;:help telescope.command&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Autocmds&lt;/h2&gt; 
&lt;p&gt;Telescope user autocmds:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Event&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;User TelescopeFindPre&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Do it before Telescope creates all the floating windows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;User TelescopePreviewerLoaded&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Do it after Telescope previewer window is created&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;User TelescopeResumePost&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Do it after Telescope resume action is fully completed&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Extensions&lt;/h2&gt; 
&lt;p&gt;Telescope provides the capabilities to create &amp;amp; register extensions, which improves telescope in a variety of ways.&lt;/p&gt; 
&lt;p&gt;Some extensions provide integration with external tools, outside of the scope of &lt;code&gt;builtins&lt;/code&gt;. Others provide performance enhancements by using compiled C and interfacing directly with Lua over LuaJIT&#39;s FFI library.&lt;/p&gt; 
&lt;p&gt;A list of community extensions can be found in the &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/wiki/Extensions&quot;&gt;Extensions&lt;/a&gt; wiki. Always read the README of the extension you want to install, but here is a general overview of how most extensions work.&lt;/p&gt; 
&lt;h3&gt;Loading extensions&lt;/h3&gt; 
&lt;p&gt;To load an extension, use the &lt;code&gt;load_extension&lt;/code&gt; function as shown in the example below:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- This will load fzy_native and have it override the default file sorter
require(&#39;telescope&#39;).load_extension(&#39;fzy_native&#39;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You may skip explicitly loading extensions (they will then be lazy-loaded), but tab completions will not be available right away.&lt;/p&gt; 
&lt;h3&gt;Accessing pickers from extensions&lt;/h3&gt; 
&lt;p&gt;Pickers from extensions are added to the &lt;code&gt;:Telescope&lt;/code&gt; command under their respective name. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;&quot; Run the `configurations` picker from nvim-dap
Telescope dap configurations
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;They can also be called directly from Lua:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Run the `configurations` picker from nvim-dap
require(&#39;telescope&#39;).extensions.dap.configurations()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;API&lt;/h2&gt; 
&lt;p&gt;For writing your own picker and for information about the API please read the &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/developers.md&quot;&gt;Developers Documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Media&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.twitch.tv/teej_dv/clip/RichDistinctPlumberPastaThat&quot;&gt;What is Telescope? (Video)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.twitch.tv/videos/756229115&quot;&gt;More advanced configuration (Video)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3WEAjCXFiiM&quot;&gt;telescope.nvim 0.1 reflection (Video)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8SqFt5h2Lsg&quot;&gt;Why Telescope? (Video)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=guxLXcG1kzQ&quot;&gt;Telescope and Nvim 0.5 Intro (Video)&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;All contributions are welcome! Just open a pull request. Please read &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Related Projects&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/picker.md&quot;&gt;snacks.picker&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-mini/mini.pick&quot;&gt;mini.pick&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ibhagwan/fzf-lua&quot;&gt;fzf-lua&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/junegunn/fzf.vim&quot;&gt;fzf.vim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Shougo/denite.nvim&quot;&gt;denite.nvim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/liuchengxu/vim-clap&quot;&gt;vim-clap&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/07234ba42d07dd4d0ef40bead5e967264a614d52e1ad697afdc806d96898676e/nvim-telescope/telescope.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>nvim-lua/plenary.nvim</title>
      <link>https://github.com/nvim-lua/plenary.nvim</link>
      <description>&lt;p&gt;plenary: full; complete; entire; absolute; unqualified. All the lua functions I don&#39;t want to write twice.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;plenary.nvim&lt;/h1&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Important Notice&lt;/h2&gt; 
&lt;p&gt;This repository is no longer actively maintained and will be officially archived soon.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Critical bugs may still be addressed until &lt;strong&gt;2026-06-30&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;No new features will be added&lt;/li&gt; 
 &lt;li&gt;Ongoing support should not be expected&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;p&gt;All the lua functions I don&#39;t want to write twice.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;plenary:&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;full; complete; entire; absolute; unqualified.
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Note that this library is useless outside of Neovim since it requires Neovim functions. It should be usable with any recent version of Neovim though.&lt;/p&gt; 
&lt;p&gt;&lt;s&gt;At the moment, it is very much in pre-alpha 😄 Expect changes to the way some functions are structured. I&#39;m hoping to finish some document generators to provide better documentation for people to use and consume and then at some point we&#39;ll stabilize on a few more stable APIs.&lt;/s&gt;&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://luarocks.org/modules/Conni2461/plenary.nvim&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/Conni2461/plenary.nvim?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Using &lt;a href=&quot;https://github.com/junegunn/vim-plug&quot;&gt;plug&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;Plug &#39;nvim-lua/plenary.nvim&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Using &lt;a href=&quot;https://github.com/wbthomason/packer.nvim&quot;&gt;packer&lt;/a&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;use &quot;nvim-lua/plenary.nvim&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Modules&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenaryasync&quot;&gt;plenary.async&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenaryasync_lib&quot;&gt;plenary.async_lib&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenaryjob&quot;&gt;plenary.job&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenarypath&quot;&gt;plenary.path&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenaryscandir&quot;&gt;plenary.scandir&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenarycontext_manager&quot;&gt;plenary.context_manager&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenarytest_harness&quot;&gt;plenary.test_harness&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenaryfiletype&quot;&gt;plenary.filetype&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/#plenarystrings&quot;&gt;plenary.strings&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;plenary.async&lt;/h3&gt; 
&lt;p&gt;A Lua module for asynchronous programming using coroutines. This library is built on native lua coroutines and &lt;code&gt;libuv&lt;/code&gt;. Coroutines make it easy to avoid callback hell and allow for easy cooperative concurrency and cancellation. Apart from allowing users to perform asynchronous io easily, this library also functions as an abstraction for coroutines.&lt;/p&gt; 
&lt;h4&gt;Getting started&lt;/h4&gt; 
&lt;p&gt;You can do&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local async = require &quot;plenary.async&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;All other modules are automatically required and can be accessed by indexing &lt;code&gt;async&lt;/code&gt;. You needn&#39;t worry about performance as this will require all the submodules lazily.&lt;/p&gt; 
&lt;h4&gt;A quick example&lt;/h4&gt; 
&lt;p&gt;Libuv luv provides this example of reading a file.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local uv = vim.loop

local read_file = function(path, callback)
  uv.fs_open(path, &quot;r&quot;, 438, function(err, fd)
    assert(not err, err)
    uv.fs_fstat(fd, function(err, stat)
      assert(not err, err)
      uv.fs_read(fd, stat.size, 0, function(err, data)
        assert(not err, err)
        uv.fs_close(fd, function(err)
          assert(not err, err)
          callback(data)
        end)
      end)
    end)
  end)
end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;We can write it using the library like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local a = require &quot;plenary.async&quot;

local read_file = function(path)
  local err, fd = a.uv.fs_open(path, &quot;r&quot;, 438)
  assert(not err, err)

  local err, stat = a.uv.fs_fstat(fd)
  assert(not err, err)

  local err, data = a.uv.fs_read(fd, stat.size, 0)
  assert(not err, err)

  local err = a.uv.fs_close(fd)
  assert(not err, err)

  return data
end
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Plugins using this&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim&quot;&gt;telescope.nvim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tanvirtin/vgit.nvim&quot;&gt;vgit.nvim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TimUntersberger/neogit&quot;&gt;neogit&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-neo-tree/neo-tree.nvim&quot;&gt;neo-tree.nvim&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;plenary.async_lib&lt;/h3&gt; 
&lt;p&gt;Please use &lt;code&gt;plenary.async&lt;/code&gt; instead. This was version 1 and is just here for compatibility reasons.&lt;/p&gt; 
&lt;h3&gt;plenary.async.control.channel.oneshot&lt;/h3&gt; 
&lt;p&gt;Creates a oneshot channel. It can only send data one time.&lt;/p&gt; 
&lt;p&gt;The sender is not async while the receiver is.&lt;/p&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local a = require&#39;plenary.async&#39;
local tx, rx = a.control.channel.oneshot()

a.run(function()
    local ret = long_running_fn()
    tx(ret)
end)

local ret = rx()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;plenary.async.control.channel.mpsc&lt;/h3&gt; 
&lt;p&gt;Creates a multiple producer single consumer channel.&lt;/p&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local a = require&#39;plenary.async&#39;
local sender, receiver = a.control.channel.mpsc()

a.run(function()
  sender.send(10)
  sender.send(20)
end)

a.run(function()
  sender.send(30)
  sender.send(40)
end)

for _ = 1, 4 do
  local value = receiver.recv()
  print(&#39;received:&#39;, value)
end
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;plenary.job&lt;/h3&gt; 
&lt;p&gt;A Lua module to interact with system processes. Pass in your &lt;code&gt;command&lt;/code&gt;, the desired &lt;code&gt;args&lt;/code&gt;, &lt;code&gt;env&lt;/code&gt; and &lt;code&gt;cwd&lt;/code&gt;. Define optional callbacks for &lt;code&gt;on_stdout&lt;/code&gt;, &lt;code&gt;on_stderr&lt;/code&gt; and &lt;code&gt;on_exit&lt;/code&gt; and &lt;code&gt;start&lt;/code&gt; your Job.&lt;/p&gt; 
&lt;p&gt;Note: Each job has an empty environment.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local Job = require&#39;plenary.job&#39;

Job:new({
  command = &#39;rg&#39;,
  args = { &#39;--files&#39; },
  cwd = &#39;/usr/bin&#39;,
  env = { [&#39;a&#39;] = &#39;b&#39; },
  on_exit = function(j, return_val)
    print(return_val)
    print(j:result())
  end,
}):sync() -- or start()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;plenary.path&lt;/h3&gt; 
&lt;p&gt;A Lua module that implements a bunch of the things from &lt;code&gt;pathlib&lt;/code&gt; from Python, so that paths are easy to work with.&lt;/p&gt; 
&lt;h3&gt;plenary.scandir&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;plenary.scandir&lt;/code&gt; is fast recursive file operations. It is similar to unix &lt;code&gt;find&lt;/code&gt; or &lt;code&gt;fd&lt;/code&gt; in that it can do recursive scans over a given directory, or a set of directories.&lt;/p&gt; 
&lt;p&gt;It offers a wide range of opts for limiting the depth, show hidden and more. &lt;code&gt;plenary.scan_dir&lt;/code&gt; can be ran synchronously and asynchronously and offers &lt;code&gt;on_insert(file, typ)&lt;/code&gt; and &lt;code&gt;on_exit(files)&lt;/code&gt; callbacks. &lt;code&gt;on_insert(file, typ)&lt;/code&gt; is available for both while &lt;code&gt;on_exit(files)&lt;/code&gt; is only available for async.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local scan = require&#39;plenary.scandir&#39;
scan.scan_dir(&#39;.&#39;, { hidden = true, depth = 2 })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This module also offers &lt;code&gt;ls -la&lt;/code&gt; sync and async functions that will return a formated string for all files in the directory. Why? Just for fun&lt;/p&gt; 
&lt;h3&gt;plenary.context_manager&lt;/h3&gt; 
&lt;p&gt;Implements &lt;code&gt;with&lt;/code&gt; and &lt;code&gt;open&lt;/code&gt; just like in Python. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local with = context_manager.with
local open = context_manager.open

local result = with(open(&quot;README.md&quot;), function(reader)
  return reader:read()
end)

assert(result == &quot;# plenary.nvim&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;plenary.test_harness&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;:help plenary-test&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;Supports (simple) busted-style testing. It implements a mock-ed busted interface, that will allow you to run simple busted style tests in separate neovim instances.&lt;/p&gt; 
&lt;p&gt;To run the current spec file in a floating window, you can use the keymap &lt;code&gt;&amp;lt;Plug&amp;gt;PlenaryTestFile&lt;/code&gt;. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;nmap &amp;lt;leader&amp;gt;t &amp;lt;Plug&amp;gt;PlenaryTestFile
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In this case, the test is run with a minimal configuration, that includes in its runtimepath only plenary.nvim and the current working directory.&lt;/p&gt; 
&lt;p&gt;To run a whole directory from the command line, you could do something like:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;nvim --headless -c &quot;PlenaryBustedDirectory tests/plenary/ {options}&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Where the first argument is the directory you&#39;d like to test. It will search for files with the pattern &lt;code&gt;*_spec.lua&lt;/code&gt; and execute them in separate neovim instances.&lt;/p&gt; 
&lt;p&gt;Without second argument, &lt;code&gt;PlenaryBustedDirectory&lt;/code&gt; is also run with a minimal configuration. Otherwise it is a Lua option table with the following fields:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;nvim_cmd&lt;/code&gt;: specify the command to launch this neovim instance (defaults to &lt;code&gt;vim.v.progpath&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;init&lt;/code&gt;: specify an init.vim to use for this instance&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;minimal_init&lt;/code&gt;: as for &lt;code&gt;init&lt;/code&gt;, but also run the neovim instance with &lt;code&gt;--noplugin&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;sequential&lt;/code&gt;: whether to run tests sequentially (default is to run in parallel)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;keep_going&lt;/code&gt;: if &lt;code&gt;sequential&lt;/code&gt;, whether to continue on test failure (default true)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;timeout&lt;/code&gt;: controls the maximum time allotted to each job in parallel or sequential operation (defaults to 50,000 milliseconds)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The exit code is 0 when success and 1 when fail, so you can use it easily in a &lt;code&gt;Makefile&lt;/code&gt;!&lt;/p&gt; 
&lt;p&gt;NOTE:&lt;/p&gt; 
&lt;p&gt;So far, the only supported busted items are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;describe&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;it&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pending&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;before_each&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;after_each&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;clear&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;assert.*&lt;/code&gt; etc. (from luassert, which is bundled)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;OTHER NOTE:&lt;/p&gt; 
&lt;p&gt;We used to support &lt;code&gt;luaunit&lt;/code&gt; and original &lt;code&gt;busted&lt;/code&gt; but it turns out it was way too hard and not worthwhile for the difficulty of getting them setup, particularly on other platforms or in CI. Now, we have a dep free (or at least, no other installation steps necessary) &lt;code&gt;busted&lt;/code&gt; implementation that can be used more easily.&lt;/p&gt; 
&lt;p&gt;Please take a look at the new APIs and make any issues for things that aren&#39;t clear. I am happy to fix them and make it work well 😃&lt;/p&gt; 
&lt;p&gt;OTHER OTHER NOTE: Take a look at some test examples &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/TESTS_README.md&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Colors&lt;/h4&gt; 
&lt;p&gt;You no longer need nvim-terminal to get this to work. We use &lt;code&gt;nvim_open_term&lt;/code&gt; now.&lt;/p&gt; 
&lt;h3&gt;plenary.filetype&lt;/h3&gt; 
&lt;p&gt;Will detect the filetype based on &lt;code&gt;extension&lt;/code&gt;/&lt;code&gt;special filename&lt;/code&gt;/&lt;code&gt;shebang&lt;/code&gt; or &lt;code&gt;modeline&lt;/code&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;require&#39;plenary.filetype&#39;.detect(filepath, opts)&lt;/code&gt; is a function that does all of above and exits as soon as a filetype is found&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;require&#39;plenary.filetype&#39;.detect_from_extension(filepath)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;require&#39;plenary.filetype&#39;.detect_from_name(filepath)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;require&#39;plenary.filetype&#39;.detect_from_modeline(filepath)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;require&#39;plenary.filetype&#39;.detect_from_shebang(filepath)&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Add filetypes by creating a new file named &lt;code&gt;~/.config/nvim/data/plenary/filetypes/foo.lua&lt;/code&gt; and register that file with &lt;code&gt;:lua require&#39;plenary.filetype&#39;.add_file(&#39;foo&#39;)&lt;/code&gt;. Content of the file should look like that:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;return {
  extension = {
    -- extension = filetype
    -- example:
    [&#39;jl&#39;] = &#39;julia&#39;,
  },
  file_name = {
    -- special filenames, likes .bashrc
    -- we provide a decent amount
    -- name = filetype
    -- example:
    [&#39;.bashrc&#39;] = &#39;bash&#39;,
  },
  shebang = {
    -- Shebangs are supported as well. Currently we provide
    -- sh, bash, zsh, python, perl with different prefixes like
    -- /usr/bin, /bin/, /usr/bin/env, /bin/env
    -- shebang = filetype
    -- example:
    [&#39;/usr/bin/node&#39;] = &#39;javascript&#39;,
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;plenary.strings&lt;/h3&gt; 
&lt;p&gt;Re-implement VimL funcs to use them in Lua loop.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;strings.strdisplaywidth&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;strings.strcharpart&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;And some other funcs are here to deal with common problems.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;strings.truncate&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;strings.align_str&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;strings.dedent&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;plenary.profile&lt;/h3&gt; 
&lt;p&gt;Thin wrapper around LuaJIT&#39;s &lt;a href=&quot;https://blast.hk/moonloader/luajit/ext_profiler.html&quot;&gt;&lt;code&gt;jit.p&lt;/code&gt; profiler&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require&#39;plenary.profile&#39;.start(&quot;profile.log&quot;)

-- code to be profiled

require&#39;plenary.profile&#39;.stop()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can use &lt;code&gt;start(&quot;profile.log&quot;, {flame = true})&lt;/code&gt; to output the log in a flamegraph-compatible format. A flamegraph can be created from this using &lt;a href=&quot;https://github.com/jonhoo/inferno&quot;&gt;https://github.com/jonhoo/inferno&lt;/a&gt; via&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;inferno-flamegraph profile.log &amp;gt; flame.svg
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The resulting interactive SVG file can be viewed in any browser.&lt;/p&gt; 
&lt;p&gt;Status: WIP&lt;/p&gt; 
&lt;h3&gt;plenary.popup&lt;/h3&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/plenary.nvim/master/POPUP.md&quot;&gt;popup documentation&lt;/a&gt; for both progress tracking and implemented APIs.&lt;/p&gt; 
&lt;h3&gt;plenary.window&lt;/h3&gt; 
&lt;p&gt;Window helper functions to wrap some of the more difficult cases. Particularly for floating windows.&lt;/p&gt; 
&lt;p&gt;Status: WIP&lt;/p&gt; 
&lt;h3&gt;plenary.collections&lt;/h3&gt; 
&lt;p&gt;Contains pure lua implementations for various standard collections.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local List = require &#39;plenary.collections.py_list&#39;

local myList = List { 9, 14, 32, 5 }

for i, v in myList:iter() do
    print(i, v)
end

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Status: WIP&lt;/p&gt; 
&lt;h3&gt;Troubleshooting&lt;/h3&gt; 
&lt;p&gt;If you&#39;re having trouble / things are hanging / other problems:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ export DEBUG_PLENARY=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will enable debugging for the plugin.&lt;/p&gt; 
&lt;h3&gt;plenary.neorocks&lt;/h3&gt; 
&lt;p&gt;DELETED: Please use packer.nvim or other lua-rocks wrapper instead. This no longer exists.&lt;/p&gt; 
&lt;h3&gt;FAQ&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Error: Too many open files&lt;/li&gt; 
&lt;/ol&gt; 
&lt;ul&gt; 
 &lt;li&gt;*nix systems have a setting to configure the maximum amount of open file handles. It can occur that the default value is pretty low and that you end up getting this error after opening a couple of files. On Linux you can see the current limit with &lt;code&gt;ulimit -n&lt;/code&gt; and set it with &lt;code&gt;ulimit -n 4096&lt;/code&gt;. If you&#39;re on macOS the command is &lt;code&gt;sudo launchctl limit maxfiles 4096 4096&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/52b822feff0c03b725ac17a3e5cd5e2a6ec406568b08bf04b57015ae356f62b0/nvim-lua/plenary.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>MeanderingProgrammer/render-markdown.nvim</title>
      <link>https://github.com/MeanderingProgrammer/render-markdown.nvim</link>
      <description>&lt;p&gt;Plugin to improve viewing Markdown files in Neovim&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;render-markdown.nvim&lt;/h1&gt; 
&lt;p&gt;Plugin to improve viewing Markdown files in Neovim&lt;/p&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Screenshot&lt;/th&gt; 
   &lt;th&gt;Video&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/40655575-b091-4ab8-b830-38f8004d7746&quot; alt=&quot;Heading&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/03f629ea-f6da-4f05-a035-827fd944e8be&quot; alt=&quot;Heading&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7d021918-e89c-4b7d-b33a-869390f9a826&quot; alt=&quot;Table&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/fdbcfbfa-5f9e-49b7-8c19-f7e837979a7a&quot; alt=&quot;Table&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/822ae62c-bc0f-40a7-b8bb-fb3a885a95f9&quot; alt=&quot;Quote&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/aa002ac7-b30f-4079-bba9-505160a4ad78&quot; alt=&quot;Quote&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e468a463-bc8d-420c-bb4c-da1263795092&quot; alt=&quot;Callout&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d56cc5c7-43cd-4ce7-ad33-6164c2e23875&quot; alt=&quot;Callout&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/68f27ff3-49c8-42b5-bb7a-3b89c1e98401&quot; alt=&quot;Latex&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/41e657a6-bcc2-464d-ab8c-a23bfcb80b0f&quot; alt=&quot;Latex&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;h1&gt;Features&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;Contained: runs entirely inside Neovim with no external windows&lt;/li&gt; 
 &lt;li&gt;Configurable: all components, padding, icons, and colors can be modified&lt;/li&gt; 
 &lt;li&gt;File type agnostic: can render &lt;code&gt;markdown&lt;/code&gt; injected into any file 
  &lt;ul&gt; 
   &lt;li&gt;Automatically runs on lazy load file types defined in &lt;code&gt;lazy.nvim&lt;/code&gt; &lt;code&gt;ft&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Injections: can directly manipulate treesitter to add logical &lt;code&gt;markdown&lt;/code&gt; sections&lt;/li&gt; 
 &lt;li&gt;Modal rendering: changes between &lt;code&gt;rendered&lt;/code&gt; and &lt;code&gt;raw&lt;/code&gt; view based on mode&lt;/li&gt; 
 &lt;li&gt;Anti-conceal: hides virtual text added by this plugin on cursor line&lt;/li&gt; 
 &lt;li&gt;Window options: changes option values between &lt;code&gt;rendered&lt;/code&gt; and &lt;code&gt;raw&lt;/code&gt; view&lt;/li&gt; 
 &lt;li&gt;Large files: only renders visible range, can be entirely disabled based on size&lt;/li&gt; 
 &lt;li&gt;Custom rendering: provides extension point where user can add anything&lt;/li&gt; 
 &lt;li&gt;Renders the following &lt;code&gt;markdown&lt;/code&gt; components out of the box: 
  &lt;ul&gt; 
   &lt;li&gt;Headings: icon, color, border, padding &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;, width&lt;/li&gt; 
   &lt;li&gt;Code blocks: background, language icon &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:1&quot;&gt;[1:1]&lt;/a&gt;&lt;/sup&gt; &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;, border, padding &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:2&quot;&gt;[1:2]&lt;/a&gt;&lt;/sup&gt;, width&lt;/li&gt; 
   &lt;li&gt;Code inline: background&lt;/li&gt; 
   &lt;li&gt;Horizontal breaks: icon, color, width&lt;/li&gt; 
   &lt;li&gt;List bullets: icon, color, padding &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:3&quot;&gt;[1:3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; 
   &lt;li&gt;Checkboxes: icon, color, user defined states&lt;/li&gt; 
   &lt;li&gt;Block quotes: icon, color, line breaks &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:4&quot;&gt;[1:4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; 
   &lt;li&gt;Callouts: icon, color, user defined values, Github &amp;amp; Obsidian defaults&lt;/li&gt; 
   &lt;li&gt;Tables: border, color, alignment indicator, auto align cells &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:5&quot;&gt;[1:5]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; 
   &lt;li&gt;Links &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:6&quot;&gt;[1:6]&lt;/a&gt;&lt;/sup&gt;: icon, color, user defined destinations&lt;/li&gt; 
   &lt;li&gt;Latex blocks &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;: renders formulas&lt;/li&gt; 
   &lt;li&gt;Org indent mode &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:7&quot;&gt;[1:7]&lt;/a&gt;&lt;/sup&gt;: per level padding&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Requirements&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim &lt;code&gt;&amp;gt;= 0.9.0&lt;/code&gt; (minimum) &lt;code&gt;&amp;gt;= 0.10.0&lt;/code&gt; (recommended)&lt;/li&gt; 
 &lt;li&gt;Nerd font symbols: &lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Fonts&quot;&gt;more details&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-treesitter/nvim-treesitter&quot;&gt;treesitter&lt;/a&gt; parsers: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/tree-sitter-grammars/tree-sitter-markdown&quot;&gt;markdown &amp;amp; markdown_inline&lt;/a&gt;: Used to parse &lt;code&gt;markdown&lt;/code&gt; files&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/tree-sitter/tree-sitter-html&quot;&gt;html&lt;/a&gt; (Optional): Used to conceal &lt;code&gt;HTML&lt;/code&gt; comments&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/latex-lsp/tree-sitter-latex&quot;&gt;latex&lt;/a&gt; (Optional): Used to get &lt;code&gt;latex&lt;/code&gt; blocks from &lt;code&gt;markdown&lt;/code&gt; files&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/tree-sitter-grammars/tree-sitter-yaml&quot;&gt;yaml&lt;/a&gt; (Optional): Used to render elements in &lt;code&gt;frontmatter&lt;/code&gt; metadata&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Icon provider plugin (Optional): Used for icon above code blocks 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-mini/mini.nvim/raw/main/readmes/mini-icons.md&quot;&gt;mini.icons&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;nvim-web-devicons&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;System dependencies: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/bartp5/libtexprintf&quot;&gt;libtexprintf&lt;/a&gt; (Optional): Used to transform &lt;code&gt;latex&lt;/code&gt; strings to appropriate unicode using &lt;code&gt;utftex&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://pypi.org/project/pylatexenc/&quot;&gt;pylatexenc&lt;/a&gt; (Optional): Used to transform &lt;code&gt;latex&lt;/code&gt; strings to appropriate unicode using &lt;code&gt;latex2text&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Install&lt;/h1&gt; 
&lt;h2&gt;vim.pack&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.pack.add({
    &#39;https://github.com/nvim-treesitter/nvim-treesitter&#39;,
    &#39;https://github.com/nvim-mini/mini.nvim&#39;,            -- if you use the mini.nvim suite
    -- &#39;https://github.com/nvim-mini/mini.icons&#39;,        -- if you use standalone mini plugins
    -- &#39;https://github.com/nvim-tree/nvim-web-devicons&#39;, -- if you prefer nvim-web-devicons
    &#39;https://github.com/MeanderingProgrammer/render-markdown.nvim&#39;,
})
require(&#39;render-markdown&#39;).setup({}) -- only mandatory if you want to set custom options
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;lazy.nvim&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &#39;MeanderingProgrammer/render-markdown.nvim&#39;,
    dependencies = { &#39;nvim-treesitter/nvim-treesitter&#39;, &#39;nvim-mini/mini.nvim&#39; },            -- if you use the mini.nvim suite
    -- dependencies = { &#39;nvim-treesitter/nvim-treesitter&#39;, &#39;nvim-mini/mini.icons&#39; },        -- if you use standalone mini plugins
    -- dependencies = { &#39;nvim-treesitter/nvim-treesitter&#39;, &#39;nvim-tree/nvim-web-devicons&#39; }, -- if you prefer nvim-web-devicons
    ---@module &#39;render-markdown&#39;
    ---@type render.md.UserConfig
    opts = {},
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;rocks.nvim&lt;/h2&gt; 
&lt;p&gt;This plugin is available on &lt;a href=&quot;https://luarocks.org/modules/MeanderingProgrammer/render-markdown.nvim&quot;&gt;LuaRocks&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;:Rocks install render-markdown.nvim
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;packer.nvim&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;use({
    &#39;MeanderingProgrammer/render-markdown.nvim&#39;,
    after = { &#39;nvim-treesitter&#39; },
    requires = { &#39;nvim-mini/mini.nvim&#39;, opt = true },            -- if you use the mini.nvim suite
    -- requires = { &#39;nvim-mini/mini.icons&#39;, opt = true },        -- if you use standalone mini plugins
    -- requires = { &#39;nvim-tree/nvim-web-devicons&#39;, opt = true }, -- if you prefer nvim-web-devicons
    config = function()
        require(&#39;render-markdown&#39;).setup({})
    end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Commands&lt;/h1&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;Lua Function&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).enable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;enable&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown enable&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).enable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set(true)&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown buf_enable&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).buf_enable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set_buf(true)&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown disable&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).disable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set(false)&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown buf_disable&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).buf_disable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set_buf(false)&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown toggle&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).toggle()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set()&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown buf_toggle&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).buf_toggle()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set_buf()&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown get&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).get()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Return current state&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown set bool?&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).set(bool?)&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Sets state, &lt;code&gt;nil&lt;/code&gt; to toggle&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown set_buf bool?&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).set_buf(bool?)&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Sets state for current buffer, &lt;code&gt;nil&lt;/code&gt; to toggle&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown preview&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).preview()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Show rendered buffer to the side&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown log&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).log()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Opens the log file for this plugin&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown expand&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).expand()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Increase anti-conceal margin above and below by 1&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown contract&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).contract()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Decrease anti-conceal margin above and below by 1&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown debug&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).debug()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Prints information about marks on current line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown config&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).config()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Prints difference between config and default&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h1&gt;Completions&lt;/h1&gt; 
&lt;p&gt;This plugin provides completions for both checkboxes and callouts provided you follow the relevant setup.&lt;/p&gt; 
&lt;h2&gt;in-process lsp&lt;/h2&gt; 
&lt;p&gt;The recommended way of getting completions from this plugin. Only requires being enabled with no additional configuration, assuming you have general LSP completions.&lt;/p&gt; 
&lt;p&gt;Works automatically with &lt;code&gt;nvim-cmp&lt;/code&gt; and &lt;code&gt;blink.cmp&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    completions = { lsp = { enabled = true } },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;coq_nvim&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    completions = { coq = { enabled = true } },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Setup&lt;/h1&gt; 
&lt;p&gt;Checkout the &lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki&quot;&gt;Wiki&lt;/a&gt; for examples and images associated with different configuration options.&lt;/p&gt; 
&lt;p&gt;The full default configuration is provided below for reference.&lt;/p&gt; 
&lt;p&gt;Any part of it can be modified however for many fields this does not make much sense.&lt;/p&gt; 
&lt;p&gt;Some of the more useful fields are discussed further down.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Default Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    -- Whether markdown should be rendered by default.
    enabled = true,
    -- Vim modes that will show a rendered view of the markdown file, :h mode(), for all enabled
    -- components. Individual components can be enabled for other modes. Remaining modes will be
    -- unaffected by this plugin.
    render_modes = { &#39;n&#39;, &#39;c&#39;, &#39;t&#39; },
    -- Milliseconds that must pass before updating marks, updates occur.
    -- within the context of the visible window, not the entire buffer.
    debounce = 100,
    -- Pre configured settings that will attempt to mimic various target user experiences.
    -- User provided settings will take precedence.
    -- | obsidian | mimic Obsidian UI                                          |
    -- | lazy     | will attempt to stay up to date with LazyVim configuration |
    -- | none     | does nothing                                               |
    preset = &#39;none&#39;,
    -- The level of logs to write to file: vim.fn.stdpath(&#39;state&#39;) .. &#39;/render-markdown.log&#39;.
    -- Only intended to be used for plugin development / debugging.
    log_level = &#39;error&#39;,
    -- Print runtime of main update method.
    -- Only intended to be used for plugin development / debugging.
    log_runtime = false,
    -- Filetypes this plugin will run on.
    file_types = { &#39;markdown&#39; },
    -- Maximum file size (in MB) that this plugin will attempt to render.
    -- File larger than this will effectively be ignored.
    max_file_size = 10.0,
    -- Takes buffer as input, if it returns true this plugin will not attach to the buffer.
    ignore = function()
        return false
    end,
    -- Whether markdown should be rendered when nested inside markdown, i.e. markdown code block
    -- inside markdown file.
    nested = true,
    -- Additional events that will trigger this plugin&#39;s render loop.
    change_events = {},
    -- Whether the treesitter highlighter should be restarted after this plugin attaches to its
    -- first buffer for the first time. May be necessary if this plugin is lazy loaded to clear
    -- highlights that have been dynamically disabled.
    restart_highlighter = false,
    injections = {
        -- Out of the box language injections for known filetypes that allow markdown to be interpreted
        -- in specified locations, see :h treesitter-language-injections.
        -- Set enabled to false in order to disable.

        gitcommit = {
            enabled = true,
            query = [[
                ((message) @injection.content
                    (#set! injection.combined)
                    (#set! injection.include-children)
                    (#set! injection.language &quot;markdown&quot;))
            ]],
        },
    },
    patterns = {
        -- Highlight patterns to disable for filetypes, i.e. lines concealed around code blocks

        markdown = {
            disable = true,
            directives = {
                { id = 17, name = &#39;conceal_lines&#39; },
                { id = 18, name = &#39;conceal_lines&#39; },
            },
        },
    },
    anti_conceal = {
        -- This enables hiding added text on the line the cursor is on.
        enabled = true,
        -- Modes to disable anti conceal feature.
        disabled_modes = false,
        -- Number of lines above cursor to show.
        above = 0,
        -- Number of lines below cursor to show.
        below = 0,
        -- Which elements to always show, ignoring anti conceal behavior. Values can either be
        -- booleans to fix the behavior or string lists representing modes where anti conceal
        -- behavior will be ignored. Valid values are:
        --   bullet
        --   callout
        --   check_icon, check_scope
        --   code_background, code_border, code_language
        --   dash
        --   head_background, head_border, head_icon
        --   indent
        --   latex
        --   link
        --   quote
        --   sign
        --   table_border
        --   virtual_lines
        ignore = {
            code_background = true,
            indent = true,
            sign = true,
            virtual_lines = true,
        },
    },
    padding = {
        -- Highlight to use when adding whitespace, should match background.
        highlight = &#39;Normal&#39;,
    },
    latex = {
        -- Turn on / off latex rendering.
        enabled = true,
        -- Additional modes to render latex.
        render_modes = false,
        -- Executable used to convert latex formula to rendered unicode.
        -- If a list is provided the commands run in order until the first success.
        converter = { &#39;utftex&#39;, &#39;latex2text&#39; },
        -- Highlight for latex blocks.
        highlight = &#39;RenderMarkdownMath&#39;,
        -- Determines where latex formula is rendered relative to block.
        -- | above  | above latex block                               |
        -- | below  | below latex block                               |
        -- | center | centered with latex block (must be single line) |
        position = &#39;center&#39;,
        -- Number of empty lines above latex blocks.
        top_pad = 0,
        -- Number of empty lines below latex blocks.
        bottom_pad = 0,
    },
    on = {
        -- Called when plugin initially attaches to a buffer.
        attach = function() end,
        -- Called before adding marks to the buffer for the first time.
        initial = function() end,
        -- Called after plugin renders a buffer.
        render = function() end,
        -- Called after plugin clears a buffer.
        clear = function() end,
    },
    completions = {
        -- Settings for blink.cmp completions source
        blink = { enabled = false },
        -- Settings for coq_nvim completions source
        coq = { enabled = false },
        -- Settings for in-process language server completions
        lsp = { enabled = false },
        filter = {
            callout = function()
                -- example to exclude obsidian callouts
                -- return value.category ~= &#39;obsidian&#39;
                return true
            end,
            checkbox = function()
                return true
            end,
        },
    },
    heading = {
        -- Useful context to have when evaluating values.
        -- | level    | the number of &#39;#&#39; in the heading marker         |
        -- | sections | for each level how deeply nested the heading is |

        -- Turn on / off heading icon &amp;amp; background rendering.
        enabled = true,
        -- Additional modes to render headings.
        render_modes = false,
        -- Turn on / off atx heading rendering.
        atx = true,
        -- Turn on / off setext heading rendering.
        setext = true,
        -- Turn on / off sign column related rendering.
        sign = true,
        -- Replaces &#39;#+&#39; of &#39;atx_h._marker&#39;.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)`              |
        -- | string[] | `cycle(value, context.level)` |
        icons = { &#39;󰲡 &#39;, &#39;󰲣 &#39;, &#39;󰲥 &#39;, &#39;󰲧 &#39;, &#39;󰲩 &#39;, &#39;󰲫 &#39; },
        -- Determines how icons fill the available space.
        -- | eol     | &#39;#&#39;s are concealed and icon is placed at right most column   |
        -- | right   | &#39;#&#39;s are concealed and icon is appended to right side        |
        -- | inline  | &#39;#&#39;s are concealed and icon is inlined on left side          |
        -- | overlay | icon is left padded with spaces and overlayed hiding all &#39;#&#39; |
        position = &#39;overlay&#39;,
        -- Added to the sign column if enabled.
        -- Output is evaluated by `cycle(value, context.level)`.
        signs = { &#39;󰫎 &#39; },
        -- Width of the heading background.
        -- | block | width of the heading text |
        -- | full  | full width of the window  |
        -- Can also be a list of the above values evaluated by `clamp(value, context.level)`.
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of headings.
        -- Margin available space is computed after accounting for padding.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Can also be a list of numbers evaluated by `clamp(value, context.level)`.
        left_margin = 0,
        -- Amount of padding to add to the left of headings.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        left_pad = 0,
        -- Amount of padding to add to the right of headings when width is &#39;block&#39;.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        right_pad = 0,
        -- Minimum width to use for headings when width is &#39;block&#39;.
        -- Can also be a list of integers evaluated by `clamp(value, context.level)`.
        min_width = 0,
        -- Determines if a border is added above and below headings.
        -- Can also be a list of booleans evaluated by `clamp(value, context.level)`.
        border = false,
        -- Always use virtual lines for heading borders instead of attempting to use empty lines.
        border_virtual = false,
        -- Highlight the start of the border using the foreground highlight.
        border_prefix = false,
        -- Used above heading for border.
        above = &#39;▄&#39;,
        -- Used below heading for border.
        below = &#39;▀&#39;,
        -- Highlight for the heading icon and extends through the entire line.
        -- Output is evaluated by `clamp(value, context.level)`.
        backgrounds = {
            &#39;RenderMarkdownH1Bg&#39;,
            &#39;RenderMarkdownH2Bg&#39;,
            &#39;RenderMarkdownH3Bg&#39;,
            &#39;RenderMarkdownH4Bg&#39;,
            &#39;RenderMarkdownH5Bg&#39;,
            &#39;RenderMarkdownH6Bg&#39;,
        },
        -- Highlight for the heading and sign icons.
        -- Output is evaluated using the same logic as &#39;backgrounds&#39;.
        foregrounds = {
            &#39;RenderMarkdownH1&#39;,
            &#39;RenderMarkdownH2&#39;,
            &#39;RenderMarkdownH3&#39;,
            &#39;RenderMarkdownH4&#39;,
            &#39;RenderMarkdownH5&#39;,
            &#39;RenderMarkdownH6&#39;,
        },
        -- Define custom heading patterns which allow you to override various properties based on
        -- the contents of a heading.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | pattern    | matched against the heading text @see :h lua-patterns |
        -- | icon       | optional override for the icon                        |
        -- | background | optional override for the background                  |
        -- | foreground | optional override for the foreground                  |
        custom = {},
    },
    paragraph = {
        -- Useful context to have when evaluating values.
        -- | text | text value of the node |

        -- Turn on / off paragraph rendering.
        enabled = true,
        -- Additional modes to render paragraphs.
        render_modes = false,
        -- Amount of margin to add to the left of paragraphs.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)` |
        -- | number   | `value`          |
        left_margin = 0,
        -- Amount of padding to add to the first line of each paragraph.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        indent = 0,
        -- Minimum width to use for paragraphs.
        min_width = 0,
    },
    code = {
        -- Turn on / off code block &amp;amp; inline code rendering.
        enabled = true,
        -- Additional modes to render code blocks.
        render_modes = false,
        -- Turn on / off sign column related rendering.
        sign = true,
        -- Whether to conceal nodes at the top and bottom of code blocks.
        conceal_delimiters = true,
        -- Turn on / off language heading related rendering.
        language = true,
        -- Determines where language icon is rendered.
        -- | center | center of code block |
        -- | right  | right of code block  |
        -- | left   | left of code block   |
        position = &#39;left&#39;,
        -- Whether to include the language icon above code blocks.
        language_icon = true,
        -- Whether to include the language name above code blocks.
        language_name = true,
        -- Whether to include the language info above code blocks.
        language_info = true,
        -- Amount of padding to add around the language.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        language_pad = 0,
        -- A list of language names for which rendering will be disabled.
        disable = {},
        -- A list of language names for which background highlighting will be disabled.
        -- Likely because that language has background highlights itself.
        -- Use a boolean to make behavior apply to all languages.
        -- Borders above &amp;amp; below blocks will continue to be rendered.
        disable_background = { &#39;diff&#39; },
        -- Width of the code block background.
        -- | block | width of the code block  |
        -- | full  | full width of the window |
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of code blocks.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Margin available space is computed after accounting for padding.
        left_margin = 0,
        -- Amount of padding to add to the left of code blocks.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        left_pad = 0,
        -- Amount of padding to add to the right of code blocks when width is &#39;block&#39;.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        right_pad = 0,
        -- Minimum width to use for code blocks when width is &#39;block&#39;.
        min_width = 0,
        -- Determines how the top / bottom of code block are rendered.
        -- | none  | do not render a border                               |
        -- | thick | use the same highlight as the code body              |
        -- | thin  | when lines are empty overlay the above &amp;amp; below icons |
        -- | hide  | conceal lines unless language name or icon is added  |
        border = &#39;hide&#39;,
        -- Used above code blocks to fill remaining space around language.
        language_border = &#39;█&#39;,
        -- Added to the left of language.
        language_left = &#39;&#39;,
        -- Added to the right of language.
        language_right = &#39;&#39;,
        -- Used above code blocks for thin border.
        above = &#39;▄&#39;,
        -- Used below code blocks for thin border.
        below = &#39;▀&#39;,
        -- Turn on / off inline code related rendering.
        inline = true,
        -- Icon to add to the left of inline code.
        inline_left = &#39;&#39;,
        -- Icon to add to the right of inline code.
        inline_right = &#39;&#39;,
        -- Padding to add to the left &amp;amp; right of inline code.
        inline_pad = 0,
        -- Priority to assign to code background highlight.
        priority = 140,
        -- Highlight for code blocks.
        highlight = &#39;RenderMarkdownCode&#39;,
        -- Highlight for code info section, after the language.
        highlight_info = &#39;RenderMarkdownCodeInfo&#39;,
        -- Highlight for language, overrides icon provider value.
        highlight_language = nil,
        -- Highlight for border, use false to add no highlight.
        highlight_border = &#39;RenderMarkdownCodeBorder&#39;,
        -- Highlight for language, used if icon provider does not have a value.
        highlight_fallback = &#39;RenderMarkdownCodeFallback&#39;,
        -- Highlight for inline code.
        highlight_inline = &#39;RenderMarkdownCodeInline&#39;,
        -- Highlight for inline code left icon, default to reverse of highlight_inline.
        highlight_inline_left = nil,
        -- Highlight for inline code right icon, default to reverse of highlight_inline.
        highlight_inline_right = nil,
        -- Determines how code blocks &amp;amp; inline code are rendered.
        -- | none     | { enabled = false }                           |
        -- | normal   | { language = false }                          |
        -- | language | { disable_background = true, inline = false } |
        -- | full     | uses all default values                       |
        style = &#39;full&#39;,
    },
    dash = {
        -- Useful context to have when evaluating values.
        -- | width | width of the current window |

        -- Turn on / off thematic break rendering.
        enabled = true,
        -- Additional modes to render dash.
        render_modes = false,
        -- Replaces &#39;---&#39;|&#39;***&#39;|&#39;___&#39;|&#39;* * *&#39; of &#39;thematic_break&#39;.
        -- The icon gets repeated across the window&#39;s width.
        icon = &#39;─&#39;,
        -- Width of the generated line.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)`    |
        -- | number   | `value`             |
        -- | full     | width of the window |
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of dash.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        left_margin = 0,
        -- Priority to assign to dash.
        priority = nil,
        -- Highlight for the whole line generated from the icon.
        highlight = &#39;RenderMarkdownDash&#39;,
    },
    document = {
        -- Turn on / off document rendering.
        enabled = true,
        -- Additional modes to render document.
        render_modes = false,
        -- Ability to conceal arbitrary ranges of text based on lua patterns, @see :h lua-patterns.
        -- Relies entirely on user to set patterns that handle their edge cases.
        conceal = {
            -- Matched ranges will be concealed using character level conceal.
            char_patterns = {},
            -- Matched ranges will be concealed using line level conceal.
            line_patterns = {},
        },
    },
    bullet = {
        -- Useful context to have when evaluating values.
        -- | level | how deeply nested the list is, 1-indexed          |
        -- | index | how far down the item is at that level, 1-indexed |
        -- | value | text value of the marker node                     |

        -- Turn on / off list bullet rendering
        enabled = true,
        -- Additional modes to render list bullets
        render_modes = false,
        -- Replaces &#39;-&#39;|&#39;+&#39;|&#39;*&#39; of &#39;list_item&#39;.
        -- If the item is a &#39;checkbox&#39; a conceal is used to hide the bullet instead.
        -- Output is evaluated depending on the type.
        -- | function   | `value(context)`                                    |
        -- | string     | `value`                                             |
        -- | string[]   | `cycle(value, context.level)`                       |
        -- | string[][] | `clamp(cycle(value, context.level), context.index)` |
        icons = { &#39;●&#39;, &#39;○&#39;, &#39;◆&#39;, &#39;◇&#39; },
        -- Replaces &#39;n.&#39;|&#39;n)&#39; of &#39;list_item&#39;.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        ordered_icons = function(ctx)
            local value = vim.trim(ctx.value)
            local index = tonumber(value:sub(1, #value - 1))
            return (&#39;%d.&#39;):format(index &amp;gt; 1 and index or ctx.index)
        end,
        -- Padding to add to the left of bullet point.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)` |
        -- | integer  | `value`          |
        left_pad = 0,
        -- Padding to add to the right of bullet point.
        -- Output is evaluated using the same logic as &#39;left_pad&#39;.
        right_pad = 0,
        -- Highlight for the bullet icon.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        highlight = &#39;RenderMarkdownBullet&#39;,
        -- Highlight for item associated with the bullet point.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        scope_highlight = {},
        -- Priority to assign to scope highlight.
        scope_priority = nil,
    },
    checkbox = {
        -- Checkboxes are a special instance of a &#39;list_item&#39; that start with a &#39;shortcut_link&#39;.
        -- There are two special states for unchecked &amp;amp; checked defined in the markdown grammar.

        -- Turn on / off checkbox state rendering.
        enabled = true,
        -- Additional modes to render checkboxes.
        render_modes = false,
        -- Render the bullet point before the checkbox.
        bullet = false,
        -- Padding to add to the left of checkboxes.
        left_pad = 0,
        -- Padding to add to the right of checkboxes.
        right_pad = 1,
        unchecked = {
            -- Replaces &#39;[ ]&#39; of &#39;task_list_marker_unchecked&#39;.
            icon = &#39;󰄱 &#39;,
            -- Highlight for the unchecked icon.
            highlight = &#39;RenderMarkdownUnchecked&#39;,
            -- Highlight for item associated with unchecked checkbox.
            scope_highlight = nil,
        },
        checked = {
            -- Replaces &#39;[x]&#39; of &#39;task_list_marker_checked&#39;.
            icon = &#39;󰱒 &#39;,
            -- Highlight for the checked icon.
            highlight = &#39;RenderMarkdownChecked&#39;,
            -- Highlight for item associated with checked checkbox.
            scope_highlight = nil,
        },
        -- Define custom checkbox states, more involved, not part of the markdown grammar.
        -- As a result this requires neovim &amp;gt;= 0.10.0 since it relies on &#39;inline&#39; extmarks.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw             | matched against the raw text of a &#39;shortcut_link&#39;           |
        -- | rendered        | replaces the &#39;raw&#39; value when rendering                     |
        -- | highlight       | highlight for the &#39;rendered&#39; icon                           |
        -- | scope_highlight | optional highlight for item associated with custom checkbox |
        -- stylua: ignore
        custom = {
            todo = { raw = &#39;[-]&#39;, rendered = &#39;󰥔 &#39;, highlight = &#39;RenderMarkdownTodo&#39;, scope_highlight = nil },
        },
        -- Priority to assign to scope highlight.
        scope_priority = nil,
    },
    quote = {
        -- Turn on / off block quote &amp;amp; callout rendering.
        enabled = true,
        -- Additional modes to render quotes.
        render_modes = false,
        -- Replaces &#39;&amp;gt;&#39; of &#39;block_quote&#39;.
        icon = &#39;▋&#39;,
        -- Whether to repeat icon on wrapped lines. Requires neovim &amp;gt;= 0.10. This will obscure text
        -- if incorrectly configured with :h &#39;showbreak&#39;, :h &#39;breakindent&#39; and :h &#39;breakindentopt&#39;.
        -- A combination of these that is likely to work follows.
        -- | showbreak      | &#39;  &#39; (2 spaces)   |
        -- | breakindent    | true              |
        -- | breakindentopt | &#39;&#39; (empty string) |
        -- These are not validated by this plugin. If you want to avoid adding these to your main
        -- configuration then set them in win_options for this plugin.
        repeat_linebreak = false,
        -- Highlight for the quote icon.
        -- If a list is provided output is evaluated by `cycle(value, level)`.
        highlight = {
            &#39;RenderMarkdownQuote1&#39;,
            &#39;RenderMarkdownQuote2&#39;,
            &#39;RenderMarkdownQuote3&#39;,
            &#39;RenderMarkdownQuote4&#39;,
            &#39;RenderMarkdownQuote5&#39;,
            &#39;RenderMarkdownQuote6&#39;,
        },
    },
    pipe_table = {
        -- Turn on / off pipe table rendering.
        enabled = true,
        -- Additional modes to render pipe tables.
        render_modes = false,
        -- Pre configured settings largely for setting table border easier.
        -- | heavy  | use thicker border characters     |
        -- | double | use double line border characters |
        -- | round  | use round border corners          |
        -- | none   | does nothing                      |
        preset = &#39;none&#39;,
        -- Determines how individual cells of a table are rendered.
        -- | overlay | writes completely over the table, removing conceal behavior and highlights |
        -- | raw     | replaces only the &#39;|&#39; characters in each row, leaving the cells unmodified |
        -- | padded  | raw + cells are padded to maximum visual width for each column             |
        -- | trimmed | padded except empty space is subtracted from visual width calculation      |
        cell = &#39;padded&#39;,
        -- Adjust the computed width of table cells using custom logic.
        cell_offset = function()
            return 0
        end,
        -- Amount of space to put between cell contents and border.
        padding = 1,
        -- Minimum column width to use for padded or trimmed cell.
        min_width = 0,
        -- Characters used to replace table border.
        -- Correspond to top(3), delimiter(3), bottom(3), vertical, &amp;amp; horizontal.
        -- stylua: ignore
        border = {
            &#39;┌&#39;, &#39;┬&#39;, &#39;┐&#39;,
            &#39;├&#39;, &#39;┼&#39;, &#39;┤&#39;,
            &#39;└&#39;, &#39;┴&#39;, &#39;┘&#39;,
            &#39;│&#39;, &#39;─&#39;,
        },
        -- Turn on / off top &amp;amp; bottom lines.
        border_enabled = true,
        -- Always use virtual lines for table borders instead of attempting to use empty lines.
        -- Will be automatically enabled if indentation module is enabled.
        border_virtual = false,
        -- Gets placed in delimiter row for each column, position is based on alignment.
        alignment_indicator = &#39;━&#39;,
        -- Highlight for table heading, delimiter, and the line above.
        head = &#39;RenderMarkdownTableHead&#39;,
        -- Highlight for everything else, main table rows and the line below.
        row = &#39;RenderMarkdownTableRow&#39;,
        -- Determines how the table as a whole is rendered.
        -- | none   | { enabled = false }        |
        -- | normal | { border_enabled = false } |
        -- | full   | uses all default values    |
        style = &#39;full&#39;,
    },
    callout = {
        -- Callouts are a special instance of a &#39;block_quote&#39; that start with a &#39;shortcut_link&#39;.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw        | matched against the raw text of a &#39;shortcut_link&#39;, case insensitive |
        -- | rendered   | replaces the &#39;raw&#39; value when rendering                             |
        -- | highlight  | highlight for the &#39;rendered&#39; text and quote markers                 |
        -- | quote_icon | optional override for quote.icon value for individual callout       |
        -- | category   | optional metadata useful for filtering                              |

        note      = { raw = &#39;[!NOTE]&#39;,      rendered = &#39;󰋽 Note&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;github&#39;   },
        tip       = { raw = &#39;[!TIP]&#39;,       rendered = &#39;󰌶 Tip&#39;,       highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;github&#39;   },
        important = { raw = &#39;[!IMPORTANT]&#39;, rendered = &#39;󰅾 Important&#39;, highlight = &#39;RenderMarkdownHint&#39;,    category = &#39;github&#39;   },
        warning   = { raw = &#39;[!WARNING]&#39;,   rendered = &#39;󰀪 Warning&#39;,   highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;github&#39;   },
        caution   = { raw = &#39;[!CAUTION]&#39;,   rendered = &#39;󰳦 Caution&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;github&#39;   },
        -- Obsidian: https://help.obsidian.md/Editing+and+formatting/Callouts
        abstract  = { raw = &#39;[!ABSTRACT]&#39;,  rendered = &#39;󰨸 Abstract&#39;,  highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        summary   = { raw = &#39;[!SUMMARY]&#39;,   rendered = &#39;󰨸 Summary&#39;,   highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        tldr      = { raw = &#39;[!TLDR]&#39;,      rendered = &#39;󰨸 Tldr&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        info      = { raw = &#39;[!INFO]&#39;,      rendered = &#39;󰋽 Info&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        todo      = { raw = &#39;[!TODO]&#39;,      rendered = &#39;󰗡 Todo&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        hint      = { raw = &#39;[!HINT]&#39;,      rendered = &#39;󰌶 Hint&#39;,      highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        success   = { raw = &#39;[!SUCCESS]&#39;,   rendered = &#39;󰄬 Success&#39;,   highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        check     = { raw = &#39;[!CHECK]&#39;,     rendered = &#39;󰄬 Check&#39;,     highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        done      = { raw = &#39;[!DONE]&#39;,      rendered = &#39;󰄬 Done&#39;,      highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        question  = { raw = &#39;[!QUESTION]&#39;,  rendered = &#39;󰘥 Question&#39;,  highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        help      = { raw = &#39;[!HELP]&#39;,      rendered = &#39;󰘥 Help&#39;,      highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        faq       = { raw = &#39;[!FAQ]&#39;,       rendered = &#39;󰘥 Faq&#39;,       highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        attention = { raw = &#39;[!ATTENTION]&#39;, rendered = &#39;󰀪 Attention&#39;, highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        failure   = { raw = &#39;[!FAILURE]&#39;,   rendered = &#39;󰅖 Failure&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        fail      = { raw = &#39;[!FAIL]&#39;,      rendered = &#39;󰅖 Fail&#39;,      highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        missing   = { raw = &#39;[!MISSING]&#39;,   rendered = &#39;󰅖 Missing&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        danger    = { raw = &#39;[!DANGER]&#39;,    rendered = &#39;󱐌 Danger&#39;,    highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        error     = { raw = &#39;[!ERROR]&#39;,     rendered = &#39;󱐌 Error&#39;,     highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        bug       = { raw = &#39;[!BUG]&#39;,       rendered = &#39;󰨰 Bug&#39;,       highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        example   = { raw = &#39;[!EXAMPLE]&#39;,   rendered = &#39;󰉹 Example&#39;,   highlight = &#39;RenderMarkdownHint&#39; ,   category = &#39;obsidian&#39; },
        quote     = { raw = &#39;[!QUOTE]&#39;,     rendered = &#39;󱆨 Quote&#39;,     highlight = &#39;RenderMarkdownQuote&#39;,   category = &#39;obsidian&#39; },
        cite      = { raw = &#39;[!CITE]&#39;,      rendered = &#39;󱆨 Cite&#39;,      highlight = &#39;RenderMarkdownQuote&#39;,   category = &#39;obsidian&#39; },
    },
    link = {
        -- Turn on / off inline link icon rendering.
        enabled = true,
        -- Additional modes to render links.
        render_modes = false,
        -- How to handle footnote links, start with a &#39;^&#39;.
        footnote = {
            -- Turn on / off footnote rendering.
            enabled = true,
            -- Inlined with content.
            icon = &#39;󰯔 &#39;,
            -- Custom processing for footnote body to show.
            -- Runs before prefix / suffix are added and superscript processing.
            body = function(ctx)
                return ctx.text
            end,
            -- Replace value with superscript equivalent.
            superscript = true,
            -- Added before link content.
            prefix = &#39;&#39;,
            -- Added after link content.
            suffix = &#39;&#39;,
        },
        -- Inlined with &#39;image&#39; elements.
        image = &#39;󰥶 &#39;,
        -- Check custom for &#39;image&#39; elements.
        image_custom = true,
        -- Inlined with &#39;email_autolink&#39; elements.
        email = &#39;󰀓 &#39;,
        -- Fallback icon for &#39;inline_link&#39; and &#39;uri_autolink&#39; elements.
        hyperlink = &#39;󰌹 &#39;,
        -- Applies to the inlined icon as a fallback.
        highlight = &#39;RenderMarkdownLink&#39;,
        -- Applies to the link title.
        highlight_title = &#39;RenderMarkdownLinkTitle&#39;,
        -- Applies to WikiLink elements.
        wiki = {
            -- Turn on / off WikiLink rendering.
            enabled = true,
            -- Inlined with content.
            icon = &#39;󱗖 &#39;,
            -- Custom processing for WikiLink body to show.
            body = function()
                return nil
            end,
            -- Applies to the inlined icon.
            highlight = &#39;RenderMarkdownWikiLink&#39;,
            -- Highlight for item associated with the WikiLink.
            scope_highlight = nil,
        },
        -- Define custom destination patterns so icons can quickly inform you of what a link
        -- contains. Applies to &#39;image&#39;, &#39;inline_link&#39;, &#39;uri_autolink&#39;, and WikiLink nodes.
        -- When multiple patterns match a link the one with the longer pattern is used.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | pattern   | matched against the destination text                            |
        -- | icon      | gets inlined before the link text                               |
        -- | kind      | optional determines how pattern is checked                      |
        -- |           | pattern | @see :h lua-patterns, is the default if not set       |
        -- |           | suffix  | @see :h vim.endswith()                                |
        -- | priority  | optional used when multiple match, uses pattern length if empty |
        -- | highlight | optional highlight for &#39;icon&#39;, uses fallback highlight if empty |
        custom = {
            web = { pattern = &#39;^http&#39;, icon = &#39;󰖟 &#39; },
            apple = { pattern = &#39;apple%.com&#39;, icon = &#39; &#39; },
            discord = { pattern = &#39;discord%.com&#39;, icon = &#39;󰙯 &#39; },
            github = { pattern = &#39;github%.com&#39;, icon = &#39;󰊤 &#39; },
            gitlab = { pattern = &#39;gitlab%.com&#39;, icon = &#39;󰮠 &#39; },
            google = { pattern = &#39;google%.com&#39;, icon = &#39;󰊭 &#39; },
            hackernews = { pattern = &#39;ycombinator%.com&#39;, icon = &#39; &#39; },
            linkedin = { pattern = &#39;linkedin%.com&#39;, icon = &#39;󰌻 &#39; },
            microsoft = { pattern = &#39;microsoft%.com&#39;, icon = &#39; &#39; },
            neovim = { pattern = &#39;neovim%.io&#39;, icon = &#39; &#39; },
            reddit = { pattern = &#39;reddit%.com&#39;, icon = &#39;󰑍 &#39; },
            slack = { pattern = &#39;slack%.com&#39;, icon = &#39;󰒱 &#39; },
            stackoverflow = { pattern = &#39;stackoverflow%.com&#39;, icon = &#39;󰓌 &#39; },
            steam = { pattern = &#39;steampowered%.com&#39;, icon = &#39; &#39; },
            twitter = { pattern = &#39;twitter%.com&#39;, icon = &#39; &#39; },
            wikipedia = { pattern = &#39;wikipedia%.org&#39;, icon = &#39;󰖬 &#39; },
            x = { pattern = &#39;x%.com&#39;, icon = &#39; &#39; },
            youtube = { pattern = &#39;youtube[^.]*%.com&#39;, icon = &#39;󰗃 &#39; },
            youtube_short = { pattern = &#39;youtu%.be&#39;, icon = &#39;󰗃 &#39; },
        },
    },
    sign = {
        -- Turn on / off sign rendering.
        enabled = true,
        -- Priority to assign to sign.
        priority = nil,
        -- Applies to background of sign text.
        highlight = &#39;RenderMarkdownSign&#39;,
    },
    inline_highlight = {
        -- Mimics Obsidian inline highlights when content is surrounded by double equals.
        -- The equals on both ends are concealed and the inner content is highlighted.

        -- Turn on / off inline highlight rendering.
        enabled = true,
        -- Additional modes to render inline highlights.
        render_modes = false,
        -- Applies to background of surrounded text.
        highlight = &#39;RenderMarkdownInlineHighlight&#39;,
        -- Define custom highlights based on text prefix.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | prefix    | matched against text body, @see :h vim.startswith() |
        -- | highlight | highlight for text body                             |
        custom = {},
    },
    indent = {
        -- Mimic org-indent-mode behavior by indenting everything under a heading based on the
        -- level of the heading. Indenting starts from level 2 headings onward by default.

        -- Turn on / off org-indent-mode.
        enabled = false,
        -- Additional modes to render indents.
        render_modes = false,
        -- Amount of additional padding added for each heading level.
        per_level = 2,
        -- Heading levels &amp;lt;= this value will not be indented.
        -- Use 0 to begin indenting from the very first level.
        skip_level = 1,
        -- Do not indent heading titles, only the body.
        skip_heading = false,
        -- Prefix added when indenting, one per level.
        icon = &#39;▎&#39;,
        -- Priority to assign to extmarks.
        priority = 0,
        -- Applied to icon.
        highlight = &#39;RenderMarkdownIndent&#39;,
    },
    html = {
        -- Turn on / off all HTML rendering.
        enabled = true,
        -- Additional modes to render HTML.
        render_modes = false,
        comment = {
            -- Useful context to have when evaluating values.
            -- | text | text value of the comment node |

            -- Turn on / off HTML comment concealing.
            conceal = true,
            -- Text to inline before the concealed comment.
            -- Output is evaluated depending on the type.
            -- | function | `value(context)` |
            -- | string   | `value`          |
            -- | nil      | nothing          |
            text = nil,
            -- Highlight for the inlined text.
            highlight = &#39;RenderMarkdownHtmlComment&#39;,
        },
        -- HTML tags whose start and end will be hidden and icon shown.
        -- The key is matched against the tag name, value type below.
        -- | icon            | optional icon inlined at start of tag           |
        -- | highlight       | optional highlight for the icon                 |
        -- | scope_highlight | optional highlight for item associated with tag |
        tag = {},
    },
    win_options = {
        -- Window options to use that change between rendered and raw view.

        -- @see :h &#39;conceallevel&#39;
        conceallevel = {
            -- Used when not being rendered, get user setting.
            default = vim.o.conceallevel,
            -- Used when being rendered, concealed text is completely hidden.
            rendered = 3,
        },
        -- @see :h &#39;concealcursor&#39;
        concealcursor = {
            -- Used when not being rendered, get user setting.
            default = vim.o.concealcursor,
            -- Used when being rendered, show concealed text in all modes.
            rendered = &#39;&#39;,
        },
    },
    overrides = {
        -- More granular configuration mechanism, allows different aspects of buffers to have their own
        -- behavior. Values default to the top level configuration if no override is provided. Supports
        -- the following fields:
        --   enabled, render_modes, debounce, anti_conceal, bullet, callout, checkbox, code, dash,
        --   document, heading, html, indent, inline_highlight, latex, link, padding, paragraph,
        --   pipe_table, quote, sign, win_options, yaml

        -- Override for different buflisted values, @see :h &#39;buflisted&#39;.
        buflisted = {},
        -- Override for different buftype values, @see :h &#39;buftype&#39;.
        buftype = {
            nofile = {
                render_modes = true,
                padding = { highlight = &#39;NormalFloat&#39; },
                sign = { enabled = false },
            },
        },
        -- Override for different filetype values, @see :h &#39;filetype&#39;.
        filetype = {},
        -- Override for preview buffer.
        preview = {
            render_modes = true,
        },
    },
    custom_handlers = {
        -- Mapping from treesitter language to user defined handlers.
        -- @see [Custom Handlers](doc/custom-handlers.md)
    },
    yaml = {
        -- Turn on / off all yaml rendering.
        enabled = true,
        -- Additional modes to render yaml.
        render_modes = false,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;p&gt;We use the following definitions when discussing indexing into lists:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Cycle: Indexed &lt;code&gt;mod&lt;/code&gt; the length. Example: &lt;code&gt;{ 1, 2, 3 }&lt;/code&gt; @ 4 = 1.&lt;/li&gt; 
 &lt;li&gt;Clamp: Indexed normally but larger values use the last value in the list. Example: &lt;code&gt;{ 1, 2, 3 }&lt;/code&gt; @ 4 = 3.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Headings&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Headings&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Heading Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    heading = {
        -- Useful context to have when evaluating values.
        -- | level    | the number of &#39;#&#39; in the heading marker         |
        -- | sections | for each level how deeply nested the heading is |

        -- Turn on / off heading icon &amp;amp; background rendering.
        enabled = true,
        -- Additional modes to render headings.
        render_modes = false,
        -- Turn on / off atx heading rendering.
        atx = true,
        -- Turn on / off setext heading rendering.
        setext = true,
        -- Turn on / off sign column related rendering.
        sign = true,
        -- Replaces &#39;#+&#39; of &#39;atx_h._marker&#39;.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)`              |
        -- | string[] | `cycle(value, context.level)` |
        icons = { &#39;󰲡 &#39;, &#39;󰲣 &#39;, &#39;󰲥 &#39;, &#39;󰲧 &#39;, &#39;󰲩 &#39;, &#39;󰲫 &#39; },
        -- Determines how icons fill the available space.
        -- | eol     | &#39;#&#39;s are concealed and icon is placed at right most column   |
        -- | right   | &#39;#&#39;s are concealed and icon is appended to right side        |
        -- | inline  | &#39;#&#39;s are concealed and icon is inlined on left side          |
        -- | overlay | icon is left padded with spaces and overlayed hiding all &#39;#&#39; |
        position = &#39;overlay&#39;,
        -- Added to the sign column if enabled.
        -- Output is evaluated by `cycle(value, context.level)`.
        signs = { &#39;󰫎 &#39; },
        -- Width of the heading background.
        -- | block | width of the heading text |
        -- | full  | full width of the window  |
        -- Can also be a list of the above values evaluated by `clamp(value, context.level)`.
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of headings.
        -- Margin available space is computed after accounting for padding.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Can also be a list of numbers evaluated by `clamp(value, context.level)`.
        left_margin = 0,
        -- Amount of padding to add to the left of headings.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        left_pad = 0,
        -- Amount of padding to add to the right of headings when width is &#39;block&#39;.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        right_pad = 0,
        -- Minimum width to use for headings when width is &#39;block&#39;.
        -- Can also be a list of integers evaluated by `clamp(value, context.level)`.
        min_width = 0,
        -- Determines if a border is added above and below headings.
        -- Can also be a list of booleans evaluated by `clamp(value, context.level)`.
        border = false,
        -- Always use virtual lines for heading borders instead of attempting to use empty lines.
        border_virtual = false,
        -- Highlight the start of the border using the foreground highlight.
        border_prefix = false,
        -- Used above heading for border.
        above = &#39;▄&#39;,
        -- Used below heading for border.
        below = &#39;▀&#39;,
        -- Highlight for the heading icon and extends through the entire line.
        -- Output is evaluated by `clamp(value, context.level)`.
        backgrounds = {
            &#39;RenderMarkdownH1Bg&#39;,
            &#39;RenderMarkdownH2Bg&#39;,
            &#39;RenderMarkdownH3Bg&#39;,
            &#39;RenderMarkdownH4Bg&#39;,
            &#39;RenderMarkdownH5Bg&#39;,
            &#39;RenderMarkdownH6Bg&#39;,
        },
        -- Highlight for the heading and sign icons.
        -- Output is evaluated using the same logic as &#39;backgrounds&#39;.
        foregrounds = {
            &#39;RenderMarkdownH1&#39;,
            &#39;RenderMarkdownH2&#39;,
            &#39;RenderMarkdownH3&#39;,
            &#39;RenderMarkdownH4&#39;,
            &#39;RenderMarkdownH5&#39;,
            &#39;RenderMarkdownH6&#39;,
        },
        -- Define custom heading patterns which allow you to override various properties based on
        -- the contents of a heading.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | pattern    | matched against the heading text @see :h lua-patterns |
        -- | icon       | optional override for the icon                        |
        -- | background | optional override for the background                  |
        -- | foreground | optional override for the foreground                  |
        custom = {},
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Paragraphs&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Paragraphs&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Paragraph Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    paragraph = {
        -- Useful context to have when evaluating values.
        -- | text | text value of the node |

        -- Turn on / off paragraph rendering.
        enabled = true,
        -- Additional modes to render paragraphs.
        render_modes = false,
        -- Amount of margin to add to the left of paragraphs.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)` |
        -- | number   | `value`          |
        left_margin = 0,
        -- Amount of padding to add to the first line of each paragraph.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        indent = 0,
        -- Minimum width to use for paragraphs.
        min_width = 0,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Code Blocks&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/CodeBlocks&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Code Block Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    code = {
        -- Turn on / off code block &amp;amp; inline code rendering.
        enabled = true,
        -- Additional modes to render code blocks.
        render_modes = false,
        -- Turn on / off sign column related rendering.
        sign = true,
        -- Whether to conceal nodes at the top and bottom of code blocks.
        conceal_delimiters = true,
        -- Turn on / off language heading related rendering.
        language = true,
        -- Determines where language icon is rendered.
        -- | center | center of code block |
        -- | right  | right of code block  |
        -- | left   | left of code block   |
        position = &#39;left&#39;,
        -- Whether to include the language icon above code blocks.
        language_icon = true,
        -- Whether to include the language name above code blocks.
        language_name = true,
        -- Whether to include the language info above code blocks.
        language_info = true,
        -- Amount of padding to add around the language.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        language_pad = 0,
        -- A list of language names for which rendering will be disabled.
        disable = {},
        -- A list of language names for which background highlighting will be disabled.
        -- Likely because that language has background highlights itself.
        -- Use a boolean to make behavior apply to all languages.
        -- Borders above &amp;amp; below blocks will continue to be rendered.
        disable_background = { &#39;diff&#39; },
        -- Width of the code block background.
        -- | block | width of the code block  |
        -- | full  | full width of the window |
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of code blocks.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Margin available space is computed after accounting for padding.
        left_margin = 0,
        -- Amount of padding to add to the left of code blocks.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        left_pad = 0,
        -- Amount of padding to add to the right of code blocks when width is &#39;block&#39;.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        right_pad = 0,
        -- Minimum width to use for code blocks when width is &#39;block&#39;.
        min_width = 0,
        -- Determines how the top / bottom of code block are rendered.
        -- | none  | do not render a border                               |
        -- | thick | use the same highlight as the code body              |
        -- | thin  | when lines are empty overlay the above &amp;amp; below icons |
        -- | hide  | conceal lines unless language name or icon is added  |
        border = &#39;hide&#39;,
        -- Used above code blocks to fill remaining space around language.
        language_border = &#39;█&#39;,
        -- Added to the left of language.
        language_left = &#39;&#39;,
        -- Added to the right of language.
        language_right = &#39;&#39;,
        -- Used above code blocks for thin border.
        above = &#39;▄&#39;,
        -- Used below code blocks for thin border.
        below = &#39;▀&#39;,
        -- Turn on / off inline code related rendering.
        inline = true,
        -- Icon to add to the left of inline code.
        inline_left = &#39;&#39;,
        -- Icon to add to the right of inline code.
        inline_right = &#39;&#39;,
        -- Padding to add to the left &amp;amp; right of inline code.
        inline_pad = 0,
        -- Priority to assign to code background highlight.
        priority = 140,
        -- Highlight for code blocks.
        highlight = &#39;RenderMarkdownCode&#39;,
        -- Highlight for code info section, after the language.
        highlight_info = &#39;RenderMarkdownCodeInfo&#39;,
        -- Highlight for language, overrides icon provider value.
        highlight_language = nil,
        -- Highlight for border, use false to add no highlight.
        highlight_border = &#39;RenderMarkdownCodeBorder&#39;,
        -- Highlight for language, used if icon provider does not have a value.
        highlight_fallback = &#39;RenderMarkdownCodeFallback&#39;,
        -- Highlight for inline code.
        highlight_inline = &#39;RenderMarkdownCodeInline&#39;,
        -- Highlight for inline code left icon, default to reverse of highlight_inline.
        highlight_inline_left = nil,
        -- Highlight for inline code right icon, default to reverse of highlight_inline.
        highlight_inline_right = nil,
        -- Determines how code blocks &amp;amp; inline code are rendered.
        -- | none     | { enabled = false }                           |
        -- | normal   | { language = false }                          |
        -- | language | { disable_background = true, inline = false } |
        -- | full     | uses all default values                       |
        style = &#39;full&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Dashed Line&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/DashedLine&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Dashed Line Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    dash = {
        -- Useful context to have when evaluating values.
        -- | width | width of the current window |

        -- Turn on / off thematic break rendering.
        enabled = true,
        -- Additional modes to render dash.
        render_modes = false,
        -- Replaces &#39;---&#39;|&#39;***&#39;|&#39;___&#39;|&#39;* * *&#39; of &#39;thematic_break&#39;.
        -- The icon gets repeated across the window&#39;s width.
        icon = &#39;─&#39;,
        -- Width of the generated line.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)`    |
        -- | number   | `value`             |
        -- | full     | width of the window |
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of dash.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        left_margin = 0,
        -- Priority to assign to dash.
        priority = nil,
        -- Highlight for the whole line generated from the icon.
        highlight = &#39;RenderMarkdownDash&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;List Bullets&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/ListBullets&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Bullet Point Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    bullet = {
        -- Useful context to have when evaluating values.
        -- | level | how deeply nested the list is, 1-indexed          |
        -- | index | how far down the item is at that level, 1-indexed |
        -- | value | text value of the marker node                     |

        -- Turn on / off list bullet rendering
        enabled = true,
        -- Additional modes to render list bullets
        render_modes = false,
        -- Replaces &#39;-&#39;|&#39;+&#39;|&#39;*&#39; of &#39;list_item&#39;.
        -- If the item is a &#39;checkbox&#39; a conceal is used to hide the bullet instead.
        -- Output is evaluated depending on the type.
        -- | function   | `value(context)`                                    |
        -- | string     | `value`                                             |
        -- | string[]   | `cycle(value, context.level)`                       |
        -- | string[][] | `clamp(cycle(value, context.level), context.index)` |
        icons = { &#39;●&#39;, &#39;○&#39;, &#39;◆&#39;, &#39;◇&#39; },
        -- Replaces &#39;n.&#39;|&#39;n)&#39; of &#39;list_item&#39;.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        ordered_icons = function(ctx)
            local value = vim.trim(ctx.value)
            local index = tonumber(value:sub(1, #value - 1))
            return (&#39;%d.&#39;):format(index &amp;gt; 1 and index or ctx.index)
        end,
        -- Padding to add to the left of bullet point.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)` |
        -- | integer  | `value`          |
        left_pad = 0,
        -- Padding to add to the right of bullet point.
        -- Output is evaluated using the same logic as &#39;left_pad&#39;.
        right_pad = 0,
        -- Highlight for the bullet icon.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        highlight = &#39;RenderMarkdownBullet&#39;,
        -- Highlight for item associated with the bullet point.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        scope_highlight = {},
        -- Priority to assign to scope highlight.
        scope_priority = nil,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Checkboxes&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Checkboxes&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Checkbox Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    checkbox = {
        -- Checkboxes are a special instance of a &#39;list_item&#39; that start with a &#39;shortcut_link&#39;.
        -- There are two special states for unchecked &amp;amp; checked defined in the markdown grammar.

        -- Turn on / off checkbox state rendering.
        enabled = true,
        -- Additional modes to render checkboxes.
        render_modes = false,
        -- Render the bullet point before the checkbox.
        bullet = false,
        -- Padding to add to the left of checkboxes.
        left_pad = 0,
        -- Padding to add to the right of checkboxes.
        right_pad = 1,
        unchecked = {
            -- Replaces &#39;[ ]&#39; of &#39;task_list_marker_unchecked&#39;.
            icon = &#39;󰄱 &#39;,
            -- Highlight for the unchecked icon.
            highlight = &#39;RenderMarkdownUnchecked&#39;,
            -- Highlight for item associated with unchecked checkbox.
            scope_highlight = nil,
        },
        checked = {
            -- Replaces &#39;[x]&#39; of &#39;task_list_marker_checked&#39;.
            icon = &#39;󰱒 &#39;,
            -- Highlight for the checked icon.
            highlight = &#39;RenderMarkdownChecked&#39;,
            -- Highlight for item associated with checked checkbox.
            scope_highlight = nil,
        },
        -- Define custom checkbox states, more involved, not part of the markdown grammar.
        -- As a result this requires neovim &amp;gt;= 0.10.0 since it relies on &#39;inline&#39; extmarks.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw             | matched against the raw text of a &#39;shortcut_link&#39;           |
        -- | rendered        | replaces the &#39;raw&#39; value when rendering                     |
        -- | highlight       | highlight for the &#39;rendered&#39; icon                           |
        -- | scope_highlight | optional highlight for item associated with custom checkbox |
        -- stylua: ignore
        custom = {
            todo = { raw = &#39;[-]&#39;, rendered = &#39;󰥔 &#39;, highlight = &#39;RenderMarkdownTodo&#39;, scope_highlight = nil },
        },
        -- Priority to assign to scope highlight.
        scope_priority = nil,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Block Quotes&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/BlockQuotes&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Block Quote Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    quote = {
        -- Turn on / off block quote &amp;amp; callout rendering.
        enabled = true,
        -- Additional modes to render quotes.
        render_modes = false,
        -- Replaces &#39;&amp;gt;&#39; of &#39;block_quote&#39;.
        icon = &#39;▋&#39;,
        -- Whether to repeat icon on wrapped lines. Requires neovim &amp;gt;= 0.10. This will obscure text
        -- if incorrectly configured with :h &#39;showbreak&#39;, :h &#39;breakindent&#39; and :h &#39;breakindentopt&#39;.
        -- A combination of these that is likely to work follows.
        -- | showbreak      | &#39;  &#39; (2 spaces)   |
        -- | breakindent    | true              |
        -- | breakindentopt | &#39;&#39; (empty string) |
        -- These are not validated by this plugin. If you want to avoid adding these to your main
        -- configuration then set them in win_options for this plugin.
        repeat_linebreak = false,
        -- Highlight for the quote icon.
        -- If a list is provided output is evaluated by `cycle(value, level)`.
        highlight = {
            &#39;RenderMarkdownQuote1&#39;,
            &#39;RenderMarkdownQuote2&#39;,
            &#39;RenderMarkdownQuote3&#39;,
            &#39;RenderMarkdownQuote4&#39;,
            &#39;RenderMarkdownQuote5&#39;,
            &#39;RenderMarkdownQuote6&#39;,
        },
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Tables&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Tables&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Table Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    pipe_table = {
        -- Turn on / off pipe table rendering.
        enabled = true,
        -- Additional modes to render pipe tables.
        render_modes = false,
        -- Pre configured settings largely for setting table border easier.
        -- | heavy  | use thicker border characters     |
        -- | double | use double line border characters |
        -- | round  | use round border corners          |
        -- | none   | does nothing                      |
        preset = &#39;none&#39;,
        -- Determines how individual cells of a table are rendered.
        -- | overlay | writes completely over the table, removing conceal behavior and highlights |
        -- | raw     | replaces only the &#39;|&#39; characters in each row, leaving the cells unmodified |
        -- | padded  | raw + cells are padded to maximum visual width for each column             |
        -- | trimmed | padded except empty space is subtracted from visual width calculation      |
        cell = &#39;padded&#39;,
        -- Adjust the computed width of table cells using custom logic.
        cell_offset = function()
            return 0
        end,
        -- Amount of space to put between cell contents and border.
        padding = 1,
        -- Minimum column width to use for padded or trimmed cell.
        min_width = 0,
        -- Characters used to replace table border.
        -- Correspond to top(3), delimiter(3), bottom(3), vertical, &amp;amp; horizontal.
        -- stylua: ignore
        border = {
            &#39;┌&#39;, &#39;┬&#39;, &#39;┐&#39;,
            &#39;├&#39;, &#39;┼&#39;, &#39;┤&#39;,
            &#39;└&#39;, &#39;┴&#39;, &#39;┘&#39;,
            &#39;│&#39;, &#39;─&#39;,
        },
        -- Turn on / off top &amp;amp; bottom lines.
        border_enabled = true,
        -- Always use virtual lines for table borders instead of attempting to use empty lines.
        -- Will be automatically enabled if indentation module is enabled.
        border_virtual = false,
        -- Gets placed in delimiter row for each column, position is based on alignment.
        alignment_indicator = &#39;━&#39;,
        -- Highlight for table heading, delimiter, and the line above.
        head = &#39;RenderMarkdownTableHead&#39;,
        -- Highlight for everything else, main table rows and the line below.
        row = &#39;RenderMarkdownTableRow&#39;,
        -- Determines how the table as a whole is rendered.
        -- | none   | { enabled = false }        |
        -- | normal | { border_enabled = false } |
        -- | full   | uses all default values    |
        style = &#39;full&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Callouts&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Callouts&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Callout Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    callout = {
        -- Callouts are a special instance of a &#39;block_quote&#39; that start with a &#39;shortcut_link&#39;.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw        | matched against the raw text of a &#39;shortcut_link&#39;, case insensitive |
        -- | rendered   | replaces the &#39;raw&#39; value when rendering                             |
        -- | highlight  | highlight for the &#39;rendered&#39; text and quote markers                 |
        -- | quote_icon | optional override for quote.icon value for individual callout       |
        -- | category   | optional metadata useful for filtering                              |

        note      = { raw = &#39;[!NOTE]&#39;,      rendered = &#39;󰋽 Note&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;github&#39;   },
        tip       = { raw = &#39;[!TIP]&#39;,       rendered = &#39;󰌶 Tip&#39;,       highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;github&#39;   },
        important = { raw = &#39;[!IMPORTANT]&#39;, rendered = &#39;󰅾 Important&#39;, highlight = &#39;RenderMarkdownHint&#39;,    category = &#39;github&#39;   },
        warning   = { raw = &#39;[!WARNING]&#39;,   rendered = &#39;󰀪 Warning&#39;,   highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;github&#39;   },
        caution   = { raw = &#39;[!CAUTION]&#39;,   rendered = &#39;󰳦 Caution&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;github&#39;   },
        -- Obsidian: https://help.obsidian.md/Editing+and+formatting/Callouts
        abstract  = { raw = &#39;[!ABSTRACT]&#39;,  rendered = &#39;󰨸 Abstract&#39;,  highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        summary   = { raw = &#39;[!SUMMARY]&#39;,   rendered = &#39;󰨸 Summary&#39;,   highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        tldr      = { raw = &#39;[!TLDR]&#39;,      rendered = &#39;󰨸 Tldr&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        info      = { raw = &#39;[!INFO]&#39;,      rendered = &#39;󰋽 Info&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        todo      = { raw = &#39;[!TODO]&#39;,      rendered = &#39;󰗡 Todo&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        hint      = { raw = &#39;[!HINT]&#39;,      rendered = &#39;󰌶 Hint&#39;,      highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        success   = { raw = &#39;[!SUCCESS]&#39;,   rendered = &#39;󰄬 Success&#39;,   highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        check     = { raw = &#39;[!CHECK]&#39;,     rendered = &#39;󰄬 Check&#39;,     highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        done      = { raw = &#39;[!DONE]&#39;,      rendered = &#39;󰄬 Done&#39;,      highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        question  = { raw = &#39;[!QUESTION]&#39;,  rendered = &#39;󰘥 Question&#39;,  highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        help      = { raw = &#39;[!HELP]&#39;,      rendered = &#39;󰘥 Help&#39;,      highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        faq       = { raw = &#39;[!FAQ]&#39;,       rendered = &#39;󰘥 Faq&#39;,       highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        attention = { raw = &#39;[!ATTENTION]&#39;, rendered = &#39;󰀪 Attention&#39;, highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        failure   = { raw = &#39;[!FAILURE]&#39;,   rendered = &#39;󰅖 Failure&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        fail      = { raw = &#39;[!FAIL]&#39;,      rendered = &#39;󰅖 Fail&#39;,      highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        missing   = { raw = &#39;[!MISSING]&#39;,   rendered = &#39;󰅖 Missing&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        danger    = { raw = &#39;[!DANGER]&#39;,    rendered = &#39;󱐌 Danger&#39;,    highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        error     = { raw = &#39;[!ERROR]&#39;,     rendered = &#39;󱐌 Error&#39;,     highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        bug       = { raw = &#39;[!BUG]&#39;,       rendered = &#39;󰨰 Bug&#39;,       highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        example   = { raw = &#39;[!EXAMPLE]&#39;,   rendered = &#39;󰉹 Example&#39;,   highlight = &#39;RenderMarkdownHint&#39; ,   category = &#39;obsidian&#39; },
        quote     = { raw = &#39;[!QUOTE]&#39;,     rendered = &#39;󱆨 Quote&#39;,     highlight = &#39;RenderMarkdownQuote&#39;,   category = &#39;obsidian&#39; },
        cite      = { raw = &#39;[!CITE]&#39;,      rendered = &#39;󱆨 Cite&#39;,      highlight = &#39;RenderMarkdownQuote&#39;,   category = &#39;obsidian&#39; },
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Links&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Links&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Link Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    link = {
        -- Turn on / off inline link icon rendering.
        enabled = true,
        -- Additional modes to render links.
        render_modes = false,
        -- How to handle footnote links, start with a &#39;^&#39;.
        footnote = {
            -- Turn on / off footnote rendering.
            enabled = true,
            -- Inlined with content.
            icon = &#39;󰯔 &#39;,
            -- Custom processing for footnote body to show.
            -- Runs before prefix / suffix are added and superscript processing.
            body = function(ctx)
                return ctx.text
            end,
            -- Replace value with superscript equivalent.
            superscript = true,
            -- Added before link content.
            prefix = &#39;&#39;,
            -- Added after link content.
            suffix = &#39;&#39;,
        },
        -- Inlined with &#39;image&#39; elements.
        image = &#39;󰥶 &#39;,
        -- Check custom for &#39;image&#39; elements.
        image_custom = true,
        -- Inlined with &#39;email_autolink&#39; elements.
        email = &#39;󰀓 &#39;,
        -- Fallback icon for &#39;inline_link&#39; and &#39;uri_autolink&#39; elements.
        hyperlink = &#39;󰌹 &#39;,
        -- Applies to the inlined icon as a fallback.
        highlight = &#39;RenderMarkdownLink&#39;,
        -- Applies to the link title.
        highlight_title = &#39;RenderMarkdownLinkTitle&#39;,
        -- Applies to WikiLink elements.
        wiki = {
            -- Turn on / off WikiLink rendering.
            enabled = true,
            -- Inlined with content.
            icon = &#39;󱗖 &#39;,
            -- Custom processing for WikiLink body to show.
            body = function()
                return nil
            end,
            -- Applies to the inlined icon.
            highlight = &#39;RenderMarkdownWikiLink&#39;,
            -- Highlight for item associated with the WikiLink.
            scope_highlight = nil,
        },
        -- Define custom destination patterns so icons can quickly inform you of what a link
        -- contains. Applies to &#39;image&#39;, &#39;inline_link&#39;, &#39;uri_autolink&#39;, and WikiLink nodes.
        -- When multiple patterns match a link the one with the longer pattern is used.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | pattern   | matched against the destination text                            |
        -- | icon      | gets inlined before the link text                               |
        -- | kind      | optional determines how pattern is checked                      |
        -- |           | pattern | @see :h lua-patterns, is the default if not set       |
        -- |           | suffix  | @see :h vim.endswith()                                |
        -- | priority  | optional used when multiple match, uses pattern length if empty |
        -- | highlight | optional highlight for &#39;icon&#39;, uses fallback highlight if empty |
        custom = {
            web = { pattern = &#39;^http&#39;, icon = &#39;󰖟 &#39; },
            apple = { pattern = &#39;apple%.com&#39;, icon = &#39; &#39; },
            discord = { pattern = &#39;discord%.com&#39;, icon = &#39;󰙯 &#39; },
            github = { pattern = &#39;github%.com&#39;, icon = &#39;󰊤 &#39; },
            gitlab = { pattern = &#39;gitlab%.com&#39;, icon = &#39;󰮠 &#39; },
            google = { pattern = &#39;google%.com&#39;, icon = &#39;󰊭 &#39; },
            hackernews = { pattern = &#39;ycombinator%.com&#39;, icon = &#39; &#39; },
            linkedin = { pattern = &#39;linkedin%.com&#39;, icon = &#39;󰌻 &#39; },
            microsoft = { pattern = &#39;microsoft%.com&#39;, icon = &#39; &#39; },
            neovim = { pattern = &#39;neovim%.io&#39;, icon = &#39; &#39; },
            reddit = { pattern = &#39;reddit%.com&#39;, icon = &#39;󰑍 &#39; },
            slack = { pattern = &#39;slack%.com&#39;, icon = &#39;󰒱 &#39; },
            stackoverflow = { pattern = &#39;stackoverflow%.com&#39;, icon = &#39;󰓌 &#39; },
            steam = { pattern = &#39;steampowered%.com&#39;, icon = &#39; &#39; },
            twitter = { pattern = &#39;twitter%.com&#39;, icon = &#39; &#39; },
            wikipedia = { pattern = &#39;wikipedia%.org&#39;, icon = &#39;󰖬 &#39; },
            x = { pattern = &#39;x%.com&#39;, icon = &#39; &#39; },
            youtube = { pattern = &#39;youtube[^.]*%.com&#39;, icon = &#39;󰗃 &#39; },
            youtube_short = { pattern = &#39;youtu%.be&#39;, icon = &#39;󰗃 &#39; },
        },
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Signs&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Signs&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Sign Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    sign = {
        -- Turn on / off sign rendering.
        enabled = true,
        -- Priority to assign to sign.
        priority = nil,
        -- Applies to background of sign text.
        highlight = &#39;RenderMarkdownSign&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Indent&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Indent&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Indent Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    indent = {
        -- Mimic org-indent-mode behavior by indenting everything under a heading based on the
        -- level of the heading. Indenting starts from level 2 headings onward by default.

        -- Turn on / off org-indent-mode.
        enabled = false,
        -- Additional modes to render indents.
        render_modes = false,
        -- Amount of additional padding added for each heading level.
        per_level = 2,
        -- Heading levels &amp;lt;= this value will not be indented.
        -- Use 0 to begin indenting from the very first level.
        skip_level = 1,
        -- Do not indent heading titles, only the body.
        skip_heading = false,
        -- Prefix added when indenting, one per level.
        icon = &#39;▎&#39;,
        -- Priority to assign to extmarks.
        priority = 0,
        -- Applied to icon.
        highlight = &#39;RenderMarkdownIndent&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h1&gt;Colors&lt;/h1&gt; 
&lt;p&gt;The table below shows all the highlight groups with their default link&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Highlight Group&lt;/th&gt; 
   &lt;th&gt;Default Group&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH1&lt;/td&gt; 
   &lt;td&gt;@markup.heading.1.markdown&lt;/td&gt; 
   &lt;td&gt;H1 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH2&lt;/td&gt; 
   &lt;td&gt;@markup.heading.2.markdown&lt;/td&gt; 
   &lt;td&gt;H2 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH3&lt;/td&gt; 
   &lt;td&gt;@markup.heading.3.markdown&lt;/td&gt; 
   &lt;td&gt;H3 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH4&lt;/td&gt; 
   &lt;td&gt;@markup.heading.4.markdown&lt;/td&gt; 
   &lt;td&gt;H4 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH5&lt;/td&gt; 
   &lt;td&gt;@markup.heading.5.markdown&lt;/td&gt; 
   &lt;td&gt;H5 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH6&lt;/td&gt; 
   &lt;td&gt;@markup.heading.6.markdown&lt;/td&gt; 
   &lt;td&gt;H6 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH1Bg&lt;/td&gt; 
   &lt;td&gt;DiffText&lt;/td&gt; 
   &lt;td&gt;H1 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH2Bg&lt;/td&gt; 
   &lt;td&gt;DiffAdd&lt;/td&gt; 
   &lt;td&gt;H2 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH3Bg&lt;/td&gt; 
   &lt;td&gt;DiffChange&lt;/td&gt; 
   &lt;td&gt;H3 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH4Bg&lt;/td&gt; 
   &lt;td&gt;DiffDelete&lt;/td&gt; 
   &lt;td&gt;H4 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH5Bg&lt;/td&gt; 
   &lt;td&gt;Visual&lt;/td&gt; 
   &lt;td&gt;H5 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH6Bg&lt;/td&gt; 
   &lt;td&gt;CursorColumn&lt;/td&gt; 
   &lt;td&gt;H6 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCode&lt;/td&gt; 
   &lt;td&gt;ColorColumn&lt;/td&gt; 
   &lt;td&gt;Code block background&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCodeInfo&lt;/td&gt; 
   &lt;td&gt;@label&lt;/td&gt; 
   &lt;td&gt;Code info, after language&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCodeBorder&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownCode&lt;/td&gt; 
   &lt;td&gt;Code border background&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCodeFallback&lt;/td&gt; 
   &lt;td&gt;Normal&lt;/td&gt; 
   &lt;td&gt;Fallback for code language&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCodeInline&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownCode&lt;/td&gt; 
   &lt;td&gt;Inline code background&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;@markup.quote&lt;/td&gt; 
   &lt;td&gt;Default for block quote&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote1&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 1 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote2&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 2 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote3&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 3 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote4&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 4 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote5&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 5 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote6&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 6 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownInlineHighlight&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownCodeInline&lt;/td&gt; 
   &lt;td&gt;Inline highlights contents&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownBullet&lt;/td&gt; 
   &lt;td&gt;Normal&lt;/td&gt; 
   &lt;td&gt;List item bullet points&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownDash&lt;/td&gt; 
   &lt;td&gt;LineNr&lt;/td&gt; 
   &lt;td&gt;Thematic break line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownSign&lt;/td&gt; 
   &lt;td&gt;SignColumn&lt;/td&gt; 
   &lt;td&gt;Sign column background&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownMath&lt;/td&gt; 
   &lt;td&gt;@markup.math&lt;/td&gt; 
   &lt;td&gt;Latex lines&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownIndent&lt;/td&gt; 
   &lt;td&gt;Whitespace&lt;/td&gt; 
   &lt;td&gt;Indent icon&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownHtmlComment&lt;/td&gt; 
   &lt;td&gt;@comment&lt;/td&gt; 
   &lt;td&gt;HTML comment inline text&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownLink&lt;/td&gt; 
   &lt;td&gt;@markup.link.label.markdown_inline&lt;/td&gt; 
   &lt;td&gt;Link icon&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownLinkTitle&lt;/td&gt; 
   &lt;td&gt;@markup.link.markdown_inline&lt;/td&gt; 
   &lt;td&gt;Link title&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownWikiLink&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownLink&lt;/td&gt; 
   &lt;td&gt;WikiLink icon&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownUnchecked&lt;/td&gt; 
   &lt;td&gt;@markup.list.unchecked&lt;/td&gt; 
   &lt;td&gt;Unchecked checkbox&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownChecked&lt;/td&gt; 
   &lt;td&gt;@markup.list.checked&lt;/td&gt; 
   &lt;td&gt;Checked checkbox&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownTodo&lt;/td&gt; 
   &lt;td&gt;@markup.raw&lt;/td&gt; 
   &lt;td&gt;Todo custom checkbox&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownTableHead&lt;/td&gt; 
   &lt;td&gt;@markup.heading&lt;/td&gt; 
   &lt;td&gt;Pipe table heading rows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownTableRow&lt;/td&gt; 
   &lt;td&gt;Normal&lt;/td&gt; 
   &lt;td&gt;Pipe table body rows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownSuccess&lt;/td&gt; 
   &lt;td&gt;DiagnosticOk&lt;/td&gt; 
   &lt;td&gt;Success related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownInfo&lt;/td&gt; 
   &lt;td&gt;DiagnosticInfo&lt;/td&gt; 
   &lt;td&gt;Info related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownHint&lt;/td&gt; 
   &lt;td&gt;DiagnosticHint&lt;/td&gt; 
   &lt;td&gt;Hint related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownWarn&lt;/td&gt; 
   &lt;td&gt;DiagnosticWarn&lt;/td&gt; 
   &lt;td&gt;Warning related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownError&lt;/td&gt; 
   &lt;td&gt;DiagnosticError&lt;/td&gt; 
   &lt;td&gt;Error related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h1&gt;Info&lt;/h1&gt; 
&lt;h2&gt;vimwiki&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/vimwiki/vimwiki&quot;&gt;vimwiki&lt;/a&gt; overrides the &lt;code&gt;filetype&lt;/code&gt; of &lt;code&gt;markdown&lt;/code&gt; files, as such there are additional setup steps.&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Add &lt;code&gt;vimwiki&lt;/code&gt; to the &lt;code&gt;file_types&lt;/code&gt; configuration of this plugin&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    file_types = { &#39;markdown&#39;, &#39;vimwiki&#39; },
})
&lt;/code&gt;&lt;/pre&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Register &lt;code&gt;markdown&lt;/code&gt; as the parser for &lt;code&gt;vimwiki&lt;/code&gt; files&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.treesitter.language.register(&#39;markdown&#39;, &#39;vimwiki&#39;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;obsidian.nvim&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/epwalsh/obsidian.nvim&quot;&gt;obsidian.nvim&lt;/a&gt; provides UI functionality that is enabled by default. While there may be a way to have the 2 work together, for the foreseeable future only one of these plugins should be used for the UI. If you choose this plugin disable the &lt;code&gt;obsidian.nvim&lt;/code&gt; UI with:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;obsidian&#39;).setup({
    ui = { enable = false },
})
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;You can also do something more custom like lazy loading this plugin via a command and adding logic to the config method to disable &lt;code&gt;obsidian.nvim&lt;/code&gt; as suggested in &lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/116&quot;&gt;#116&lt;/a&gt;, though things like this can break at any time given the reliance on internal logic.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Images&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;Images are only supported so far as this plugin will not interfere with others like &lt;a href=&quot;https://github.com/3rd/image.nvim&quot;&gt;image.nvim&lt;/a&gt;, however nothing is done natively by this plugin. It is recommended to enable the &lt;code&gt;only_render_image_at_cursor&lt;/code&gt; option.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Additional&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/limitations.md&quot;&gt;Limitations&lt;/a&gt;: Known limitations of this plugin&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/custom-handlers.md&quot;&gt;Custom Handlers&lt;/a&gt;: Allow users to integrate custom rendering for either unsupported languages or to override / extend builtin implementations&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/troubleshooting.md&quot;&gt;Troubleshooting Guide&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/purpose.md&quot;&gt;Purpose&lt;/a&gt;: Why this plugin exists&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/markdown-ecosystem.md&quot;&gt;Markdown Ecosystem&lt;/a&gt;: Information about other &lt;code&gt;markdown&lt;/code&gt; related plugins and how they co-exist&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Acknowledgments&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lukas-reineke/headlines.nvim&quot;&gt;headlines.nvim&lt;/a&gt;: The plugin that inspired me to create this one and whose implementation I used as a reference for the original version&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Saecki/crates.nvim&quot;&gt;crates.nvim&lt;/a&gt;: Used the in-process lsp implementation as an awesome reference &lt;a href=&quot;https://github.com/saecki/crates.nvim/raw/main/lua/crates/lsp.lua&quot;&gt;lsp.lua&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;h1&gt;Donate&lt;/h1&gt; 
&lt;p&gt;I enjoy working on these projects and will continue to do so with the time I can find. Any support is appreciated including starring the repo and reporting issues. Money is also nice: &lt;a href=&quot;https://donate.stripe.com/4gw2bSbwA5gw5s48ww&quot;&gt;Donate via Stripe&lt;/a&gt;.&lt;/p&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;hr class=&quot;footnotes-sep&quot; /&gt; 
&lt;section class=&quot;footnotes&quot;&gt; 
 &lt;ol class=&quot;footnotes-list&quot;&gt; 
  &lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Requires neovim &amp;gt;= &lt;code&gt;0.10.0&lt;/code&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:6&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:7&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Requires icon provider, &lt;code&gt;mini.icons&lt;/code&gt; or &lt;code&gt;nvim-web-devicons&lt;/code&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Requires &lt;code&gt;latex&lt;/code&gt; parser and &lt;code&gt;pylatexenc&lt;/code&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/section&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e2f2a0983e0e8b7986c61e0b768dd6ec4e068f94b38a5ca439d8a3ac44c0ca2a/MeanderingProgrammer/render-markdown.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>nvim-lualine/lualine.nvim</title>
      <link>https://github.com/nvim-lualine/lualine.nvim</link>
      <description>&lt;p&gt;A blazing fast and easy to configure neovim statusline plugin written in pure lua.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;lualine.nvim&lt;/h1&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/languages/code-size/nvim-lualine/lualine.nvim?style=flat-square&quot; alt=&quot;code size&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/license/nvim-lualine/lualine.nvim?style=flat-square&quot; alt=&quot;license&quot; /&gt;&lt;/p&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;p&gt;A blazing fast and easy to configure Neovim statusline written in Lua.&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;lualine.nvim&lt;/code&gt; requires Neovim &amp;gt;= 0.7.&lt;/p&gt; 
&lt;p&gt;For previous versions of neovim please use compatability tags for example compat-nvim-0.5&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Feel free to create an issue/PR if you want to see anything else implemented. If you have some question or need help with configuration, start a &lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim/discussions&quot;&gt;discussion&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Please read &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; before opening a PR. You can also help with documentation in the &lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim/wiki&quot;&gt;wiki&lt;/a&gt;.&lt;/p&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;p&gt;Here is a preview of what lualine can look like.&lt;/p&gt; 
&lt;p&gt; &lt;img width=&quot;700&quot; src=&quot;https://user-images.githubusercontent.com/41551030/108650373-bb025580-74bf-11eb-8682-2c09321dd18e.png&quot; /&gt; &lt;img width=&quot;700&quot; src=&quot;https://user-images.githubusercontent.com/41551030/108650377-bd64af80-74bf-11eb-9c55-fbfc51b39fe8.png&quot; /&gt; &lt;img width=&quot;700&quot; src=&quot;https://user-images.githubusercontent.com/41551030/108650378-be95dc80-74bf-11eb-9718-82b242ecdd54.png&quot; /&gt; &lt;img width=&quot;700&quot; src=&quot;https://user-images.githubusercontent.com/41551030/108650381-bfc70980-74bf-11eb-9245-85c48f0f154a.png&quot; /&gt; &lt;img width=&quot;700&quot; src=&quot;https://user-images.githubusercontent.com/41551030/103467925-32372b00-4d54-11eb-88d6-6d39c46854d8.png&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;Screenshots of all available themes are listed in &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/THEMES.md&quot;&gt;THEMES.md&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;For those who want to break the norms, you can create custom looks for lualine.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt; :&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/examples/evil_lualine.lua&quot;&gt;evil_lualine&lt;/a&gt; &lt;img width=&quot;700&quot; src=&quot;https://user-images.githubusercontent.com/13149513/113875129-4453ba00-97d8-11eb-8f21-94a9ef565db3.png&quot; /&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/examples/slanted-gaps.lua&quot;&gt;slanted-gaps&lt;/a&gt; &lt;img width=&quot;700&quot; src=&quot;https://user-images.githubusercontent.com/13149513/143395518-f6d6f748-c1ca-491b-9dab-246d0a8cf23f.png&quot; /&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/examples/bubbles.lua&quot;&gt;bubbles&lt;/a&gt; &lt;img width=&quot;700&quot; src=&quot;https://user-images.githubusercontent.com/20235646/131350468-fc556196-5f46-4bfe-a72e-960f6a58db2c.png&quot; /&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/examples/cosmicink.lua&quot;&gt;cosmicink&lt;/a&gt; &lt;img width=&quot;700&quot; src=&quot;https://github.com/user-attachments/assets/c8d3e4ba-4997-42e9-a1bb-d5e2a444bbfd&quot; /&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;h2&gt;Performance compared to other plugins&lt;/h2&gt; 
&lt;p&gt;Unlike other statusline plugins, lualine loads only the components you specify, and nothing else.&lt;/p&gt; 
&lt;p&gt;Startup time performance measured with an amazing plugin &lt;a href=&quot;https://github.com/dstein64/vim-startuptime&quot;&gt;dstein64/vim-startuptime&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Times are measured with a clean &lt;code&gt;init.vim&lt;/code&gt; with only &lt;code&gt;vim-startuptime&lt;/code&gt;, &lt;code&gt;vim-plug&lt;/code&gt; and given statusline plugin installed. In control just &lt;code&gt;vim-startuptime&lt;/code&gt; and&lt;code&gt;vim-plug&lt;/code&gt; is installed. And measured time is complete startuptime of vim not time spent on specific plugin. These numbers are the average of 20 runs.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;control&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;lualine&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;lightline&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;airline&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;17.2 ms&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;24.8 ms&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;25.5 ms&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;79.9 ms&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Last Updated On: 18-04-2022&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;&lt;a href=&quot;https://neovim.io/doc/user/pack/#vim.pack&quot;&gt;vim.pack&lt;/a&gt; (Only for neovim 0.12)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.pack.add({
    &#39;https://github.com/nvim-tree/nvim-web-devicons&#39;,
    &#39;https://github.com/nvim-lualine/lualine.nvim&#39;
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://github.com/junegunn/vim-plug&quot;&gt;vim-plug&lt;/a&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;Plug &#39;nvim-lualine/lualine.nvim&#39;
&quot; If you want to have icons in your statusline choose one of these
Plug &#39;nvim-tree/nvim-web-devicons&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://github.com/wbthomason/packer.nvim&quot;&gt;packer.nvim&lt;/a&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;use {
  &#39;nvim-lualine/lualine.nvim&#39;,
  requires = { &#39;nvim-tree/nvim-web-devicons&#39;, opt = true }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;&lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &#39;nvim-lualine/lualine.nvim&#39;,
    dependencies = { &#39;nvim-tree/nvim-web-devicons&#39; }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You&#39;ll also need to have a patched font if you want icons.&lt;/p&gt; 
&lt;h2&gt;Usage and customization&lt;/h2&gt; 
&lt;p&gt;Lualine has sections as shown below.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;+-------------------------------------------------+
| A | B | C                             X | Y | Z |
+-------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Each sections holds its components e.g. Vim&#39;s current mode.&lt;/p&gt; 
&lt;h3&gt;Configuring lualine in init.vim&lt;/h3&gt; 
&lt;p&gt;All the examples below are in lua. You can use the same examples in &lt;code&gt;.vim&lt;/code&gt; files by wrapping them in lua heredoc like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;lua &amp;lt;&amp;lt; END
require(&#39;lualine&#39;).setup()
END
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more information, check out &lt;code&gt;:help lua-heredoc&lt;/code&gt;.&lt;/p&gt; 
&lt;h4&gt;Default configuration&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).setup {
  options = {
    icons_enabled = true,
    theme = &#39;auto&#39;,
    component_separators = { left = &#39;&#39;, right = &#39;&#39;},
    section_separators = { left = &#39;&#39;, right = &#39;&#39;},
    disabled_filetypes = {
      statusline = {},
      winbar = {},
    },
    ignore_focus = {},
    always_divide_middle = true,
    always_show_tabline = true,
    globalstatus = false,
    refresh = {
      statusline = 1000,
      tabline = 1000,
      winbar = 1000,
      refresh_time = 16, -- ~60fps
      events = {
        &#39;WinEnter&#39;,
        &#39;BufEnter&#39;,
        &#39;BufWritePost&#39;,
        &#39;SessionLoadPost&#39;,
        &#39;FileChangedShellPost&#39;,
        &#39;VimResized&#39;,
        &#39;Filetype&#39;,
        &#39;CursorMoved&#39;,
        &#39;CursorMovedI&#39;,
        &#39;ModeChanged&#39;,
      },
    }
  },
  sections = {
    lualine_a = {&#39;mode&#39;},
    lualine_b = {&#39;branch&#39;, &#39;diff&#39;, &#39;diagnostics&#39;},
    lualine_c = {&#39;filename&#39;},
    lualine_x = {&#39;encoding&#39;, &#39;fileformat&#39;, &#39;filetype&#39;},
    lualine_y = {&#39;progress&#39;},
    lualine_z = {&#39;location&#39;}
  },
  inactive_sections = {
    lualine_a = {},
    lualine_b = {},
    lualine_c = {&#39;filename&#39;},
    lualine_x = {&#39;location&#39;},
    lualine_y = {},
    lualine_z = {}
  },
  tabline = {},
  winbar = {},
  inactive_winbar = {},
  extensions = {}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you want to get your current lualine config, you can do so with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).get_config()

&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Starting lualine&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).setup()
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Setting a theme&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;options = { theme = &#39;gruvbox&#39; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;All available themes are listed in &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/THEMES.md&quot;&gt;THEMES.md&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Please create a PR if you managed to port a popular theme before us, &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/CONTRIBUTING.md&quot;&gt;here is how to do it&lt;/a&gt;.&lt;/p&gt; 
&lt;h4&gt;Customizing themes&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local custom_gruvbox = require&#39;lualine.themes.gruvbox&#39;

-- Change the background of lualine_c section for normal mode
custom_gruvbox.normal.c.bg = &#39;#112233&#39;

require(&#39;lualine&#39;).setup {
  options = { theme  = custom_gruvbox },
  ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Theme structure is available &lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim/wiki/Writing-a-theme&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Separators&lt;/h3&gt; 
&lt;p&gt;lualine defines two kinds of separators:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;section_separators&lt;/code&gt; - separators between sections&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;component_separators&lt;/code&gt; - separators between the different components in sections&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: if viewing this README in a browser, chances are the characters below will not be visible.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;options = {
  section_separators = { left = &#39;&#39;, right = &#39;&#39; },
  component_separators = { left = &#39;&#39;, right = &#39;&#39; }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Here, left refers to the left-most sections (a, b, c), and right refers to the right-most sections (x, y, z).&lt;/p&gt; 
&lt;h4&gt;Disabling separators&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;options = { section_separators = &#39;&#39;, component_separators = &#39;&#39; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Changing components in lualine sections&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {lualine_a = {&#39;mode&#39;}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Available components&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;branch&lt;/code&gt; (git branch)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;buffers&lt;/code&gt; (shows currently available buffers)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;diagnostics&lt;/code&gt; (diagnostics count from your preferred source)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;diff&lt;/code&gt; (git diff status)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;encoding&lt;/code&gt; (file encoding)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;fileformat&lt;/code&gt; (file format)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;filename&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;filesize&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;filetype&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;hostname&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;location&lt;/code&gt; (location in file in line:column format)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;mode&lt;/code&gt; (vim mode)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;progress&lt;/code&gt; (%progress in file)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;searchcount&lt;/code&gt; (number of search matches when hlsearch is active)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;selectioncount&lt;/code&gt; (number of selected characters or lines)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;tabs&lt;/code&gt; (shows currently available tabs)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;windows&lt;/code&gt; (shows currently available windows)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lsp_status&lt;/code&gt; (shows active LSPs in the current buffer and a progress spinner)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Custom components&lt;/h4&gt; 
&lt;h5&gt;Lua functions as lualine component&lt;/h5&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local function hello()
  return [[hello world]]
end
sections = { lualine_a = { hello } }
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Vim functions as lualine component&lt;/h5&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = { lualine_a = {&#39;FugitiveHead&#39;} }
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Vim&#39;s statusline items as lualine component&lt;/h5&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = { lualine_c = {&#39;%=&#39;, &#39;%t%m&#39;, &#39;%3p&#39;} }
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Vim variables as lualine component&lt;/h5&gt; 
&lt;p&gt;Variables from &lt;code&gt;g:&lt;/code&gt;, &lt;code&gt;v:&lt;/code&gt;, &lt;code&gt;t:&lt;/code&gt;, &lt;code&gt;w:&lt;/code&gt;, &lt;code&gt;b:&lt;/code&gt;, &lt;code&gt;o:&lt;/code&gt;, &lt;code&gt;to:&lt;/code&gt;, &lt;code&gt;wo:&lt;/code&gt;, &lt;code&gt;bo:&lt;/code&gt; scopes can be used.&lt;/p&gt; 
&lt;p&gt;See &lt;code&gt;:h lua-vim-variables&lt;/code&gt; and &lt;code&gt;:h lua-vim-options&lt;/code&gt; if you are not sure what to use.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = { lualine_a = { &#39;g:coc_status&#39;, &#39;bo:filetype&#39; } }
&lt;/code&gt;&lt;/pre&gt; 
&lt;h5&gt;Lua expressions as lualine component&lt;/h5&gt; 
&lt;p&gt;You can use any valid lua expression as a component including:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;oneliners&lt;/li&gt; 
 &lt;li&gt;global variables&lt;/li&gt; 
 &lt;li&gt;require statements&lt;/li&gt; 
&lt;/ul&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = { lualine_c = { &quot;os.date(&#39;%a&#39;)&quot;, &#39;data&#39;, &quot;require&#39;lsp-status&#39;.status()&quot; } }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;data&lt;/code&gt; is a global variable in this example.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Component options&lt;/h3&gt; 
&lt;p&gt;Component options can change the way a component behave. There are two kinds of options:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;global options affecting all components&lt;/li&gt; 
 &lt;li&gt;local options affecting specific&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Global options can be used as local options (can be applied to specific components) but you cannot use local options as global. Global option used locally overwrites the global, for example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;    require(&#39;lualine&#39;).setup {
      options = { fmt = string.lower },
      sections = { lualine_a = {
        { &#39;mode&#39;, fmt = function(str) return str:sub(1,1) end } },
                  lualine_b = {&#39;branch&#39;} }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;mode&lt;/code&gt; will be formatted with the passed function so only first char will be shown . On the other hand branch will be formatted with global formatter &lt;code&gt;string.lower&lt;/code&gt; so it will be showed in lower case.&lt;/p&gt; 
&lt;h4&gt;Available options&lt;/h4&gt; 
&lt;h4&gt;Global options&lt;/h4&gt; 
&lt;p&gt;These are &lt;code&gt;options&lt;/code&gt; that are used in options table. They set behavior of lualine.&lt;/p&gt; 
&lt;p&gt;Values set here are treated as default for other options that work in component level.&lt;/p&gt; 
&lt;p&gt;For example even though &lt;code&gt;icons_enabled&lt;/code&gt; is a general component option. You can set &lt;code&gt;icons_enabled&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt; and icons will be disabled on all component. You can still overwrite defaults set in option table by specifying the option value in component.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;options = {
  theme = &#39;auto&#39;, -- lualine theme
  component_separators = { left = &#39;&#39;, right = &#39;&#39; },
  section_separators = { left = &#39;&#39;, right = &#39;&#39; },
  disabled_filetypes = {     -- Filetypes to disable lualine for.
      statusline = {},       -- only ignores the ft for statusline.
      winbar = {},           -- only ignores the ft for winbar.
  },

  ignore_focus = {},         -- If current filetype is in this list it&#39;ll
                             -- always be drawn as inactive statusline
                             -- and the last window will be drawn as active statusline.
                             -- for example if you don&#39;t want statusline of
                             -- your file tree / sidebar window to have active
                             -- statusline you can add their filetypes here.
                             --
                             -- Can also be set to a function that takes the
                             -- currently focused window as its only argument
                             -- and returns a boolean representing whether the
                             -- window&#39;s statusline should be drawn as inactive.

  always_divide_middle = true, -- When set to true, left sections i.e. &#39;a&#39;,&#39;b&#39; and &#39;c&#39;
                               -- can&#39;t take over the entire statusline even
                               -- if neither of &#39;x&#39;, &#39;y&#39; or &#39;z&#39; are present.

  always_show_tabline = true -- When set to true, if you have configured lualine for displaying tabline
                          -- then tabline will always show. If set to false, then tabline will be displayed
                          -- only when there are more than 1 tab. (see :h showtabline)

  globalstatus = false,        -- enable global statusline (have a single statusline
                               -- at bottom of neovim instead of one for  every window).
                               -- This feature is only available in neovim 0.7 and higher.

  refresh = {                  -- sets how often lualine should refresh it&#39;s contents (in ms)
    statusline = 100,         -- The refresh option sets minimum time that lualine tries
    tabline = 100,            -- to maintain between refresh. It&#39;s not guarantied if situation
    winbar = 100              -- arises that lualine needs to refresh itself before this time
                              -- it&#39;ll do it.
    refresh_time = 16,        -- ~60fps the time after which refresh queue is processed. Mininum refreshtime for lualine
    events = {                -- The auto command events at which lualine refreshes
      &#39;WinEnter&#39;,
      &#39;BufEnter&#39;,
      &#39;BufWritePost&#39;,
      &#39;SessionLoadPost&#39;,
      &#39;FileChangedShellPost&#39;,
      &#39;VimResized&#39;,
      &#39;Filetype&#39;,
      &#39;CursorMoved&#39;,
      &#39;CursorMovedI&#39;,
      &#39;ModeChanged&#39;,
    },
                               -- Also you can force lualine&#39;s refresh by calling refresh function
                               -- like require(&#39;lualine&#39;).refresh()
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;General component options&lt;/h4&gt; 
&lt;p&gt;These are options that control behavior at component level and are available for all components.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;mode&#39;,
      icons_enabled = true, -- Enables the display of icons alongside the component.
      -- Defines the icon to be displayed in front of the component.
      -- Can be string|table
      -- As table it must contain the icon as first entry and can use
      -- color option to custom color the icon. Example:
      -- {&#39;branch&#39;, icon = &#39;&#39;} / {&#39;branch&#39;, icon = {&#39;&#39;, color={fg=&#39;green&#39;}}}

      -- icon position can also be set to the right side from table. Example:
      -- {&#39;branch&#39;, icon = {&#39;&#39;, align=&#39;right&#39;, color={fg=&#39;green&#39;}}}
      icon = nil,

      separator = nil,      -- Determines what separator to use for the component.
                            -- Note:
                            --  When a string is provided it&#39;s treated as component_separator.
                            --  When a table is provided it&#39;s treated as section_separator.
                            --  Passing an empty string disables the separator.
                            --
                            -- These options can be used to set colored separators
                            -- around a component.
                            --
                            -- The options need to be set as such:
                            --   separator = { left = &#39;&#39;, right = &#39;&#39;}
                            --
                            -- Where left will be placed on left side of component,
                            -- and right will be placed on its right.
                            --

      cond = nil,           -- Condition function, the component is loaded when the function returns `true`.

      draw_empty = false,   -- Whether to draw component even if it&#39;s empty.
                            -- Might be useful if you want just the separator.

      -- Defines a custom color for the component:
      --
      -- &#39;highlight_group_name&#39; | { fg = &#39;#rrggbb&#39;|cterm_value(0-255)|&#39;color_name(red)&#39;, bg= &#39;#rrggbb&#39;, gui=&#39;style&#39; } | function
      -- Note:
      --  &#39;|&#39; is synonymous with &#39;or&#39;, meaning a different acceptable format for that placeholder.
      -- color function has to return one of other color types (&#39;highlight_group_name&#39; | { fg = &#39;#rrggbb&#39;|cterm_value(0-255)|&#39;color_name(red)&#39;, bg= &#39;#rrggbb&#39;, gui=&#39;style&#39; })
      -- color functions can be used to have different colors based on state as shown below.
      --
      -- Examples:
      --   color = { fg = &#39;#ffaa88&#39;, bg = &#39;grey&#39;, gui=&#39;italic,bold&#39; },
      --   color = { fg = 204 }   -- When fg/bg are omitted, they default to the your theme&#39;s fg/bg.
      --   color = &#39;WarningMsg&#39;   -- Highlight groups can also be used.
      --   color = function(section)
      --      return { fg = vim.bo.modified and &#39;#aa3355&#39; or &#39;#33aa88&#39; }
      --   end,
      color = nil, -- The default is your theme&#39;s color for that section and mode.

      -- Specify what type a component is, if omitted, lualine will guess it for you.
      --
      -- Available types are:
      --   [format: type_name(example)], mod(branch/filename),
      --   stl(%f/%m), var(g:coc_status/bo:modifiable),
      --   lua_expr(lua expressions), vim_fun(viml function name)
      --
      -- Note:
      -- lua_expr is short for lua-expression and vim_fun is short for vim-function.
      type = nil,

      padding = 1, -- Adds padding to the left and right of components.
                   -- Padding can be specified to left or right independently, e.g.:
                   --   padding = { left = left_padding, right = right_padding }

      fmt = nil,   -- Format function, formats the component&#39;s output.
                   -- This function receives two arguments:
                   -- - string that is going to be displayed and
                   --   that can be changed, enhanced and etc.
                   -- - context object with information you might
                   --   need. E.g. tabnr if used with tabs.
      on_click = nil, -- takes a function that is called when component is clicked with mouse.
                   -- the function receives several arguments
                   -- - number of clicks in case of multiple clicks
                   -- - mouse button used (l(left)/r(right)/m(middle)/...)
                   -- - modifiers pressed (s(shift)/c(ctrl)/a(alt)/m(meta)...)
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Component specific options&lt;/h4&gt; 
&lt;p&gt;These are options that are available on specific components. For example, you have option on &lt;code&gt;diagnostics&lt;/code&gt; component to specify what your diagnostic sources will be.&lt;/p&gt; 
&lt;h4&gt;buffers component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;buffers&#39;,
      show_filename_only = true,   -- Shows shortened relative path when set to false.
      hide_filename_extension = false,   -- Hide filename extension when set to true.
      show_modified_status = true, -- Shows indicator when the buffer is modified.

      mode = 0, -- 0: Shows buffer name
                -- 1: Shows buffer index
                -- 2: Shows buffer name + buffer index
                -- 3: Shows buffer number
                -- 4: Shows buffer name + buffer number

      max_length = vim.o.columns * 2 / 3, -- Maximum width of buffers component,
                                          -- it can also be a function that returns
                                          -- the value of `max_length` dynamically.
      filetype_names = {
        TelescopePrompt = &#39;Telescope&#39;,
        dashboard = &#39;Dashboard&#39;,
        packer = &#39;Packer&#39;,
        fzf = &#39;FZF&#39;,
        alpha = &#39;Alpha&#39;
      }, -- Shows specific buffer name for that filetype ( { `filetype` = `buffer_name`, ... } )

      -- Automatically updates active buffer color to match color of other components (will be overidden if buffers_color is set)
      use_mode_colors = false,

      buffers_color = {
        -- Same values as the general color option can be used here.
        active = &#39;lualine_{section}_normal&#39;,     -- Color for active buffer.
        inactive = &#39;lualine_{section}_inactive&#39;, -- Color for inactive buffer.
      },

      symbols = {
        modified = &#39; ●&#39;,      -- Text to show when the buffer is modified
        alternate_file = &#39;#&#39;, -- Text to show to identify the alternate file
        directory =  &#39;&#39;,     -- Text to show when the buffer is a directory
      },
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;datetime component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;datetime&#39;,
      -- options: default, us, uk, iso, or your own format string (&quot;%H:%M&quot;, etc..)
      style = &#39;default&#39;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;diagnostics component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;diagnostics&#39;,

      -- Table of diagnostic sources, available sources are:
      --   &#39;nvim_lsp&#39;, &#39;nvim_diagnostic&#39;, &#39;nvim_workspace_diagnostic&#39;, &#39;coc&#39;, &#39;ale&#39;, &#39;vim_lsp&#39;.
      -- or a function that returns a table as such:
      --   { error=error_cnt, warn=warn_cnt, info=info_cnt, hint=hint_cnt }
      sources = { &#39;nvim_diagnostic&#39;, &#39;coc&#39; },

      -- Displays diagnostics for the defined severity types
      sections = { &#39;error&#39;, &#39;warn&#39;, &#39;info&#39;, &#39;hint&#39; },

      diagnostics_color = {
        -- Same values as the general color option can be used here.
        error = &#39;DiagnosticError&#39;, -- Changes diagnostics&#39; error color.
        warn  = &#39;DiagnosticWarn&#39;,  -- Changes diagnostics&#39; warn color.
        info  = &#39;DiagnosticInfo&#39;,  -- Changes diagnostics&#39; info color.
        hint  = &#39;DiagnosticHint&#39;,  -- Changes diagnostics&#39; hint color.
      },
      symbols = {error = &#39;E&#39;, warn = &#39;W&#39;, info = &#39;I&#39;, hint = &#39;H&#39;},
      colored = true,           -- Displays diagnostics status in color if set to true.
      update_in_insert = false, -- Update diagnostics in insert mode.
      always_visible = false,   -- Show diagnostics even if there are none.
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;diff component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;diff&#39;,
      colored = true, -- Displays a colored diff status if set to true
      diff_color = {
        -- Same color values as the general color option can be used here.
        added    = &#39;LuaLineDiffAdd&#39;,    -- Changes the diff&#39;s added color
        modified = &#39;LuaLineDiffChange&#39;, -- Changes the diff&#39;s modified color
        removed  = &#39;LuaLineDiffDelete&#39;, -- Changes the diff&#39;s removed color you
      },
      symbols = {added = &#39;+&#39;, modified = &#39;~&#39;, removed = &#39;-&#39;}, -- Changes the symbols used by the diff.
      source = nil, -- A function that works as a data source for diff.
                    -- It must return a table as such:
                    --   { added = add_count, modified = modified_count, removed = removed_count }
                    -- or nil on failure. count &amp;lt;= 0 won&#39;t be displayed.
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;fileformat component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;fileformat&#39;,
      symbols = {
        unix = &#39;&#39;, -- e712
        dos = &#39;&#39;,  -- e70f
        mac = &#39;&#39;,  -- e711
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;filename component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;filename&#39;,
      file_status = true,      -- Displays file status (readonly status, modified status)
      newfile_status = false,  -- Display new file status (new file means no write after created)
      path = 0,                -- 0: Just the filename
                               -- 1: Relative path
                               -- 2: Absolute path
                               -- 3: Absolute path, with tilde as the home directory
                               -- 4: Filename and parent dir, with tilde as the home directory

      shorting_target = 40,    -- Shortens path to leave 40 spaces in the window
                               -- for other components. (terrible name, any suggestions?)
                               -- It can also be a function that returns
                               -- the value of `shorting_target` dynamically.
      symbols = {
        modified = &#39;[+]&#39;,      -- Text to show when the file is modified.
        readonly = &#39;[-]&#39;,      -- Text to show when the file is non-modifiable or readonly.
        unnamed = &#39;[No Name]&#39;, -- Text to show for unnamed buffers.
        newfile = &#39;[New]&#39;,     -- Text to show for newly created file before first write
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;filetype component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;filetype&#39;,
      colored = true,   -- Displays filetype icon in color if set to true
      icon_only = false, -- Display only an icon for filetype
      icon = { align = &#39;right&#39; }, -- Display filetype icon on the right hand side
      -- icon =    {&#39;X&#39;, align=&#39;right&#39;}
      -- Icon string ^ in table is ignored in filetype component
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;encoding component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;encoding&#39;,
      -- Show &#39;[BOM]&#39; when the file has a byte-order mark
        show_bomb = false,
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;searchcount component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;searchcount&#39;,
      maxcount = 999,
      timeout = 500,
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;tabs component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;tabs&#39;,
      tab_max_length = 40,  -- Maximum width of each tab. The content will be shorten dynamically (example: apple/orange -&amp;gt; a/orange)
      max_length = vim.o.columns / 3, -- Maximum width of tabs component.
                                      -- Note:
                                      -- It can also be a function that returns
                                      -- the value of `max_length` dynamically.
      mode = 0, -- 0: Shows tab_nr
                -- 1: Shows tab_name
                -- 2: Shows tab_nr + tab_name

      path = 0, -- 0: just shows the filename
                -- 1: shows the relative path and shorten $HOME to ~
                -- 2: shows the full path
                -- 3: shows the full path and shorten $HOME to ~

      -- Automatically updates active tab color to match color of other components (will be overidden if buffers_color is set)
      use_mode_colors = false,

      tabs_color = {
        -- Same values as the general color option can be used here.
        active = &#39;lualine_{section}_normal&#39;,     -- Color for active tab.
        inactive = &#39;lualine_{section}_inactive&#39;, -- Color for inactive tab.
      },

      show_modified_status = true,  -- Shows a symbol next to the tab name if the file has been modified.
      symbols = {
        modified = &#39;[+]&#39;,  -- Text to show when the file is modified.
      },

      fmt = function(name, context)
        -- Show + if buffer is modified in tab
        local buflist = vim.fn.tabpagebuflist(context.tabnr)
        local winnr = vim.fn.tabpagewinnr(context.tabnr)
        local bufnr = buflist[winnr]
        local mod = vim.fn.getbufvar(bufnr, &#39;&amp;amp;mod&#39;)

        return name .. (mod == 1 and &#39; +&#39; or &#39;&#39;)
      end
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;windows component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;windows&#39;,
      show_filename_only = true,   -- Shows shortened relative path when set to false.
      show_modified_status = true, -- Shows indicator when the window is modified.

      mode = 0, -- 0: Shows window name
                -- 1: Shows window index
                -- 2: Shows window name + window index

      max_length = vim.o.columns * 2 / 3, -- Maximum width of windows component,
                                          -- it can also be a function that returns
                                          -- the value of `max_length` dynamically.
      filetype_names = {
        TelescopePrompt = &#39;Telescope&#39;,
        dashboard = &#39;Dashboard&#39;,
        packer = &#39;Packer&#39;,
        fzf = &#39;FZF&#39;,
        alpha = &#39;Alpha&#39;
      }, -- Shows specific window name for that filetype ( { `filetype` = `window_name`, ... } )

      disabled_buftypes = { &#39;quickfix&#39;, &#39;prompt&#39; }, -- Hide a window if its buffer&#39;s type is disabled

      -- Automatically updates active window color to match color of other components (will be overidden if buffers_color is set)
      use_mode_colors = false,

      windows_color = {
        -- Same values as the general color option can be used here.
        active = &#39;lualine_{section}_normal&#39;,     -- Color for active window.
        inactive = &#39;lualine_{section}_inactive&#39;, -- Color for inactive window.
      },
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;lsp status component options&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;sections = {
  lualine_a = {
    {
      &#39;lsp_status&#39;,
      icon = &#39;&#39;, -- f013
      symbols = {
        -- Standard unicode symbols to cycle through for LSP progress:
        spinner = { &#39;⠋&#39;, &#39;⠙&#39;, &#39;⠹&#39;, &#39;⠸&#39;, &#39;⠼&#39;, &#39;⠴&#39;, &#39;⠦&#39;, &#39;⠧&#39;, &#39;⠇&#39;, &#39;⠏&#39; },
        -- Standard unicode symbol for when LSP is done:
        done = &#39;✓&#39;,
        -- Delimiter inserted between LSP names:
        separator = &#39; &#39;,
      },
      -- List of LSP names to ignore (e.g., `null-ls`):
      ignore_lsp = {},
      -- Display the LSP name
      show_name = true,
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Tabline&lt;/h3&gt; 
&lt;p&gt;You can use lualine to display components in tabline. The configuration for tabline sections is exactly the same as that of the statusline.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;tabline = {
  lualine_a = {},
  lualine_b = {&#39;branch&#39;},
  lualine_c = {&#39;filename&#39;},
  lualine_x = {},
  lualine_y = {},
  lualine_z = {}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This will show the branch and filename components on top of neovim inside tabline.&lt;/p&gt; 
&lt;p&gt;lualine also provides 2 components, buffers and tabs, that you can use to get a more traditional tabline/bufferline.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;tabline = {
  lualine_a = {&#39;buffers&#39;},
  lualine_b = {&#39;branch&#39;},
  lualine_c = {&#39;filename&#39;},
  lualine_x = {},
  lualine_y = {},
  lualine_z = {&#39;tabs&#39;}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Winbar&lt;/h3&gt; 
&lt;p&gt;From neovim-0.8 you can customize your winbar with lualine. Winbar configuration is similar to statusline.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;winbar = {
  lualine_a = {},
  lualine_b = {},
  lualine_c = {&#39;filename&#39;},
  lualine_x = {},
  lualine_y = {},
  lualine_z = {}
}

inactive_winbar = {
  lualine_a = {},
  lualine_b = {},
  lualine_c = {&#39;filename&#39;},
  lualine_x = {},
  lualine_y = {},
  lualine_z = {}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Just like statusline you can separately specify winbar for active and inactive windows. Any lualine component can be placed in winbar. All kinds of custom components supported in statusline are also supported for winbar too. In general You can treat winbar as another lualine statusline that just appears on top of windows instead of at bottom.&lt;/p&gt; 
&lt;h4&gt;Buffers&lt;/h4&gt; 
&lt;p&gt;Shows currently open buffers. Like bufferline . See &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/#buffers-component-options&quot;&gt;buffers options&lt;/a&gt; for all builtin behaviors of buffers component. You can use &lt;code&gt;:LualineBuffersJump&lt;/code&gt; to jump to buffer based on index of buffer in buffers component. Jumping to non-existent buffer indices generates an error. To avoid these errors &lt;code&gt;LualineBuffersJump&lt;/code&gt; provides &lt;code&gt;&amp;lt;bang&amp;gt;&lt;/code&gt; support, meaning that you can call &lt;code&gt;:LualineBufferJump!&lt;/code&gt; to ignore these errors.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;  :LualineBuffersJump 2  &quot; Jumps to 2nd buffer in buffers component.
  :LualineBuffersJump $  &quot; Jumps to last buffer in buffers component.
  :LualineBuffersJump! 3  &quot; Attempts to jump to 3rd buffer, if it exists.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Tabs&lt;/h4&gt; 
&lt;p&gt;Shows currently open tab. Like usual tabline. See &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lualine/lualine.nvim/master/#tabs-component-options&quot;&gt;tabs options&lt;/a&gt; for all builtin behaviors of tabs component. You can also use &lt;code&gt;:LualineRenameTab&lt;/code&gt; to set a name for a tabpage. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;:LualineRenameTab Project_K
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It&#39;s useful when you&#39;re using rendering mode 2/3 in tabs. To unname a tabpage run &lt;code&gt;:LualineRenameTab&lt;/code&gt; without argument.&lt;/p&gt; 
&lt;h4&gt;Tabline as statusline&lt;/h4&gt; 
&lt;p&gt;You can also completely move your statusline to a tabline by configuring &lt;code&gt;lualine.tabline&lt;/code&gt; and disabling &lt;code&gt;lualine.sections&lt;/code&gt; and &lt;code&gt;lualine.inactive_sections&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;tabline = {
......
  },
sections = {},
inactive_sections = {},
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you want a more sophisticated tabline you can use other tabline plugins with lualine too, for example:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/akinsho/nvim-bufferline.lua&quot;&gt;nvim-bufferline&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kdheepak/tabline.nvim&quot;&gt;tabline.nvim&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;tabline.nvim even uses lualine&#39;s theme by default 🙌 You can find a bigger list &lt;a href=&quot;https://github.com/rockerBOO/awesome-neovim#tabline&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Extensions&lt;/h3&gt; 
&lt;p&gt;lualine extensions change statusline appearance for a window/buffer with specified filetypes.&lt;/p&gt; 
&lt;p&gt;By default no extensions are loaded to improve performance. You can load extensions with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;extensions = {&#39;quickfix&#39;}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Available extensions&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;aerial&lt;/li&gt; 
 &lt;li&gt;assistant&lt;/li&gt; 
 &lt;li&gt;avante&lt;/li&gt; 
 &lt;li&gt;chadtree&lt;/li&gt; 
 &lt;li&gt;ctrlspace&lt;/li&gt; 
 &lt;li&gt;fern&lt;/li&gt; 
 &lt;li&gt;fugitive&lt;/li&gt; 
 &lt;li&gt;fzf&lt;/li&gt; 
 &lt;li&gt;lazy&lt;/li&gt; 
 &lt;li&gt;man&lt;/li&gt; 
 &lt;li&gt;mason&lt;/li&gt; 
 &lt;li&gt;mundo&lt;/li&gt; 
 &lt;li&gt;neo-tree&lt;/li&gt; 
 &lt;li&gt;nerdtree&lt;/li&gt; 
 &lt;li&gt;nvim-dap-ui&lt;/li&gt; 
 &lt;li&gt;nvim-tree&lt;/li&gt; 
 &lt;li&gt;oil&lt;/li&gt; 
 &lt;li&gt;overseer&lt;/li&gt; 
 &lt;li&gt;quickfix&lt;/li&gt; 
 &lt;li&gt;symbols-outline&lt;/li&gt; 
 &lt;li&gt;toggleterm&lt;/li&gt; 
 &lt;li&gt;trouble&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Custom extensions&lt;/h4&gt; 
&lt;p&gt;You can define your own extensions. If you believe an extension may be useful to others, then please submit a PR.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local my_extension = { sections = { lualine_a = {&#39;mode&#39;} }, filetypes = {&#39;lua&#39;} }
require(&#39;lualine&#39;).setup { extensions = { my_extension } }
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h3&gt;Refreshing lualine&lt;/h3&gt; 
&lt;p&gt;By default lualine refreshes itself based on timer and some events. You can set the interval of the timer with refresh option. However you can also force lualine to refresh at any time by calling &lt;code&gt;lualine.refresh&lt;/code&gt; function.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).refresh({
  scope = &#39;tabpage&#39;,  -- scope of refresh all/tabpage/window
  place = { &#39;statusline&#39;, &#39;winbar&#39;, &#39;tabline&#39; },  -- lualine segment ro refresh.
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The arguments shown here are default values. So not passing any of them will be treated as if a default value was passed.&lt;/p&gt; 
&lt;p&gt;So you can simply do&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).refresh()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Also, note by default when you call refresh a refresh event is queued in lualine. It desn&#39;t refresh event immidiately. It&#39;ll refresh on next refresh check pass. By default this time is set to 16ms to match 60fps. This duration can be configured with &lt;code&gt;options.refresh.refresh_time&lt;/code&gt; option. If you want to bypass the refresh queue and want lualine to process the refresh immmidiately call refresh with &lt;code&gt;force=true&lt;/code&gt; parameter set like this.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).refresh({
  force = true,       -- do an immidiate refresh
  scope = &#39;tabpage&#39;,  -- scope of refresh all/tabpage/window
  place = { &#39;statusline&#39;, &#39;winbar&#39;, &#39;tabline&#39; },  -- lualine segment ro refresh.
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Practically, speaking this is almost never needed. Also you should avoid calling &lt;code&gt;lualine.refresh&lt;/code&gt; with &lt;code&gt;force&lt;/code&gt; inside components. Since components are evaluated during refresh, calling refresh while refreshing can have undesirable effects.&lt;/p&gt; 
&lt;h3&gt;Disabling lualine&lt;/h3&gt; 
&lt;p&gt;You can disable lualine for specific filetypes:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;options = { disabled_filetypes = {&#39;lua&#39;} }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also disable lualine completely. Note that you need to call this after the setup&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  require(&#39;lualine&#39;).hide({
    place = {&#39;statusline&#39;, &#39;tabline&#39;, &#39;winbar&#39;}, -- The segment this change applies to.
    unhide = false,  -- whether to re-enable lualine again/
  })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The arguments show for hide above are default values. Which means even if the hide function is called without arguments it&#39;ll work as if these were passed.&lt;/p&gt; 
&lt;p&gt;So in short to disable lualine completely you can do&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).hide()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To enable it again you can do&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).hide({unhide=true})
&lt;/code&gt;&lt;/pre&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;h3&gt;Contributors&lt;/h3&gt; 
&lt;p&gt;Thanks to these wonderful people, we enjoy this awesome plugin.&lt;/p&gt; 
&lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=nvim-lualine/lualine.nvim&quot; /&gt; &lt;/a&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;h3&gt;Wiki&lt;/h3&gt; 
&lt;p&gt;Check out the &lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim/wiki&quot;&gt;wiki&lt;/a&gt; for more info.&lt;/p&gt; 
&lt;p&gt;You can find some useful &lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim/wiki/Component-snippets&quot;&gt;configuration snippets&lt;/a&gt; here. You can also share your awesome snippets with others.&lt;/p&gt; 
&lt;p&gt;If you want to extend lualine with plugins or want to know which ones already do, &lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim/wiki/Plugins&quot;&gt;wiki/plugins&lt;/a&gt; is for you.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/77c1d9399a458cf9b23c65dbbb537f7604eedf29cca36c8dd35935c73025ec87/nvim-lualine/lualine.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>koreader/koreader</title>
      <link>https://github.com/koreader/koreader</link>
      <description>&lt;p&gt;An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://koreader.rocks&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/koreader/koreader.github.io/master/koreader-logo.png&quot; alt=&quot;KOReader&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;KOReader is a document viewer primarily aimed at e-ink readers.&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/COPYING&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/koreader/koreader&quot; alt=&quot;AGPL Licence&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/release/koreader/koreader.svg?sanitize=true&quot; alt=&quot;Latest release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gitter.im/koreader/koreader&quot;&gt;&lt;img src=&quot;https://img.shields.io/gitter/room/koreader/koreader?color=red&quot; alt=&quot;Gitter&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.mobileread.com/forums/forumdisplay.php?f=276&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/forum-on_mobileread-lightgrey&quot; alt=&quot;Mobileread&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://circleci.com/gh/koreader/koreader&quot;&gt;&lt;img src=&quot;https://circleci.com/gh/koreader/koreader.svg?style=shield&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/koreader/koreader&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/koreader/koreader/branch/master/graph/badge.svg?sanitize=true&quot; alt=&quot;Coverage Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hosted.weblate.org/engage/koreader/?utm_source=widget&quot;&gt;&lt;img src=&quot;https://hosted.weblate.org/widgets/koreader/-/koreader/svg-badge.svg?sanitize=true&quot; alt=&quot;Weblate Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/releases&quot;&gt;Download&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/user_guide/&quot;&gt;User guide&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;Wiki&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/doc/&quot;&gt;Developer docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Main features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;portable&lt;/strong&gt;: runs on embedded devices (Cervantes, Kindle, Kobo, PocketBook, reMarkable), Android and Linux computers. Developers can run a KOReader emulator in Linux and MacOS.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;multi-format documents&lt;/strong&gt;: supports fixed page formats (PDF, DjVu, CBT, CBZ) and reflowable e-book formats (EPUB, FB2, Mobi, DOC, RTF, HTML, CHM, TXT). Scanned PDF/DjVu documents can also be reflowed with the built-in K2pdfopt library. &lt;a href=&quot;https://github.com/koreader/koreader/wiki/ZIP&quot;&gt;ZIP files&lt;/a&gt; are also supported for some formats.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;full-featured reading&lt;/strong&gt;: multi-lingual user interface with a highly customizable reader view and many typesetting options. You can set arbitrary page margins, override line spacing and choose external fonts and styles. It has multi-lingual hyphenation dictionaries bundled into the application.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;integrated&lt;/strong&gt; with &lt;em&gt;calibre&lt;/em&gt; (search metadata, receive ebooks wirelessly, browse library via OPDS), &lt;em&gt;Wallabag&lt;/em&gt;, &lt;em&gt;Wikipedia&lt;/em&gt;, &lt;em&gt;Google Translate&lt;/em&gt; and other content providers.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;optimized for e-ink devices&lt;/strong&gt;: custom UI without animation, with paginated menus, adjustable text contrast, and easy zoom to fit content or page in paged media.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;extensible&lt;/strong&gt;: via plugins&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;fast&lt;/strong&gt;: on some older devices, it has been measured to have less than half the page-turn delay as the built in reading software.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;and much more&lt;/strong&gt;: look up words with StarDict dictionaries / Wikipedia, add your own online OPDS catalogs and RSS feeds, over-the-air software updates, an FTP client, an SSH server, …&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Please check the &lt;a href=&quot;http://koreader.rocks/user_guide/&quot;&gt;user guide&lt;/a&gt; and the &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;wiki&lt;/a&gt; to discover more features and to help us document them.&lt;/p&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-menu.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-menu-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-footnotes.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-footnotes-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-dictionary.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-dictionary-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Please follow the model specific steps for your device:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Android-devices&quot;&gt;Android&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-BQ-devices&quot;&gt;Cervantes&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Kindle-devices&quot;&gt;Kindle&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Kobo-devices&quot;&gt;Kobo&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-desktop-linux&quot;&gt;Linux&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-PocketBook-devices&quot;&gt;Pocketbook&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Remarkable&quot;&gt;reMarkable&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Building.md&quot;&gt;Setting up a build environment&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Collaborating_with_Git.md&quot;&gt;Collaborating with Git&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Building_targets.md&quot;&gt;Building targets&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Porting.md&quot;&gt;Porting&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/doc/&quot;&gt;Developer docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;KOReader is developed and supported by volunteers all around the world. There are many ways you can help:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/koreader/koreader/issues?q=is%3Aopen+is%3Aissue+label%3Abug&quot;&gt;fix bugs&lt;/a&gt; and &lt;a href=&quot;https://github.com/koreader/koreader/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement&quot;&gt;implement new features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hosted.weblate.org/engage/koreader/?utm_source=widget&quot;&gt;translate the program into your language&lt;/a&gt; or improve an existing translation&lt;/li&gt; 
 &lt;li&gt;document lesser-known features on the &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;wiki&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;help others with your knowledge on the &lt;a href=&quot;http://www.mobileread.com/forums/forumdisplay.php?f=276&quot;&gt;forum&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Right now we only support &lt;a href=&quot;https://liberapay.com/KOReader&quot;&gt;liberapay&lt;/a&gt; donations.&lt;/p&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/commits/master&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/koreader/koreader?color=orange&quot; alt=&quot;Last commit&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader/pulse&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/m/koreader/koreader&quot; alt=&quot;Commit activity&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/8e52cced6b20ec93d0b99d8ba843bb847807e932d0ead9d4bc440dd0893935cb/koreader/koreader" medium="image" />
      
    </item>
    
    <item>
      <title>igorlfs/nvim-dap-view</title>
      <link>https://github.com/igorlfs/nvim-dap-view</link>
      <description>&lt;p&gt;Visualize debugging sessions in neovim&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;img src=&quot;https://i.ibb.co/gbSZvN0S/logo.png&quot; alt=&quot;logo&quot; border=&quot;0&quot; width=&quot;200&quot; height=&quot;200&quot; /&gt; 
&lt;/div&gt; 
&lt;h1&gt;nvim-dap-view&lt;/h1&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Modern debugging UI for neovim&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/357bb05d-5645-4cfc-9975-97313c57e770&quot;&gt;https://github.com/user-attachments/assets/357bb05d-5645-4cfc-9975-97313c57e770&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Introduction&lt;/h2&gt; 
&lt;p&gt;A UI for &lt;a href=&quot;https://github.com/mfussenegger/nvim-dap&quot;&gt;&lt;code&gt;nvim-dap&lt;/code&gt;&lt;/a&gt; (the quasi canonical neovim implementation of &lt;a href=&quot;https://microsoft.github.io/debug-adapter-protocol/&quot;&gt;&lt;code&gt;DAP&lt;/code&gt;&lt;/a&gt;; the protocol that enhances text editors with IDE-like debugging capabilities).&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;&lt;strong&gt;Requires neovim 0.11+&lt;/strong&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Via lazy.nvim&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;return {
    {
        &quot;igorlfs/nvim-dap-view&quot;,
        -- let the plugin lazy load itself
        lazy = false,
        version = &quot;1.*&quot;,
        ---@module &#39;dap-view&#39;
        ---@type dapview.Config
        opts = {},
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Watch expressions&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://i.ibb.co/h1XpdNrm/image.png&quot; alt=&quot;watches view&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;Navigate in the call stack&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://i.ibb.co/MDGZZ4hn/image.png&quot; alt=&quot;threads view&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;Manipulate breakpoints&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://i.ibb.co/5hgCTCc1/image.png&quot; alt=&quot;breakpoints view&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;Inspect and modify variables in scope&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://i.ibb.co/3yvcM6tw/image.png&quot; alt=&quot;scopes view&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;REPL&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://i.ibb.co/XfcD5wtT/image.png&quot; alt=&quot;repl view&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;Inline virtual text variables&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://i.ibb.co/gb2sD9c0/image.png&gt;&quot; alt=&quot;image&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;And more!&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;Start a regular debugging session. When desired, you can use &lt;code&gt;:DapViewOpen&lt;/code&gt; to start the plugin. You can switch to another section using the letter outlined in the &lt;code&gt;&#39;winbar&#39;&lt;/code&gt; (e.g., &lt;code&gt;B&lt;/code&gt; for &quot;Breakpoints&quot;). Explore what you can do in each section by using &lt;code&gt;g?&lt;/code&gt; to inspect the keymaps.&lt;/p&gt; 
&lt;p&gt;Once you&#39;re done debugging, you can close the plugin with &lt;code&gt;:DapViewClose&lt;/code&gt; and then terminate your session as usual.&lt;/p&gt; 
&lt;p&gt;There&#39;s a lot more you can do: &lt;code&gt;nvim-dap-view&lt;/code&gt; is highly customizable. To learn all the options, commands, tips and tricks, visit the full documentation on the &lt;a href=&quot;https://igorlfs.github.io/nvim-dap-view/home&quot;&gt;website&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;You can contribute in many ways:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;If you have any questions, create a &lt;a href=&quot;https://github.com/igorlfs/nvim-dap-view/discussions/new/choose&quot;&gt;discussion&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;If something isn&#39;t working, create a &lt;a href=&quot;https://github.com/igorlfs/nvim-dap-view/issues/new?template=bug_report.yml&quot;&gt;bug report&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;If you have an idea, file a &lt;a href=&quot;https://github.com/igorlfs/nvim-dap-view/issues/new?template=feature_request.yml&quot;&gt;feature request&lt;/a&gt;. You can also go ahead and implement it yourself with a &lt;a href=&quot;https://github.com/igorlfs/nvim-dap-view/compare&quot;&gt;PR&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;If you have some spare bucks, consider becoming a &lt;a href=&quot;https://github.com/sponsors/igorlfs&quot;&gt;sponsor&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/ef13dba4cda5b69498e7f109b0eb2556f9cf5ffb68cfc04fcb0312a7aadbab03/igorlfs/nvim-dap-view" medium="image" />
      
    </item>
    
    <item>
      <title>ibhagwan/fzf-lua</title>
      <link>https://github.com/ibhagwan/fzf-lua</link>
      <description>&lt;p&gt;Improved fzf.vim written in lua&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;h1&gt;fzf ❤️ lua&lt;/h1&gt; 
 &lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/Neovim-0.9-57A143?style=flat-square&amp;amp;logo=neovim&quot; alt=&quot;Neovim version&quot; /&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#quickstart&quot;&gt;Quickstart&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#installation&quot;&gt;Installation&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#usage&quot;&gt;Usage&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#commands&quot;&gt;Commands&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#customization&quot;&gt;Customization&lt;/a&gt; • &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/wiki&quot;&gt;Wiki&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/wiki/ibhagwan/fzf-lua/demo.gif&quot; alt=&quot;Demo&quot; /&gt;&lt;/p&gt; 
 &lt;p&gt;“because you can and you love fzf” - &lt;a href=&quot;https://github.com/junegunn&quot;&gt;@junegunn&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&quot;fzf changed my command life, it can change yours too, if you allow it&quot; - &lt;a href=&quot;https://github.com/ibhagwan&quot;&gt;@ibhagwan&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Quickstart&lt;/h2&gt; 
&lt;p&gt;To quickly test this plugin without changing your configuration run (will run in its own sandbox with the default keybinds below):&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;it&#39;s good practice to first &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/raw/main/scripts/mini.sh&quot;&gt;read the script&lt;/a&gt; before running &lt;code&gt;sh -c&lt;/code&gt; directly from the web&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sh -c &quot;$(curl -s https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/scripts/mini.sh)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Key&lt;/th&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;Key&lt;/th&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-\&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;buffers&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-p&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-g&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;grep&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-l&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;live_grep&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-k&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;builtin commands&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;F1&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;neovim help&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://luarocks.org/modules/ibhagwan/fzf-lua&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/ibhagwan/fzf-lua?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Using &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;ibhagwan/fzf-lua&quot;,
  -- optional for icon support
  dependencies = { &quot;nvim-tree/nvim-web-devicons&quot; },
  -- or if using mini.icons/mini.nvim
  -- dependencies = { &quot;nvim-mini/mini.icons&quot; },
  ---@module &quot;fzf-lua&quot;
  ---@type fzf-lua.Config|{}
  ---@diagnostic disable: missing-fields
  opts = {}
  ---@diagnostic enable: missing-fields
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;Show dependencies&lt;/summary&gt; 
 &lt;h3&gt;Dependencies&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/neovim/neovim/releases&quot;&gt;&lt;code&gt;neovim&lt;/code&gt;&lt;/a&gt; version &amp;gt;= &lt;code&gt;0.9&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;&lt;code&gt;fzf&lt;/code&gt;&lt;/a&gt; version &amp;gt; &lt;code&gt;0.36&lt;/code&gt; or &lt;a href=&quot;https://github.com/skim-rs/skim&quot;&gt;&lt;code&gt;skim&lt;/code&gt;&lt;/a&gt; binary installed&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;nvim-web-devicons&lt;/a&gt; or &lt;a href=&quot;https://github.com/nvim-mini/mini.icons&quot;&gt;mini.icons&lt;/a&gt; (optional)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Optional dependencies&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/fd&quot;&gt;fd&lt;/a&gt; - better &lt;code&gt;find&lt;/code&gt; utility&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;rg&lt;/a&gt; - better &lt;code&gt;grep&lt;/code&gt; utility&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/bat&quot;&gt;bat&lt;/a&gt; - syntax highlighted previews when using fzf&#39;s native previewer&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/dandavison/delta&quot;&gt;delta&lt;/a&gt; - syntax highlighted git pager for git status previews&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jj-vcs/jj&quot;&gt;jj&lt;/a&gt; - for Jujutsu commands (&lt;code&gt;jj_files&lt;/code&gt;, &lt;code&gt;vcs_files&lt;/code&gt;)&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mfussenegger/nvim-dap&quot;&gt;nvim-dap&lt;/a&gt; - for Debug Adapter Protocol (DAP) support&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-treesitter/nvim-treesitter-context&quot;&gt;nvim-treesitter-context&lt;/a&gt; - for viewing treesitter context within the previewer&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim&quot;&gt;render-markdown.nvim&lt;/a&gt; or &lt;a href=&quot;https://github.com/OXY2DEV/markview.nvim&quot;&gt;markview.nvim&lt;/a&gt; - for rendering markdown files in the previewer&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;Below are a few optional dependencies for viewing media files (which you need to configure in &lt;code&gt;previewer.builtin.extensions&lt;/code&gt;):&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/hpjansson/chafa&quot;&gt;chafa&lt;/a&gt; - terminal image previewer (recommended, supports most file formats)&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/atanunq/viu&quot;&gt;viu&lt;/a&gt; - terminal image previewer&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jstkdng/ueberzugpp&quot;&gt;ueberzugpp&lt;/a&gt; - terminal image previewer using X11/Wayland child windows, sixels, kitty and iterm2&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
  &lt;p class=&quot;markdown-alert-title&quot;&gt;
   &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
   &lt;/svg&gt;Tip&lt;/p&gt;
  &lt;p&gt;If your terminal supports the kitty graphics protocol (e.g. kitty, ghostty, etc) install @folke&#39;s &lt;a href=&quot;https://github.com/folke/snacks.nvim&quot;&gt;snacks.nvim&lt;/a&gt; to render images using the &lt;code&gt;snacks.image&lt;/code&gt; module, it will be auto-detected by fzf-lua and requires no configuration.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;h3&gt;Windows Notes&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;rg&lt;/a&gt; is required for &lt;code&gt;grep&lt;/code&gt; and &lt;code&gt;tags&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://git-scm.com/download/win&quot;&gt;git&lt;/a&gt; for Windows is required for &lt;code&gt;git&lt;/code&gt; (though installing &lt;code&gt;git-bash&lt;/code&gt;|&lt;code&gt;sh&lt;/code&gt; &lt;strong&gt;is not required&lt;/strong&gt;).&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Installation of dependencies (fzf, rg, fd, etc) is possible via &lt;a href=&quot;https://github.com/ScoopInstaller/Install&quot;&gt;scoop&lt;/a&gt;, &lt;a href=&quot;https://chocolatey.org/install&quot;&gt;chocolatey&lt;/a&gt; or &lt;a href=&quot;https://github.com/microsoft/winget-cli&quot;&gt;winget-cli&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Although almost everything works on Windows exactly as the *NIX/OSX check out the &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/raw/main/README-Win.md&quot;&gt;Windows README&lt;/a&gt; for known issues and limitations.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;Fzf-lua aims to be as plug and play as possible with sane defaults, you can run any fzf-lua command like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua require(&quot;fzf-lua&quot;).files()
-- once loaded we can use the global object
:lua FzfLua.files()
-- or the vim command:
:FzfLua files
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or with arguments:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ cwd = &#39;~/.config&#39; })
-- or using the `FzfLua` vim command:
:FzfLua files cwd=~/.config
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Resume&lt;/h3&gt; 
&lt;p&gt;Resuming work from where you left off is as easy as:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.resume()
-- or
:FzfLua resume
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, resuming work on a specific picker:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ resume = true })
-- or
:FzfLua files resume=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Combining Pickers&lt;/h3&gt; 
&lt;p&gt;Fzf-Lua can combine any of the available pickers into a single display using the &lt;code&gt;combine&lt;/code&gt; method, for example file history (oldfiles) and git-files:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.combine({ pickers = &quot;oldfiles;git_files&quot; })
-- or using the `FzfLua` vim command:
:FzfLua combine pickers=oldfiles;git_files
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;The first picker options determine the options used by the combined picker, that includes formatters, previewer, path_shorten, etc. To avoid errors combine only pickers of the same entry types (i.e files)&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Global Picker&lt;/h3&gt; 
&lt;p&gt;Fzf-Lua conveniently comes with a VS-Code like picker by default (customizable) combining files, buffers and LSP symbols:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Prefix&lt;/th&gt; 
   &lt;th&gt;Behavior&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;no prefix&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;$&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;LSP Symbols (current buffer)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;#&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;LSP Symbols (workspace/project)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.global()
-- or using the `FzfLua` vim command:
:FzfLua global
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;LIST OF AVAILABLE COMMANDS BELOW&lt;/strong&gt; 👇&lt;/p&gt; 
&lt;h2&gt;Commands&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;Buffers and Files&lt;/summary&gt; 
 &lt;h3&gt;Buffers and Files&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;buffers&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;open buffers&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;files&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;find&lt;/code&gt; or &lt;code&gt;fd&lt;/code&gt; on a path&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;oldfiles&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;opened files history&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;history&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;opened buffers/files history&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;quickfix&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;quickfix list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;quickfix_stack&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;quickfix stack&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;loclist&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;location list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;loclist_stack&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;location stack&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lines&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;open buffers lines&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;blines&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;current buffer lines&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;treesitter&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;current buffer treesitter symbols&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tabs&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;open tabs&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;args&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;argument list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;vcs_files&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;jj&lt;/code&gt;/&lt;code&gt;git&lt;/code&gt; files or &lt;code&gt;find&lt;/code&gt;/&lt;code&gt;fd&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Search&lt;/summary&gt; 
 &lt;h3&gt;Search&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search for a pattern with &lt;code&gt;grep&lt;/code&gt; or &lt;code&gt;rg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_last&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;run search again with the last pattern&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_cword&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search word under cursor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_cWORD&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search WORD under cursor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_visual&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search visual selection&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_project&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search all project lines (fzf.vim&#39;s &lt;code&gt;:Rg&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_curbuf&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search current buffer lines&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_quickfix&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search the quickfix list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_loclist&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search the location list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lgrep_curbuf&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep current buffer&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lgrep_quickfix&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep the quickfix list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lgrep_loclist&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep the location list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;live_grep&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep current project&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;live_grep_resume&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep continue last search&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;live_grep_glob&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live_grep with &lt;code&gt;rg --glob&lt;/code&gt; support&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;live_grep_native&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;performant version of &lt;code&gt;live_grep&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Tags&lt;/summary&gt; 
 &lt;h3&gt;Tags&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search project tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;btags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search buffer tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;grep project tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep_cword&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep&lt;/code&gt; word under cursor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep_cWORD&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep&lt;/code&gt; WORD under cursor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep_visual&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep&lt;/code&gt; visual selection&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_live_grep&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep project tags&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Git&lt;/summary&gt; 
 &lt;h3&gt;Git&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_files&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git ls-files&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_status&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_diff&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git diff {ref}&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_hunks&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git hunks {ref}&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_reflog&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git reflog&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_commits&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git commit log (project)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_bcommits&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git commit log (buffer)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_blame&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git blame (buffer)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_branches&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git branches&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_worktrees&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git worktrees&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_tags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_stash&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git stash&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Jujutsu&lt;/summary&gt; 
 &lt;h3&gt;Jujutsu&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;jj_files&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;jj file list&lt;/code&gt; tracked files&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;LSP / Diagnostics&lt;/summary&gt; 
 &lt;h3&gt;LSP/Diagnostics&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_references&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;References&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_definitions&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Definitions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_declarations&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Declarations&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_typedefs&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Type Definitions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_implementations&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Implementations&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_document_symbols&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Document Symbols&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_workspace_symbols&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Workspace Symbols&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_live_workspace_symbols&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Workspace Symbols (live query)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_incoming_calls&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Incoming Calls&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_outgoing_calls&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Outgoing Calls&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_type_sub&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Sub Types&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_type_super&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Super Types&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_code_actions&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Code Actions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_finder&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;All LSP locations, combined view&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;diagnostics_document&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Document Diagnostics&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;diagnostics_workspace&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Workspace Diagnostics&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_document_diagnostics&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;alias to &lt;code&gt;diagnostics_document&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_workspace_diagnostics&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;alias to &lt;code&gt;diagnostics_workspace&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Misc&lt;/summary&gt; 
 &lt;h3&gt;Misc&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;resume&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;resume last command/query&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;builtin&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua builtin commands&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;combine&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;combine different fzf-lua pickers&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;global&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;global picker for files,buffers and symbols&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;profiles&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua configuration profiles&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;helptags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;help tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;manpages&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;man pages&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;colorschemes&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;color schemes&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;awesome_colorschemes&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Awesome Neovim color schemes&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;highlights&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;highlight groups&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;commands&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;neovim commands&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;command_history&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;command history&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;search_history&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search history&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;marks&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:marks&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;jumps&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:jumps&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;changes&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:changes&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;registers&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:registers&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tagstack&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;autocmds&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:autocmd&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;nvim_options&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;neovim options&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;keymaps&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;key mappings&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;filetypes&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;filetypes&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;menus&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;menus&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;spellcheck&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;misspelled words in buffer&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;spell_suggest&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;spelling suggestions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;packadd&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:packadd 
     &lt;package&gt;&lt;/package&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;undotree&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;history undo tree&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Neovim API&lt;/summary&gt; 
 &lt;h3&gt;Neovim API&lt;/h3&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;code&gt;:help vim.ui.select&lt;/code&gt; for more info&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;register_ui_select&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;register fzf-lua as the UI interface for &lt;code&gt;vim.ui.select&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;deregister_ui_select&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;de-register fzf-lua with &lt;code&gt;vim.ui.select&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;nvim-dap&lt;/summary&gt; 
 &lt;h3&gt;nvim-dap&lt;/h3&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;Requires &lt;a href=&quot;https://github.com/mfussenegger/nvim-dap&quot;&gt;&lt;code&gt;nvim-dap&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_commands&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list,run &lt;code&gt;nvim-dap&lt;/code&gt; builtin commands&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_configurations&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list,run debug configurations&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_breakpoints&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list,delete breakpoints&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_variables&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;active session variables&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_frames&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;active session jump to frame&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Tmux&lt;/summary&gt; 
 &lt;h3&gt;tmux&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tmux_buffers&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list tmux paste buffers&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Zoxide&lt;/summary&gt; 
 &lt;h3&gt;zoxide&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;zoxide&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list recent directories&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Completion Functions&lt;/summary&gt; 
 &lt;h3&gt;Completion Functions&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;complete_path&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;complete path under cursor (incl dirs)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;complete_file&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;complete file under cursor (excl dirs)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;complete_line&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;complete line (all open buffers)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;complete_bline&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;complete line (current buffer only)&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Refer to &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/raw/main/OPTIONS.md&quot;&gt;OPTIONS&lt;/a&gt; to see detailed usage notes and a comprehensive list of yet more(!) available options.&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;fzf-lua&quot;).setup {
  -- MISC GLOBAL SETUP OPTIONS, SEE BELOW
  -- fzf_bin = ...,
  -- each of these options can also be passed as function that return options table
  -- e.g. winopts = function() return { ... } end
  winopts = { ...  },     -- UI Options
  keymap = { ...  },      -- Neovim keymaps / fzf binds
  actions = { ...  },     -- Fzf &quot;accept&quot; binds
  fzf_opts = { ...  },    -- Fzf CLI flags
  fzf_colors = { ...  },  -- Fzf `--color` specification
  hls = { ...  },         -- Highlights
  previewers = { ...  },  -- Previewers options
  -- SPECIFIC COMMAND/PICKER OPTIONS, SEE BELOW
  -- files = { ... },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;DEFAULT OPTIONS OF THE DIFFERENT CONFIG SECTIONS BELOW&lt;/strong&gt; 👇&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;globals&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  -- Use skim (or a speccific fzf binary/version) instead of fzf?
  -- fzf_bin = &#39;sk&#39;,
  -- Padding can help kitty term users with double-width icon rendering
  file_icon_padding = &#39;&#39;,
  -- Uncomment if your terminal/font does not support unicode character
  -- &#39;EN SPACE&#39; (U+2002), the below sets it to &#39;NBSP&#39; (U+00A0) instead
  -- nbsp = &#39;\xc2\xa0&#39;,
  -- Function override for opening the help window (default bound to `&amp;lt;F1&amp;gt;`)
  -- Override this function if you want to customize window config of the
  -- help window (location, width, border, etc.)
  help_open_win = vim.api.nvim_open_win,
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;winopts&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;winopts = {
    -- split = &quot;belowright new&quot;,-- open in a split instead?
            -- &quot;belowright new&quot;  : split below
            -- &quot;aboveleft new&quot;   : split above
            -- &quot;belowright vnew&quot; : split right
            -- &quot;aboveleft vnew   : split left
    -- Only valid when using a float window
    -- (i.e. when &#39;split&#39; is not defined, default)
    height           = 0.85,            -- window height
    width            = 0.80,            -- window width
    row              = 0.35,            -- window row position (0=top, 1=bottom)
    col              = 0.50,            -- window col position (0=left, 1=right)
    -- border argument passthrough to nvim_open_win()
    border           = &quot;rounded&quot;,
    -- Backdrop opacity, 0 is fully opaque, 100 is fully transparent (i.e. disabled)
    backdrop         = 60,
    -- title         = &quot;Title&quot;,
    -- title_pos     = &quot;center&quot;,        -- &#39;left&#39;, &#39;center&#39; or &#39;right&#39;
    -- title_flags   = false,           -- uncomment to disable title flags
    fullscreen       = false,           -- start fullscreen?
    -- enable treesitter highlighting for the main fzf window will only have
    -- effect where grep like results are present, i.e. &quot;file:line:col:text&quot;
    -- due to highlight color collisions will also override `fzf_colors`
    -- set `fzf_colors=false` or `fzf_colors.hl=...` to override
    treesitter       = {
      enabled    = true,
      fzf_colors = { [&quot;hl&quot;] = &quot;-1:reverse&quot;, [&quot;hl+&quot;] = &quot;-1:reverse&quot; }
    },
    preview = {
      -- default     = &#39;bat&#39;,           -- override the default previewer?
                                        -- default uses the &#39;builtin&#39; previewer
      border         = &quot;rounded&quot;,       -- preview border: accepts both `nvim_open_win`
                                        -- and fzf values (e.g. &quot;border-top&quot;, &quot;none&quot;)
                                        -- native fzf previewers (bat/cat/git/etc)
                                        -- can also be set to `fun(winopts, metadata)`
      wrap           = false,           -- preview line wrap (fzf&#39;s &#39;wrap|nowrap&#39;)
      hidden         = false,           -- start preview hidden
      vertical       = &quot;down:45%&quot;,      -- up|down:size
      horizontal     = &quot;right:60%&quot;,     -- right|left:size
      layout         = &quot;flex&quot;,          -- horizontal|vertical|flex
      flip_columns   = 100,             -- #cols to switch to horizontal on flex
      -- Only used with the builtin previewer:
      title          = true,            -- preview border title (file/buf)?
      title_pos      = &quot;center&quot;,        -- left|center|right, title alignment
      scrollbar      = &quot;float&quot;,         -- `false` or string:&#39;float|border&#39;
                                        -- float:  in-window floating border
                                        -- border: in-border &quot;block&quot; marker
      scrolloff      = -1,              -- float scrollbar offset from right
                                        -- applies only when scrollbar = &#39;float&#39;
      delay          = 20,              -- delay(ms) displaying the preview
                                        -- prevents lag on fast scrolling
      winopts = {                       -- builtin previewer window options
        number            = true,
        relativenumber    = false,
        cursorline        = true,
        cursorlineopt     = &quot;both&quot;,
        cursorcolumn      = false,
        signcolumn        = &quot;no&quot;,
        list              = false,
        foldenable        = false,
        foldmethod        = &quot;manual&quot;,
      },
    },
    on_create = function()
      -- called once upon creation of the fzf main window
      -- can be used to add custom fzf-lua mappings, e.g:
      --   vim.keymap.set(&quot;t&quot;, &quot;&amp;lt;C-j&amp;gt;&quot;, &quot;&amp;lt;Down&amp;gt;&quot;, { silent = true, buffer = true })
    end,
    -- called once _after_ the fzf interface is closed
    -- on_close = function() ... end
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;keymap&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;keymap = {
    -- Below are the default binds, setting any value in these tables will override
    -- the defaults, to inherit from the defaults change [1] from `false` to `true`
    builtin = {
      -- neovim `:tmap` mappings for the fzf win
      -- true,        -- uncomment to inherit all the below in your custom config
      [&quot;&amp;lt;M-Esc&amp;gt;&quot;]     = &quot;hide&quot;,     -- hide fzf-lua, `:FzfLua resume` to continue
      [&quot;&amp;lt;F1&amp;gt;&quot;]        = &quot;toggle-help&quot;,
      [&quot;&amp;lt;F2&amp;gt;&quot;]        = &quot;toggle-fullscreen&quot;,
      -- Only valid with the &#39;builtin&#39; previewer
      [&quot;&amp;lt;F3&amp;gt;&quot;]        = &quot;toggle-preview-wrap&quot;,
      [&quot;&amp;lt;F4&amp;gt;&quot;]        = &quot;toggle-preview&quot;,
      -- Rotate preview clockwise/counter-clockwise
      [&quot;&amp;lt;F5&amp;gt;&quot;]        = &quot;toggle-preview-cw&quot;,
      -- Preview toggle behavior default/extend
      [&quot;&amp;lt;F6&amp;gt;&quot;]        = &quot;toggle-preview-behavior&quot;,
      -- `ts-ctx` binds require `nvim-treesitter-context`
      [&quot;&amp;lt;F7&amp;gt;&quot;]        = &quot;toggle-preview-ts-ctx&quot;,
      [&quot;&amp;lt;F8&amp;gt;&quot;]        = &quot;preview-ts-ctx-dec&quot;,
      [&quot;&amp;lt;F9&amp;gt;&quot;]        = &quot;preview-ts-ctx-inc&quot;,
      [&quot;&amp;lt;S-Left&amp;gt;&quot;]    = &quot;preview-reset&quot;,
      [&quot;&amp;lt;S-down&amp;gt;&quot;]    = &quot;preview-page-down&quot;,
      [&quot;&amp;lt;S-up&amp;gt;&quot;]      = &quot;preview-page-up&quot;,
      [&quot;&amp;lt;M-S-down&amp;gt;&quot;]  = &quot;preview-down&quot;,
      [&quot;&amp;lt;M-S-up&amp;gt;&quot;]    = &quot;preview-up&quot;,
    },
    fzf = {
      -- fzf &#39;--bind=&#39; options
      -- true,        -- uncomment to inherit all the below in your custom config
      [&quot;ctrl-z&quot;]      = &quot;abort&quot;,
      [&quot;ctrl-u&quot;]      = &quot;unix-line-discard&quot;,
      [&quot;ctrl-f&quot;]      = &quot;half-page-down&quot;,
      [&quot;ctrl-b&quot;]      = &quot;half-page-up&quot;,
      [&quot;ctrl-a&quot;]      = &quot;beginning-of-line&quot;,
      [&quot;ctrl-e&quot;]      = &quot;end-of-line&quot;,
      [&quot;alt-a&quot;]       = &quot;toggle-all&quot;,
      [&quot;alt-g&quot;]       = &quot;first&quot;,
      [&quot;alt-G&quot;]       = &quot;last&quot;,
      -- Only valid with fzf previewers (bat/cat/git/etc)
      [&quot;f3&quot;]          = &quot;toggle-preview-wrap&quot;,
      [&quot;f4&quot;]          = &quot;toggle-preview&quot;,
      [&quot;shift-down&quot;]  = &quot;preview-page-down&quot;,
      [&quot;shift-up&quot;]    = &quot;preview-page-up&quot;,
    },
},
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;actions&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;actions = {
    -- Below are the default actions, setting any value in these tables will override
    -- the defaults, to inherit from the defaults change [1] from `false` to `true`
    files = {
      -- true,        -- uncomment to inherit all the below in your custom config
      -- Pickers inheriting these actions:
      --   files, git_files, git_status, grep, lsp, oldfiles, quickfix, loclist,
      --   tags, btags, args, buffers, tabs, lines, blines
      -- `file_edit_or_qf` opens a single selection or sends multiple selection to quickfix
      -- replace `enter` with `file_edit` to open all files/bufs whether single or multiple
      -- replace `enter` with `file_switch_or_edit` to attempt a switch in current tab first
      [&quot;enter&quot;]       = FzfLua.actions.file_edit_or_qf,
      [&quot;ctrl-s&quot;]      = FzfLua.actions.file_split,
      [&quot;ctrl-v&quot;]      = FzfLua.actions.file_vsplit,
      [&quot;ctrl-t&quot;]      = FzfLua.actions.file_tabedit,
      [&quot;alt-q&quot;]       = FzfLua.actions.file_sel_to_qf,
      [&quot;alt-Q&quot;]       = FzfLua.actions.file_sel_to_ll,
      [&quot;alt-i&quot;]       = FzfLua.actions.toggle_ignore,
      [&quot;alt-h&quot;]       = FzfLua.actions.toggle_hidden,
      [&quot;alt-f&quot;]       = FzfLua.actions.toggle_follow,
    },
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;fzf_opts&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;fzf_opts = {
    -- options are sent as `&amp;lt;left&amp;gt;=&amp;lt;right&amp;gt;`
    -- set to `false` to remove a flag
    -- set to `true` for a no-value flag
    -- for raw args use `fzf_args` instead
    [&quot;--ansi&quot;]           = true,
    [&quot;--info&quot;]           = &quot;inline-right&quot;, -- fzf &amp;lt; v0.42 = &quot;inline&quot;
    [&quot;--height&quot;]         = &quot;100%&quot;,
    [&quot;--layout&quot;]         = &quot;reverse&quot;,
    [&quot;--border&quot;]         = &quot;none&quot;,
    [&quot;--highlight-line&quot;] = true,           -- fzf &amp;gt;= v0.53
  }

-- Only used when fzf_bin = &quot;fzf-tmux&quot;, by default opens as a
-- popup 80% width, 80% height (note `-p` requires tmux &amp;gt; 3.2)
-- and removes the sides margin added by `fzf-tmux` (fzf#3162)
-- for more options run `fzf-tmux --help`
-- NOTE: since fzf v0.53 / sk v0.15 it is recommended to use
-- native tmux integration by adding the below to `fzf_opts`
-- fzf_opts = { [&quot;--tmux&quot;] = &quot;center,80%,60%&quot; }
fzf_tmux_opts = { [&quot;-p&quot;] = &quot;80%,80%&quot;, [&quot;--margin&quot;] = &quot;0,0&quot; },
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;fzf_colors&lt;/summary&gt; 
 &lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
  &lt;p class=&quot;markdown-alert-title&quot;&gt;
   &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
   &lt;/svg&gt;Note&lt;/p&gt;
  &lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#fzf-colors&quot;&gt;Fzf Colors&lt;/a&gt; section for more info.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  -- 
  -- Set fzf&#39;s terminal colorscheme (optional)
  --
  -- Set to `true` to automatically generate an fzf&#39;s colorscheme from
  -- Neovim&#39;s current colorscheme:
  -- fzf_colors       = true,
  -- 
  -- Building a custom colorscheme, has the below specifications:
  -- If rhs is of type &quot;string&quot; rhs will be passed raw, e.g.:
  --   `[&quot;fg&quot;] = &quot;underline&quot;` will be translated to `--color fg:underline`
  -- If rhs is of type &quot;table&quot;, the following convention is used:
  --   [1] &quot;what&quot; field to extract from the hlgroup, i.e &quot;fg&quot;, &quot;bg&quot;, etc.
  --   [2] Neovim highlight group(s), can be either &quot;string&quot; or &quot;table&quot;
  --       when type is &quot;table&quot; the first existing highlight group is used
  --   [3+] any additional fields are passed raw to fzf&#39;s command line args
  -- Example of a &quot;fully loaded&quot; color option:
  --   `[&quot;fg&quot;] = { &quot;fg&quot;, { &quot;NonExistentHl&quot;, &quot;Comment&quot; }, &quot;underline&quot;, &quot;bold&quot; }`
  -- Assuming `Comment.fg=#010101` the resulting fzf command line will be:
  --   `--color fg:#010101:underline:bold`
  -- NOTE: to pass raw arguments `fzf_opts[&quot;--color&quot;]` or `fzf_args`
  -- NOTE: below is an example, not the defaults:
  fzf_colors = {
      true,   -- inherit fzf colors that aren&#39;t specified below from
              -- the auto-generated theme similar to `fzf_colors=true`
      [&quot;fg&quot;]          = { &quot;fg&quot;, &quot;CursorLine&quot; },
      [&quot;bg&quot;]          = { &quot;bg&quot;, &quot;Normal&quot; },
      [&quot;hl&quot;]          = { &quot;fg&quot;, &quot;Comment&quot; },
      [&quot;fg+&quot;]         = { &quot;fg&quot;, &quot;Normal&quot;, &quot;underline&quot; },
      [&quot;bg+&quot;]         = { &quot;bg&quot;, { &quot;CursorLine&quot;, &quot;Normal&quot; } },
      [&quot;hl+&quot;]         = { &quot;fg&quot;, &quot;Statement&quot; },
      [&quot;info&quot;]        = { &quot;fg&quot;, &quot;PreProc&quot; },
      [&quot;prompt&quot;]      = { &quot;fg&quot;, &quot;Conditional&quot; },
      [&quot;pointer&quot;]     = { &quot;fg&quot;, &quot;Exception&quot; },
      [&quot;marker&quot;]      = { &quot;fg&quot;, &quot;Keyword&quot; },
      [&quot;spinner&quot;]     = { &quot;fg&quot;, &quot;Label&quot; },
      [&quot;header&quot;]      = { &quot;fg&quot;, &quot;Comment&quot; },
      [&quot;gutter&quot;]      = &quot;-1&quot;,
  },
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;hls&lt;/summary&gt; 
 &lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
  &lt;p class=&quot;markdown-alert-title&quot;&gt;
   &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
   &lt;/svg&gt;Note&lt;/p&gt;
  &lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#highlights&quot;&gt;highlights&lt;/a&gt; section below for all available highlight groups.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;hls = {
    normal = &quot;Normal&quot;          -- highlight group for normal fg/bg
    preview_normal = &quot;Normal&quot;  -- highlight group for preview fg/bg
    ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;previewers&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;previewers = {
    cat = {
      cmd             = &quot;cat&quot;,
      args            = &quot;-n&quot;,
    },
    bat = {
      cmd             = &quot;bat&quot;,
      args            = &quot;--color=always --style=numbers,changes&quot;,
    },
    head = {
      cmd             = &quot;head&quot;,
      args            = nil,
    },
    git_diff = {
      -- if required, use `{file}` for argument positioning
      -- e.g. `cmd_modified = &quot;git diff --color HEAD {file} | cut -c -30&quot;`
      cmd_deleted     = &quot;git diff --color HEAD --&quot;,
      cmd_modified    = &quot;git diff --color HEAD&quot;,
      cmd_untracked   = &quot;git diff --color --no-index /dev/null&quot;,
      -- git-delta is automatically detected as pager, set `pager=false`
      -- to disable, can also be set under &#39;git.status.preview_pager&#39;
    },
    man = {
      -- NOTE: remove the `-c` flag when using man-db
      -- replace with `man -P cat %s | col -bx` on OSX
      cmd             = &quot;man -c %s | col -bx&quot;,
    },
    builtin = {
      syntax          = true,         -- preview syntax highlight?
      syntax_limit_l  = 0,            -- syntax limit (lines), 0=nolimit
      syntax_limit_b  = 1024*1024,    -- syntax limit (bytes), 0=nolimit
      limit_b         = 1024*1024*10, -- preview limit (bytes), 0=nolimit
      -- previewer treesitter options:
      -- enable specific filetypes with: `{ enabled = { &quot;lua&quot; } }
      -- exclude specific filetypes with: `{ disabled = { &quot;lua&quot; } }
      -- disable `nvim-treesitter-context` with `context = false`
      -- disable fully with: `treesitter = false` or `{ enabled = false }`
      treesitter      = {
        enabled = true,
        disabled = {},
        -- nvim-treesitter-context config options
        context = { max_lines = 1, trim_scope = &quot;inner&quot; }
      },
      -- By default, the main window dimensions are calculated as if the
      -- preview is visible, when hidden the main window will extend to
      -- full size. Set the below to &quot;extend&quot; to prevent the main window
      -- from being modified when toggling the preview.
      toggle_behavior = &quot;default&quot;,
      -- Title transform function, by default only displays the tail
      -- title_fnamemodify = function(s) return vim.fn.fnamemodify(s, &quot;:t&quot;) end,
      -- preview extensions using a custom shell command:
      -- for example, use `viu` for image previews
      -- will do nothing if `viu` isn&#39;t executable
      extensions      = {
        -- neovim terminal only supports `viu` block output
        [&quot;png&quot;]       = { &quot;viu&quot;, &quot;-b&quot; },
        -- by default the filename is added as last argument
        -- if required, use `{file}` for argument positioning
        [&quot;svg&quot;]       = { &quot;chafa&quot;, &quot;{file}&quot; },
        [&quot;jpg&quot;]       = { &quot;ueberzug&quot; },
      },
      -- if using `ueberzug` in the above extensions map
      -- set the default image scaler, possible scalers:
      --   false (none), &quot;crop&quot;, &quot;distort&quot;, &quot;fit_contain&quot;,
      --   &quot;contain&quot;, &quot;forced_cover&quot;, &quot;cover&quot;
      -- https://github.com/seebye/ueberzug
      ueberzug_scaler = &quot;cover&quot;,
      -- render_markdown.nvim integration, enabled by default for markdown
      render_markdown = { enabled = true, filetypes = { [&quot;markdown&quot;] = true } },
      -- snacks.images integration, enabled by default
      snacks_image = { enabled = true, render_inline = true },
    },
    -- Code Action previewers, default is &quot;codeaction&quot; (set via `lsp.code_actions.previewer`)
    -- &quot;codeaction_native&quot; uses fzf&#39;s native previewer, recommended when combined with git-delta
    codeaction = {
      -- options for vim.diff(): https://neovim.io/doc/user/lua.html#vim.diff()
      diff_opts = { ctxlen = 3 },
    },
    codeaction_native = {
      diff_opts = { ctxlen = 3 },
      -- git-delta is automatically detected as pager, set `pager=false`
      -- to disable, can also be set under &#39;lsp.code_actions.preview_pager&#39;
      -- recommended styling for delta
      --pager = [[delta --width=$COLUMNS --hunk-header-style=&quot;omit&quot; --file-style=&quot;omit&quot;]],
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;picker options&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  -- use `defaults` (table or function) if you wish to set &quot;global-picker&quot; defaults
  -- for example, using &quot;mini.icons&quot; globally and open the quickfix list at the top
  --   defaults = {
  --     file_icons   = &quot;mini&quot;,
  --     copen        = &quot;topleft copen&quot;,
  --   },
  files = {
    -- previewer      = &quot;bat&quot;,          -- uncomment to override previewer
                                        -- (name from &#39;previewers&#39; table)
                                        -- set to &#39;false&#39; to disable
    prompt            = &#39;Files❯ &#39;,
    multiprocess      = true,           -- run command in a separate process
    git_icons         = false,          -- show git icons?
    file_icons        = true,           -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
    color_icons       = true,           -- colorize file|git icons
    -- path_shorten   = 1,              -- &#39;true&#39; or number, shorten path?
    -- Uncomment for custom vscode-like formatter where the filename is first:
    -- e.g. &quot;fzf-lua/previewer/fzf.lua&quot; =&amp;gt; &quot;fzf.lua previewer/fzf-lua&quot;
    -- formatter      = &quot;path.filename_first&quot;,
    -- executed command priority is &#39;cmd&#39; (if exists)
    -- otherwise auto-detect prioritizes `fd`:`rg`:`find`
    -- default options are controlled by &#39;fd|rg|find|_opts&#39;
    -- cmd            = &quot;rg --files&quot;,
    find_opts         = [[-type f \! -path &#39;*/.git/*&#39; \! -path &#39;*/.jj/*&#39;]],
    rg_opts           = [[--color=never --files -g &quot;!.git&quot; -g &quot;!.jj&quot;]],
    fd_opts           = [[--color=never --type f --type l --exclude .git --exclude .jj]],
    dir_opts          = [[/s/b/a:-d]],
    -- by default, cwd appears in the header only if {opts} contain a cwd
    -- parameter to a different folder than the current working directory
    -- uncomment if you wish to force display of the cwd as part of the
    -- query prompt string (fzf.vim style), header line or both
    -- cwd_header = true,
    cwd_prompt             = true,
    cwd_prompt_shorten_len = 32,        -- shorten prompt beyond this length
    cwd_prompt_shorten_val = 1,         -- shortened path parts length
    toggle_ignore_flag = &quot;--no-ignore&quot;, -- flag toggled in `actions.toggle_ignore`
    toggle_hidden_flag = &quot;--hidden&quot;,    -- flag toggled in `actions.toggle_hidden`
    toggle_follow_flag = &quot;-L&quot;,          -- flag toggled in `actions.toggle_follow`
    hidden             = true,          -- enable hidden files by default
    follow             = false,         -- do not follow symlinks by default
    no_ignore          = false,         -- respect &quot;.gitignore&quot;  by default
    absolute_path      = false,         -- display absolute paths
    actions = {
      -- inherits from &#39;actions.files&#39;, here we can override
      -- or set bind to &#39;false&#39; to disable a default action
      -- uncomment to override `actions.file_edit_or_qf`
      --   [&quot;enter&quot;]     = actions.file_edit,
      -- custom actions are available too
      --   [&quot;ctrl-y&quot;]    = function(selected) print(selected[1]) end,
    }
  },
  git = {
    files = {
      prompt        = &#39;GitFiles❯ &#39;,
      cmd           = &#39;git ls-files --exclude-standard&#39;,
      multiprocess  = true,           -- run command in a separate process
      git_icons     = true,           -- show git icons?
      file_icons    = true,           -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
      color_icons   = true,           -- colorize file|git icons
      -- force display the cwd header line regardless of your current working
      -- directory can also be used to hide the header when not wanted
      -- cwd_header = true
    },
    status = {
      prompt        = &#39;GitStatus❯ &#39;,
      cmd           = &quot;git -c color.status=false --no-optional-locks status --porcelain=v1 -u&quot;,
      multiprocess  = true,           -- run command in a separate process
      file_icons    = true,
      color_icons   = true,
      previewer     = &quot;git_diff&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      actions = {
        -- actions inherit from &#39;actions.files&#39; and merge
        [&quot;right&quot;]  = { fn = actions.git_unstage, reload = true },
        [&quot;left&quot;]   = { fn = actions.git_stage, reload = true },
        [&quot;ctrl-x&quot;] = { fn = actions.git_reset, reload = true },
      },
      -- If you wish to use a single stage|unstage toggle instead
      -- using &#39;ctrl-s&#39; modify the &#39;actions&#39; table as shown below
      -- actions = {
      --   [&quot;right&quot;]   = false,
      --   [&quot;left&quot;]    = false,
      --   [&quot;ctrl-x&quot;]  = { fn = actions.git_reset, reload = true },
      --   [&quot;ctrl-s&quot;]  = { fn = actions.git_stage_unstage, reload = true },
      -- },
    },
    diff = {
      cmd               = &quot;git --no-pager diff --name-only {ref}&quot;,
      ref               = &quot;HEAD&quot;,
      preview           = &quot;git diff {ref} {file}&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      file_icons        = true,
      color_icons       = true,
      fzf_opts          = { [&quot;--multi&quot;] = true },
    },
    hunks = {
      cmd               = &quot;git --no-pager diff --color=always {ref}&quot;,
      ref               = &quot;HEAD&quot;,
      file_icons        = true,
      color_icons       = true,
      fzf_opts          = {
      [&quot;--multi&quot;] = true,
      [&quot;--delimiter&quot;] = &quot;:&quot;,
      [&quot;--nth&quot;] = &quot;3..&quot;,
      },
    },
    commits = {
      prompt        = &#39;Commits❯ &#39;,
      cmd           = [[git log --color --pretty=format:&quot;%C(yellow)%h%Creset ]]
          .. [[%Cgreen(%&amp;gt;&amp;lt;(12)%cr%&amp;gt;&amp;lt;|(12))%Creset %s %C(blue)&amp;lt;%an&amp;gt;%Creset&quot;]],
      preview       = &quot;git show --color {1}&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      actions = {
        [&quot;enter&quot;]   = actions.git_checkout,
        -- remove `exec_silent` or set to `false` to exit after yank
        [&quot;ctrl-y&quot;]  = { fn = actions.git_yank_commit, exec_silent = true },
      },
    },
    bcommits = {
      prompt        = &#39;BCommits❯ &#39;,
      -- default preview shows a git diff vs the previous commit
      -- if you prefer to see the entire commit you can use:
      --   git show --color {1} --rotate-to={file}
      --   {1}    : commit SHA (fzf field index expression)
      --   {file} : filepath placement within the commands
      cmd           = [[git log --color --pretty=format:&quot;%C(yellow)%h%Creset ]]
          .. [[%Cgreen(%&amp;gt;&amp;lt;(12)%cr%&amp;gt;&amp;lt;|(12))%Creset %s %C(blue)&amp;lt;%an&amp;gt;%Creset&quot; {file}]],
      preview       = &quot;git show --color {1} -- {file}&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      actions = {
        [&quot;enter&quot;]   = actions.git_buf_edit,
        [&quot;ctrl-s&quot;]  = actions.git_buf_split,
        [&quot;ctrl-v&quot;]  = actions.git_buf_vsplit,
        [&quot;ctrl-t&quot;]  = actions.git_buf_tabedit,
        [&quot;ctrl-y&quot;]  = { fn = actions.git_yank_commit, exec_silent = true },
      },
    },
    blame = {
      prompt        = &quot;Blame&amp;gt; &quot;,
      cmd           = [[git blame --color-lines {file}]],
      preview       = &quot;git show --color {1} -- {file}&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      actions = {
        [&quot;enter&quot;]  = actions.git_goto_line,
        [&quot;ctrl-s&quot;] = actions.git_buf_split,
        [&quot;ctrl-v&quot;] = actions.git_buf_vsplit,
        [&quot;ctrl-t&quot;] = actions.git_buf_tabedit,
        [&quot;ctrl-y&quot;] = { fn = actions.git_yank_commit, exec_silent = true },
      },
    },
    branches = {
      prompt   = &#39;Branches❯ &#39;,
      cmd      = &quot;git branch --all --color&quot;,
      preview  = &quot;git log --graph --pretty=oneline --abbrev-commit --color {1}&quot;,
      remotes  = &quot;local&quot;, -- &quot;detach|local&quot;, switch behavior for remotes
      actions  = {
        [&quot;enter&quot;]   = actions.git_switch,
        [&quot;ctrl-x&quot;]  = { fn = actions.git_branch_del, reload = true },
        [&quot;ctrl-a&quot;]  = { fn = actions.git_branch_add, field_index = &quot;{q}&quot;, reload = true },
      },
      -- If you wish to add branch and switch immediately
      -- cmd_add  = { &quot;git&quot;, &quot;checkout&quot;, &quot;-b&quot; },
      cmd_add  = { &quot;git&quot;, &quot;branch&quot; },
      -- If you wish to delete unmerged branches add &quot;--force&quot;
      -- cmd_del  = { &quot;git&quot;, &quot;branch&quot;, &quot;--delete&quot;, &quot;--force&quot; },
      cmd_del  = { &quot;git&quot;, &quot;branch&quot;, &quot;--delete&quot; },
    },
    tags = {
      prompt   = &quot;Tags&amp;gt; &quot;,
      cmd      = [[git for-each-ref --color --sort=&quot;-taggerdate&quot; --format ]]
          .. [[&quot;%(color:yellow)%(refname:short)%(color:reset) ]]
          .. [[%(color:green)(%(taggerdate:relative))%(color:reset)]]
          .. [[ %(subject) %(color:blue)%(taggername)%(color:reset)&quot; refs/tags]],
      preview  = [[git log --graph --color --pretty=format:&quot;%C(yellow)%h%Creset ]]
          .. [[%Cgreen(%&amp;gt;&amp;lt;(12)%cr%&amp;gt;&amp;lt;|(12))%Creset %s %C(blue)&amp;lt;%an&amp;gt;%Creset&quot; {1}]],
      actions  = { [&quot;enter&quot;] = actions.git_checkout },
    },
    stash = {
      prompt          = &#39;Stash&amp;gt; &#39;,
      cmd             = &quot;git --no-pager stash list&quot;,
      preview         = &quot;git --no-pager stash show --patch --color {1}&quot;,
      actions = {
        [&quot;enter&quot;]     = actions.git_stash_apply,
        [&quot;ctrl-x&quot;]    = { fn = actions.git_stash_drop, reload = true },
      },
    },
    icons = {
      [&quot;M&quot;]           = { icon = &quot;M&quot;, color = &quot;yellow&quot; },
      [&quot;D&quot;]           = { icon = &quot;D&quot;, color = &quot;red&quot; },
      [&quot;A&quot;]           = { icon = &quot;A&quot;, color = &quot;green&quot; },
      [&quot;R&quot;]           = { icon = &quot;R&quot;, color = &quot;yellow&quot; },
      [&quot;C&quot;]           = { icon = &quot;C&quot;, color = &quot;yellow&quot; },
      [&quot;T&quot;]           = { icon = &quot;T&quot;, color = &quot;magenta&quot; },
      [&quot;?&quot;]           = { icon = &quot;?&quot;, color = &quot;magenta&quot; },
      -- override git icons?
      -- [&quot;M&quot;]        = { icon = &quot;★&quot;, color = &quot;red&quot; },
      -- [&quot;D&quot;]        = { icon = &quot;✗&quot;, color = &quot;red&quot; },
      -- [&quot;A&quot;]        = { icon = &quot;+&quot;, color = &quot;green&quot; },
    },
  },
  grep = {
    prompt            = &#39;Rg❯ &#39;,
    input_prompt      = &#39;Grep For❯ &#39;,
    multiprocess      = true,           -- run command in a separate process
    git_icons         = false,          -- show git icons?
    file_icons        = true,           -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
    color_icons       = true,           -- colorize file|git icons
    -- executed command priority is &#39;cmd&#39; (if exists)
    -- otherwise auto-detect prioritizes `rg` over `grep`
    -- default options are controlled by &#39;rg|grep_opts&#39;
    -- cmd            = &quot;rg --vimgrep&quot;,
    grep_opts         = &quot;--binary-files=without-match --line-number --recursive --color=auto --perl-regexp -e&quot;,
    rg_opts           = &quot;--column --line-number --no-heading --color=always --smart-case --max-columns=4096 -e&quot;,
    hidden             = false,       -- disable hidden files by default
    follow             = false,       -- do not follow symlinks by default
    no_ignore          = false,       -- respect &quot;.gitignore&quot;  by default
    -- Uncomment to use the rg config file `$RIPGREP_CONFIG_PATH`
    -- RIPGREP_CONFIG_PATH = vim.env.RIPGREP_CONFIG_PATH
    --
    -- Set to &#39;true&#39; to always parse globs in both &#39;grep&#39; and &#39;live_grep&#39;
    -- search strings will be split using the &#39;glob_separator&#39; and translated
    -- to &#39;--iglob=&#39; arguments, requires &#39;rg&#39;
    -- can still be used when &#39;false&#39; by calling &#39;live_grep_glob&#39; directly
    rg_glob           = true,         -- default to glob parsing with `rg`
    glob_flag         = &quot;--iglob&quot;,    -- for case sensitive globs use &#39;--glob&#39;
    glob_separator    = &quot;%s%-%-&quot;,     -- query separator pattern (lua): &#39; --&#39;
    -- advanced usage: for custom argument parsing define
    -- &#39;rg_glob_fn&#39; to return a pair:
    --   first returned argument is the new search query
    --   second returned argument are additional rg flags
    -- rg_glob_fn = function(query, opts)
    --   ...
    --   return new_query, flags
    -- end,
    --
    -- Enable with narrow term width, split results to multiple lines
    -- NOTE: multiline requires fzf &amp;gt;= v0.53 and is ignored otherwise
    -- multiline      = 1,      -- Display as: PATH:LINE:COL\nTEXT
    -- multiline      = 2,      -- Display as: PATH:LINE:COL\nTEXT\n
    actions = {
      -- actions inherit from &#39;actions.files&#39; and merge
      -- this action toggles between &#39;grep&#39; and &#39;live_grep&#39;
      [&quot;ctrl-g&quot;]      = { actions.grep_lgrep }
      -- uncomment to enable &#39;.gitignore&#39; toggle for grep
      -- [&quot;ctrl-r&quot;]   = { actions.toggle_ignore }
    },
  },
  args = {
    prompt            = &#39;Args❯ &#39;,
    files_only        = true,
    -- actions inherit from &#39;actions.files&#39; and merge
    actions           = { [&quot;ctrl-x&quot;] = { fn = actions.arg_del, reload = true } },
  },
  oldfiles = {
    prompt            = &#39;History❯ &#39;,
    cwd_only          = false,
    stat_file         = true,         -- verify files exist on disk
    -- can also be a lua function, for example:
    -- stat_file = FzfLua.utils.file_is_readable,
    -- stat_file = function() return true end,
    include_current_session = false,  -- include bufs from current session
    ignore_current_buffer   = true,   -- exclude current buf from session
  },
  buffers = {
    prompt            = &#39;Buffers❯ &#39;,
    file_icons        = true,         -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
    color_icons       = true,         -- colorize file|git icons
    sort_lastused     = true,         -- sort buffers() by last used
    show_unloaded     = true,         -- show unloaded buffers
    cwd_only          = false,        -- buffers for the cwd only
    cwd               = nil,          -- buffers list for a given dir
    actions = {
      -- actions inherit from &#39;actions.files&#39; and merge
      -- by supplying a table of functions we&#39;re telling
      -- fzf-lua to not close the fzf window, this way we
      -- can resume the buffers picker on the same window
      -- eliminating an otherwise unaesthetic win &quot;flash&quot;
      [&quot;ctrl-x&quot;]      = { fn = actions.buf_del, reload = true },
    }
  },
  tabs = {
    prompt            = &#39;Tabs❯ &#39;,
    tab_title         = &quot;Tab&quot;,
    tab_marker        = &quot;&amp;lt;&amp;lt;&quot;,
    locate            = true,         -- position cursor at current window
    file_icons        = true,         -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
    color_icons       = true,         -- colorize file|git icons
    actions = {
      -- actions inherit from &#39;actions.files&#39; and merge
      [&quot;enter&quot;]       = actions.buf_switch,
      [&quot;ctrl-x&quot;]      = { fn = actions.buf_del, reload = true },
    },
    fzf_opts = {
      -- hide tabnr
      [&quot;--delimiter&quot;] = &quot;[\\):]&quot;,
      [&quot;--with-nth&quot;]  = &#39;2..&#39;,
    },
  },
  -- `blines` has the same defaults as `lines` aside from prompt and `show_bufname`
  lines = {
    prompt            = &#39;Lines❯ &#39;,
    file_icons        = true,
    show_bufname      = true,         -- display buffer name
    show_unloaded     = true,         -- show unloaded buffers
    show_unlisted     = false,        -- exclude &#39;help&#39; buffers
    no_term_buffers   = true,         -- exclude &#39;term&#39; buffers
    sort_lastused     = true,         -- sort by most recent
    winopts  = { treesitter = true }, -- enable TS highlights
    fzf_opts = {
      -- do not include bufnr in fuzzy matching
      -- tiebreak by line no.
      [&quot;--multi&quot;]     = true,
      [&quot;--delimiter&quot;] = &quot;[\t]&quot;,
      [&quot;--tabstop&quot;]   = &quot;1&quot;,
      [&quot;--tiebreak&quot;]  = &quot;index&quot;,
      [&quot;--with-nth&quot;]  = &quot;2..&quot;,
      [&quot;--nth&quot;]       = &quot;4..&quot;,
    },
  },
  tags = {
    prompt                = &#39;Tags❯ &#39;,
    ctags_file            = nil,      -- auto-detect from tags-option
    multiprocess          = true,
    file_icons            = true,
    color_icons           = true,
    -- &#39;tags_live_grep&#39; options, `rg` prioritizes over `grep`
    rg_opts               = &quot;--no-heading --color=always --smart-case&quot;,
    grep_opts             = &quot;--color=auto --perl-regexp&quot;,
    fzf_opts              = { [&quot;--tiebreak&quot;] = &quot;begin&quot; },
    actions = {
      -- actions inherit from &#39;actions.files&#39; and merge
      -- this action toggles between &#39;grep&#39; and &#39;live_grep&#39;
      [&quot;ctrl-g&quot;]          = { actions.grep_lgrep }
    },
  },
  btags = {
    prompt                = &#39;BTags❯ &#39;,
    ctags_file            = nil,      -- auto-detect from tags-option
    ctags_autogen         = true,     -- dynamically generate ctags each call
    multiprocess          = true,
    file_icons            = false,
    rg_opts               = &quot;--color=never --no-heading&quot;,
    grep_opts             = &quot;--color=never --perl-regexp&quot;,
    fzf_opts              = { [&quot;--tiebreak&quot;] = &quot;begin&quot; },
    -- actions inherit from &#39;actions.files&#39;
  },
  colorschemes = {
    prompt            = &#39;Colorschemes❯ &#39;,
    live_preview      = true,       -- apply the colorscheme on preview?
    actions           = { [&quot;enter&quot;] = actions.colorscheme },
    winopts           = { height = 0.55, width = 0.30, },
    -- uncomment to ignore colorschemes names (lua patterns)
    -- ignore_patterns   = { &quot;^delek$&quot;, &quot;^blue$&quot; },
  },
  awesome_colorschemes = {
    prompt            = &#39;Colorschemes❯ &#39;,
    live_preview      = true,       -- apply the colorscheme on preview?
    max_threads       = 5,          -- max download/update threads
    winopts           = { row = 0, col = 0.99, width = 0.50 },
    fzf_opts          = {
      [&quot;--multi&quot;]     = true,
      [&quot;--delimiter&quot;] = &quot;[:]&quot;,
      [&quot;--with-nth&quot;]  = &quot;3..&quot;,
      [&quot;--tiebreak&quot;]  = &quot;index&quot;,
    },
    actions           = {
      [&quot;enter&quot;]   = actions.colorscheme,
      [&quot;ctrl-g&quot;]  = { fn = actions.toggle_bg, exec_silent = true },
      [&quot;ctrl-r&quot;]  = { fn = actions.cs_update, reload = true },
      [&quot;ctrl-x&quot;]  = { fn = actions.cs_delete, reload = true },
    },
  },
  keymaps = {
    prompt            = &quot;Keymaps&amp;gt; &quot;,
    winopts           = { preview = { layout = &quot;vertical&quot; } },
    fzf_opts          = { [&quot;--tiebreak&quot;] = &quot;index&quot;, },
    -- by default, we ignore &amp;lt;Plug&amp;gt; and &amp;lt;SNR&amp;gt; mappings
    -- set `ignore_patterns = false` to disable filtering
    ignore_patterns   = { &quot;^&amp;lt;SNR&amp;gt;&quot;, &quot;^&amp;lt;Plug&amp;gt;&quot; },
    show_desc         = true,
    show_details      = true,
    actions           = {
      [&quot;enter&quot;]       = actions.keymap_apply,
      [&quot;ctrl-s&quot;]      = actions.keymap_split,
      [&quot;ctrl-v&quot;]      = actions.keymap_vsplit,
      [&quot;ctrl-t&quot;]      = actions.keymap_tabedit,
    },
  },
  nvim_options = {
    prompt            = &quot;Nvim Options&amp;gt; &quot;,
    separator         = &quot;│&quot;,  -- separator between option name and value
    color_values      = true, -- colorize boolean values
    actions           = {
      [&quot;enter&quot;]     = { fn = actions.nvim_opt_edit_local, reload = true },
      [&quot;alt-enter&quot;] = { fn = actions.nvim_opt_edit_global, reload = true },
    },
  },
  quickfix = {
    file_icons        = true,
    valid_only        = false, -- select among only the valid quickfix entries
  },
  quickfix_stack = {
    prompt = &quot;Quickfix Stack&amp;gt; &quot;,
    marker = &quot;&amp;gt;&quot;,                   -- current list marker
  },
  lsp = {
    prompt_postfix    = &#39;❯ &#39;,       -- will be appended to the LSP label
                                    -- to override use &#39;prompt&#39; instead
    cwd_only          = false,      -- LSP/diagnostics for cwd only?
    async_or_timeout  = 5000,       -- timeout(ms) or &#39;true&#39; for async calls
    file_icons        = true,
    git_icons         = false,
    jump1             = true,       -- skip the UI when result is a single entry
    jump1_action      = FzfLua.actions.file_edit
    -- The equivalent of using `includeDeclaration` in lsp buf calls, e.g:
    -- :lua vim.lsp.buf.references({includeDeclaration = false})
    includeDeclaration = true,      -- include current declaration in LSP context
    -- settings for &#39;lsp_{document|workspace|lsp_live_workspace}_symbols&#39;
    symbols = {
        -- lsp_query      = &quot;foo&quot;       -- query passed to the LSP directly
        -- query          = &quot;bar&quot;       -- query passed to fzf prompt for fuzzy matching
        locate            = false,      -- attempt to position cursor at current symbol
        async_or_timeout  = true,       -- symbols are async by default
        symbol_style      = 1,          -- style for document/workspace symbols
                                        -- false: disable,    1: icon+kind
                                        --     2: icon only,  3: kind only
                                        -- NOTE: icons are extracted from
                                        -- vim.lsp.protocol.CompletionItemKind
        -- icons for symbol kind
        -- see https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#symbolKind
        -- see https://github.com/neovim/neovim/blob/829d92eca3d72a701adc6e6aa17ccd9fe2082479/runtime/lua/vim/lsp/protocol.lua#L117
        symbol_icons     = {
          File          = &quot;󰈙&quot;,
          Module        = &quot;&quot;,
          Namespace     = &quot;󰦮&quot;,
          Package       = &quot;&quot;,
          Class         = &quot;󰆧&quot;,
          Method        = &quot;󰊕&quot;,
          Property      = &quot;&quot;,
          Field         = &quot;&quot;,
          Constructor   = &quot;&quot;,
          Enum          = &quot;&quot;,
          Interface     = &quot;&quot;,
          Function      = &quot;󰊕&quot;,
          Variable      = &quot;󰀫&quot;,
          Constant      = &quot;󰏿&quot;,
          String        = &quot;&quot;,
          Number        = &quot;󰎠&quot;,
          Boolean       = &quot;󰨙&quot;,
          Array         = &quot;󱡠&quot;,
          Object        = &quot;&quot;,
          Key           = &quot;󰌋&quot;,
          Null          = &quot;󰟢&quot;,
          EnumMember    = &quot;&quot;,
          Struct        = &quot;󰆼&quot;,
          Event         = &quot;&quot;,
          Operator      = &quot;󰆕&quot;,
          TypeParameter = &quot;󰗴&quot;,
        },
        -- colorize using Treesitter &#39;@&#39; highlight groups (&quot;@function&quot;, etc).
        -- or &#39;false&#39; to disable highlighting
        symbol_hl         = function(s) return &quot;@&quot; .. s:lower() end,
        -- additional symbol formatting, works with or without style
        symbol_fmt        = function(s, opts) return &quot;[&quot; .. s .. &quot;]&quot; end,
        -- prefix child symbols. set to any string or `false` to disable
        child_prefix      = true,
        -- prepend parent to symbol, set to any string or `false` to disable
        -- parent_postfix    = &quot;.&quot;,
        fzf_opts          = { [&quot;--tiebreak&quot;] = &quot;begin&quot; },
    },
    code_actions = {
        prompt            = &#39;Code Actions&amp;gt; &#39;,
        async_or_timeout  = 5000,
        -- when git-delta is installed use &quot;codeaction_native&quot; for beautiful diffs
        -- try it out with `:FzfLua lsp_code_actions previewer=codeaction_native`
        -- scroll up to `previewers.codeaction{_native}` for more previewer options
        previewer        = &quot;codeaction&quot;,
    },
    finder = {
        prompt      = &quot;LSP Finder&amp;gt; &quot;,
        file_icons  = true,
        color_icons = true,
        async       = true,         -- async by default
        silent      = true,         -- suppress &quot;not found&quot;
        separator   = &quot;| &quot;,         -- separator after provider prefix, `false` to disable
        includeDeclaration = true,  -- include current declaration in LSP context
        -- by default display all LSP locations
        -- to customize, duplicate table and delete unwanted providers
        providers   = {
            { &quot;references&quot;,      prefix = FzfLua.utils.ansi_codes.blue(&quot;ref &quot;) },
            { &quot;definitions&quot;,     prefix = FzfLua.utils.ansi_codes.green(&quot;def &quot;) },
            { &quot;declarations&quot;,    prefix = FzfLua.utils.ansi_codes.magenta(&quot;decl&quot;) },
            { &quot;typedefs&quot;,        prefix = FzfLua.utils.ansi_codes.red(&quot;tdef&quot;) },
            { &quot;implementations&quot;, prefix = FzfLua.utils.ansi_codes.green(&quot;impl&quot;) },
            { &quot;incoming_calls&quot;,  prefix = FzfLua.utils.ansi_codes.cyan(&quot;in  &quot;) },
            { &quot;outgoing_calls&quot;,  prefix = FzfLua.utils.ansi_codes.yellow(&quot;out &quot;) },
            { &quot;type_sub&quot;,        prefix = FzfLua.utils.utils.ansi_codes.cyan(&quot;sub &quot;) },
            { &quot;type_super&quot;,      prefix = FzfLua.utils.utils.ansi_codes.yellow(&quot;supr&quot;) },
        },
    }
  },
  diagnostics ={
    prompt            = &#39;Diagnostics❯ &#39;,
    cwd_only          = false,
    file_icons        = false,
    git_icons         = false,
    color_headings    = true,   -- use diag highlights to color source &amp;amp; filepath
    diag_icons        = true,   -- display icons from diag sign definitions
    diag_source       = true,   -- display diag source (e.g. [pycodestyle])
    diag_code         = true,   -- display diag code (e.g. [undefined])
    icon_padding      = &#39;&#39;,     -- add padding for wide diagnostics signs
    multiline         = 2,      -- split heading and diag to separate lines
    -- severity_only:   keep any matching exact severity
    -- severity_limit:  keep any equal or more severe (lower)
    -- severity_bound:  keep any equal or less severe (higher)
  },
  marks = {
    marks = &quot;&quot;, -- filter vim marks with a lua pattern
    -- for example if you want to only show user defined marks
    -- you would set this option as %a this would match characters from [A-Za-z]
    -- or if you want to show only numbers you would set the pattern to %d (0-9).
  },
  complete_path = {
    cmd          = nil, -- default: auto detect fd|rg|find
    complete     = { [&quot;enter&quot;] = actions.complete },
    word_pattern = nil, -- default: &quot;[^%s\&quot;&#39;]*&quot;
  },
  complete_file = {
    cmd          = nil, -- default: auto detect rg|fd|find
    file_icons   = true,
    color_icons  = true,
    word_pattern = nil,
    -- actions inherit from &#39;actions.files&#39; and merge
    actions      = { [&quot;enter&quot;] = actions.complete },
    -- previewer hidden by default
    winopts      = { preview = { hidden = true } },
  },
  zoxide = {
    cmd          = &quot;zoxide query --list --score&quot;,
    scope        = &quot;global&quot;, -- cd action scope &quot;local|win|tab&quot;
    git_root     = false,    -- auto-detect git root
    formatter    = &quot;path.dirname_first&quot;,
    fzf_opts     = {
      [&quot;--no-multi&quot;]  = true,
      [&quot;--delimiter&quot;] = &quot;[\t]&quot;,
      [&quot;--tabstop&quot;]   = &quot;4&quot;,
      [&quot;--tiebreak&quot;]  = &quot;end,index&quot;, -- prefer dirs ending with search term
      [&quot;--nth&quot;]       = &quot;2..&quot;,       -- exclude score from fuzzy matching
    },
    actions      = { enter = actions.cd }
  },
  -- uncomment to use fzf native previewers
  -- (instead of using a neovim floating window)
  -- manpages = { previewer = &quot;man_native&quot; },
  -- helptags = { previewer = &quot;help_native&quot; },
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;To experiment with different options without modifying the global config, options can be sent as inline parameters to the function calls. Expand below to see examples of inline customization and Refer to &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/raw/main/OPTIONS.md&quot;&gt;OPTIONS&lt;/a&gt; for yet more examples.&lt;/p&gt; 
&lt;/div&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK FOR EXAMPLES OF INLINE CUSTOMIZATION&lt;/summary&gt; 
 &lt;h4&gt;Inline Customization&lt;/h4&gt; 
 &lt;p&gt;Different &lt;code&gt;fzf&lt;/code&gt; layout:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ fzf_opts = {[&#39;--layout&#39;] = &#39;reverse-list&#39;} })
-- Or via the vimL command
:FzfLua files fzf_opts.--layout=reverse-list
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Using &lt;code&gt;files&lt;/code&gt; with a different command and working directory:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ prompt=&quot;LS&amp;gt; &quot;, cmd = &quot;ls&quot;, cwd=&quot;~/.config&quot; })
-- Or via the vimL command
:FzfLua files prompt=&quot;LS&amp;gt;\ &quot; cmd=ls cwd=~/.config
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Using &lt;code&gt;live_grep&lt;/code&gt; with &lt;code&gt;git grep&lt;/code&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.live_grep({ cmd = &quot;git grep --line-number --column --color=always&quot; })
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;code&gt;spell_suggest&lt;/code&gt; with non-default window size relative to cursor:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.spell_suggest({ winopts = { height=0.33, width=0.33, relative=&quot;cursor&quot; } })
-- Or via the vimL command
:FzfLua spell_suggest winopts={height=0.33,width=0.33,relative=cursor}
:FzfLua spell_suggest winopts={height=0.33,width=0.33} winopts.relative=cursor
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Profiles&lt;/h3&gt; 
&lt;p&gt;Conveniently, fzf-lua comes with a set of preconfigured profiles if you do not want to tinker with customization.&lt;/p&gt; 
&lt;p&gt;Use &lt;code&gt;:FzfLua profiles&lt;/code&gt; to experiment with the different profiles, once you&#39;ve found what you like and wish to make the profile persist, send a &lt;code&gt;string&lt;/code&gt; argument at the first index of the table sent to the &lt;code&gt;setup&lt;/code&gt; function:&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;&lt;code&gt;setup&lt;/code&gt; can be called multiple times for profile &quot;live&quot; switching, see &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/tree/main/lua/fzf-lua/profiles&quot;&gt;profiles&lt;/a&gt; page for more info.&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;fzf-lua&#39;).setup({&#39;fzf-native&#39;})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also start with a profile as &quot;baseline&quot; and customize it, for example, telescope defaults with &lt;code&gt;bat&lt;/code&gt; previewer:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua require&quot;fzf-lua&quot;.setup({&quot;telescope&quot;,winopts={preview={default=&quot;bat&quot;}}})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Combining of profiles is also available by sending table instead of string as the first argument:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua require&quot;fzf-lua&quot;.setup({{&quot;telescope&quot;,&quot;fzf-native&quot;},winopts={fullscreen=true}})
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;The default profile is a combination of border-fused+hide profiles, without the &quot;hide&quot; profile pressing esc terminates the fzf process which makes for an imperfect resume limited to resuming only the picker/query (without cursor position, selection, etc), to restore the default esc behavior combine any existing profile with &quot;hide&quot; by using a table in &lt;code&gt;opts[1]&lt;/code&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;fzf-lua&quot;).setup({
  { &quot;fzf-native&quot;, &quot;hide&quot; },
  -- your other settings here
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h4&gt;Coming from fzf.vim?&lt;/h4&gt; 
&lt;p&gt;Easy! just use the &lt;code&gt;fzf-vim&lt;/code&gt; profile:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;fzf-lua&#39;).setup({&#39;fzf-vim&#39;})
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;Using the &lt;code&gt;fzf-vim&lt;/code&gt; profile will automatically create &lt;code&gt;fzf.vim&lt;/code&gt;&#39;s user commands (i.e. &lt;code&gt;:Files&lt;/code&gt;, &lt;code&gt;:Rg&lt;/code&gt;), if you wish to use a different profile you can create the same user commands by running &lt;code&gt;:FzfLua setup_fzfvim_cmds&lt;/code&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK TO SEE THE AVAILABLE PROFILES&lt;/summary&gt; 
 &lt;h4&gt;Available Profiles&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Profile&lt;/th&gt; 
    &lt;th&gt;Details&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua defaults, uses neovim &quot;builtin&quot; buffer previewer and devicons (if available)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;default-title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua defaults, using title for picker info (default on neovim &amp;gt;= 0.9)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;default-prompt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua defaults, using prompt for picker info (default on neovim &amp;lt; 0.9)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;fzf-native&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;utilizes fzf&#39;s native previewing ability in the terminal where possible using &lt;code&gt;bat&lt;/code&gt; for previews&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;fzf-tmux&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;similar to &lt;code&gt;fzf-native&lt;/code&gt; and opens in a tmux popup (requires tmux &amp;gt; 3.2)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;fzf-vim&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;closest to &lt;code&gt;fzf.vim&lt;/code&gt;&#39;s defaults (+icons), also sets up user commands (&lt;code&gt;:Files&lt;/code&gt;, &lt;code&gt;:Rg&lt;/code&gt;, etc)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;max-perf&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;similar to &lt;code&gt;fzf-native&lt;/code&gt; and disables icons globally for max performance&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;telescope&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;closest match to telescope defaults in look and feel and keybinds&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;skim&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;uses &lt;a href=&quot;https://github.com/skim-rs/skim&quot;&gt;&lt;code&gt;skim&lt;/code&gt;&lt;/a&gt; as an fzf alternative, (requires the &lt;code&gt;sk&lt;/code&gt; binary)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;borderless&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;borderless and minimalistic seamless look &amp;amp; feel&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;borderless-full&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;borderless with description in window title (instead of prompt)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;border-fused&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;single border around both fzf and the previewer&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;ivy&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;UI at bottom, similar to telescope&#39;s ivy layout&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;hide&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;send fzf process to background instead of termination&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;h3&gt;Extensibility&lt;/h3&gt; 
&lt;p&gt;Fzf-lua can be easily extended and customised for your own needs: have a look at a full list of examples and plugins browsing the 💡&lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/wiki/Advanced&quot;&gt;Wiki&lt;/a&gt; 💡&lt;/p&gt; 
&lt;p&gt;Have ideas for new pickers, plugins or extensions? Add it to the wiki, it&#39;s open edit!&lt;/p&gt; 
&lt;h3&gt;Insert-mode completion&lt;/h3&gt; 
&lt;p&gt;Fzf-lua comes with a set of completion functions for paths/files and lines from open buffers as well as custom completion, for example, set path/completion using &lt;code&gt;&amp;lt;C-x&amp;gt;&amp;lt;C-f&amp;gt;&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.keymap.set({ &quot;n&quot;, &quot;v&quot;, &quot;i&quot; }, &quot;&amp;lt;C-x&amp;gt;&amp;lt;C-f&amp;gt;&quot;,
  function() FzfLua.complete_path() end,
  { silent = true, desc = &quot;Fuzzy complete path&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or with a custom command and preview:&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;only &lt;code&gt;complete_file&lt;/code&gt; supports a previewer as &lt;code&gt;complete_path&lt;/code&gt; mixes both files and directories.&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.keymap.set({ &quot;i&quot; }, &quot;&amp;lt;C-x&amp;gt;&amp;lt;C-f&amp;gt;&quot;,
  function()
    FzfLua.complete_file({
      cmd = &quot;rg --files&quot;,
      winopts = { preview = { hidden = true } }
    })
  end, { silent = true, desc = &quot;Fuzzy complete file&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK FOR CUSTOM COMPLETION DETAILS&lt;/summary&gt; 
 &lt;h4&gt;Custom Completion&lt;/h4&gt; 
 &lt;p&gt;Every fzf-lua function can be easily converted to a completion function by sending &lt;code&gt;complete = true&lt;/code&gt; in the options:&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;By default fzf-lua will insert the entry at the cursor location as if you used &lt;code&gt;p&lt;/code&gt; to paste the selected entry.&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;FzfLua.fzf_exec({&quot;foo&quot;, &quot;bar&quot;}, {complete = true})
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Custom completion is possible using a custom completion callback, the example below will replace the text from the current cursor column with the selected entry:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;FzfLua.fzf_exec({&quot;foo&quot;, &quot;bar&quot;}, {
  -- @param selected: the selected entry or entries
  -- @param opts: fzf-lua caller/provider options
  -- @param line: originating buffer completed line
  -- @param col: originating cursor column location
  -- @return newline: will replace the current buffer line
  -- @return newcol?: optional, sets the new cursor column
  complete = function(selected, opts, line, col)
    local newline = line:sub(1, col) .. selected[1]
    -- set cursor to EOL, since `nvim_win_set_cursor`
    -- is 0-based we have to lower the col value by 1
    return newline, #newline - 1
  end
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Highlights&lt;/h3&gt; 
&lt;p&gt;Highlight groups can be easily customized either via the lua API:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua vim.api.nvim_set_hl(0, &quot;FzfLuaBorder&quot;, { link = &quot;FloatBorder&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or via &lt;code&gt;setup&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;fzf-lua&#39;).setup {
  hls = { border = &quot;FloatBorder&quot; }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or temporarily in the call:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ hls={preview_title=&quot;IncSearch&quot;} })
-- vimL equivalent
:FzfLua files hls.preview_title=IncSearch
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK TO SEE AVAILABLE HIGHLIGHT GROUPS&lt;/summary&gt; 
 &lt;h4&gt;Highlight groups&lt;/h4&gt; 
 &lt;p&gt;FzfLua conveniently creates the below highlights, each hlgroup can be temporarily overridden by its corresponding &lt;code&gt;winopts&lt;/code&gt; option:&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Highlight Group&lt;/th&gt; 
    &lt;th&gt;Default&lt;/th&gt; 
    &lt;th&gt;Override Via&lt;/th&gt; 
    &lt;th&gt;Notes&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;Normal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.normal&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main win &lt;code&gt;fg/bg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;Normal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.border&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main win border&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaTitle&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main win title&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaTitleFlags&lt;/td&gt; 
    &lt;td&gt;CursorLine&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.title_flags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main win title flags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBackdrop&lt;/td&gt; 
    &lt;td&gt;*bg=Black&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.backdrop&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Backdrop color&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPreviewNormal&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.preview_normal&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;fg/bg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPreviewBorder&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.preview_border&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview border&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPreviewTitle&lt;/td&gt; 
    &lt;td&gt;FzfLuaTitle&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.preview_title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview title&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCursor&lt;/td&gt; 
    &lt;td&gt;Cursor&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cursor&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;Cursor&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCursorLine&lt;/td&gt; 
    &lt;td&gt;CursorLine&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cursorline&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;Cursorline&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCursorLineNr&lt;/td&gt; 
    &lt;td&gt;CursorLineNr&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cursorlinenr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;CursorLineNr&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaSearch&lt;/td&gt; 
    &lt;td&gt;IncSearch&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.search&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview search matches&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaScrollBorderEmpty&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.scrollborder_e&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;border&lt;/code&gt; scroll empty&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaScrollBorderFull&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.scrollborder_f&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;border&lt;/code&gt; scroll full&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaScrollFloatEmpty&lt;/td&gt; 
    &lt;td&gt;PmenuSbar&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.scrollfloat_e&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;float&lt;/code&gt; scroll empty&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaScrollFloatFull&lt;/td&gt; 
    &lt;td&gt;PmenuThumb&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.scrollfloat_f&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;float&lt;/code&gt; scroll full&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaHelpNormal&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.help_normal&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Help win &lt;code&gt;fg/bg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaHelpBorder&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.help_border&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Help win border&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaHeaderBind&lt;/td&gt; 
    &lt;td&gt;*BlanchedAlmond&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.header_bind&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Header keybind&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaHeaderText&lt;/td&gt; 
    &lt;td&gt;*Brown1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.header_text&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Header text&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPathColNr&lt;/td&gt; 
    &lt;td&gt;*CadetBlue1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.path_colnr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Path col nr (&lt;code&gt;qf,lsp,diag&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPathLineNr&lt;/td&gt; 
    &lt;td&gt;*LightGreen&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.path_linenr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Path line nr (&lt;code&gt;qf,lsp,diag&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufName&lt;/td&gt; 
    &lt;td&gt;Directory&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_name&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer name (&lt;code&gt;lines&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufId&lt;/td&gt; 
    &lt;td&gt;TabLine&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_id&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer ID (&lt;code&gt;lines&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufNr&lt;/td&gt; 
    &lt;td&gt;*BlanchedAlmond&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_nr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer number (&lt;code&gt;buffers,tabs&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufLineNr&lt;/td&gt; 
    &lt;td&gt;LineNr&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_linenr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer line nr (&lt;code&gt;lines,blines&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufFlagCur&lt;/td&gt; 
    &lt;td&gt;*Brown1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_flag_cur&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer line (&lt;code&gt;buffers&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufFlagAlt&lt;/td&gt; 
    &lt;td&gt;*CadetBlue1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_flag_alt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer line (&lt;code&gt;buffers&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaTabTitle&lt;/td&gt; 
    &lt;td&gt;*LightSkyBlue1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.tab_title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Tab title (&lt;code&gt;tabs&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaTabMarker&lt;/td&gt; 
    &lt;td&gt;*BlanchedAlmond&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.tab_marker&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Tab marker (&lt;code&gt;tabs&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaDirIcon&lt;/td&gt; 
    &lt;td&gt;Directory&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.dir_icon&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Paths directory icon&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaDirPart&lt;/td&gt; 
    &lt;td&gt;Comment&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.dir_part&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Path formatters directory hl group&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFilePart&lt;/td&gt; 
    &lt;td&gt;@none&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.file_part&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Path formatters file hl group&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaLivePrompt&lt;/td&gt; 
    &lt;td&gt;*PaleVioletRed1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.live_prompt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&quot;live&quot; queries prompt text&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaLiveSym&lt;/td&gt; 
    &lt;td&gt;*PaleVioletRed1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.live_sym&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;LSP live symbols query match&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCmdEx&lt;/td&gt; 
    &lt;td&gt;Statement&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cmd_ex&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Ex commands in &lt;code&gt;commands&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCmdBuf&lt;/td&gt; 
    &lt;td&gt;Added&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cmd_buf&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer commands in &lt;code&gt;commands&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCmdGlobal&lt;/td&gt; 
    &lt;td&gt;Directory&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cmd_global&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Global commands in &lt;code&gt;commands&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfNormal&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.normal&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;fg|bg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfCursorLine&lt;/td&gt; 
    &lt;td&gt;FzfLuaCursorLine&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.cursorline&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;fg+|bg+&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfMatch&lt;/td&gt; 
    &lt;td&gt;Special&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.match&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;hl+&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfBorder&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.border&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;border&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfScrollbar&lt;/td&gt; 
    &lt;td&gt;FzfLuaFzfBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.scrollbar&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;scrollbar&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfSeparator&lt;/td&gt; 
    &lt;td&gt;FzfLuaFzfBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.separator&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;separator&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfGutter&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.gutter&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;gutter&lt;/code&gt; (hl &lt;code&gt;bg&lt;/code&gt; is used)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfHeader&lt;/td&gt; 
    &lt;td&gt;FzfLuaTitle&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.header&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;header&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfInfo&lt;/td&gt; 
    &lt;td&gt;NonText&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.info&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;info&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfPointer&lt;/td&gt; 
    &lt;td&gt;Special&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.pointer&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;pointer&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfMarker&lt;/td&gt; 
    &lt;td&gt;FzfLuaFzfPointer&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.marker&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;marker&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfSpinner&lt;/td&gt; 
    &lt;td&gt;FzfLuaFzfPointer&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.spinner&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;spinner&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfPrompt&lt;/td&gt; 
    &lt;td&gt;Special&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.prompt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;prompt&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfQuery&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.query&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;header&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;&lt;sup&gt;&lt;sub&gt;*Not a highlight group, RGB color from &lt;code&gt;nvim_get_color_map&lt;/code&gt;&lt;/sub&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK FOR FZF COLORS DETAILS&lt;/summary&gt; 
 &lt;h4&gt;Fzf Colors&lt;/h4&gt; 
 &lt;p&gt;Fzf&#39;s terminal colors are controlled by fzf&#39;s &lt;code&gt;--color&lt;/code&gt; flag which can be configured during setup via &lt;code&gt;fzf_colors&lt;/code&gt;.&lt;/p&gt; 
 &lt;p&gt;Set to &lt;code&gt;true&lt;/code&gt; to have fzf-lua automatically generate an fzf colorscheme from your current Neovim colorscheme:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;fzf-lua&quot;).setup({ fzf_colors = true })
-- Or in the direct call options
:lua FzfLua.files({ fzf_colors = true })
:FzfLua files fzf_colors=true
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Customizing the fzf colorscheme (see &lt;code&gt;man fzf&lt;/code&gt; for all color options):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;fzf-lua&#39;).setup {
  fzf_colors = {
    -- First existing highlight group will be used
    -- values in 3rd+ index will be passed raw
    -- i.e:  `--color fg+:#010101:bold:underline`
    [&quot;fg+&quot;] = { &quot;fg&quot; , { &quot;Comment&quot;, &quot;Normal&quot; }, &quot;bold&quot;, &quot;underline&quot; },
    -- It is also possible to pass raw values directly
    [&quot;gutter&quot;] = &quot;-1&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Conveniently, fzf-lua can also be configured using fzf.vim&#39;s &lt;code&gt;g:fzf_colors&lt;/code&gt;, i.e:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Similarly, first existing highlight group will be used
:lua vim.g.fzf_colors = { [&quot;gutter&quot;] = { &quot;bg&quot;, &quot;DoesNotExist&quot;, &quot;IncSearch&quot; } }
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;However, the above doesn&#39;t allow combining both neovim highlights and raw args, if you&#39;re only using fzf-lua we can hijack &lt;code&gt;g:fzf_colors&lt;/code&gt; to accept fzf-lua style values (i.e. table at 2nd index and 3rd+ raw args):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua vim.g.fzf_colors = { [&quot;fg+&quot;] = { &quot;fg&quot;, { &quot;ErrorMsg&quot; }, &quot;bold&quot;, &quot;underline&quot; } }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;p&gt;Big thank you to all those I borrowed code/ideas from, I read so many configs and plugin codes that I probably forgot where I found some samples from so if I missed your name feel free to contact me and I&#39;ll add it below:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/junegunn/&quot;&gt;@junegunn&lt;/a&gt; for creating the magical &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt; and &lt;a href=&quot;https://github.com/junegunn/fzf.vim&quot;&gt;fzf.vim&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vijaymarupudi/&quot;&gt;@vijaymarupudi&lt;/a&gt; for the wonderful &lt;a href=&quot;https://github.com/vijaymarupudi/nvim-fzf&quot;&gt;nvim-fzf&lt;/a&gt; plugin which started this endeavour&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tjdevries/&quot;&gt;@tjdevries&lt;/a&gt; for too many great things to list here and borrowing code from &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim&quot;&gt;nvim-telescope&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lukas-reineke&quot;&gt;@lukas-reineke&lt;/a&gt; for inspiration after browsing &lt;a href=&quot;https://github.com/lukas-reineke/dotfiles&quot;&gt;dotfiles&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sindrets&quot;&gt;@sindrets&lt;/a&gt; for borrowing utilities from &lt;a href=&quot;https://github.com/sindrets/diffview.nvim&quot;&gt;diffview.nvim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kevinhwang91&quot;&gt;@kevinhwang91&lt;/a&gt; for inspiring the builtin previewer code while using &lt;a href=&quot;https://github.com/kevinhwang91/nvim-bqf&quot;&gt;nvim-bqf&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/8f46c43d1a2dfe191ff5e6e06fe0fe9e88bf77b42511967dc3d86b03ac69d233/ibhagwan/fzf-lua" medium="image" />
      
    </item>
    
    <item>
      <title>apache/apisix</title>
      <link>https://github.com/apache/apisix</link>
      <description>&lt;p&gt;The Cloud-Native API Gateway and AI Gateway&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Apache APISIX API Gateway ｜ AI Gateway&lt;/h1&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/apache/apisix/master/logos/apisix-white-bg.jpg&quot; alt=&quot;APISIX logo&quot; height=&quot;150px&quot; align=&quot;right&quot; /&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/apache/apisix/actions/workflows/build.yml&quot;&gt;&lt;img src=&quot;https://github.com/apache/apisix/actions/workflows/build.yml/badge.svg?branch=master&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/apache/apisix/raw/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-Apache%202.0-blue.svg?sanitize=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/apache/apisix/graphs/commit-activity&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/m/apache/apisix&quot; alt=&quot;Commit activity&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://isitmaintained.com/project/apache/apisix&quot; title=&quot;Average time to resolve an issue&quot;&gt;&lt;img src=&quot;http://isitmaintained.com/badge/resolution/apache/apisix.svg?sanitize=true&quot; alt=&quot;Average time to resolve an issue&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://isitmaintained.com/project/apache/apisix&quot; title=&quot;Percentage of issues still open&quot;&gt;&lt;img src=&quot;http://isitmaintained.com/badge/open/apache/apisix.svg?sanitize=true&quot; alt=&quot;Percentage of issues still open&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://apisix.apache.org/slack&quot;&gt;&lt;img src=&quot;https://badgen.net/badge/Slack/Join%20Apache%20APISIX?icon=slack&quot; alt=&quot;Slack&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Apache APISIX&lt;/strong&gt; is a dynamic, real-time, high-performance API Gateway.&lt;/p&gt; 
&lt;p&gt;APISIX API Gateway provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more.&lt;/p&gt; 
&lt;p&gt;APISIX can serve as an &lt;strong&gt;&lt;a href=&quot;https://apisix.apache.org/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt;&lt;/strong&gt; through its flexible plugin system, providing AI proxying, load balancing for LLMs, retries and fallbacks, token-based rate limiting, and robust security to ensure the efficiency and reliability of AI agents. APISIX also provides the &lt;a href=&quot;https://apisix.apache.org/blog/2025/04/21/host-mcp-server-with-api-gateway/&quot;&gt;&lt;code&gt;mcp-bridge&lt;/code&gt;&lt;/a&gt; plugin to seamlessly convert stdio-based MCP servers to scalable HTTP SSE services.&lt;/p&gt; 
&lt;p&gt;You can use APISIX API Gateway to handle traditional north-south traffic, as well as east-west traffic between services. It can also be used as a &lt;a href=&quot;https://github.com/apache/apisix-ingress-controller&quot;&gt;k8s ingress controller&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The technical architecture of Apache APISIX:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/assets/images/apisix.png&quot; alt=&quot;Technical architecture of Apache APISIX&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.g2.com/products/apache-apisix/reviews&quot;&gt;Kindly Write a Review&lt;/a&gt; for APISIX in G2.&lt;/li&gt; 
 &lt;li&gt;Mailing List: Mail to &lt;a href=&quot;mailto:dev-subscribe@apisix.apache.org&quot;&gt;dev-subscribe@apisix.apache.org&lt;/a&gt;, follow the reply to subscribe to the mailing list.&lt;/li&gt; 
 &lt;li&gt;Slack Workspace - &lt;a href=&quot;https://apisix.apache.org/slack&quot;&gt;invitation link&lt;/a&gt; (Please open an &lt;a href=&quot;https://apisix.apache.org/docs/general/submit-issue&quot;&gt;issue&lt;/a&gt; if this link is expired), and then join the #apisix channel (Channels -&amp;gt; Browse channels -&amp;gt; search for &quot;apisix&quot;).&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/ApacheAPISIX?style=social&quot; alt=&quot;Twitter Follow&quot; /&gt; - follow and interact with us using hashtag &lt;code&gt;#ApacheAPISIX&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://apisix.apache.org/docs/&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/apisix/discussions&quot;&gt;Discussions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://apisix.apache.org/blog&quot;&gt;Blog&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;p&gt;You can use APISIX API Gateway as a traffic entrance to process all business data, including dynamic routing, dynamic upstream, dynamic certificates, A/B testing, canary release, blue-green deployment, limit rate, defense against malicious attacks, metrics, monitoring alarms, service observability, service governance, etc.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;All platforms&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Cloud-Native: Platform agnostic, No vendor lock-in, APISIX API Gateway can run from bare-metal to Kubernetes.&lt;/li&gt; 
   &lt;li&gt;Supports ARM64: Don&#39;t worry about the lock-in of the infra technology.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Multi protocols&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/stream-proxy.md&quot;&gt;TCP/UDP Proxy&lt;/a&gt;: Dynamic TCP/UDP proxy.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/dubbo-proxy.md&quot;&gt;Dubbo Proxy&lt;/a&gt;: Dynamic HTTP to Dubbo proxy.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/mqtt-proxy.md&quot;&gt;Dynamic MQTT Proxy&lt;/a&gt;: Supports to load balance MQTT by &lt;code&gt;client_id&lt;/code&gt;, both support MQTT &lt;a href=&quot;http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html&quot;&gt;3.1.*&lt;/a&gt;, &lt;a href=&quot;https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html&quot;&gt;5.0&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/grpc-proxy.md&quot;&gt;gRPC proxy&lt;/a&gt;: Proxying gRPC traffic.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/grpc-web.md&quot;&gt;gRPC Web Proxy&lt;/a&gt;: Proxying gRPC Web traffic to gRPC Service.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/grpc-transcode.md&quot;&gt;gRPC transcoding&lt;/a&gt;: Supports protocol transcoding so that clients can access your gRPC API by using HTTP/JSON.&lt;/li&gt; 
   &lt;li&gt;Proxy Websocket&lt;/li&gt; 
   &lt;li&gt;Proxy Protocol&lt;/li&gt; 
   &lt;li&gt;HTTP(S) Forward Proxy&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/certificate.md&quot;&gt;SSL&lt;/a&gt;: Dynamically load an SSL certificate&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/http3.md&quot;&gt;HTTP/3 with QUIC&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Full Dynamic&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/terminology/plugin.md&quot;&gt;Hot Updates And Hot Plugins&lt;/a&gt;: Continuously updates its configurations and plugins without restarts!&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/proxy-rewrite.md&quot;&gt;Proxy Rewrite&lt;/a&gt;: Support rewrite the &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;uri&lt;/code&gt;, &lt;code&gt;schema&lt;/code&gt;, &lt;code&gt;method&lt;/code&gt;, &lt;code&gt;headers&lt;/code&gt; of the request before send to upstream.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/response-rewrite.md&quot;&gt;Response Rewrite&lt;/a&gt;: Set customized response status code, body and header to the client.&lt;/li&gt; 
   &lt;li&gt;Dynamic Load Balancing: Round-robin load balancing with weight.&lt;/li&gt; 
   &lt;li&gt;Hash-based Load Balancing: Load balance with consistent hashing sessions.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/tutorials/health-check.md&quot;&gt;Health Checks&lt;/a&gt;: Enable health check on the upstream node and will automatically filter unhealthy nodes during load balancing to ensure system stability.&lt;/li&gt; 
   &lt;li&gt;Circuit-Breaker: Intelligent tracking of unhealthy upstream services.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/proxy-mirror.md&quot;&gt;Proxy Mirror&lt;/a&gt;: Provides the ability to mirror client requests.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/traffic-split.md&quot;&gt;Traffic Split&lt;/a&gt;: Allows users to incrementally direct percentages of traffic between various upstreams.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Fine-grained routing&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/router-radixtree.md#how-to-use-libradixtree-in-apisix&quot;&gt;Supports full path matching and prefix matching&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/router-radixtree.md#how-to-filter-route-by-nginx-builtin-variable&quot;&gt;Support all Nginx built-in variables as conditions for routing&lt;/a&gt;, so you can use &lt;code&gt;cookie&lt;/code&gt;, &lt;code&gt;args&lt;/code&gt;, etc. as routing conditions to implement canary release, A/B testing, etc.&lt;/li&gt; 
   &lt;li&gt;Support &lt;a href=&quot;https://github.com/iresty/lua-resty-radixtree#operator-list&quot;&gt;various operators as judgment conditions for routing&lt;/a&gt;, for example &lt;code&gt;{&quot;arg_age&quot;, &quot;&amp;gt;&quot;, 24}&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Support &lt;a href=&quot;https://github.com/iresty/lua-resty-radixtree/raw/master/t/filter-fun.t#L10&quot;&gt;custom route matching function&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;IPv6: Use IPv6 to match the route.&lt;/li&gt; 
   &lt;li&gt;Support &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/admin-api.md#route&quot;&gt;TTL&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/router-radixtree.md#3-match-priority&quot;&gt;Support priority&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/batch-requests.md&quot;&gt;Support Batch Http Requests&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/router-radixtree.md#how-to-filter-route-by-graphql-attributes&quot;&gt;Support filtering route by GraphQL attributes&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Rich authentication &amp;amp; authorization support: 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/key-auth.md&quot;&gt;key-auth&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/jwt-auth.md&quot;&gt;JWT&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/basic-auth.md&quot;&gt;basic-auth&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/wolf-rbac.md&quot;&gt;wolf-rbac&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/authz-casbin.md&quot;&gt;casbin&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/authz-keycloak.md&quot;&gt;keycloak&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/authz-casdoor.md&quot;&gt;casdoor&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/ip-restriction.md&quot;&gt;IP Whitelist/Blacklist&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/referer-restriction.md&quot;&gt;Referer Whitelist/Blacklist&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/openid-connect.md&quot;&gt;IdP&lt;/a&gt;: Support external Identity platforms, such as Auth0, okta, etc..&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/limit-req.md&quot;&gt;Limit-req&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/limit-count.md&quot;&gt;Limit-count&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/limit-conn.md&quot;&gt;Limit-concurrency&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Anti-ReDoS(Regular expression Denial of Service): Built-in policies to Anti ReDoS without configuration.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/cors.md&quot;&gt;CORS&lt;/a&gt; Enable CORS(Cross-origin resource sharing) for your API.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/uri-blocker.md&quot;&gt;URI Blocker&lt;/a&gt;: Block client request by URI.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/request-validation.md&quot;&gt;Request Validator&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/csrf.md&quot;&gt;CSRF&lt;/a&gt; Based on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-site_request_forgery#Double_Submit_Cookie&quot;&gt;&lt;code&gt;Double Submit Cookie&lt;/code&gt;&lt;/a&gt; way, protect your API from CSRF attacks.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;OPS friendly&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Zipkin tracing: &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/zipkin.md&quot;&gt;Zipkin&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Open source APM: support &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/skywalking.md&quot;&gt;Apache SkyWalking&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Works with external service discovery: In addition to the built-in etcd, it also supports &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/discovery/consul.md&quot;&gt;Consul&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/discovery/consul_kv.md&quot;&gt;Consul_kv&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/discovery/nacos.md&quot;&gt;Nacos&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/discovery/eureka.md&quot;&gt;Eureka&lt;/a&gt; and &lt;a href=&quot;https://github.com/api7/apisix-seed/raw/main/docs/en/latest/zookeeper.md&quot;&gt;Zookeeper (CP)&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;Monitoring And Metrics: &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/prometheus.md&quot;&gt;Prometheus&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Clustering: APISIX nodes are stateless, creates clustering of the configuration center, please refer to &lt;a href=&quot;https://etcd.io/docs/v3.5/op-guide/clustering/&quot;&gt;etcd Clustering Guide&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;High availability: Support to configure multiple etcd addresses in the same cluster.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/apache/apisix-dashboard&quot;&gt;Dashboard&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Version Control: Supports rollbacks of operations.&lt;/li&gt; 
   &lt;li&gt;CLI: start\stop\reload APISIX through the command line.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/deployment-modes.md#standalone&quot;&gt;Standalone&lt;/a&gt;: Supports to load route rules from local YAML file, it is more friendly such as under the kubernetes(k8s).&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/terminology/global-rule.md&quot;&gt;Global Rule&lt;/a&gt;: Allows to run any plugin for all request, eg: limit rate, IP filter etc.&lt;/li&gt; 
   &lt;li&gt;High performance: The single-core QPS reaches 18k with an average delay of fewer than 0.2 milliseconds.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/fault-injection.md&quot;&gt;Fault Injection&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/admin-api.md&quot;&gt;REST Admin API&lt;/a&gt;: Using the REST Admin API to control Apache APISIX, which only allows 127.0.0.1 access by default, you can modify the &lt;code&gt;allow_admin&lt;/code&gt; field in &lt;code&gt;conf/config.yaml&lt;/code&gt; to specify a list of IPs that are allowed to call the Admin API. Also, note that the Admin API uses key auth to verify the identity of the caller.&lt;/li&gt; 
   &lt;li&gt;External Loggers: Export access logs to external log management tools. (&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/http-logger.md&quot;&gt;HTTP Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/tcp-logger.md&quot;&gt;TCP Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/kafka-logger.md&quot;&gt;Kafka Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/udp-logger.md&quot;&gt;UDP Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/rocketmq-logger.md&quot;&gt;RocketMQ Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/skywalking-logger.md&quot;&gt;SkyWalking Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/sls-logger.md&quot;&gt;Alibaba Cloud Logging(SLS)&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/google-cloud-logging.md&quot;&gt;Google Cloud Logging&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/splunk-hec-logging.md&quot;&gt;Splunk HEC Logging&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/file-logger.md&quot;&gt;File Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/loggly.md&quot;&gt;SolarWinds Loggly Logging&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/tencent-cloud-cls.md&quot;&gt;TencentCloud CLS&lt;/a&gt;).&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/clickhouse-logger.md&quot;&gt;ClickHouse&lt;/a&gt;: push logs to ClickHouse.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/elasticsearch-logger.md&quot;&gt;Elasticsearch&lt;/a&gt;: push logs to Elasticsearch.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/datadog.md&quot;&gt;Datadog&lt;/a&gt;: push custom metrics to the DogStatsD server, comes bundled with &lt;a href=&quot;https://docs.datadoghq.com/agent/&quot;&gt;Datadog agent&lt;/a&gt;, over the UDP protocol. DogStatsD basically is an implementation of StatsD protocol which collects the custom metrics for Apache APISIX agent, aggregates it into a single data point and sends it to the configured Datadog server.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/apache/apisix-helm-chart&quot;&gt;Helm charts&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://www.vaultproject.io/&quot;&gt;HashiCorp Vault&lt;/a&gt;: Support secret management solution for accessing secrets from Vault secure storage backed in a low trust environment. Currently, RS256 keys (public-private key pairs) or secret keys can be linked from vault in jwt-auth authentication plugin using &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/terminology/secret.md&quot;&gt;APISIX Secret&lt;/a&gt; resource.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Highly scalable&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugin-develop.md&quot;&gt;Custom plugins&lt;/a&gt;: Allows hooking of common phases, such as &lt;code&gt;rewrite&lt;/code&gt;, &lt;code&gt;access&lt;/code&gt;, &lt;code&gt;header filter&lt;/code&gt;, &lt;code&gt;body filter&lt;/code&gt; and &lt;code&gt;log&lt;/code&gt;, also allows to hook the &lt;code&gt;balancer&lt;/code&gt; stage.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/external-plugin.md&quot;&gt;Plugin can be written in Java/Go/Python&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/wasm.md&quot;&gt;Plugin can be written with Proxy Wasm SDK&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Custom load balancing algorithms: You can use custom load balancing algorithms during the &lt;code&gt;balancer&lt;/code&gt; phase.&lt;/li&gt; 
   &lt;li&gt;Custom routing: Support users to implement routing algorithms themselves.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Multi-Language support&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Apache APISIX is a multi-language gateway for plugin development and provides support via &lt;code&gt;RPC&lt;/code&gt; and &lt;code&gt;Wasm&lt;/code&gt;. &lt;img src=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/assets/images/external-plugin.png&quot; alt=&quot;Multi Language Support into Apache APISIX&quot; /&gt;&lt;/li&gt; 
   &lt;li&gt;The RPC way, is the current way. Developers can choose the language according to their needs and after starting an independent process with the RPC, it exchanges data with APISIX through local RPC communication. Till this moment, APISIX has support for &lt;a href=&quot;https://github.com/apache/apisix-java-plugin-runner&quot;&gt;Java&lt;/a&gt;, &lt;a href=&quot;https://github.com/apache/apisix-go-plugin-runner&quot;&gt;Golang&lt;/a&gt;, &lt;a href=&quot;https://github.com/apache/apisix-python-plugin-runner&quot;&gt;Python&lt;/a&gt; and Node.js.&lt;/li&gt; 
   &lt;li&gt;The Wasm or WebAssembly, is an experimental way. APISIX can load and run Wasm bytecode via APISIX &lt;a href=&quot;https://github.com/apache/apisix/raw/master/docs/en/latest/wasm.md&quot;&gt;wasm plugin&lt;/a&gt; written with the &lt;a href=&quot;https://github.com/proxy-wasm/spec#sdks&quot;&gt;Proxy Wasm SDK&lt;/a&gt;. Developers only need to write the code according to the SDK and then compile it into a Wasm bytecode that runs on Wasm VM with APISIX.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Serverless&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/serverless.md&quot;&gt;Lua functions&lt;/a&gt;: Invoke functions in each phase in APISIX.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/aws-lambda.md&quot;&gt;AWS Lambda&lt;/a&gt;: Integration with AWS Lambda function as a dynamic upstream to proxy all requests for a particular URI to the AWS API gateway endpoint. Supports authorization via api key and AWS IAM access secret.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/azure-functions.md&quot;&gt;Azure Functions&lt;/a&gt;: Seamless integration with Azure Serverless Function as a dynamic upstream to proxy all requests for a particular URI to the Microsoft Azure cloud.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/openwhisk.md&quot;&gt;Apache OpenWhisk&lt;/a&gt;: Seamless integration with Apache OpenWhisk as a dynamic upstream to proxy all requests for a particular URI to your own OpenWhisk cluster.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Get Started&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Installation&lt;/p&gt; &lt;p&gt;Please refer to &lt;a href=&quot;https://apisix.apache.org/docs/apisix/installation-guide/&quot;&gt;install documentation&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Getting started&lt;/p&gt; &lt;p&gt;The getting started guide is a great way to learn the basics of APISIX. Just follow the steps in &lt;a href=&quot;https://apisix.apache.org/docs/apisix/getting-started/&quot;&gt;Getting Started&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Further, you can follow the documentation to try more &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins&quot;&gt;plugins&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Admin API&lt;/p&gt; &lt;p&gt;Apache APISIX provides &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/admin-api.md&quot;&gt;REST Admin API&lt;/a&gt; to dynamically control the Apache APISIX cluster.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Plugin development&lt;/p&gt; &lt;p&gt;You can refer to &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugin-develop.md&quot;&gt;plugin development guide&lt;/a&gt;, and sample plugin &lt;code&gt;example-plugin&lt;/code&gt;&#39;s code implementation. Reading &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/terminology/plugin.md&quot;&gt;plugin concept&lt;/a&gt; would help you learn more about the plugin.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;For more documents, please refer to &lt;a href=&quot;https://apisix.apache.org/docs/apisix/getting-started/&quot;&gt;Apache APISIX Documentation site&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Benchmark&lt;/h2&gt; 
&lt;p&gt;Using AWS&#39;s eight-core server, APISIX&#39;s QPS reaches 140,000 with a latency of only 0.2 ms.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/benchmark/run.sh&quot;&gt;Benchmark script&lt;/a&gt; has been open sourced, welcome to try and contribute.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://apisix.apache.org/blog/2022/06/07/installation-performance-test-of-apigateway-apisix-on-aws-graviton3&quot;&gt;APISIX also works perfectly in AWS graviton3 C7g.&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;User Stories&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.efactory-project.eu/post/api-security-gateway-using-apisix-in-the-efactory-platform&quot;&gt;European eFactory Platform: API Security Gateway – Using APISIX in the eFactory Platform&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/COPRS/infrastructure/wiki/Networking-trade-off&quot;&gt;Copernicus Reference System Software&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://apisix.apache.org/blog/tags/case-studies/&quot;&gt;More Stories&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Who Uses APISIX API Gateway?&lt;/h2&gt; 
&lt;p&gt;A wide variety of companies and organizations use APISIX API Gateway for research, production and commercial product, below are some of them:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Airwallex&lt;/li&gt; 
 &lt;li&gt;Bilibili&lt;/li&gt; 
 &lt;li&gt;CVTE&lt;/li&gt; 
 &lt;li&gt;European eFactory Platform&lt;/li&gt; 
 &lt;li&gt;European Copernicus Reference System&lt;/li&gt; 
 &lt;li&gt;Geely&lt;/li&gt; 
 &lt;li&gt;HONOR&lt;/li&gt; 
 &lt;li&gt;Horizon Robotics&lt;/li&gt; 
 &lt;li&gt;iQIYI&lt;/li&gt; 
 &lt;li&gt;Lenovo&lt;/li&gt; 
 &lt;li&gt;NASA JPL&lt;/li&gt; 
 &lt;li&gt;Nayuki&lt;/li&gt; 
 &lt;li&gt;OPPO&lt;/li&gt; 
 &lt;li&gt;QingCloud&lt;/li&gt; 
 &lt;li&gt;Swisscom&lt;/li&gt; 
 &lt;li&gt;Tencent Game&lt;/li&gt; 
 &lt;li&gt;Travelsky&lt;/li&gt; 
 &lt;li&gt;vivo&lt;/li&gt; 
 &lt;li&gt;Sina Weibo&lt;/li&gt; 
 &lt;li&gt;WeCity&lt;/li&gt; 
 &lt;li&gt;WPS&lt;/li&gt; 
 &lt;li&gt;XPENG&lt;/li&gt; 
 &lt;li&gt;Zoom&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Logos&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/apisix/tree/master/logos/apache-apisix.png&quot;&gt;Apache APISIX logo(PNG)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://apache.org/logos/#apisix&quot;&gt;Apache APISIX logo source&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Acknowledgments&lt;/h2&gt; 
&lt;p&gt;Inspired by Kong and Orange.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/apache/apisix/tree/master/LICENSE&quot;&gt;Apache 2.0 License&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/d5c84672ae83e0de5268f3ed02d7405d9ea9e1d08a6d8c6a3689fa94561d6db6/apache/apisix" medium="image" />
      
    </item>
    
    <item>
      <title>folke/snacks.nvim</title>
      <link>https://github.com/folke/snacks.nvim</link>
      <description>&lt;p&gt;🍿 A collection of QoL plugins for Neovim&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;🍿 &lt;code&gt;snacks.nvim&lt;/code&gt;&lt;/h1&gt; 
&lt;p&gt;A collection of small QoL plugins for Neovim.&lt;/p&gt; 
&lt;h2&gt;✨ Features&lt;/h2&gt; 
&lt;!-- toc:start --&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Snack&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Setup&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/animate.md&quot;&gt;animate&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Efficient animations including over 45 easing functions &lt;em&gt;(library)&lt;/em&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/bigfile.md&quot;&gt;bigfile&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Deal with big files&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/bufdelete.md&quot;&gt;bufdelete&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Delete buffers without disrupting window layout&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/dashboard.md&quot;&gt;dashboard&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Beautiful declarative dashboards&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/debug.md&quot;&gt;debug&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Pretty inspect &amp;amp; backtraces for debugging&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/dim.md&quot;&gt;dim&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Focus on the active scope by dimming the rest&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/explorer.md&quot;&gt;explorer&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;A file explorer (picker in disguise)&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/gh.md&quot;&gt;gh&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;GitHub CLI integration&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/git.md&quot;&gt;git&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Git utilities&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/gitbrowse.md&quot;&gt;gitbrowse&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Open the current file, branch, commit, or repo in a browser (e.g. GitHub, GitLab, Bitbucket)&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/image.md&quot;&gt;image&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Image viewer using Kitty Graphics Protocol, supported by &lt;code&gt;kitty&lt;/code&gt;, &lt;code&gt;wezterm&lt;/code&gt; and &lt;code&gt;ghostty&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/indent.md&quot;&gt;indent&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Indent guides and scopes&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/input.md&quot;&gt;input&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Better &lt;code&gt;vim.ui.input&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/keymap.md&quot;&gt;keymap&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Better &lt;code&gt;vim.keymap&lt;/code&gt; with support for filetypes and LSP clients&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/layout.md&quot;&gt;layout&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Window layouts&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/lazygit.md&quot;&gt;lazygit&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Open LazyGit in a float, auto-configure colorscheme and integration with Neovim&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/notifier.md&quot;&gt;notifier&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Pretty &lt;code&gt;vim.notify&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/notify.md&quot;&gt;notify&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Utility functions to work with Neovim&#39;s &lt;code&gt;vim.notify&lt;/code&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/picker.md&quot;&gt;picker&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Picker for selecting items&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/profiler.md&quot;&gt;profiler&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Neovim lua profiler&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/quickfile.md&quot;&gt;quickfile&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;When doing &lt;code&gt;nvim somefile.txt&lt;/code&gt;, it will render the file as quickly as possible, before loading your plugins.&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/rename.md&quot;&gt;rename&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;LSP-integrated file renaming with support for plugins like &lt;a href=&quot;https://github.com/nvim-neo-tree/neo-tree.nvim&quot;&gt;neo-tree.nvim&lt;/a&gt; and &lt;a href=&quot;https://github.com/nvim-mini/mini.files&quot;&gt;mini.files&lt;/a&gt;.&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/scope.md&quot;&gt;scope&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Scope detection, text objects and jumping based on treesitter or indent&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/scratch.md&quot;&gt;scratch&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Scratch buffers with a persistent file&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/scroll.md&quot;&gt;scroll&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Smooth scrolling&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/statuscolumn.md&quot;&gt;statuscolumn&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Pretty status column&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/terminal.md&quot;&gt;terminal&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Create and toggle floating/split terminals&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/toggle.md&quot;&gt;toggle&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Toggle keymaps integrated with which-key icons / colors&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/util.md&quot;&gt;util&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Utility functions for Snacks &lt;em&gt;(library)&lt;/em&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/win.md&quot;&gt;win&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Create and manage floating windows or splits&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/words.md&quot;&gt;words&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Auto-show LSP references and quickly navigate between them&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;‼️&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/zen.md&quot;&gt;zen&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Zen mode • distraction-free coding&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!-- toc:end --&gt; 
&lt;h2&gt;⚡️ Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Neovim&lt;/strong&gt; &amp;gt;= 0.9.4&lt;/li&gt; 
 &lt;li&gt;for proper icons support: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-mini/mini.icons&quot;&gt;mini.icons&lt;/a&gt; &lt;em&gt;(optional)&lt;/em&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;nvim-web-devicons&lt;/a&gt; &lt;em&gt;(optional)&lt;/em&gt;&lt;/li&gt; 
   &lt;li&gt;a &lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Font&lt;/a&gt; &lt;strong&gt;&lt;em&gt;(optional)&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📦 Installation&lt;/h2&gt; 
&lt;p&gt;Install the plugin with your package manager:&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/h3&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;A couple of plugins &lt;strong&gt;require&lt;/strong&gt; &lt;code&gt;snacks.nvim&lt;/code&gt; to be set-up early. Setup creates some autocmds and does not load any plugins. Check the &lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/lua/snacks/init.lua&quot;&gt;code&lt;/a&gt; to see what it does.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-caution&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-stop mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M4.47.22A.749.749 0 0 1 5 0h6c.199 0 .389.079.53.22l4.25 4.25c.141.14.22.331.22.53v6a.749.749 0 0 1-.22.53l-4.25 4.25A.749.749 0 0 1 11 16H5a.749.749 0 0 1-.53-.22L.22 11.53A.749.749 0 0 1 0 11V5c0-.199.079-.389.22-.53Zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5ZM8 4a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 4Zm0 8a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Caution&lt;/p&gt;
 &lt;p&gt;You need to explicitly pass options for a plugin or set &lt;code&gt;enabled = true&lt;/code&gt; to enable it.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;It&#39;s a good idea to run &lt;code&gt;:checkhealth snacks&lt;/code&gt; to see if everything is set up correctly.&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;folke/snacks.nvim&quot;,
  priority = 1000,
  lazy = false,
  ---@type snacks.Config
  opts = {
    -- your configuration comes here
    -- or leave it empty to use the default settings
    -- refer to the configuration section below
    bigfile = { enabled = true },
    dashboard = { enabled = true },
    explorer = { enabled = true },
    indent = { enabled = true },
    input = { enabled = true },
    picker = { enabled = true },
    notifier = { enabled = true },
    quickfile = { enabled = true },
    scope = { enabled = true },
    scroll = { enabled = true },
    statuscolumn = { enabled = true },
    words = { enabled = true },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For an in-depth setup of &lt;code&gt;snacks.nvim&lt;/code&gt; with &lt;code&gt;lazy.nvim&lt;/code&gt;, check the &lt;a href=&quot;https://github.com/folke/snacks.nvim?tab=readme-ov-file#-usage&quot;&gt;example&lt;/a&gt; below.&lt;/p&gt; 
&lt;h2&gt;⚙️ Configuration&lt;/h2&gt; 
&lt;p&gt;Please refer to the readme of each plugin for their specific configuration.&lt;/p&gt; 
&lt;details&gt;
 &lt;summary&gt;Default Options&lt;/summary&gt; 
 &lt;!-- config:start --&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;---@class snacks.Config
---@field animate? snacks.animate.Config
---@field bigfile? snacks.bigfile.Config
---@field dashboard? snacks.dashboard.Config
---@field dim? snacks.dim.Config
---@field explorer? snacks.explorer.Config
---@field gh? snacks.gh.Config
---@field gitbrowse? snacks.gitbrowse.Config
---@field image? snacks.image.Config
---@field indent? snacks.indent.Config
---@field input? snacks.input.Config
---@field layout? snacks.layout.Config
---@field lazygit? snacks.lazygit.Config
---@field notifier? snacks.notifier.Config
---@field picker? snacks.picker.Config
---@field profiler? snacks.profiler.Config
---@field quickfile? snacks.quickfile.Config
---@field scope? snacks.scope.Config
---@field scratch? snacks.scratch.Config
---@field scroll? snacks.scroll.Config
---@field statuscolumn? snacks.statuscolumn.Config
---@field terminal? snacks.terminal.Config
---@field toggle? snacks.toggle.Config
---@field win? snacks.win.Config
---@field words? snacks.words.Config
---@field zen? snacks.zen.Config
---@field styles? table&amp;lt;string, snacks.win.Config&amp;gt;
---@field image? snacks.image.Config|{}
{
  image = {
    -- define these here, so that we don&#39;t need to load the image module
    formats = {
      &quot;png&quot;,
      &quot;jpg&quot;,
      &quot;jpeg&quot;,
      &quot;gif&quot;,
      &quot;bmp&quot;,
      &quot;webp&quot;,
      &quot;tiff&quot;,
      &quot;heic&quot;,
      &quot;avif&quot;,
      &quot;mp4&quot;,
      &quot;mov&quot;,
      &quot;avi&quot;,
      &quot;mkv&quot;,
      &quot;webm&quot;,
      &quot;pdf&quot;,
      &quot;icns&quot;,
    },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;!-- config:end --&gt; 
&lt;/details&gt; 
&lt;p&gt;Some plugins have examples in their documentation. You can include them in your config like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  dashboard = { example = &quot;github&quot; }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you want to customize options for a plugin after they have been resolved, you can use the &lt;code&gt;config&lt;/code&gt; function:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  gitbrowse = {
    config = function(opts, defaults)
      table.insert(opts.remote_patterns, { &quot;my&quot;, &quot;custom pattern&quot; })
    end
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;🚀 Usage&lt;/h2&gt; 
&lt;p&gt;See the example below for how to configure &lt;code&gt;snacks.nvim&lt;/code&gt;.&lt;/p&gt; 
&lt;!-- example:start --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;folke/snacks.nvim&quot;,
  priority = 1000,
  lazy = false,
  ---@type snacks.Config
  opts = {
    bigfile = { enabled = true },
    dashboard = { enabled = true },
    explorer = { enabled = true },
    indent = { enabled = true },
    input = { enabled = true },
    notifier = {
      enabled = true,
      timeout = 3000,
    },
    picker = { enabled = true },
    quickfile = { enabled = true },
    scope = { enabled = true },
    scroll = { enabled = true },
    statuscolumn = { enabled = true },
    words = { enabled = true },
    styles = {
      notification = {
        -- wo = { wrap = true } -- Wrap notifications
      }
    }
  },
  keys = {
    -- Top Pickers &amp;amp; Explorer
    { &quot;&amp;lt;leader&amp;gt;&amp;lt;space&amp;gt;&quot;, function() Snacks.picker.smart() end, desc = &quot;Smart Find Files&quot; },
    { &quot;&amp;lt;leader&amp;gt;,&quot;, function() Snacks.picker.buffers() end, desc = &quot;Buffers&quot; },
    { &quot;&amp;lt;leader&amp;gt;/&quot;, function() Snacks.picker.grep() end, desc = &quot;Grep&quot; },
    { &quot;&amp;lt;leader&amp;gt;:&quot;, function() Snacks.picker.command_history() end, desc = &quot;Command History&quot; },
    { &quot;&amp;lt;leader&amp;gt;n&quot;, function() Snacks.picker.notifications() end, desc = &quot;Notification History&quot; },
    { &quot;&amp;lt;leader&amp;gt;e&quot;, function() Snacks.explorer() end, desc = &quot;File Explorer&quot; },
    -- find
    { &quot;&amp;lt;leader&amp;gt;fb&quot;, function() Snacks.picker.buffers() end, desc = &quot;Buffers&quot; },
    { &quot;&amp;lt;leader&amp;gt;fc&quot;, function() Snacks.picker.files({ cwd = vim.fn.stdpath(&quot;config&quot;) }) end, desc = &quot;Find Config File&quot; },
    { &quot;&amp;lt;leader&amp;gt;ff&quot;, function() Snacks.picker.files() end, desc = &quot;Find Files&quot; },
    { &quot;&amp;lt;leader&amp;gt;fg&quot;, function() Snacks.picker.git_files() end, desc = &quot;Find Git Files&quot; },
    { &quot;&amp;lt;leader&amp;gt;fp&quot;, function() Snacks.picker.projects() end, desc = &quot;Projects&quot; },
    { &quot;&amp;lt;leader&amp;gt;fr&quot;, function() Snacks.picker.recent() end, desc = &quot;Recent&quot; },
    -- git
    { &quot;&amp;lt;leader&amp;gt;gb&quot;, function() Snacks.picker.git_branches() end, desc = &quot;Git Branches&quot; },
    { &quot;&amp;lt;leader&amp;gt;gl&quot;, function() Snacks.picker.git_log() end, desc = &quot;Git Log&quot; },
    { &quot;&amp;lt;leader&amp;gt;gL&quot;, function() Snacks.picker.git_log_line() end, desc = &quot;Git Log Line&quot; },
    { &quot;&amp;lt;leader&amp;gt;gs&quot;, function() Snacks.picker.git_status() end, desc = &quot;Git Status&quot; },
    { &quot;&amp;lt;leader&amp;gt;gS&quot;, function() Snacks.picker.git_stash() end, desc = &quot;Git Stash&quot; },
    { &quot;&amp;lt;leader&amp;gt;gd&quot;, function() Snacks.picker.git_diff() end, desc = &quot;Git Diff (Hunks)&quot; },
    { &quot;&amp;lt;leader&amp;gt;gf&quot;, function() Snacks.picker.git_log_file() end, desc = &quot;Git Log File&quot; },
    -- gh
    { &quot;&amp;lt;leader&amp;gt;gi&quot;, function() Snacks.picker.gh_issue() end, desc = &quot;GitHub Issues (open)&quot; },
    { &quot;&amp;lt;leader&amp;gt;gI&quot;, function() Snacks.picker.gh_issue({ state = &quot;all&quot; }) end, desc = &quot;GitHub Issues (all)&quot; },
    { &quot;&amp;lt;leader&amp;gt;gp&quot;, function() Snacks.picker.gh_pr() end, desc = &quot;GitHub Pull Requests (open)&quot; },
    { &quot;&amp;lt;leader&amp;gt;gP&quot;, function() Snacks.picker.gh_pr({ state = &quot;all&quot; }) end, desc = &quot;GitHub Pull Requests (all)&quot; },
    -- Grep
    { &quot;&amp;lt;leader&amp;gt;sb&quot;, function() Snacks.picker.lines() end, desc = &quot;Buffer Lines&quot; },
    { &quot;&amp;lt;leader&amp;gt;sB&quot;, function() Snacks.picker.grep_buffers() end, desc = &quot;Grep Open Buffers&quot; },
    { &quot;&amp;lt;leader&amp;gt;sg&quot;, function() Snacks.picker.grep() end, desc = &quot;Grep&quot; },
    { &quot;&amp;lt;leader&amp;gt;sw&quot;, function() Snacks.picker.grep_word() end, desc = &quot;Visual selection or word&quot;, mode = { &quot;n&quot;, &quot;x&quot; } },
    -- search
    { &#39;&amp;lt;leader&amp;gt;s&quot;&#39;, function() Snacks.picker.registers() end, desc = &quot;Registers&quot; },
    { &#39;&amp;lt;leader&amp;gt;s/&#39;, function() Snacks.picker.search_history() end, desc = &quot;Search History&quot; },
    { &quot;&amp;lt;leader&amp;gt;sa&quot;, function() Snacks.picker.autocmds() end, desc = &quot;Autocmds&quot; },
    { &quot;&amp;lt;leader&amp;gt;sb&quot;, function() Snacks.picker.lines() end, desc = &quot;Buffer Lines&quot; },
    { &quot;&amp;lt;leader&amp;gt;sc&quot;, function() Snacks.picker.command_history() end, desc = &quot;Command History&quot; },
    { &quot;&amp;lt;leader&amp;gt;sC&quot;, function() Snacks.picker.commands() end, desc = &quot;Commands&quot; },
    { &quot;&amp;lt;leader&amp;gt;sd&quot;, function() Snacks.picker.diagnostics() end, desc = &quot;Diagnostics&quot; },
    { &quot;&amp;lt;leader&amp;gt;sD&quot;, function() Snacks.picker.diagnostics_buffer() end, desc = &quot;Buffer Diagnostics&quot; },
    { &quot;&amp;lt;leader&amp;gt;sh&quot;, function() Snacks.picker.help() end, desc = &quot;Help Pages&quot; },
    { &quot;&amp;lt;leader&amp;gt;sH&quot;, function() Snacks.picker.highlights() end, desc = &quot;Highlights&quot; },
    { &quot;&amp;lt;leader&amp;gt;si&quot;, function() Snacks.picker.icons() end, desc = &quot;Icons&quot; },
    { &quot;&amp;lt;leader&amp;gt;sj&quot;, function() Snacks.picker.jumps() end, desc = &quot;Jumps&quot; },
    { &quot;&amp;lt;leader&amp;gt;sk&quot;, function() Snacks.picker.keymaps() end, desc = &quot;Keymaps&quot; },
    { &quot;&amp;lt;leader&amp;gt;sl&quot;, function() Snacks.picker.loclist() end, desc = &quot;Location List&quot; },
    { &quot;&amp;lt;leader&amp;gt;sm&quot;, function() Snacks.picker.marks() end, desc = &quot;Marks&quot; },
    { &quot;&amp;lt;leader&amp;gt;sM&quot;, function() Snacks.picker.man() end, desc = &quot;Man Pages&quot; },
    { &quot;&amp;lt;leader&amp;gt;sp&quot;, function() Snacks.picker.lazy() end, desc = &quot;Search for Plugin Spec&quot; },
    { &quot;&amp;lt;leader&amp;gt;sq&quot;, function() Snacks.picker.qflist() end, desc = &quot;Quickfix List&quot; },
    { &quot;&amp;lt;leader&amp;gt;sR&quot;, function() Snacks.picker.resume() end, desc = &quot;Resume&quot; },
    { &quot;&amp;lt;leader&amp;gt;su&quot;, function() Snacks.picker.undo() end, desc = &quot;Undo History&quot; },
    { &quot;&amp;lt;leader&amp;gt;uC&quot;, function() Snacks.picker.colorschemes() end, desc = &quot;Colorschemes&quot; },
    -- LSP
    { &quot;gd&quot;, function() Snacks.picker.lsp_definitions() end, desc = &quot;Goto Definition&quot; },
    { &quot;gD&quot;, function() Snacks.picker.lsp_declarations() end, desc = &quot;Goto Declaration&quot; },
    { &quot;gr&quot;, function() Snacks.picker.lsp_references() end, nowait = true, desc = &quot;References&quot; },
    { &quot;gI&quot;, function() Snacks.picker.lsp_implementations() end, desc = &quot;Goto Implementation&quot; },
    { &quot;gy&quot;, function() Snacks.picker.lsp_type_definitions() end, desc = &quot;Goto T[y]pe Definition&quot; },
    { &quot;gai&quot;, function() Snacks.picker.lsp_incoming_calls() end, desc = &quot;C[a]lls Incoming&quot; },
    { &quot;gao&quot;, function() Snacks.picker.lsp_outgoing_calls() end, desc = &quot;C[a]lls Outgoing&quot; },
    { &quot;&amp;lt;leader&amp;gt;ss&quot;, function() Snacks.picker.lsp_symbols() end, desc = &quot;LSP Symbols&quot; },
    { &quot;&amp;lt;leader&amp;gt;sS&quot;, function() Snacks.picker.lsp_workspace_symbols() end, desc = &quot;LSP Workspace Symbols&quot; },
    -- Other
    { &quot;&amp;lt;leader&amp;gt;z&quot;,  function() Snacks.zen() end, desc = &quot;Toggle Zen Mode&quot; },
    { &quot;&amp;lt;leader&amp;gt;Z&quot;,  function() Snacks.zen.zoom() end, desc = &quot;Toggle Zoom&quot; },
    { &quot;&amp;lt;leader&amp;gt;.&quot;,  function() Snacks.scratch() end, desc = &quot;Toggle Scratch Buffer&quot; },
    { &quot;&amp;lt;leader&amp;gt;S&quot;,  function() Snacks.scratch.select() end, desc = &quot;Select Scratch Buffer&quot; },
    { &quot;&amp;lt;leader&amp;gt;n&quot;,  function() Snacks.notifier.show_history() end, desc = &quot;Notification History&quot; },
    { &quot;&amp;lt;leader&amp;gt;bd&quot;, function() Snacks.bufdelete() end, desc = &quot;Delete Buffer&quot; },
    { &quot;&amp;lt;leader&amp;gt;cR&quot;, function() Snacks.rename.rename_file() end, desc = &quot;Rename File&quot; },
    { &quot;&amp;lt;leader&amp;gt;gB&quot;, function() Snacks.gitbrowse() end, desc = &quot;Git Browse&quot;, mode = { &quot;n&quot;, &quot;v&quot; } },
    { &quot;&amp;lt;leader&amp;gt;gg&quot;, function() Snacks.lazygit() end, desc = &quot;Lazygit&quot; },
    { &quot;&amp;lt;leader&amp;gt;un&quot;, function() Snacks.notifier.hide() end, desc = &quot;Dismiss All Notifications&quot; },
    { &quot;&amp;lt;c-/&amp;gt;&quot;,      function() Snacks.terminal() end, desc = &quot;Toggle Terminal&quot; },
    { &quot;&amp;lt;c-_&amp;gt;&quot;,      function() Snacks.terminal() end, desc = &quot;which_key_ignore&quot; },
    { &quot;]]&quot;,         function() Snacks.words.jump(vim.v.count1) end, desc = &quot;Next Reference&quot;, mode = { &quot;n&quot;, &quot;t&quot; } },
    { &quot;[[&quot;,         function() Snacks.words.jump(-vim.v.count1) end, desc = &quot;Prev Reference&quot;, mode = { &quot;n&quot;, &quot;t&quot; } },
    {
      &quot;&amp;lt;leader&amp;gt;N&quot;,
      desc = &quot;Neovim News&quot;,
      function()
        Snacks.win({
          file = vim.api.nvim_get_runtime_file(&quot;doc/news.txt&quot;, false)[1],
          width = 0.6,
          height = 0.6,
          wo = {
            spell = false,
            wrap = false,
            signcolumn = &quot;yes&quot;,
            statuscolumn = &quot; &quot;,
            conceallevel = 3,
          },
        })
      end,
    }
  },
  init = function()
    vim.api.nvim_create_autocmd(&quot;User&quot;, {
      pattern = &quot;VeryLazy&quot;,
      callback = function()
        -- Setup some globals for debugging (lazy-loaded)
        _G.dd = function(...)
          Snacks.debug.inspect(...)
        end
        _G.bt = function()
          Snacks.debug.backtrace()
        end

        -- Override print to use snacks for `:=` command
        if vim.fn.has(&quot;nvim-0.11&quot;) == 1 then
          vim._print = function(_, ...)
            dd(...)
          end
        else
          vim.print = _G.dd 
        end

        -- Create some toggle mappings
        Snacks.toggle.option(&quot;spell&quot;, { name = &quot;Spelling&quot; }):map(&quot;&amp;lt;leader&amp;gt;us&quot;)
        Snacks.toggle.option(&quot;wrap&quot;, { name = &quot;Wrap&quot; }):map(&quot;&amp;lt;leader&amp;gt;uw&quot;)
        Snacks.toggle.option(&quot;relativenumber&quot;, { name = &quot;Relative Number&quot; }):map(&quot;&amp;lt;leader&amp;gt;uL&quot;)
        Snacks.toggle.diagnostics():map(&quot;&amp;lt;leader&amp;gt;ud&quot;)
        Snacks.toggle.line_number():map(&quot;&amp;lt;leader&amp;gt;ul&quot;)
        Snacks.toggle.option(&quot;conceallevel&quot;, { off = 0, on = vim.o.conceallevel &amp;gt; 0 and vim.o.conceallevel or 2 }):map(&quot;&amp;lt;leader&amp;gt;uc&quot;)
        Snacks.toggle.treesitter():map(&quot;&amp;lt;leader&amp;gt;uT&quot;)
        Snacks.toggle.option(&quot;background&quot;, { off = &quot;light&quot;, on = &quot;dark&quot;, name = &quot;Dark Background&quot; }):map(&quot;&amp;lt;leader&amp;gt;ub&quot;)
        Snacks.toggle.inlay_hints():map(&quot;&amp;lt;leader&amp;gt;uh&quot;)
        Snacks.toggle.indent():map(&quot;&amp;lt;leader&amp;gt;ug&quot;)
        Snacks.toggle.dim():map(&quot;&amp;lt;leader&amp;gt;uD&quot;)
      end,
    })
  end,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;!-- example:end --&gt; 
&lt;h2&gt;🌈 Highlight Groups&lt;/h2&gt; 
&lt;p&gt;Snacks defines &lt;strong&gt;a lot&lt;/strong&gt; of highlight groups and it&#39;s impossible to document them all.&lt;/p&gt; 
&lt;p&gt;Instead, you can use the picker to see all the highlight groups.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;Snacks.picker.highlights({pattern = &quot;hl_group:^Snacks&quot;})
&lt;/code&gt;&lt;/pre&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/882482569/62265501-363d-4cf4-9ded-55d42b2d37bf" medium="image" />
      
    </item>
    
    <item>
      <title>xmake-io/xmake</title>
      <link>https://github.com/xmake-io/xmake</link>
      <description>&lt;p&gt;🔥 A cross-platform build utility based on Lua&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;a href=&quot;https://xmake.io&quot;&gt; &lt;img width=&quot;160&quot; height=&quot;160&quot; src=&quot;https://xmake.io/assets/img/logo.png&quot; /&gt; &lt;/a&gt; 
 &lt;h1&gt;xmake&lt;/h1&gt; 
 &lt;div&gt; 
  &lt;a href=&quot;https://github.com/xmake-io/xmake/actions?query=workflow%3AWindows&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/xmake-io/xmake/windows.yml?branch=master&amp;amp;style=flat-square&amp;amp;logo=windows&quot; alt=&quot;github-ci&quot; /&gt; &lt;/a&gt; 
  &lt;a href=&quot;https://github.com/xmake-io/xmake/actions?query=workflow%3ALinux&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/xmake-io/xmake/linux.yml?branch=master&amp;amp;style=flat-square&amp;amp;logo=linux&quot; alt=&quot;github-ci&quot; /&gt; &lt;/a&gt; 
  &lt;a href=&quot;https://github.com/xmake-io/xmake/actions?query=workflow%3AmacOS&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/xmake-io/xmake/macos.yml?branch=master&amp;amp;style=flat-square&amp;amp;logo=apple&quot; alt=&quot;github-ci&quot; /&gt; &lt;/a&gt; 
  &lt;a href=&quot;https://github.com/xmake-io/xmake/releases&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/release/xmake-io/xmake.svg?style=flat-square&quot; alt=&quot;Github All Releases&quot; /&gt; &lt;/a&gt; 
 &lt;/div&gt; 
 &lt;div&gt; 
  &lt;a href=&quot;https://github.com/xmake-io/xmake/raw/master/LICENSE.md&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/license/xmake-io/xmake.svg?colorB=f48041&amp;amp;style=flat-square&quot; alt=&quot;license&quot; /&gt; &lt;/a&gt; 
  &lt;a href=&quot;https://www.reddit.com/r/xmake/&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/chat-on%20reddit-ff3f34.svg?style=flat-square&quot; alt=&quot;Reddit&quot; /&gt; &lt;/a&gt; 
  &lt;a href=&quot;https://t.me/tbooxorg&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/chat-on%20telegram-blue.svg?style=flat-square&quot; alt=&quot;Telegram&quot; /&gt; &lt;/a&gt; 
  &lt;a href=&quot;https://jq.qq.com/?_wv=1027&amp;amp;k=5hpwWFv&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/chat-on%20QQ-ff69b4.svg?style=flat-square&quot; alt=&quot;QQ&quot; /&gt; &lt;/a&gt; 
  &lt;a href=&quot;https://discord.gg/xmake&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/chat-on%20discord-7289da.svg?style=flat-square&quot; alt=&quot;Discord&quot; /&gt; &lt;/a&gt; 
  &lt;a href=&quot;https://xmake.io/about/sponsor.html&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/donate-us-orange.svg?style=flat-square&quot; alt=&quot;Donate&quot; /&gt; &lt;/a&gt; 
 &lt;/div&gt; 
 &lt;p&gt;&lt;b&gt;A cross-platform build utility based on Lua&lt;/b&gt;&lt;br /&gt; &lt;i&gt;Modern C/C++ build tool: Simple, Fast, Powerful dependency package integration&lt;/i&gt;&lt;br /&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Support this project&lt;/h2&gt; 
&lt;p&gt;Support this project by &lt;a href=&quot;https://xmake.io/about/sponsor.html&quot;&gt;becoming a sponsor&lt;/a&gt;. Your logo will show up here with a link to your website. 🙏&lt;/p&gt; 
&lt;h2&gt;Introduction (&lt;a href=&quot;https://raw.githubusercontent.com/xmake-io/xmake/dev/README_zh.md&quot;&gt;中文&lt;/a&gt;)&lt;/h2&gt; 
&lt;p&gt;What is Xmake?&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Xmake is a cross-platform build utility based on the Lua scripting language.&lt;/li&gt; 
 &lt;li&gt;Xmake is very lightweight and has no dependencies outside of the standard library.&lt;/li&gt; 
 &lt;li&gt;Uses the &lt;code&gt;xmake.lua&lt;/code&gt; file to maintain project builds with a simple and readable syntax.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Xmake can be used to directly build source code (like with Make or Ninja), or it can generate project source files like CMake or Meson. It also has a &lt;em&gt;built-in&lt;/em&gt; package management system to help users integrate C/C++ dependencies.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Xmake = Build backend + Project Generator + Package Manager + [Remote|Distributed] Build + Cache
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Although less precise, one can still understand Xmake in the following way:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Xmake ≈ Make/Ninja + CMake/Meson + Vcpkg/Conan + distcc + ccache/sccache
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you want to know more, please refer to the &lt;a href=&quot;https://xmake.io/guide/quick-start&quot;&gt;Documentation&lt;/a&gt;, &lt;a href=&quot;https://github.com/xmake-io/xmake&quot;&gt;GitHub&lt;/a&gt; or &lt;a href=&quot;https://gitee.com/tboox/xmake&quot;&gt;Gitee&lt;/a&gt;. You are also welcome to join our &lt;a href=&quot;https://xmake.io/about/contact&quot;&gt;community&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The official Xmake repository can be found at &lt;a href=&quot;https://github.com/xmake-io/xmake-repo&quot;&gt;xmake-io/xmake-repo&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/xmake-io/xmake-docs/raw/master/docs/public/assets/img/index/xmake-basic-render.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;With cURL&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl -fsSL https://xmake.io/shget.text | bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;With Wget&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wget https://xmake.io/shget.text -O - | bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;With PowerShell&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;irm https://xmake.io/psget.text | iex
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Other installation methods&lt;/h3&gt; 
&lt;p&gt;If you don&#39;t want to use the above scripts to install Xmake, visit the &lt;a href=&quot;https://xmake.io/guide/quick-start.html#installation&quot;&gt;Installation Guide&lt;/a&gt; for other installation methods (building from source, package managers, etc.).&lt;/p&gt; 
&lt;h2&gt;Simple Project Description&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;target(&quot;console&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.c&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Creates a new target &lt;code&gt;console&lt;/code&gt; of kind &lt;code&gt;binary&lt;/code&gt;, and adds all the files ending in &lt;code&gt;.c&lt;/code&gt; in the &lt;code&gt;src&lt;/code&gt; directory.&lt;/p&gt; 
&lt;h2&gt;Package dependencies&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;add_requires(&quot;tbox 1.6.*&quot;, &quot;zlib&quot;, &quot;libpng ~1.6&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Adds a requirement of tbox v1.6, zlib (any version), and libpng v1.6.&lt;/p&gt; 
&lt;p&gt;The official xmake package repository exists at: &lt;a href=&quot;https://github.com/xmake-io/xmake-repo&quot;&gt;xmake-repo&lt;/a&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://github.com/xmake-io/xmake-docs/raw/master/assets/img/index/package.gif&quot; width=&quot;650px&quot; /&gt; &lt;/p&gt; 
&lt;h2&gt;Command line interface reference&lt;/h2&gt; 
&lt;p&gt;The below assumes you are currently in the project&#39;s root directory.&lt;/p&gt; 
&lt;h3&gt;Build a project&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Run target&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake run console
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Debug target&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake run -d console
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Run test&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake test
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Configure platform&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake f -p [windows|linux|macosx|android|iphoneos ..] -a [x86|arm64 ..] -m [debug|release]
$ xmake
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Menu configuration&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake f --menu
&lt;/code&gt;&lt;/pre&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://xmake.io/assets/img/index/menuconf.png&quot; width=&quot;650px&quot; /&gt; &lt;/p&gt; 
&lt;h2&gt;Supported platforms&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Windows (x86, x64, arm, arm64, arm64ec)&lt;/li&gt; 
 &lt;li&gt;macOS (i386, x86_64, arm64)&lt;/li&gt; 
 &lt;li&gt;Linux (i386, x86_64, arm, arm64, riscv, mips, 390x, sh4 ...)&lt;/li&gt; 
 &lt;li&gt;FreeBSD (i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;NetBSD (i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;OpenBSD (i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;DragonflyBSD (i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;Solaris (i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;Android (x86, x86_64, armeabi, armeabi-v7a, arm64-v8a)&lt;/li&gt; 
 &lt;li&gt;iOS (armv7, armv7s, arm64, i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;WatchOS (armv7k, i386)&lt;/li&gt; 
 &lt;li&gt;AppleTVOS (armv7, arm64, i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;AppleXROS (arm64, x86_64)&lt;/li&gt; 
 &lt;li&gt;MSYS (i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;MinGW (i386, x86_64, arm, arm64)&lt;/li&gt; 
 &lt;li&gt;Cygwin (i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;Wasm (wasm32, wasm64)&lt;/li&gt; 
 &lt;li&gt;Haiku (i386, x86_64)&lt;/li&gt; 
 &lt;li&gt;Harmony (x86_64, armeabi-v7a, arm64-v8a)&lt;/li&gt; 
 &lt;li&gt;Cross (cross-toolchains ..)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Supported toolchains&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake show -l toolchains
xcode         Xcode IDE
msvc          Microsoft Visual C/C++ Compiler
clang-cl      LLVM Clang C/C++ Compiler compatible with msvc
yasm          The Yasm Modular Assembler
clang         A C language family frontend for LLVM
go            Go Programming Language Compiler
dlang         D Programming Language Compiler (Auto)
dmd           D Programming Language Compiler
ldc           The LLVM-based D Compiler
gdc           The GNU D Compiler (GDC)
gfortran      GNU Fortran Programming Language Compiler
flang         LLVM Fortran Compiler
zig           Zig Programming Language Compiler
zigcc         Use zig cc/c++ as C/C++ Compiler
sdcc          Small Device C Compiler
cuda          CUDA Toolkit (nvcc, nvc, nvc++, nvfortran)
ndk           Android NDK
rust          Rust Programming Language Compiler
swift         Swift Programming Language Compiler
llvm          A collection of modular and reusable compiler and toolchain technologies
cross         Common cross compilation toolchain
nasm          NASM Assembler
gcc           GNU Compiler Collection
mingw         Minimalist GNU for Windows
gnu-rm        GNU Arm Embedded Toolchain
envs          Environment variables toolchain
fasm          Flat Assembler
tinycc        Tiny C Compiler
emcc          A toolchain for compiling to asm.js and WebAssembly
icc           Intel C/C++ Compiler
ifort         Intel Fortran Compiler
ifx           Intel LLVM Fortran Compiler
muslcc        The musl-based cross-compilation toolchain
fpc           Free Pascal Programming Language Compiler
wasi          WASI-enabled WebAssembly C/C++ toolchain
nim           Nim Programming Language Compiler
dotnet        .NET SDK Toolchain
circle        A new C++20 compiler
armcc         ARM Compiler Version 5 of Keil MDK
armclang      ARM Compiler Version 6 of Keil MDK
c51           Keil development tools for the 8051 Microcontroller Architecture
icx           Intel LLVM C/C++ Compiler
dpcpp         Intel LLVM C++ Compiler for data parallel programming model based on Khronos SYCL
masm32        The MASM32 SDK
iverilog      Icarus Verilog
verilator     Verilator open-source SystemVerilog simulator and lint system
cosmocc       build-once run-anywhere
hdk           Harmony SDK
ti-c2000      TI-CGT C2000 compiler
ti-c6000      TI-CGT C6000 compiler
iararm        IAR ARM C/C++ Compiler
kotlin-native Kotlin Native Programming Language Compiler
filc          A memory safe implementation of the C and C++ programming languages (https://fil-c.org/)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Supported languages&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;C and C++&lt;/li&gt; 
 &lt;li&gt;Objective-C and Objective-C++&lt;/li&gt; 
 &lt;li&gt;Swift&lt;/li&gt; 
 &lt;li&gt;Assembly&lt;/li&gt; 
 &lt;li&gt;Golang&lt;/li&gt; 
 &lt;li&gt;Rust&lt;/li&gt; 
 &lt;li&gt;Dlang&lt;/li&gt; 
 &lt;li&gt;Fortran&lt;/li&gt; 
 &lt;li&gt;Cuda&lt;/li&gt; 
 &lt;li&gt;Zig&lt;/li&gt; 
 &lt;li&gt;Vala&lt;/li&gt; 
 &lt;li&gt;Pascal&lt;/li&gt; 
 &lt;li&gt;Nim&lt;/li&gt; 
 &lt;li&gt;Verilog&lt;/li&gt; 
 &lt;li&gt;FASM&lt;/li&gt; 
 &lt;li&gt;NASM&lt;/li&gt; 
 &lt;li&gt;YASM&lt;/li&gt; 
 &lt;li&gt;MASM32&lt;/li&gt; 
 &lt;li&gt;Cppfront&lt;/li&gt; 
 &lt;li&gt;Kotlin&lt;/li&gt; 
 &lt;li&gt;C#&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;p&gt;Xmake exhibits:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Simple yet flexible configuration grammar.&lt;/li&gt; 
 &lt;li&gt;Quick, dependency-free installation.&lt;/li&gt; 
 &lt;li&gt;Easy compilation for most all supported platforms.&lt;/li&gt; 
 &lt;li&gt;Supports cross-compilation with intelligent analysis of cross toolchain information.&lt;/li&gt; 
 &lt;li&gt;Extremely fast parallel compilation support.&lt;/li&gt; 
 &lt;li&gt;Supports C++ modules (new in C++20).&lt;/li&gt; 
 &lt;li&gt;Supports cross-platform C/C++ dependencies with built-in package manager.&lt;/li&gt; 
 &lt;li&gt;Multi-language compilation support including mixed-language projects.&lt;/li&gt; 
 &lt;li&gt;Rich plug-in support with various project generators (ex. Visual Studio/Makefiles/CMake/&lt;code&gt;compile_commands.json&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;REPL interactive execution support&lt;/li&gt; 
 &lt;li&gt;Incremental compilation support with automatic analysis of header files&lt;/li&gt; 
 &lt;li&gt;Built-in toolchain management&lt;/li&gt; 
 &lt;li&gt;A large number of expansion modules&lt;/li&gt; 
 &lt;li&gt;Remote compilation support&lt;/li&gt; 
 &lt;li&gt;Distributed compilation support&lt;/li&gt; 
 &lt;li&gt;Local and remote build cache support&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Supported Project Types&lt;/h2&gt; 
&lt;p&gt;Xmake supports the below types of projects:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Static libraries&lt;/li&gt; 
 &lt;li&gt;Shared libraries&lt;/li&gt; 
 &lt;li&gt;Console/CLI applications&lt;/li&gt; 
 &lt;li&gt;CUDA programs&lt;/li&gt; 
 &lt;li&gt;Qt applications&lt;/li&gt; 
 &lt;li&gt;WDK drivers (umdf/kmdf/wdm)&lt;/li&gt; 
 &lt;li&gt;WinSDK applications&lt;/li&gt; 
 &lt;li&gt;MFC applications&lt;/li&gt; 
 &lt;li&gt;Darwin applications (with metal support)&lt;/li&gt; 
 &lt;li&gt;Frameworks and bundles (in Darwin)&lt;/li&gt; 
 &lt;li&gt;SWIG modules (Lua, Python, ...)&lt;/li&gt; 
 &lt;li&gt;LuaRocks modules&lt;/li&gt; 
 &lt;li&gt;Protobuf programs&lt;/li&gt; 
 &lt;li&gt;Lex/Yacc programs&lt;/li&gt; 
 &lt;li&gt;Linux kernel modules&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Package management&lt;/h2&gt; 
&lt;h3&gt;Download and build&lt;/h3&gt; 
&lt;p&gt;Xmake can automatically fetch and install dependencies!&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://xmake.io/assets/img/index/package_manage.png&quot; width=&quot;650px&quot; /&gt; &lt;/p&gt; 
&lt;h3&gt;Supported package repositories&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Official package repository &lt;a href=&quot;https://github.com/xmake-io/xmake-repo&quot;&gt;xmake-repo&lt;/a&gt; (tbox &amp;gt;1.6.1)&lt;/li&gt; 
 &lt;li&gt;Official package manager &lt;a href=&quot;https://github.com/xmake-io/xrepo&quot;&gt;Xrepo&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://xmake.io/guide/package-management/using-official-packages.html#using-self-built-private-package-repository&quot;&gt;User-built repositories&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Conan (conan::openssl/1.1.1g)&lt;/li&gt; 
 &lt;li&gt;Conda (conda::libpng 1.3.67)&lt;/li&gt; 
 &lt;li&gt;Vcpkg (vcpkg:ffmpeg)&lt;/li&gt; 
 &lt;li&gt;Homebrew/Linuxbrew (brew::pcre2/libpcre2-8)&lt;/li&gt; 
 &lt;li&gt;Pacman on archlinux/msys2 (pacman::libcurl)&lt;/li&gt; 
 &lt;li&gt;Apt on ubuntu/debian (apt::zlib1g-dev)&lt;/li&gt; 
 &lt;li&gt;Clib (clib::clibs/bytes@0.0.4)&lt;/li&gt; 
 &lt;li&gt;Dub (dub::log 0.4.3)&lt;/li&gt; 
 &lt;li&gt;Portage on Gentoo/Linux (portage::libhandy)&lt;/li&gt; 
 &lt;li&gt;Nimble for nimlang (nimble::zip &amp;gt;1.3)&lt;/li&gt; 
 &lt;li&gt;Cargo for rust (cargo::base64 0.13.0)&lt;/li&gt; 
 &lt;li&gt;Zypper on openSUSE (zypper::libsfml2 2.5)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Package management features&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;The official repository provides nearly 500+ packages with simple compilation on all supported platforms&lt;/li&gt; 
 &lt;li&gt;Full platform package support, support for cross-compiled dependent packages&lt;/li&gt; 
 &lt;li&gt;Support package virtual environment using &lt;code&gt;xrepo env shell&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Precompiled package acceleration for Windows (NT)&lt;/li&gt; 
 &lt;li&gt;Support self-built package repositories and private repository deployment&lt;/li&gt; 
 &lt;li&gt;Third-party package repository support for repositories such as: vcpkg, conan, conda, etc.&lt;/li&gt; 
 &lt;li&gt;Supports automatic pulling of remote toolchains&lt;/li&gt; 
 &lt;li&gt;Supports dependency version locking&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Processing architecture&lt;/h2&gt; 
&lt;p&gt;Below is a diagram showing roughly the architecture of Xmake, and thus how it functions.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://xmake.io/assets/img/index/package_arch.png&quot; width=&quot;650px&quot; /&gt; &lt;/p&gt; 
&lt;h2&gt;Distributed Compilation&lt;/h2&gt; 
&lt;ul class=&quot;task-list&quot;&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_0&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_0&quot;&gt; Cross-platform support.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_1&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_1&quot;&gt; Support for MSVC, Clang, GCC and other cross-compilation toolchains.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_2&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_2&quot;&gt; Support for building for Android, Linux, Windows NT, and Darwin hosts.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_3&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_3&quot;&gt; No dependencies other than the compilation toolchain.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_4&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_4&quot;&gt; Support for build server load balancing scheduling.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_5&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_5&quot;&gt; Support for real time compressed transfer of large files (lz4).&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_6&quot; checked=&quot;true&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_6&quot;&gt; Almost zero configuration cost, no shared filesystem required, for convenience and security.&lt;/label&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For more details see: &lt;a href=&quot;https://xmake.io/guide/extras/distributed-compilation.html&quot;&gt;Distributed Compilation&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Remote Compilation&lt;/h2&gt; 
&lt;p&gt;For more details see: &lt;a href=&quot;https://xmake.io/guide/extras/remote-compilation.html&quot;&gt;Remote Compilation&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Local/Remote Build Cache&lt;/h2&gt; 
&lt;p&gt;For more details see: &lt;a href=&quot;https://xmake.io/guide/extras/build-cache.html&quot;&gt;Build Cache Acceleration&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Benchmark&lt;/h2&gt; 
&lt;p&gt;Xmake&#39;s speed on is par with Ninja! The test project: &lt;a href=&quot;https://github.com/xmake-io/xmake/tree/master/core&quot;&gt;xmake-core&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Multi-task parallel compilation&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;buildsystem&lt;/th&gt; 
   &lt;th&gt;Termux (8core/-j12)&lt;/th&gt; 
   &lt;th&gt;buildsystem&lt;/th&gt; 
   &lt;th&gt;MacOS (8core/-j12)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;xmake&lt;/td&gt; 
   &lt;td&gt;24.890s&lt;/td&gt; 
   &lt;td&gt;xmake&lt;/td&gt; 
   &lt;td&gt;12.264s&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ninja&lt;/td&gt; 
   &lt;td&gt;25.682s&lt;/td&gt; 
   &lt;td&gt;ninja&lt;/td&gt; 
   &lt;td&gt;11.327s&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cmake(gen+make)&lt;/td&gt; 
   &lt;td&gt;5.416s+28.473s&lt;/td&gt; 
   &lt;td&gt;cmake(gen+make)&lt;/td&gt; 
   &lt;td&gt;1.203s+14.030s&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cmake(gen+ninja)&lt;/td&gt; 
   &lt;td&gt;4.458s+24.842s&lt;/td&gt; 
   &lt;td&gt;cmake(gen+ninja)&lt;/td&gt; 
   &lt;td&gt;0.988s+11.644s&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Single task compilation&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;buildsystem&lt;/th&gt; 
   &lt;th&gt;Termux (-j1)&lt;/th&gt; 
   &lt;th&gt;buildsystem&lt;/th&gt; 
   &lt;th&gt;MacOS (-j1)&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;xmake&lt;/td&gt; 
   &lt;td&gt;1m57.707s&lt;/td&gt; 
   &lt;td&gt;xmake&lt;/td&gt; 
   &lt;td&gt;39.937s&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;ninja&lt;/td&gt; 
   &lt;td&gt;1m52.845s&lt;/td&gt; 
   &lt;td&gt;ninja&lt;/td&gt; 
   &lt;td&gt;38.995s&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cmake(gen+make)&lt;/td&gt; 
   &lt;td&gt;5.416s+2m10.539s&lt;/td&gt; 
   &lt;td&gt;cmake(gen+make)&lt;/td&gt; 
   &lt;td&gt;1.203s+41.737s&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;cmake(gen+ninja)&lt;/td&gt; 
   &lt;td&gt;4.458s+1m54.868s&lt;/td&gt; 
   &lt;td&gt;cmake(gen+ninja)&lt;/td&gt; 
   &lt;td&gt;0.988s+38.022s&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;More Examples&lt;/h2&gt; 
&lt;h3&gt;Debug and release profiles&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;add_rules(&quot;mode.debug&quot;, &quot;mode.release&quot;)

target(&quot;console&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.c&quot;)
    if is_mode(&quot;debug&quot;) then
        add_defines(&quot;DEBUG&quot;)
    end
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Custom scripts&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;target(&quot;test&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.c&quot;)
    after_build(function (target)
        print(&quot;hello: %s&quot;, target:name())
        os.exec(&quot;echo %s&quot;, target:targetfile())
    end)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Automatic integration of dependent packages&lt;/h3&gt; 
&lt;p&gt;Download and use packages in &lt;a href=&quot;https://github.com/xmake-io/xmake-repo&quot;&gt;xmake-repo&lt;/a&gt; or third-party repositories:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;add_requires(&quot;tbox &amp;gt;1.6.1&quot;, &quot;libuv master&quot;, &quot;vcpkg::ffmpeg&quot;, &quot;brew::pcre2/libpcre2-8&quot;)
add_requires(&quot;conan::openssl/1.1.1g&quot;, {alias = &quot;openssl&quot;, optional = true, debug = true})
target(&quot;test&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.c&quot;)
    add_packages(&quot;tbox&quot;, &quot;libuv&quot;, &quot;vcpkg::ffmpeg&quot;, &quot;brew::pcre2/libpcre2-8&quot;, &quot;openssl&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In addition, we can also use the &lt;a href=&quot;https://github.com/xmake-io/xrepo&quot;&gt;xrepo&lt;/a&gt; command to quickly install dependencies.&lt;/p&gt; 
&lt;h3&gt;Qt QuickApp Program&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;target(&quot;test&quot;)
    add_rules(&quot;qt.quickapp&quot;)
    add_files(&quot;src/*.cpp&quot;)
    add_files(&quot;src/qml.qrc&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Cuda Program&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;target(&quot;test&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.cu&quot;)
    add_cugencodes(&quot;native&quot;)
    add_cugencodes(&quot;compute_75&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;WDK/UMDF Driver Program&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;target(&quot;echo&quot;)
    add_rules(&quot;wdk.driver&quot;, &quot;wdk.env.umdf&quot;)
    add_files(&quot;driver/*.c&quot;)
    add_files(&quot;driver/*.inx&quot;)
    add_includedirs(&quot;exe&quot;)

target(&quot;app&quot;)
    add_rules(&quot;wdk.binary&quot;, &quot;wdk.env.umdf&quot;)
    add_files(&quot;exe/*.cpp&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For more WDK driver examples (UMDF/KMDF/WDM), please visit &lt;a href=&quot;https://xmake.io/examples/cpp/wdk.html&quot;&gt;WDK Program Examples&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Darwin Applications&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;target(&quot;test&quot;)
    add_rules(&quot;xcode.application&quot;)
    add_files(&quot;src/*.m&quot;, &quot;src/**.storyboard&quot;, &quot;src/*.xcassets&quot;)
    add_files(&quot;src/Info.plist&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Framework and Bundle Program (Darwin)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;target(&quot;test&quot;)
    add_rules(&quot;xcode.framework&quot;) -- or xcode.bundle
    add_files(&quot;src/*.m&quot;)
    add_files(&quot;src/Info.plist&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;OpenMP Program&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;add_requires(&quot;libomp&quot;, {optional = true})
target(&quot;loop&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.cpp&quot;)
    add_rules(&quot;c++.openmp&quot;)
    add_packages(&quot;libomp&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Zig Program&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;target(&quot;test&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/main.zig&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Automatically fetch remote toolchain&lt;/h3&gt; 
&lt;h4&gt;fetch a special version of LLVM&lt;/h4&gt; 
&lt;p&gt;Require the Clang version packaged with LLM-10 to compile a project.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;add_requires(&quot;llvm 10.x&quot;, {alias = &quot;llvm-10&quot;})
target(&quot;test&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.c&quot;)
    set_toolchains(&quot;llvm@llvm-10&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Fetch a cross-compilation toolchain&lt;/h4&gt; 
&lt;p&gt;We can also pull a specified cross-compilation toolchain in to compile the project.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;add_requires(&quot;muslcc&quot;)
target(&quot;test&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.c&quot;)
    set_toolchains(&quot;@muslcc&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Fetch toolchain and packages&lt;/h4&gt; 
&lt;p&gt;We can also use the specified &lt;code&gt;muslcc&lt;/code&gt; cross-compilation toolchain to compile and integrate all dependent packages.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;add_requires(&quot;muslcc&quot;)
add_requires(&quot;zlib&quot;, &quot;libogg&quot;, {system = false})

set_toolchains(&quot;@muslcc&quot;)

target(&quot;test&quot;)
    set_kind(&quot;binary&quot;)
    add_files(&quot;src/*.c&quot;)
    add_packages(&quot;zlib&quot;, &quot;libogg&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Plugins&lt;/h2&gt; 
&lt;h4&gt;Generate IDE project file plugin（makefile, vs2002 - vs2026 .. ）&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake project -k vsxmake -m &quot;debug,release&quot; # New vsproj generator (Recommended)
$ xmake project -k vs -m &quot;debug,release&quot;
$ xmake project -k cmake
$ xmake project -k ninja
$ xmake project -k compile_commands
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Run a custom lua script plugin&lt;/h4&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;$ xmake l ./test.lua
$ xmake l -c &quot;print(&#39;hello xmake!&#39;)&quot;
$ xmake l lib.detect.find_tool gcc
$ xmake l
&amp;gt; print(&quot;hello xmake!&quot;)
&amp;gt; {1, 2, 3}
&amp;lt; {
    1,
    2,
    3
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To see a list of builtin plugins, please visit &lt;a href=&quot;https://xmake.io/guide/extensions/builtin-plugins.html&quot;&gt;Builtin plugins&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Please download and install other plugins from the plugins repository &lt;a href=&quot;https://github.com/xmake-io/xmake-plugins&quot;&gt;xmake-plugins&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;IDE/Editor Integration&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xmake-io/xmake-vscode&quot;&gt;xmake-vscode&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/xmake-io/xmake-vscode/master/res/problem.gif&quot; width=&quot;650px&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xmake-io/xmake-sublime&quot;&gt;xmake-sublime&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/xmake-io/xmake-sublime/master/res/problem.gif&quot; width=&quot;650px&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xmake-io/xmake-idea&quot;&gt;xmake-idea&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/xmake-io/xmake-idea/master/res/problem.gif&quot; width=&quot;650px&quot; /&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xmake-io/xmake-zed&quot;&gt;xmake-zed&lt;/a&gt; (thanks &lt;a href=&quot;https://github.com/jeleferai&quot;&gt;@jeleferai&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/luzhlon/xmake.vim&quot;&gt;xmake.vim&lt;/a&gt; (third-party, thanks &lt;a href=&quot;https://github.com/luzhlon&quot;&gt;@luzhlon&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/HelloWorld886/xmake-visualstudio&quot;&gt;xmake-visualstudio&lt;/a&gt; (third-party, thanks &lt;a href=&quot;https://github.com/HelloWorld886&quot;&gt;@HelloWorld886&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Arthapz/xmake-project-manager&quot;&gt;xmake-qtcreator&lt;/a&gt; (third-party, thanks &lt;a href=&quot;https://github.com/Arthapz&quot;&gt;@Arthapz&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Xmake Gradle Plugin (JNI)&lt;/h3&gt; 
&lt;p&gt;We can use the &lt;a href=&quot;https://github.com/xmake-io/xmake-gradle&quot;&gt;xmake-gradle&lt;/a&gt; plugin to compile JNI libraries via gradle.&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;plugins {
  id &#39;org.tboox.gradle-xmake-plugin&#39; version &#39;1.1.5&#39;
}

android {
    externalNativeBuild {
        xmake {
            path &quot;jni/xmake.lua&quot;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;xmakeBuild&lt;/code&gt; task will be injected into the &lt;code&gt;assemble&lt;/code&gt; task automatically if the &lt;code&gt;gradle-xmake-plugin&lt;/code&gt; has been applied.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ ./gradlew app:assembleDebug
&amp;gt; Task :nativelib:xmakeConfigureForArm64
&amp;gt; Task :nativelib:xmakeBuildForArm64
&amp;gt;&amp;gt; xmake build
[ 50%]: cache compiling.debug nativelib.cc
[ 75%]: linking.debug libnativelib.so
[100%]: build ok!
&amp;gt;&amp;gt; install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/arm64-v8a
&amp;gt; Task :nativelib:xmakeConfigureForArmv7
&amp;gt; Task :nativelib:xmakeBuildForArmv7
&amp;gt;&amp;gt; xmake build
[ 50%]: cache compiling.debug nativelib.cc
[ 75%]: linking.debug libnativelib.so
[100%]: build ok!
&amp;gt;&amp;gt; install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/armeabi-v7a
&amp;gt; Task :nativelib:preBuild
&amp;gt; Task :nativelib:assemble
&amp;gt; Task :app:assembleDebug
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;CI Integration&lt;/h2&gt; 
&lt;h3&gt;GitHub Action&lt;/h3&gt; 
&lt;p&gt;The &lt;a href=&quot;https://github.com/xmake-io/github-action-setup-xmake&quot;&gt;github-action-setup-xmake&lt;/a&gt; plugin for GitHub Actions can allow you to use Xmake with minimal efforts if you use GitHub Actions for your CI pipeline.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;uses: xmake-io/github-action-setup-xmake@v1
with:
  xmake-version: latest
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Who is using Xmake?&lt;/h2&gt; 
&lt;p&gt;The list of people and projects who are using Xmake is available &lt;a href=&quot;https://xmake.io/about/who_is_using_xmake.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;If you are using Xmake, you are welcome to submit your information to the above list through a PR, so that other users and the developers can gauge interest. This also lets users use xmake more confidently and gives us motivation to continue to maintain it.&lt;/p&gt; 
&lt;p&gt;This will help the Xmake project and it&#39;s community grow stronger and expand!&lt;/p&gt; 
&lt;h2&gt;Contacts&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Email：&lt;a href=&quot;mailto:waruqi@gmail.com&quot;&gt;waruqi@gmail.com&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Homepage：&lt;a href=&quot;https://xmake.io&quot;&gt;xmake.io&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Community 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/xmake/&quot;&gt;Chat on Reddit&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://t.me/tbooxorg&quot;&gt;Chat on Telegram&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://discord.gg/xmake&quot;&gt;Chat on Discord&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Chat on QQ Group: 343118190, 662147501&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Source Code：&lt;a href=&quot;https://github.com/xmake-io/xmake&quot;&gt;GitHub&lt;/a&gt;, &lt;a href=&quot;https://gitee.com/tboox/xmake&quot;&gt;Gitee&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;WeChat Public: tboox-os&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Thanks&lt;/h2&gt; 
&lt;p&gt;This project exists thanks to all the people who have &lt;a href=&quot;https://raw.githubusercontent.com/xmake-io/xmake/dev/CONTRIBUTING.md&quot;&gt;contributed&lt;/a&gt;: &lt;a href=&quot;https://github.com/xmake-io/xmake/graphs/contributors&quot;&gt;&lt;img src=&quot;https://opencollective.com/xmake/contributors.svg?width=890&amp;amp;button=false&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/TitanSnow&quot;&gt;TitanSnow&lt;/a&gt;: Provide the xmake &lt;a href=&quot;https://github.com/TitanSnow/ts-xmake-logo&quot;&gt;logo&lt;/a&gt; and install scripts&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/uael&quot;&gt;uael&lt;/a&gt;: Provide the semantic versioning library &lt;a href=&quot;https://github.com/uael/sv&quot;&gt;sv&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/OpportunityLiu&quot;&gt;OpportunityLiu&lt;/a&gt;: Improve cuda, tests and ci&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/xq114&quot;&gt;xq144&lt;/a&gt;: Improve &lt;code&gt;xrepo env shell&lt;/code&gt;, and contribute a lot of packages to the &lt;a href=&quot;https://github.com/xmake-io/xmake-repo&quot;&gt;xmake-repo&lt;/a&gt; repository.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/star-hengxing&quot;&gt;star-hengxing&lt;/a&gt;: Contribute a lot of packages to the &lt;a href=&quot;https://github.com/xmake-io/xmake-repo&quot;&gt;xmake-repo&lt;/a&gt; repository.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Arthapz&quot;&gt;Arthapz&lt;/a&gt;: Contribute new C++ Modules implementation.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/SirLynix&quot;&gt;SirLynix&lt;/a&gt;: Contributed many packages and let more people know about xmake.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;enderger&lt;/code&gt;: Helped smooth out the edges on the English translation of the README&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Powered by&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://jb.gg/OpenSource&quot;&gt;&lt;img src=&quot;https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg?sanitize=true&quot; alt=&quot;JetBrains logo.&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/34431834/5a443300-0b45-11eb-83b4-56088aa0d22f" medium="image" />
      
    </item>
    
    <item>
      <title>mason-org/mason-lspconfig.nvim</title>
      <link>https://github.com/mason-org/mason-lspconfig.nvim</link>
      <description>&lt;p&gt;Extension to mason.nvim that makes it easier to use lspconfig with mason.nvim.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-%23.svg?logo=linux&amp;amp;color=FCC624&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/macOS-%23.svg?logo=apple&amp;amp;color=000000&amp;amp;logoColor=white&quot; alt=&quot;macOS&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Windows-%23.svg?logo=windows&amp;amp;color=0078D6&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt; &lt;a href=&quot;https://github.com/mason-org/mason-lspconfig.nvim/actions?query=workflow%3ATests+branch%3Amain+event%3Apush&quot;&gt;&lt;img src=&quot;https://github.com/mason-org/mason-lspconfig.nvim/workflows/Tests/badge.svg?sanitize=true&quot; alt=&quot;GitHub CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/sponsors/williamboman&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/sponsors/williamboman?style=flat-square&quot; alt=&quot;Sponsors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1 align=&quot;center&quot;&gt;mason-lspconfig.nvim&lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;code&gt;mason-lspconfig&lt;/code&gt; bridges &lt;a href=&quot;https://github.com/mason-org/mason.nvim&quot;&gt;&lt;code&gt;mason.nvim&lt;/code&gt;&lt;/a&gt; with the &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig&quot;&gt;&lt;code&gt;lspconfig&lt;/code&gt;&lt;/a&gt; plugin - making it easier to use both plugins together. &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;code&gt;:help mason-lspconfig.nvim&lt;/code&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;sup&gt;Latest version: v2.1.0&lt;/sup&gt; 
 &lt;!-- x-release-please-version --&gt; &lt;/p&gt; 
&lt;h2&gt;Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#requirements&quot;&gt;Requirements&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#installation--usage&quot;&gt;Installation &amp;amp; Usage&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#recommended-setup-for-lazynvim&quot;&gt;Recommended setup for &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#automatically-enable-installed-servers&quot;&gt;Automatically enable installed servers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#commands&quot;&gt;Commands&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#configuration&quot;&gt;Configuration&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#default-configuration&quot;&gt;Default configuration&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Introduction&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;:h mason-lspconfig-introduction&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;This plugin&#39;s main responsibilities are to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;allow you to (i) automatically install, and (ii) automatically enable (&lt;code&gt;vim.lsp.enable()&lt;/code&gt;) installed servers&lt;/li&gt; 
 &lt;li&gt;provide extra convenience APIs such as the &lt;code&gt;:LspInstall&lt;/code&gt; command&lt;/li&gt; 
 &lt;li&gt;provide additional LSP configurations for a few servers&lt;/li&gt; 
 &lt;li&gt;translate between &lt;code&gt;nvim-lspconfig&lt;/code&gt; server names and &lt;code&gt;mason.nvim&lt;/code&gt; package names (e.g. &lt;code&gt;lua_ls &amp;lt;-&amp;gt; lua-language-server&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Since the introduction of &lt;a href=&quot;https://neovim.io/doc/user/lsp.html#vim.lsp.config()&quot;&gt;&lt;code&gt;:h vim.lsp.config&lt;/code&gt;&lt;/a&gt; in Neovim 0.11, this plugin&#39;s feature set has been reduced. Use this plugin if you want to automatically enable installed servers (&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#vim.lsp.enable()&quot;&gt;&lt;code&gt;:h vim.lsp.enable()&lt;/code&gt;&lt;/a&gt;) or have access to the &lt;code&gt;:LspInstall&lt;/code&gt; command.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;:h mason-lspconfig-requirements&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;neovim &amp;gt;= 0.11.0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;mason.nvim &amp;gt;= 2.0.0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;nvim-lspconfig &amp;gt;= 2.0.0&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation &amp;amp; Usage&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;:h mason-lspconfig-quickstart&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Install using your plugin manager of choice. &lt;strong&gt;Setup is required&lt;/strong&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason-lspconfig&quot;).setup()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;It&#39;s important that you set up &lt;code&gt;mason.nvim&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; have &lt;code&gt;nvim-lspconfig&lt;/code&gt; available in &lt;a href=&quot;https://neovim.io/doc/user/options.html#&#39;runtimepath&#39;&quot;&gt;&lt;code&gt;:h runtimepath&lt;/code&gt;&lt;/a&gt; before setting up &lt;code&gt;mason-lspconfig.nvim&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Refer to the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#configuration&quot;&gt;Configuration&lt;/a&gt; section for information about which settings are available.&lt;/p&gt; 
&lt;h3&gt;Recommended setup for &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;The following is the recommended setup when using &lt;code&gt;lazy.nvim&lt;/code&gt;. It will set up the plugin for you, meaning &lt;strong&gt;you don&#39;t have to call &lt;code&gt;require(&quot;mason-lspconfig&quot;).setup()&lt;/code&gt; yourself&lt;/strong&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &quot;mason-org/mason-lspconfig.nvim&quot;,
    opts = {},
    dependencies = {
        { &quot;mason-org/mason.nvim&quot;, opts = {} },
        &quot;neovim/nvim-lspconfig&quot;,
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Automatically enable installed servers&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;mason-lspconfig.nvim&lt;/code&gt; will automatically enable (&lt;code&gt;vim.lsp.enable()&lt;/code&gt;) installed servers for you by default.&lt;/p&gt; 
&lt;p&gt;To disable this feature:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason-lspconfig&quot;).setup {
    automatic_enable = false
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To exclude certain servers from being enabled:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason-lspconfig&quot;).setup {
    automatic_enable = {
        exclude = {
            &quot;rust_analyzer&quot;,
            &quot;ts_ls&quot;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, to only enable specific servers:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason-lspconfig&quot;).setup {
    automatic_enable = {
        &quot;lua_ls&quot;,
        &quot;vimls&quot;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;This will only enable servers that are installed via Mason. It will not recognize servers installed elsewhere on your system.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Commands&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;:h mason-lspconfig-commands&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:LspInstall [&amp;lt;server&amp;gt; ...]&lt;/code&gt;: Installs the provided servers. If no server is provided you will be prompted to select a server based on the current buffer&#39;s &lt;code&gt;&amp;amp;filetype&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:LspUninstall &amp;lt;server&amp;gt; ...&lt;/code&gt;: Uninstalls the provided servers.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;:h mason-lspconfig-settings&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;You may optionally configure certain behavior of &lt;code&gt;mason-lspconfig.nvim&lt;/code&gt; when calling the &lt;code&gt;.setup()&lt;/code&gt; function. Refer to the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason-lspconfig.nvim/main/#default-configuration&quot;&gt;default configuration&lt;/a&gt; for a list of all available settings.&lt;/p&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason-lspconfig&quot;).setup {
    ensure_installed = { &quot;lua_ls&quot;, &quot;rust_analyzer&quot; },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Configuration using &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &quot;mason-org/mason-lspconfig.nvim&quot;,
    opts = {
        ensure_installed = { &quot;lua_ls&quot;, &quot;rust_analyzer&quot; },
    },
    dependencies = {
        { &quot;mason-org/mason.nvim&quot;, opts = {} },
        &quot;neovim/nvim-lspconfig&quot;,
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Default configuration&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local DEFAULT_SETTINGS = {
    -- A list of servers to automatically install if they&#39;re not already installed. Example: { &quot;rust_analyzer@nightly&quot;, &quot;lua_ls&quot; }
    ---@type string[]
    ensure_installed = {},

    -- Whether installed servers should automatically be enabled via `:h vim.lsp.enable()`.
    --
    -- To exclude certain servers from being automatically enabled:
    -- ```lua
    --   automatic_enable = {
    --     exclude = { &quot;rust_analyzer&quot;, &quot;ts_ls&quot; }
    --   }
    -- ```
    --
    -- To only enable certain servers to be automatically enabled:
    -- ```lua
    --   automatic_enable = {
    --     &quot;lua_ls&quot;,
    --     &quot;vimls&quot;
    --   }
    -- ```
    ---@type boolean | string[] | { exclude: string[] }
    automatic_enable = true,
}
&lt;/code&gt;&lt;/pre&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/67f05bba9d5c8da5b2be5d5360fc2d88428c9f67a35bb591b15022cf0ab9df2c/mason-org/mason-lspconfig.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>obsidian-nvim/obsidian.nvim</title>
      <link>https://github.com/obsidian-nvim/obsidian.nvim</link>
      <description>&lt;p&gt;Obsidian 🤝 Neovim (actively maintained version)&lt;/p&gt;&lt;hr&gt;&lt;h1 align=&quot;center&quot;&gt;obsidian.nvim&lt;/h1&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/releases/latest&quot;&gt; &lt;img alt=&quot;Latest release&quot; src=&quot;https://img.shields.io/github/v/release/obsidian-nvim/obsidian.nvim?style=for-the-badge&amp;amp;logo=starship&amp;amp;logoColor=D9E0EE&amp;amp;labelColor=302D41&amp;amp;&amp;amp;color=d9b3ff&amp;amp;include_prerelease&amp;amp;sort=semver&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/pulse&quot;&gt; &lt;img alt=&quot;Last commit&quot; src=&quot;https://img.shields.io/github/last-commit/obsidian-nvim/obsidian.nvim?style=for-the-badge&amp;amp;logo=github&amp;amp;logoColor=D9E0EE&amp;amp;labelColor=302D41&amp;amp;color=9fdf9f&quot; /&gt;&lt;/a&gt; 
 &lt;a href=&quot;https://github.com/neovim/neovim/releases/latest&quot;&gt; &lt;img alt=&quot;Latest Neovim&quot; src=&quot;https://img.shields.io/github/v/release/neovim/neovim?style=for-the-badge&amp;amp;logo=neovim&amp;amp;logoColor=D9E0EE&amp;amp;label=Neovim&amp;amp;labelColor=302D41&amp;amp;color=99d6ff&amp;amp;sort=semver&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/releases.atom&quot;&gt; &lt;img src=&quot;https://img.shields.io/badge/rss-F88900?style=for-the-badge&amp;amp;logo=rss&amp;amp;logoColor=white&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;http://www.lua.org/&quot;&gt; &lt;img alt=&quot;Made with Lua&quot; src=&quot;https://img.shields.io/badge/Built%20with%20Lua-grey?style=for-the-badge&amp;amp;logo=lua&amp;amp;logoColor=D9E0EE&amp;amp;label=Lua&amp;amp;labelColor=302D41&amp;amp;color=b3b3ff&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://dotfyle.com/plugins/obsidian-nvim/obsidian.nvim&quot;&gt; &lt;img src=&quot;https://dotfyle.com/plugins/obsidian-nvim/obsidian.nvim/shield?style=for-the-badge&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim?tab=readme-ov-file#-contributing&quot;&gt; &lt;img src=&quot;https://img.shields.io/github/all-contributors/obsidian-nvim/obsidian.nvim?style=for-the-badge&quot; /&gt; &lt;/a&gt; 
 &lt;a href=&quot;https://github.com/orgs/obsidian-nvim/discussions&quot;&gt; &lt;img alt=&quot;GitHub Discussions&quot; src=&quot;https://img.shields.io/github/discussions/obsidian-nvim/obsidian.nvim?style=for-the-badge&quot; /&gt; &lt;/a&gt; 
&lt;/div&gt; 
&lt;hr /&gt; 
&lt;!--markdoc_ignore_end--&gt; 
&lt;p&gt;A &lt;strong&gt;community fork&lt;/strong&gt; of &lt;a href=&quot;https://github.com/epwalsh/obsidian.nvim&quot;&gt;epwalsh/obsidian.nvim&lt;/a&gt;, neovim plugin for &lt;a href=&quot;https://obsidian.md&quot;&gt;Obsidian&lt;/a&gt; vaults.&lt;/p&gt; 
&lt;p&gt;Built for people who love the concept of Obsidian -- a simple, markdown-based notes app -- but love Neovim too much to stand typing characters into anything else.&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;This plugin is not meant to replace Obsidian, but to complement it.&lt;/em&gt; The Obsidian app comes with a mobile app and has a lot of functionality that&#39;s not feasible to implement in Neovim, such as the graph explorer view. That said, this plugin stands on its own as well. You don&#39;t necessarily need to use it alongside the Obsidian app.&lt;/p&gt; 
&lt;h2&gt;🍴 About the fork&lt;/h2&gt; 
&lt;p&gt;The original project has not been actively maintained for quite a while and with bugs, issues and pull requests piling up, people from the community decided to fork and maintain the project.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Discussions are happening in &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/discussions/6&quot;&gt;GitHub Discussions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Sponsor the project at &lt;a href=&quot;https://opencollective.com/nvim-obsidian&quot;&gt;Open Collective&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;To migrate from original repo or older releases, see &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Breaking-Changes&quot;&gt;Breaking changes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;See the documentation: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki&quot;&gt;obsidian.nvim wiki&lt;/a&gt; for documentation of the latest release.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;:Obsidian help&lt;/code&gt; or &lt;code&gt;:Obsidian helpgrep&lt;/code&gt; for documentation update to date with your current installation.&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;:h obsidian-api&lt;/code&gt; for API reference.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;⭐ Features&lt;/h2&gt; 
&lt;p&gt;▶️ &lt;strong&gt;Completion:&lt;/strong&gt; Ultra-fast, asynchronous autocompletion for note references and tags via &lt;a href=&quot;https://github.com/hrsh7th/nvim-cmp&quot;&gt;nvim-cmp&lt;/a&gt; or &lt;a href=&quot;https://github.com/Saghen/blink.cmp&quot;&gt;blink.cmp&lt;/a&gt; (triggered by typing &lt;code&gt;[[&lt;/code&gt; for wiki and markdown links, &lt;code&gt;#&lt;/code&gt; for tags)&lt;/p&gt; 
&lt;p&gt;🏃 &lt;strong&gt;Navigation:&lt;/strong&gt; Navigate throughout your vault via links, backlinks, tags and etc.&lt;/p&gt; 
&lt;p&gt;📷 &lt;strong&gt;Images:&lt;/strong&gt; Paste images into notes.&lt;/p&gt; 
&lt;p&gt;📈 &lt;strong&gt;Status:&lt;/strong&gt; See note status in footer like obsidian app.&lt;/p&gt; 
&lt;p&gt;🔄 &lt;strong&gt;Sync:&lt;/strong&gt; &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Sync&quot;&gt;Sync&lt;/a&gt; support for &lt;a href=&quot;https://obsidian.md/help/sync&quot;&gt;Obsidian Sync&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Keymaps&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;smart_action&lt;/code&gt;, bind to &lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt; will: 
  &lt;ul&gt; 
   &lt;li&gt;If cursor is on a link, follow the link.&lt;/li&gt; 
   &lt;li&gt;If cursor is on a tag, show all notes with that tag in a picker.&lt;/li&gt; 
   &lt;li&gt;If cursor is on a checkbox, toggle the checkbox, see &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Checkbox#create-new&quot;&gt;Checkbox.create_new&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;If cursor is on a heading, cycle the fold of that heading, see &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Folding&quot;&gt;Folding&lt;/a&gt; to set this up.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;nav_link&lt;/code&gt;, bind to &lt;code&gt;[o&lt;/code&gt; and &lt;code&gt;]o&lt;/code&gt; will navigate cursor to next valid link in the buffer.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For other available actions and remapping default ones, see &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Keymaps&quot;&gt;Keymaps&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Commands&lt;/h3&gt; 
&lt;p&gt;There&#39;s one entry point user command for this plugin: &lt;code&gt;Obsidian&lt;/code&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;Obsidian&amp;lt;CR&amp;gt;&lt;/code&gt; (&lt;code&gt;&amp;lt;enter&amp;gt;&lt;/code&gt;) to select sub commands.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;Obsidian &amp;lt;Tab&amp;gt;&lt;/code&gt; to get completion for sub commands.&lt;/li&gt; 
 &lt;li&gt;Sub commands are context sensitive, meaning some actions will only appear when: 
  &lt;ul&gt; 
   &lt;li&gt;you are in a note.&lt;/li&gt; 
   &lt;li&gt;you are in visual mode.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;See &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Commands&quot;&gt;Commands&lt;/a&gt; for more info.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Top level commands&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian check&lt;/code&gt; - check for common issues in your vault and plugin setup&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian dailies [OFFSET ...]&lt;/code&gt; - open a picker list of daily notes 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;:Obsidian dailies -2 1&lt;/code&gt; to list daily notes from 2 days ago until tomorrow&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian help&lt;/code&gt; - find files in the help wiki&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian helpgrep&lt;/code&gt; - grep files in the help wiki&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian new [TITLE]&lt;/code&gt; - create a new note&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian open [QUERY]&lt;/code&gt; - open a note in the Obsidian app 
  &lt;ul&gt; 
   &lt;li&gt;query is used to resolve the note to open by ID, path, or alias, else use current note&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian today [OFFSET_OR_DATE]&lt;/code&gt; - open/create a new daily note 
  &lt;ul&gt; 
   &lt;li&gt;offset is in days, e.g. use &lt;code&gt;:Obsidian today -1&lt;/code&gt; to go to yesterday&#39;s note.&lt;/li&gt; 
   &lt;li&gt;you can also give an argument like &lt;code&gt;3-1&lt;/code&gt;/&lt;code&gt;2026-3-1&lt;/code&gt;, it will parse common date formats and open daily for that specific date.&lt;/li&gt; 
   &lt;li&gt;Unlike &lt;code&gt;:Obsidian yesterday&lt;/code&gt; and &lt;code&gt;:Obsidian tomorrow&lt;/code&gt; this command does not differentiate between weekdays and weekends&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian tomorrow&lt;/code&gt; - open/create the daily note for the next working day&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian yesterday&lt;/code&gt; - open/create the daily note for the previous working day&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian new_from_template [TITLE] [TEMPLATE]&lt;/code&gt; - create a new note with &lt;code&gt;TITLE&lt;/code&gt; from a template with the name &lt;code&gt;TEMPLATE&lt;/code&gt; 
  &lt;ul&gt; 
   &lt;li&gt;both arguments are optional. If not given, the template will be selected from a list using your preferred picker&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian quick_switch&lt;/code&gt; - switch to another note in your vault, searching by its name with a picker&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian search [QUERY]&lt;/code&gt; - search for (or create) notes in your vault using &lt;code&gt;ripgrep&lt;/code&gt; with your preferred picker&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian sync [SUBCMD]&lt;/code&gt; - use &lt;a href=&quot;https://obsidian.md/help/sync/headless&quot;&gt;obsidian-headless&lt;/a&gt; to access official obsidian sync service. Default off, enable with &lt;code&gt;opts.sync.enabled = true&lt;/code&gt;, for more see &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Sync&quot;&gt;Sync&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian tags [TAG ...]&lt;/code&gt; - get a picker list of all occurrences of the given tags&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian unique_note [TITLE]&lt;/code&gt; - create a new note with a unique, timestamp-based ID&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian workspace [NAME]&lt;/code&gt; - switch to another workspace&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Note commands&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian backlinks&lt;/code&gt; - get a picker list of references to the current note 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;grr&lt;/code&gt;/&lt;code&gt;vim.lsp.buf.references&lt;/code&gt; to see references in quickfix list&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian follow_link [STRATEGY]&lt;/code&gt; - follow a note reference under the cursor 
  &lt;ul&gt; 
   &lt;li&gt;available strategies: &lt;code&gt;vsplit, hsplit, vsplit_force, hsplit_force&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian toc&lt;/code&gt; - get a picker list of table of contents for current note&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian template [NAME]&lt;/code&gt; - insert a template from the templates folder, selecting from a list using your preferred picker 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Template&quot;&gt;Template&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian links&lt;/code&gt; - get a picker list of all links in current note&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian paste_img [IMGNAME]&lt;/code&gt; - paste an image from the clipboard into the note at the cursor position by saving it to the vault and adding a markdown image link 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Images#change-image-save-location&quot;&gt;Images&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian rename [NEWNAME]&lt;/code&gt; - rename the note of the current buffer or reference under the cursor, updating all backlinks across the vault 
  &lt;ul&gt; 
   &lt;li&gt;runs &lt;code&gt;:wa&lt;/code&gt; before renaming, and loads every note with backlinks into your buffer-list&lt;/li&gt; 
   &lt;li&gt;after renaming you need to do &lt;code&gt;:wa&lt;/code&gt; again for changes to take effect&lt;/li&gt; 
   &lt;li&gt;alternatively, call &lt;code&gt;vim.lsp.buf.rename&lt;/code&gt; or use &lt;code&gt;grn&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian toggle_checkbox&lt;/code&gt; - cycle through checkbox options&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Visual mode commands&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian extract_note [TITLE]&lt;/code&gt; - extract the visually selected text into a new note and link to it&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian link [QUERY]&lt;/code&gt; - link an inline visual selection of text to a note 
  &lt;ul&gt; 
   &lt;li&gt;query will be used to resolve the note by ID, path, or alias, else query is selected text&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Obsidian link_new [TITLE]&lt;/code&gt; - create a new note and link it to an inline visual selection of text 
  &lt;ul&gt; 
   &lt;li&gt;if title is not given, selected text is used&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📝 Requirements&lt;/h2&gt; 
&lt;h3&gt;System requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim &amp;gt;= 0.10.0&lt;/li&gt; 
 &lt;li&gt;For completion and search features: &lt;a href=&quot;https://github.com/BurntSushi/ripgrep?tab=readme-ov-file#installation&quot;&gt;&lt;code&gt;ripgrep&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Additional system dependencies: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Windows WSL&lt;/strong&gt; users need &lt;a href=&quot;https://gitlab.com/4U6U57/wsl-open&quot;&gt;&lt;code&gt;wsl-open&lt;/code&gt;&lt;/a&gt; for &lt;code&gt;:Obsidian open&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;MacOS&lt;/strong&gt; users need &lt;a href=&quot;https://github.com/jcsalterego/pngpaste&quot;&gt;&lt;code&gt;pngpaste&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;brew install pngpaste&lt;/code&gt;) for &lt;code&gt;:Obsidian paste_img&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt; users need &lt;code&gt;xclip&lt;/code&gt; (X11) or &lt;code&gt;wl-clipboard&lt;/code&gt; (Wayland) for &lt;code&gt;:Obsidian paste_img&lt;/code&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Plugin dependencies&lt;/h3&gt; 
&lt;p&gt;There&#39;s no required dependency, but there are a number of optional dependencies that enhance the obsidian.nvim experience.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Completion:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Saghen/blink.cmp&quot;&gt;blink.cmp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/hrsh7th/nvim-cmp&quot;&gt;nvim-cmp&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Pickers:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim&quot;&gt;telescope.nvim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ibhagwan/fzf-lua&quot;&gt;fzf-lua&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/echasnovski/mini.pick&quot;&gt;mini.pick&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/picker.md&quot;&gt;snacks.picker&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Image viewing:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/image.md&quot;&gt;snacks.image&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;See &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/wiki/Images&quot;&gt;Images&lt;/a&gt; for configuration.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📥 Installation&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;For stability you may want to use latest release, be aware that the README on &lt;code&gt;main&lt;/code&gt; may reference features that haven&#39;t been released yet.&lt;/p&gt; 
 &lt;p&gt;So view the README on the tag for the &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/releases&quot;&gt;latest release&lt;/a&gt; instead of &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;To see your installation status, run &lt;code&gt;:checkhealth obsidian&lt;/code&gt;&lt;/p&gt; 
 &lt;p&gt;To try out or debug this plugin, run &lt;code&gt;nvim -u minimal.lua&lt;/code&gt; to try in a clean environment&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Using &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;&lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;return {
  &quot;obsidian-nvim/obsidian.nvim&quot;,
  version = &quot;*&quot;, -- use latest release, remove to use latest commit
  ---@module &#39;obsidian&#39;
  ---@type obsidian.config
  opts = {
    legacy_commands = false, -- this will be removed in the next major release
    workspaces = {
      {
        name = &quot;personal&quot;,
        path = &quot;~/vaults/personal&quot;,
      },
      {
        name = &quot;work&quot;,
        path = &quot;~/vaults/work&quot;,
      },
    },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Using &lt;a href=&quot;https://github.com/nvim-neorocks/rocks.nvim&quot;&gt;&lt;code&gt;rocks.nvim&lt;/code&gt;&lt;/a&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;:Rocks install obsidian.nvim
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Using &lt;code&gt;vim.pack&lt;/code&gt; (nvim-0.12+)&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.pack.add {
  {
    src = &quot;https://github.com/obsidian-nvim/obsidian.nvim&quot;,
    version = vim.version.range &quot;*&quot;, -- use latest release, remove to use latest commit
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;⚙️ Configuration&lt;/h2&gt; 
&lt;p&gt;To configure obsidian.nvim, pass your custom options that are &lt;em&gt;different&lt;/em&gt; from &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/raw/main/lua/obsidian/config/default.lua&quot;&gt;default options&lt;/a&gt; to &lt;code&gt;require&quot;obsidian&quot;.setup()&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;🤝 Contributing&lt;/h2&gt; 
&lt;p&gt;Please read the &lt;a href=&quot;https://github.com/obsidian-nvim/obsidian.nvim/raw/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING&lt;/a&gt; guide before submitting a pull request.&lt;/p&gt; 
&lt;!--markdoc_ignore_start--&gt; 
&lt;!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --&gt; 
&lt;!-- prettier-ignore-start --&gt; 
&lt;!-- markdownlint-disable --&gt; 
&lt;table&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/neo451&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/111681693?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;neo451&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;neo451&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-neo451&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/sotte&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/79138?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Stefan Otte&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Stefan Otte&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-sotte&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/guspix&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/33852783?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;guspix&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;guspix&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-guspix&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/ffricken&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/44709001?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;ffricken&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;ffricken&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-ffricken&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/ErlanRG&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/32745670?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Erlan Rangel&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Erlan Rangel&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-ErlanRG&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/bosvik&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/132846580?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;bosvik&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;bosvik&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-bosvik&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://alemann.dev&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/58050402?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Jost Alemann&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Jost Alemann&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#doc-ddogfoodd&quot; title=&quot;Documentation&quot;&gt;📖&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/ottersome&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/9465391?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Luis Garcia&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Luis Garcia&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-ottersome&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/jblsp&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/48526917?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Joe&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Joe&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-jblsp&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/horiagug&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/23277222?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Horia Gug&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Horia Gug&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-horiagug&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;http://www.linkedin.com/in/aquilesgomez&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/20983181?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Aquiles Gomez&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Aquiles Gomez&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-aquilesg&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/alvarosevilla95&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/1376447?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Alvaro Sevilla&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Alvaro Sevilla&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-alvarosevilla95&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/sstark&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/837918?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Sebastian Stark&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Sebastian Stark&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-sstark&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/Peeeaje&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/74146834?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Jumpei Yamakawa&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Jumpei Yamakawa&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-Peeeaje&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/marcocofano&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/63420833?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;marcocofano&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;marcocofano&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-marcocofano&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/Jaehaks&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/26200835?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Jaehaks&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Jaehaks&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-Jaehaks&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://www.linkedin.com/in/magnusriga/&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/38915578?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Magnus&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Magnus&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-magnusriga&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/noamsto&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/17932324?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Noam Stolero&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Noam Stolero&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-noamsto&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/aileot&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/46470475?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;aileot&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;aileot&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-aileot&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://ricostacruz.com/&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/74385?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Rico Sta. Cruz&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Rico Sta. Cruz&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#doc-rstacruz&quot; title=&quot;Documentation&quot;&gt;📖&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/hnjae&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/42675338?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;KIM Hyunjae&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;KIM Hyunjae&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-hnjae&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/bburgess19&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/55334507?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Ben Burgess&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Ben Burgess&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-bburgess19&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;http://sebszyller.com&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/11989990?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Sebastian Szyller&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Sebastian Szyller&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-sebszyller&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;http://nobe4.fr&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/2452791?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;nobe4&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;nobe4&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-nobe4&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/Anaritus&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/61704392?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Anaritus&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Anaritus&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-Anaritus&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/mdavis36&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/25917313?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Michael Davis&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Michael Davis&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-mdavis36&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://brianrodri.com&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/5094060?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Brian Rodriguez&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Brian Rodriguez&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-brianrodri&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/carschandler&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/92899389?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;carschandler&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;carschandler&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#doc-carschandler&quot; title=&quot;Documentation&quot;&gt;📖&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://escapewindow.com&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/826343?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Aki Sasaki&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Aki Sasaki&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-escapewindow&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://www.linkedin.com/in/rim18/&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/5428479?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Reinaldo Molina&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Reinaldo Molina&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-tricktux&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/srackham&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/674468?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Stuart Rackham&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Stuart Rackham&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-srackham&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;http://redoxahmii.vercel.app&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/13983258?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Ahmed Mughal&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Ahmed Mughal&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-redoxahmii&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/trash-panda-v91-beta&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/42897550?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;trash-panda-v91-beta&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;trash-panda-v91-beta&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-trash-panda-v91-beta&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;http://westhoffswelt.de&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/160529?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Jakob Westhoff&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Jakob Westhoff&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-jakobwesthoff&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/chrhjoh&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/80620482?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Christian Johansen&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Christian Johansen&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-chrhjoh&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/VVKot&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/24480985?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Volodymyr Kot&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Volodymyr Kot&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-VVKot&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;http://minusfive.com&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/33695?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Jorge Villalobos&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Jorge Villalobos&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-minusfive&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/TakahiroW4047&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/33548194?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Tak&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Tak&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-TakahiroW4047&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://eportfolio.dev&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/98435584?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Emilio Marin&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Emilio Marin&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-e-mar404&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/antigluten&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/53124465?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Vladimir Gusev&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Vladimir Gusev&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-antigluten&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/FirelightFlagboy&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/30697622?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;FirelightFlagboy&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;FirelightFlagboy&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-FirelightFlagboy&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/cameronr&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/38429?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Cameron Ring&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Cameron Ring&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-cameronr&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/balazsmiklos85&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/46478889?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Miklós Balázs&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Miklós Balázs&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-balazsmiklos85&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://shortcuts.codes/&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/20689156?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Clément Vannicatte&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Clément Vannicatte&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#doc-shortcuts&quot; title=&quot;Documentation&quot;&gt;📖&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/Meowtomata&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/95190660?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Anatoliy&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Anatoliy&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-Meowtomata&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/acidsugarx&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/58903233?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;acidsugarx&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;acidsugarx&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-acidsugarx&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://jpmelos.com&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/407407?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;João Sampaio&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;João Sampaio&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-jpmelos&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://sundar.guru&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/76529072?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Sundar Gurumurthy&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Sundar Gurumurthy&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-neuroconvergent&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;http://apalermo01.com/&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/64085614?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;apalermo01&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;apalermo01&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-apalermo01&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/S1RENS&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/57037675?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;S1RENS&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;S1RENS&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-S1RENS&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://caechao.github.io&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/47220170?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;CaeChao&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;CaeChao&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-CaeChao&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/tartansandal&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/3327775?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Kahlil Hodgson&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Kahlil Hodgson&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-tartansandal&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/pR0land&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/16734321?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Frederik Roland Christiansen&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Frederik Roland Christiansen&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-pR0land&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/laughing96&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/67511038?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Lucky Laughing&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Lucky Laughing&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-laughing96&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;http://www.jennius.co.uk&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/724096?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Jorg Jenni&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Jorg Jenni&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-Enceradeira&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/zzhirong&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/627330?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;zzhirong&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;zzhirong&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-zzhirong&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/franco-ruggeri&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/38300576?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;Franco Ruggeri&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;Franco Ruggeri&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-franco-ruggeri&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/JohnTKelly&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/25050248?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;John T. Kelly&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;John T. Kelly&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-JohnTKelly&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
   &lt;td align=&quot;center&quot; valign=&quot;top&quot; width=&quot;14.28%&quot;&gt;&lt;a href=&quot;https://github.com/antinomie8&quot;&gt;&lt;img src=&quot;https://avatars.githubusercontent.com/u/130611615?v=4?s=100&quot; width=&quot;100px;&quot; alt=&quot;antinomie8&quot; /&gt;&lt;br /&gt;&lt;sub&gt;&lt;b&gt;antinomie8&lt;/b&gt;&lt;/sub&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://raw.githubusercontent.com/obsidian-nvim/obsidian.nvim/main/#code-antinomie8&quot; title=&quot;Code&quot;&gt;💻&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!-- markdownlint-restore --&gt; 
&lt;!-- prettier-ignore-end --&gt; 
&lt;!-- ALL-CONTRIBUTORS-LIST:END --&gt; 
&lt;!--markdoc_ignore_end--&gt; 
&lt;h2&gt;❤️ Acknowledgement&lt;/h2&gt; 
&lt;p&gt;We would like to thank &lt;a href=&quot;https://github.com/epwalsh&quot;&gt;epwalsh&lt;/a&gt; for creating this beautiful plugin. If you&#39;re feeling especially generous, &lt;a href=&quot;https://www.buymeacoffee.com/epwalsh&quot;&gt;he still appreciates some coffee funds!&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/924e805f5e3379170c6257e12510f40c6c6e6b8369d87c6fd0c554616e65e693/obsidian-nvim/obsidian.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>olimorris/codecompanion.nvim</title>
      <link>https://github.com/olimorris/codecompanion.nvim</link>
      <description>&lt;p&gt;✨ AI Coding, Vim Style&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://codecompanion.olimorris.dev&quot;&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/64da6a69-a54d-4799-b034-59d9efd27b76&quot; alt=&quot;CodeCompanion.nvim&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/olimorris/codecompanion.nvim/stargazers&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/stars/olimorris/codecompanion.nvim?color=c678dd&amp;amp;logoColor=e06c75&amp;amp;style=for-the-badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/olimorris/codecompanion.nvim/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/actions/workflow/status/olimorris/codecompanion.nvim/ci.yml?branch=main&amp;amp;label=tests&amp;amp;style=for-the-badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/olimorris/codecompanion.nvim/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/olimorris/codecompanion.nvim?style=for-the-badge&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;Code with LLMs and Agents via the &lt;a href=&quot;https://codecompanion.olimorris.dev/getting-started.html&quot;&gt;in-built&lt;/a&gt; adapters, the &lt;a href=&quot;https://codecompanion.olimorris.dev/configuration/adapters#community-adapters&quot;&gt;community&lt;/a&gt; adapters or by &lt;a href=&quot;https://codecompanion.olimorris.dev/extending/adapters.html&quot;&gt;building&lt;/a&gt; your own&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;New features are always announced &lt;a href=&quot;https://github.com/olimorris/codecompanion.nvim/discussions/categories/announcements&quot;&gt;here&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;💜 Sponsors&lt;/h2&gt; 
&lt;p&gt;Thank you to the following people:&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; 
 &lt;!-- sponsors --&gt;&lt;a href=&quot;https://github.com/unicell&quot;&gt;&lt;img src=&quot;https://github.com/unicell.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Qiu Yu&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/jfgordon2&quot;&gt;&lt;img src=&quot;https://github.com/jfgordon2.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Jeff Gordon&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/JuanCrg90&quot;&gt;&lt;img src=&quot;https://github.com/JuanCrg90.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Juan Carlos Ruiz&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/Alexander-Garcia&quot;&gt;&lt;img src=&quot;https://github.com/Alexander-Garcia.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Alexander Garcia&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/LumenYoung&quot;&gt;&lt;img src=&quot;https://github.com/LumenYoung.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Lumen Yang&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/alzwded&quot;&gt;&lt;img src=&quot;https://github.com/alzwded.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Vlad Meșco&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/JPFrancoia&quot;&gt;&lt;img src=&quot;https://github.com/JPFrancoia.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: JPFrancoia&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/pixlmint&quot;&gt;&lt;img src=&quot;https://github.com/pixlmint.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Christian Gröber&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/itskyedo&quot;&gt;&lt;img src=&quot;https://github.com/itskyedo.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Kyedo&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/jsit&quot;&gt;&lt;img src=&quot;https://github.com/jsit.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Jay Sitter&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/harrisoncramer&quot;&gt;&lt;img src=&quot;https://github.com/harrisoncramer.png&quot; width=&quot;60px&quot; alt=&quot;User avatar: Harrison (Harry) Cramer&quot; /&gt;&lt;/a&gt;
 &lt;!-- sponsors --&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;If &lt;i&gt;you&lt;/i&gt; love CodeCompanion and use it in your workflow, please consider &lt;a href=&quot;https://github.com/sponsors/olimorris&quot;&gt;sponsoring me&lt;/a&gt;&lt;/p&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;h2&gt;✨ Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;💬 &lt;a href=&quot;https://github.com/features/copilot&quot;&gt;Copilot Chat&lt;/a&gt; meets &lt;a href=&quot;https://zed.dev/blog/zed-ai&quot;&gt;Zed AI&lt;/a&gt;, in Neovim&lt;/li&gt; 
 &lt;li&gt;⚡ Integrates Neovim with LLMs and Agents in the CLI&lt;/li&gt; 
 &lt;li&gt;🔌 Support for LLMs from Anthropic, Copilot, GitHub Models, DeepSeek, Gemini, Mistral AI, Novita, Ollama, OpenAI, Azure OpenAI, HuggingFace and xAI (or &lt;a href=&quot;https://codecompanion.olimorris.dev/extending/adapters.html&quot;&gt;bring your own&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;🤖 Support for &lt;a href=&quot;https://agentclientprotocol.com/overview/introduction&quot;&gt;Agent Client Protocol&lt;/a&gt;, enabling coding with agents like &lt;a href=&quot;https://docs.augmentcode.com/cli/overview&quot;&gt;Augment Code&lt;/a&gt;, &lt;a href=&quot;https://github.com/docker/cagent&quot;&gt;Cagent&lt;/a&gt; from Docker, &lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code/overview&quot;&gt;Claude Code&lt;/a&gt;, &lt;a href=&quot;https://openai.com/codex&quot;&gt;Codex&lt;/a&gt;, &lt;a href=&quot;https://github.com/features/copilot/cli&quot;&gt;Copilot CLI&lt;/a&gt;, &lt;a href=&quot;https://github.com/google-gemini/gemini-cli&quot;&gt;Gemini CLI&lt;/a&gt;, &lt;a href=&quot;https://block.github.io/goose/&quot;&gt;Goose&lt;/a&gt;, &lt;a href=&quot;https://cursor.com/docs/cli/overview&quot;&gt;Cursor CLI&lt;/a&gt;, &lt;a href=&quot;https://github.com/MoonshotAI/kimi-cli&quot;&gt;Kimi CLI&lt;/a&gt;, &lt;a href=&quot;https://kiro.dev/docs/cli/&quot;&gt;Kiro&lt;/a&gt;, &lt;a href=&quot;https://github.com/mistralai/mistral-vibe&quot;&gt;Mistral Vibe&lt;/a&gt; and &lt;a href=&quot;https://opencode.ai&quot;&gt;OpenCode&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🫶 User contributed and supported &lt;a href=&quot;https://codecompanion.olimorris.dev/configuration/adapters-http#community-adapters&quot;&gt;adapters&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🔋 Support for &lt;a href=&quot;https://codecompanion.olimorris.dev/model-context-protocol#model-context-protocol-mcp-support&quot;&gt;Model Context Protocol (MCP)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;🚀 &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/inline.html&quot;&gt;Inline transformations&lt;/a&gt;, code creation and refactoring&lt;/li&gt; 
 &lt;li&gt;🎨 &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/chat-buffer/editor-context.html&quot;&gt;Editor Context&lt;/a&gt;, &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/chat-buffer/slash-commands.html&quot;&gt;Slash Commands&lt;/a&gt;, &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/chat-buffer/agents-tools&quot;&gt;Agents/Tools&lt;/a&gt; and &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/workflows.html&quot;&gt;Workflows&lt;/a&gt; to improve LLM output&lt;/li&gt; 
 &lt;li&gt;🧠 Support for &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/chat-buffer/rules.html&quot;&gt;rules&lt;/a&gt; files like &lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;.cursor/rules&lt;/code&gt; and your own custom ones&lt;/li&gt; 
 &lt;li&gt;✨ Built-in &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/action-palette.html&quot;&gt;prompt library&lt;/a&gt; for common tasks like advice on LSP errors and code explanations&lt;/li&gt; 
 &lt;li&gt;🏗️ Create your own &lt;a href=&quot;https://codecompanion.olimorris.dev/configuration/prompt-library.html#creating-prompts&quot;&gt;custom prompts&lt;/a&gt;, Editor Context and Slash Commands&lt;/li&gt; 
 &lt;li&gt;📚 Have &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/introduction.html#quickly-accessing-a-chat-buffer&quot;&gt;multiple chats&lt;/a&gt; open at the same time&lt;/li&gt; 
 &lt;li&gt;🎨 Support for &lt;a href=&quot;https://codecompanion.olimorris.dev/usage/chat-buffer/#images-vision&quot;&gt;vision and images&lt;/a&gt; as input&lt;/li&gt; 
 &lt;li&gt;💪 Async execution for fast performance&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;h2&gt;📸 In Action&lt;/h2&gt; 
&lt;div align=&quot;center&quot;&gt; 
 &lt;p&gt; &lt;/p&gt;
 &lt;h3&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/aa109f1d-0ec9-4f08-bd9a-df99da03b9a4&quot;&gt;The Chat Buffer&lt;/a&gt;&lt;/h3&gt; 
 &lt;video controls muted src=&quot;https://github.com/user-attachments/assets/3cc83544-2690-49b5-8be6-51e671db52ef&quot;&gt;&lt;/video&gt; 
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt; &lt;/p&gt;
 &lt;h3&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/362b7cfd-e794-4d9c-9a74-90d5e2a87a32&quot;&gt;Tools + Agentic Workflows&lt;/a&gt;&lt;/h3&gt; 
 &lt;video controls muted src=&quot;https://github.com/user-attachments/assets/59efa262-e768-4f36-9901-9d02b018fcf0&quot;&gt;&lt;/video&gt; 
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt; &lt;/p&gt;
 &lt;h3&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/dcddcb85-cba0-4017-9723-6e6b7f080fee&quot;&gt;Inline Interaction&lt;/a&gt;&lt;/h3&gt; 
 &lt;video controls muted src=&quot;https://github.com/user-attachments/assets/11a42705-d9de-4eb5-a9ab-c8a2772fb4d4&quot;&gt;&lt;/video&gt; 
 &lt;p&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;h2&gt;🚀 Getting Started&lt;/h2&gt; 
&lt;p&gt;Everything you need to know about CodeCompanion (installation, configuration and usage) is within the &lt;a href=&quot;https://codecompanion.olimorris.dev&quot;&gt;docs&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;🧰 Troubleshooting&lt;/h2&gt; 
&lt;p&gt;Before raising an &lt;a href=&quot;https://github.com/olimorris/codecompanion.nvim/issues&quot;&gt;issue&lt;/a&gt;, there are a number of steps you can take to troubleshoot a problem:&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Checkhealth&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Run &lt;code&gt;:checkhealth codecompanion&lt;/code&gt; and check all dependencies are installed correctly. Also take note of the log file path.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Turn on logging&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;Update your config and turn debug logging on:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- lazy.nvim
{
  &quot;olimorris/codecompanion.nvim&quot;,
  dependencies = {
    &quot;nvim-lua/plenary.nvim&quot;,
    &quot;nvim-treesitter/nvim-treesitter&quot;,
  },
  opts = {
    -- NOTE: The log_level is in `opts.opts`
    opts = {
      log_level = &quot;DEBUG&quot;, -- or &quot;TRACE&quot;
    },
  },
},

-- Other package managers
require(&quot;codecompanion&quot;).setup({
  opts = {
    log_level = &quot;DEBUG&quot;, -- or &quot;TRACE&quot;
  }
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;and inspect the log file as per the location from the checkhealth command.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Try with a &lt;code&gt;minimal.lua&lt;/code&gt; file&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;A large proportion of issues which are raised in Neovim plugins are to do with a user&#39;s own config. That&#39;s why I always ask users to fill in a &lt;code&gt;minimal.lua&lt;/code&gt; file when they raise an issue. We can rule out their config being an issue and it allows me to recreate the problem.&lt;/p&gt; 
&lt;p&gt;For this purpose, I have included a &lt;a href=&quot;https://github.com/olimorris/codecompanion.nvim/raw/main/minimal.lua&quot;&gt;minimal.lua&lt;/a&gt; file in the repository for you to test out if you&#39;re facing issues. Simply copy the file, edit it and run neovim with &lt;code&gt;nvim --clean -u minimal.lua&lt;/code&gt;.&lt;/p&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;h2&gt;🎁 Contributing&lt;/h2&gt; 
&lt;p&gt;I am open to contributions but they will be implemented at my discretion. Feel free to open up a discussion before embarking on a PR and please read the &lt;a href=&quot;https://raw.githubusercontent.com/olimorris/codecompanion.nvim/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; guide.&lt;/p&gt; 
&lt;h2&gt;👏 Acknowledgements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/stevearc&quot;&gt;Steven Arcangeli&lt;/a&gt; for his genius creation of the chat buffer and his feedback early on&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/piersolenski/wtf.nvim&quot;&gt;Wtf.nvim&lt;/a&gt; for the LSP assistant action&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/CopilotC-Nvim/CopilotChat.nvim&quot;&gt;CopilotChat.nvim&lt;/a&gt; for the rendering and usability of the chat buffer&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/stevearc/aerial.nvim&quot;&gt;Aerial.nvim&lt;/a&gt; for the Tree-sitter parsing which inspired the symbols Slash Command&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Saghen&quot;&gt;Saghen&lt;/a&gt; for the fantastic docs inspiration from &lt;a href=&quot;https://github.com/Saghen/blink.cmp&quot;&gt;blink.cmp&lt;/a&gt; and continued PRs to the project&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/catwell&quot;&gt;Catwell&lt;/a&gt; for the &lt;a href=&quot;https://github.com/catwell/cw-lua/raw/master/deque/deque.lua&quot;&gt;queue&lt;/a&gt; inspiration that I use to stack agents and tools&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/bassamsdata&quot;&gt;bassamsdata&lt;/a&gt; for the amazing &lt;code&gt;insert_edit_into_file&lt;/code&gt; tool (the list is endless) and ongoing contributions to this project&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ravitemer&quot;&gt;ravitemer&lt;/a&gt; for the fantastic extensions API&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Davidyz&quot;&gt;Davidyz&lt;/a&gt; for his continued, excellent contributions that keep CodeCompanion going&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/conradirwin&quot;&gt;Conrad Irwin&lt;/a&gt;, &lt;a href=&quot;https://github.com/agu-z&quot;&gt;Agus Zubiaga&lt;/a&gt; and Morgan Krey from &lt;a href=&quot;https://github.com/zed-industries&quot;&gt;Zed Industries&lt;/a&gt; for their support in implementing &lt;a href=&quot;https://agentclientprotocol.com&quot;&gt;ACP&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/sidekick.nvim&quot;&gt;Sidekick.nvim&lt;/a&gt; for the diff and terminal input inspiration&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- panvimdoc-ignore-end --&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/736363011/41e28b3c-3e8b-404e-a268-c87785cc5c19" medium="image" />
      
    </item>
    
    <item>
      <title>stevearc/oil.nvim</title>
      <link>https://github.com/stevearc/oil.nvim</link>
      <description>&lt;p&gt;Neovim file explorer: edit your filesystem like a buffer&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;oil.nvim&lt;/h1&gt; 
&lt;p&gt;A &lt;a href=&quot;https://github.com/tpope/vim-vinegar&quot;&gt;vim-vinegar&lt;/a&gt; like file explorer that lets you edit your filesystem like a normal Neovim buffer.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://user-images.githubusercontent.com/506791/209727111-6b4a11f4-634a-4efa-9461-80e9717cea94.mp4&quot;&gt;https://user-images.githubusercontent.com/506791/209727111-6b4a11f4-634a-4efa-9461-80e9717cea94.mp4&lt;/a&gt;&lt;/p&gt; 
&lt;!-- TOC --&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#requirements&quot;&gt;Requirements&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#installation&quot;&gt;Installation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#quick-start&quot;&gt;Quick start&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#options&quot;&gt;Options&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#adapters&quot;&gt;Adapters&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#recipes&quot;&gt;Recipes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#third-party-extensions&quot;&gt;Third-party extensions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#api&quot;&gt;API&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/#faq&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- /TOC --&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim 0.8+&lt;/li&gt; 
 &lt;li&gt;Icon provider plugin (optional) 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-mini/mini.nvim/raw/main/readmes/mini-icons.md&quot;&gt;mini.icons&lt;/a&gt; for file and folder icons&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;nvim-web-devicons&lt;/a&gt; for file icons&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;oil.nvim supports all the usual plugin managers&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;lazy.nvim&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &#39;stevearc/oil.nvim&#39;,
  ---@module &#39;oil&#39;
  ---@type oil.SetupOpts
  opts = {},
  -- Optional dependencies
  dependencies = { { &quot;nvim-mini/mini.icons&quot;, opts = {} } },
  -- dependencies = { &quot;nvim-tree/nvim-web-devicons&quot; }, -- use if you prefer nvim-web-devicons
  -- Lazy loading is not recommended because it is very tricky to make it work correctly in all situations.
  lazy = false,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Packer&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;packer&quot;).startup(function()
  use({
    &quot;stevearc/oil.nvim&quot;,
    config = function()
      require(&quot;oil&quot;).setup()
    end,
  })
end)
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Paq&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;paq&quot;)({
  { &quot;stevearc/oil.nvim&quot; },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;vim-plug&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;Plug &#39;stevearc/oil.nvim&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;dein&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;call dein#add(&#39;stevearc/oil.nvim&#39;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Pathogen&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone --depth=1 https://github.com/stevearc/oil.nvim.git ~/.vim/bundle/
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Neovim native package&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone --depth=1 https://github.com/stevearc/oil.nvim.git \
  &quot;${XDG_DATA_HOME:-$HOME/.local/share}&quot;/nvim/site/pack/oil/start/oil.nvim
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Quick start&lt;/h2&gt; 
&lt;p&gt;Add the following to your init.lua&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;oil&quot;).setup()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then open a directory with &lt;code&gt;nvim .&lt;/code&gt;. Use &lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt; to open a file/directory, and &lt;code&gt;-&lt;/code&gt; to go up a directory. Otherwise, just treat it like a normal buffer and make changes as you like. Remember to &lt;code&gt;:w&lt;/code&gt; when you&#39;re done to actually perform the actions.&lt;/p&gt; 
&lt;p&gt;If you want to mimic the &lt;code&gt;vim-vinegar&lt;/code&gt; method of navigating to the parent directory of a file, add this keymap:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.keymap.set(&quot;n&quot;, &quot;-&quot;, &quot;&amp;lt;CMD&amp;gt;Oil&amp;lt;CR&amp;gt;&quot;, { desc = &quot;Open parent directory&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can open a directory with &lt;code&gt;:edit &amp;lt;path&amp;gt;&lt;/code&gt; or &lt;code&gt;:Oil &amp;lt;path&amp;gt;&lt;/code&gt;. To open oil in a floating window, do &lt;code&gt;:Oil --float &amp;lt;path&amp;gt;&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Options&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;oil&quot;).setup({
  -- Oil will take over directory buffers (e.g. `vim .` or `:e src/`)
  -- Set to false if you want some other plugin (e.g. netrw) to open when you edit directories.
  default_file_explorer = true,
  -- Id is automatically added at the beginning, and name at the end
  -- See :help oil-columns
  columns = {
    &quot;icon&quot;,
    -- &quot;permissions&quot;,
    -- &quot;size&quot;,
    -- &quot;mtime&quot;,
  },
  -- Buffer-local options to use for oil buffers
  buf_options = {
    buflisted = false,
    bufhidden = &quot;hide&quot;,
  },
  -- Window-local options to use for oil buffers
  win_options = {
    wrap = false,
    signcolumn = &quot;no&quot;,
    cursorcolumn = false,
    foldcolumn = &quot;0&quot;,
    spell = false,
    list = false,
    conceallevel = 3,
    concealcursor = &quot;nvic&quot;,
  },
  -- Send deleted files to the trash instead of permanently deleting them (:help oil-trash)
  delete_to_trash = false,
  -- Skip the confirmation popup for simple operations (:help oil.skip_confirm_for_simple_edits)
  skip_confirm_for_simple_edits = false,
  -- Selecting a new/moved/renamed file or directory will prompt you to save changes first
  -- (:help prompt_save_on_select_new_entry)
  prompt_save_on_select_new_entry = true,
  -- Oil will automatically delete hidden buffers after this delay
  -- You can set the delay to false to disable cleanup entirely
  -- Note that the cleanup process only starts when none of the oil buffers are currently displayed
  cleanup_delay_ms = 2000,
  lsp_file_methods = {
    -- Enable or disable LSP file operations
    enabled = true,
    -- Time to wait for LSP file operations to complete before skipping
    timeout_ms = 1000,
    -- Set to true to autosave buffers that are updated with LSP willRenameFiles
    -- Set to &quot;unmodified&quot; to only save unmodified buffers
    autosave_changes = false,
  },
  -- Constrain the cursor to the editable parts of the oil buffer
  -- Set to `false` to disable, or &quot;name&quot; to keep it on the file names
  constrain_cursor = &quot;editable&quot;,
  -- Set to true to watch the filesystem for changes and reload oil
  watch_for_changes = false,
  -- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap
  -- options with a `callback` (e.g. { callback = function() ... end, desc = &quot;&quot;, mode = &quot;n&quot; })
  -- Additionally, if it is a string that matches &quot;actions.&amp;lt;name&amp;gt;&quot;,
  -- it will use the mapping at require(&quot;oil.actions&quot;).&amp;lt;name&amp;gt;
  -- Set to `false` to remove a keymap
  -- See :help oil-actions for a list of all available actions
  keymaps = {
    [&quot;g?&quot;] = { &quot;actions.show_help&quot;, mode = &quot;n&quot; },
    [&quot;&amp;lt;CR&amp;gt;&quot;] = &quot;actions.select&quot;,
    [&quot;&amp;lt;C-s&amp;gt;&quot;] = { &quot;actions.select&quot;, opts = { vertical = true } },
    [&quot;&amp;lt;C-h&amp;gt;&quot;] = { &quot;actions.select&quot;, opts = { horizontal = true } },
    [&quot;&amp;lt;C-t&amp;gt;&quot;] = { &quot;actions.select&quot;, opts = { tab = true } },
    [&quot;&amp;lt;C-p&amp;gt;&quot;] = &quot;actions.preview&quot;,
    [&quot;&amp;lt;C-c&amp;gt;&quot;] = { &quot;actions.close&quot;, mode = &quot;n&quot; },
    [&quot;&amp;lt;C-l&amp;gt;&quot;] = &quot;actions.refresh&quot;,
    [&quot;-&quot;] = { &quot;actions.parent&quot;, mode = &quot;n&quot; },
    [&quot;_&quot;] = { &quot;actions.open_cwd&quot;, mode = &quot;n&quot; },
    [&quot;`&quot;] = { &quot;actions.cd&quot;, mode = &quot;n&quot; },
    [&quot;g~&quot;] = { &quot;actions.cd&quot;, opts = { scope = &quot;tab&quot; }, mode = &quot;n&quot; },
    [&quot;gs&quot;] = { &quot;actions.change_sort&quot;, mode = &quot;n&quot; },
    [&quot;gx&quot;] = &quot;actions.open_external&quot;,
    [&quot;g.&quot;] = { &quot;actions.toggle_hidden&quot;, mode = &quot;n&quot; },
    [&quot;g\\&quot;] = { &quot;actions.toggle_trash&quot;, mode = &quot;n&quot; },
  },
  -- Set to false to disable all of the above keymaps
  use_default_keymaps = true,
  view_options = {
    -- Show files and directories that start with &quot;.&quot;
    show_hidden = false,
    -- This function defines what is considered a &quot;hidden&quot; file
    is_hidden_file = function(name, bufnr)
      local m = name:match(&quot;^%.&quot;)
      return m ~= nil
    end,
    -- This function defines what will never be shown, even when `show_hidden` is set
    is_always_hidden = function(name, bufnr)
      return false
    end,
    -- Sort file names with numbers in a more intuitive order for humans.
    -- Can be &quot;fast&quot;, true, or false. &quot;fast&quot; will turn it off for large directories.
    natural_order = &quot;fast&quot;,
    -- Sort file and directory names case insensitive
    case_insensitive = false,
    sort = {
      -- sort order can be &quot;asc&quot; or &quot;desc&quot;
      -- see :help oil-columns to see which columns are sortable
      { &quot;type&quot;, &quot;asc&quot; },
      { &quot;name&quot;, &quot;asc&quot; },
    },
    -- Customize the highlight group for the file name
    highlight_filename = function(entry, is_hidden, is_link_target, is_link_orphan)
      return nil
    end,
  },
  -- Extra arguments to pass to SCP when moving/copying files over SSH
  extra_scp_args = {},
  -- Extra arguments to pass to aws s3 when creating/deleting/moving/copying files using aws s3
  extra_s3_args = {},
  -- EXPERIMENTAL support for performing file operations with git
  git = {
    -- Return true to automatically git add/mv/rm files
    add = function(path)
      return false
    end,
    mv = function(src_path, dest_path)
      return false
    end,
    rm = function(path)
      return false
    end,
  },
  -- Configuration for the floating window in oil.open_float
  float = {
    -- Padding around the floating window
    padding = 2,
    -- max_width and max_height can be integers or a float between 0 and 1 (e.g. 0.4 for 40%)
    max_width = 0,
    max_height = 0,
    border = nil,
    win_options = {
      winblend = 0,
    },
    -- optionally override the oil buffers window title with custom function: fun(winid: integer): string
    get_win_title = nil,
    -- preview_split: Split direction: &quot;auto&quot;, &quot;left&quot;, &quot;right&quot;, &quot;above&quot;, &quot;below&quot;.
    preview_split = &quot;auto&quot;,
    -- This is the config that will be passed to nvim_open_win.
    -- Change values here to customize the layout
    override = function(conf)
      return conf
    end,
  },
  -- Configuration for the file preview window
  preview_win = {
    -- Whether the preview window is automatically updated when the cursor is moved
    update_on_cursor_moved = true,
    -- How to open the preview window &quot;load&quot;|&quot;scratch&quot;|&quot;fast_scratch&quot;
    preview_method = &quot;fast_scratch&quot;,
    -- A function that returns true to disable preview on a file e.g. to avoid lag
    disable_preview = function(filename)
      return false
    end,
    -- Window-local options to use for preview window buffers
    win_options = {},
  },
  -- Configuration for the floating action confirmation window
  confirmation = {
    -- Width dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%)
    -- min_width and max_width can be a single value or a list of mixed integer/float types.
    -- max_width = {100, 0.8} means &quot;the lesser of 100 columns or 80% of total&quot;
    max_width = 0.9,
    -- min_width = {40, 0.4} means &quot;the greater of 40 columns or 40% of total&quot;
    min_width = { 40, 0.4 },
    -- optionally define an integer/float for the exact width of the preview window
    width = nil,
    -- Height dimensions can be integers or a float between 0 and 1 (e.g. 0.4 for 40%)
    -- min_height and max_height can be a single value or a list of mixed integer/float types.
    -- max_height = {80, 0.9} means &quot;the lesser of 80 columns or 90% of total&quot;
    max_height = 0.9,
    -- min_height = {5, 0.1} means &quot;the greater of 5 columns or 10% of total&quot;
    min_height = { 5, 0.1 },
    -- optionally define an integer/float for the exact height of the preview window
    height = nil,
    border = nil,
    win_options = {
      winblend = 0,
    },
  },
  -- Configuration for the floating progress window
  progress = {
    max_width = 0.9,
    min_width = { 40, 0.4 },
    width = nil,
    max_height = { 10, 0.9 },
    min_height = { 5, 0.1 },
    height = nil,
    border = nil,
    minimized_border = &quot;none&quot;,
    win_options = {
      winblend = 0,
    },
  },
  -- Configuration for the floating SSH window
  ssh = {
    border = nil,
  },
  -- Configuration for the floating keymaps help window
  keymaps_help = {
    border = nil,
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Adapters&lt;/h2&gt; 
&lt;p&gt;Oil does all of its filesystem interaction through an &lt;em&gt;adapter&lt;/em&gt; abstraction. In practice, this means that oil can be used to view and modify files in more places than just the local filesystem, so long as the destination has an adapter implementation.&lt;/p&gt; 
&lt;p&gt;Note that file operations work &lt;em&gt;across adapters&lt;/em&gt;. This means that you can use oil to copy files to/from a remote server using the ssh adapter just as easily as you can copy files from one directory to another on your local machine.&lt;/p&gt; 
&lt;h3&gt;SSH&lt;/h3&gt; 
&lt;p&gt;This adapter allows you to browse files over ssh, much like netrw. To use it, simply open a buffer using the following name template:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;nvim oil-ssh://[username@]hostname[:port]/[path]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This may look familiar. In fact, this is the same url format that netrw uses.&lt;/p&gt; 
&lt;p&gt;Note that at the moment the ssh adapter does not support Windows machines, and it requires the server to have a &lt;code&gt;/bin/sh&lt;/code&gt; binary as well as standard unix commands (&lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt;, &lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;mkdir&lt;/code&gt;, &lt;code&gt;chmod&lt;/code&gt;, &lt;code&gt;cp&lt;/code&gt;, &lt;code&gt;touch&lt;/code&gt;, &lt;code&gt;ln&lt;/code&gt;, &lt;code&gt;echo&lt;/code&gt;).&lt;/p&gt; 
&lt;h3&gt;S3&lt;/h3&gt; 
&lt;p&gt;This adapter allows you to browse files stored in aws s3. To use it, make sure &lt;code&gt;aws&lt;/code&gt; is setup correctly and then simply open a buffer using the following name template:&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;nvim oil-s3://[bucket]/[path]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Note that older versions of Neovim don&#39;t support numbers in the url, so for Neovim 0.11 and older the url starts with &lt;code&gt;oil-sss&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Recipes&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/recipes.md#toggle-file-detail-view&quot;&gt;Toggle file detail view&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/recipes.md#show-cwd-in-the-winbar&quot;&gt;Show CWD in the winbar&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/recipes.md#hide-gitignored-files-and-show-git-tracked-hidden-files&quot;&gt;Hide gitignored files and show git tracked hidden files&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Third-party extensions&lt;/h2&gt; 
&lt;p&gt;These are plugins maintained by other authors that extend the functionality of oil.nvim.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/refractalize/oil-git-status.nvim&quot;&gt;oil-git-status.nvim&lt;/a&gt; - Shows git status of files in statuscolumn&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/benomahony/oil-git.nvim&quot;&gt;oil-git.nvim&lt;/a&gt; - Shows git status of files with colour and symbols&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/malewicz1337/oil-git.nvim&quot;&gt;oil-git.nvim&lt;/a&gt; - Async git status integration with directory support&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/JezerM/oil-lsp-diagnostics.nvim&quot;&gt;oil-lsp-diagnostics.nvim&lt;/a&gt; - Shows LSP diagnostics indicator as virtual text&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;API&lt;/h2&gt; 
&lt;!-- API --&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#get_entry_on_linebufnr-lnum&quot;&gt;get_entry_on_line(bufnr, lnum)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#get_cursor_entry&quot;&gt;get_cursor_entry()&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#discard_all_changes&quot;&gt;discard_all_changes()&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#set_columnscols&quot;&gt;set_columns(cols)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#set_sortsort&quot;&gt;set_sort(sort)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#set_is_hidden_fileis_hidden_file&quot;&gt;set_is_hidden_file(is_hidden_file)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#toggle_hidden&quot;&gt;toggle_hidden()&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#get_current_dirbufnr&quot;&gt;get_current_dir(bufnr)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#open_floatdir-opts-cb&quot;&gt;open_float(dir, opts, cb)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#toggle_floatdir-opts-cb&quot;&gt;toggle_float(dir, opts, cb)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#opendir-opts-cb&quot;&gt;open(dir, opts, cb)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#closeopts&quot;&gt;close(opts)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#open_previewopts-callback&quot;&gt;open_preview(opts, callback)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#selectopts-callback&quot;&gt;select(opts, callback)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#saveopts-cb&quot;&gt;save(opts, cb)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/oil.nvim/master/doc/api.md#setupopts&quot;&gt;setup(opts)&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- /API --&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Q: Why &quot;oil&quot;&lt;/strong&gt;?&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; From the &lt;a href=&quot;https://github.com/tpope/vim-vinegar&quot;&gt;vim-vinegar&lt;/a&gt; README, a quote by Drew Neil:&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;Split windows and the project drawer go together like oil and vinegar&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Vinegar was taken. Let&#39;s be oil. Plus, I think it&#39;s pretty slick 😉&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Q: Why would I want to use oil vs any other plugin?&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;You like to use a netrw-like view to browse directories (as opposed to a file tree)&lt;/li&gt; 
 &lt;li&gt;AND you want to be able to edit your filesystem like a buffer&lt;/li&gt; 
 &lt;li&gt;AND you want to perform cross-directory actions. AFAIK there is no other plugin that does this. (update: &lt;a href=&quot;https://github.com/nvim-mini/mini.nvim/raw/main/readmes/mini-files.md&quot;&gt;mini.files&lt;/a&gt; also offers this functionality)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If you don&#39;t need those features specifically, check out the alternatives listed below&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Q: Why write another plugin yourself instead of adding functionality to one that already exists&lt;/strong&gt;?&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; Because I am a &lt;em&gt;maniac control freak&lt;/em&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Q: Can oil display files as a tree view&lt;/strong&gt;?&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt; No. A tree view would require a completely different methodology, necessitating a complete rewrite. I don&#39;t use tree views, so I will leave this as a plugin for someone else to write.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Q: What are some alternatives?&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;A:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-mini/mini.nvim/raw/main/readmes/mini-files.md&quot;&gt;mini.files&lt;/a&gt;: A newer plugin that also supports cross-directory filesystem-as-buffer edits. It utilizes a unique column view.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tpope/vim-vinegar&quot;&gt;vim-vinegar&lt;/a&gt;: The granddaddy. This made me fall in love with single-directory file browsing. I stopped using it when I encountered netrw bugs and performance issues.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Shougo/defx.nvim&quot;&gt;defx.nvim&lt;/a&gt;: What I switched to after vim-vinegar. Much more flexible and performant, but requires python and the API is a little hard to work with.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/elihunter173/dirbuf.nvim&quot;&gt;dirbuf.nvim&lt;/a&gt;: The first plugin I encountered that let you edit the filesystem like a buffer. Never used it because it &lt;a href=&quot;https://github.com/elihunter173/dirbuf.nvim/issues/7&quot;&gt;can&#39;t do cross-directory edits&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tamago324/lir.nvim&quot;&gt;lir.nvim&lt;/a&gt;: What I used prior to writing this plugin. Similar to vim-vinegar, but with better Neovim integration (floating windows, lua API).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/justinmk/vim-dirvish&quot;&gt;vim-dirvish&lt;/a&gt;: Never personally used, but well-established, stable, simple directory browser.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/trapd00r/vidir&quot;&gt;vidir&lt;/a&gt;: Never personally used, but might be the first plugin to come up with the idea of editing a directory like a buffer.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;There&#39;s also file trees like &lt;a href=&quot;https://github.com/nvim-neo-tree/neo-tree.nvim&quot;&gt;neo-tree&lt;/a&gt; and &lt;a href=&quot;https://github.com/nvim-tree/nvim-tree.lua&quot;&gt;nvim-tree&lt;/a&gt;, but they&#39;re really a different category entirely.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/4684d4e31a6ef0061564c55ece306212abb5c5c404f34469c6f76e90a02e3ec4/stevearc/oil.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>nvim-tree/nvim-web-devicons</title>
      <link>https://github.com/nvim-tree/nvim-web-devicons</link>
      <description>&lt;p&gt;Provides Nerd Font icons (glyphs) for use by neovim plugins&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Nvim-web-devicons&lt;/h1&gt; 
&lt;p&gt;Provides &lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Font&lt;/a&gt; &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-tree/nvim-web-devicons/master/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; icons (glyphs) for use by &lt;em&gt;Neovim&lt;/em&gt; plugins:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Icons by: 
  &lt;ul&gt; 
   &lt;li&gt;Extension&lt;/li&gt; 
   &lt;li&gt;Full name&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Colours&lt;/li&gt; 
 &lt;li&gt;Light and dark variants&lt;/li&gt; 
 &lt;li&gt;API to modify/add icons&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;A &lt;code&gt;lua&lt;/code&gt; fork of &lt;a href=&quot;https://github.com/ryanoasis/vim-devicons&quot;&gt;vim-devicons&lt;/a&gt;.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;nvim-web-devicons adds new icons as they are introduced to Nerd Fonts. Please ensure that you are using the latest version of the font as newly introduced icons may display incorrectly or as an &quot;unknown character&quot;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;Nerd fonts moved some symbols with version 3.0. Version 2.3 is meant for transition, supporting both version 2 and version 3 icons. Nvim-web-devicons requires version 2.3 or above to work properly. If you are unable to update please use your plugin manager to pin version of nvim-web-dev icons to &lt;code&gt;nerd-v2-compat&lt;/code&gt; tag.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/neovim/neovim/wiki/Installing-Neovim&quot;&gt;neovim &amp;gt;=0.7.0&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;A Patched Nerd Font&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;Plug &#39;nvim-tree/nvim-web-devicons&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or with &lt;a href=&quot;https://github.com/wbthomason/packer.nvim&quot;&gt;packer.nvim&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;use &#39;nvim-tree/nvim-web-devicons&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or with &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{ &quot;nvim-tree/nvim-web-devicons&quot;, opts = {} },
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://luarocks.org/modules/nvim-tree/nvim-web-devicons&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/nvim-tree/nvim-web-devicons?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Additional Icons&lt;/h2&gt; 
&lt;p&gt;Additional icons may be added for icons that are present in Nerd Fonts: use the &lt;a href=&quot;https://www.nerdfonts.com/cheat-sheet&quot;&gt;Cheat Sheet&lt;/a&gt; search for available icons.&lt;/p&gt; 
&lt;p&gt;PRs are always welcome! Please see &lt;a href=&quot;https://raw.githubusercontent.com/nvim-tree/nvim-web-devicons/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING&lt;/a&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;If the icon you need is not available on Nerd Fonts you first need to make a PR to a project that feeds glyphs to Nerd Fonts. Probably the most adequate project to contribute is &lt;a href=&quot;https://github.com/devicons/devicon&quot;&gt;https://github.com/devicons/devicon&lt;/a&gt;. Take into account that &lt;strong&gt;months&lt;/strong&gt; can pass before the icon is available on the Nerd Fonts project, once there feel free to open a PR on this project, see &lt;a href=&quot;https://raw.githubusercontent.com/nvim-tree/nvim-web-devicons/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;h3&gt;Viewing&lt;/h3&gt; 
&lt;p&gt;Run &lt;code&gt;:NvimWebDeviconsHiTest&lt;/code&gt; to see all icons and their highlighting.&lt;/p&gt; 
&lt;h3&gt;Variants&lt;/h3&gt; 
&lt;p&gt;Light or dark color variants of the icons depend on &lt;code&gt;&amp;amp;background&lt;/code&gt;.&lt;br /&gt; The variant can also be set manually in &lt;code&gt;setup&lt;/code&gt; with the &lt;code&gt;variant&lt;/code&gt; option.&lt;/p&gt; 
&lt;p&gt;The variant is updated:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;on &lt;code&gt;OptionSet&lt;/code&gt; event for &lt;code&gt;background&lt;/code&gt;, or&lt;/li&gt; 
 &lt;li&gt;after explicitly calling &lt;code&gt;require(&quot;nvim-web-devicons&quot;).refresh()&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;However, be advised that the plugin using nvim-web-devicons may have cached the icons.&lt;/p&gt; 
&lt;h3&gt;Case Sensitivity&lt;/h3&gt; 
&lt;p&gt;Filename icons e.g. &lt;code&gt;&quot;Dockerfile&quot;&lt;/code&gt; are case insensitively matched.&lt;/p&gt; 
&lt;p&gt;Extension icons e.g. &lt;code&gt;&quot;lua&quot;&lt;/code&gt; are case sensitive.&lt;/p&gt; 
&lt;h3&gt;Setup&lt;/h3&gt; 
&lt;p&gt;This adds all the highlight groups for the devicons i.e. it calls &lt;code&gt;vim.api.nvim_set_hl&lt;/code&gt; for all icons this might need to be re-called in a &lt;code&gt;Colorscheme&lt;/code&gt; to re-apply cleared highlights if the color scheme changes&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require&#39;nvim-web-devicons&#39;.setup {
 -- your personal icons can go here (to override)
 -- you can specify color or cterm_color instead of specifying both of them
 -- DevIcon will be appended to `name`
 override = {
  zsh = {
    icon = &quot;&quot;,
    color = &quot;#428850&quot;,
    cterm_color = &quot;65&quot;,
    name = &quot;Zsh&quot;
  }
 };
 -- globally enable different highlight colors per icon (default to true)
 -- if set to false all icons will have the default icon&#39;s color
 color_icons = true;
 -- globally enable default icons (default to false)
 -- will get overriden by `get_icons` option
 default = true;
 -- globally enable &quot;strict&quot; selection of icons - icon will be looked up in
 -- different tables, first by filename, and if not found by extension; this
 -- prevents cases when file doesn&#39;t have any extension but still gets some icon
 -- because its name happened to match some extension (default to false)
 strict = true;
 -- set the light or dark variant manually, instead of relying on `background`
 -- (default to nil)
 variant = &quot;light|dark&quot;;
 -- override blend value for all highlight groups :h highlight-blend.
 -- setting this value to `0` will make all icons opaque. in practice this means
 -- that icons width will not be affected by pumblend option (see issue #608)
 -- (default to nil)
 blend = 0;
 -- same as `override` but specifically for overrides by filename
 -- takes effect when `strict` is true
 override_by_filename = {
  [&quot;.gitignore&quot;] = {
    icon = &quot;&quot;,
    color = &quot;#f1502f&quot;,
    name = &quot;Gitignore&quot;
  }
 };
 -- same as `override` but specifically for overrides by extension
 -- takes effect when `strict` is true
 override_by_extension = {
  [&quot;log&quot;] = {
    icon = &quot;&quot;,
    color = &quot;#81e043&quot;,
    name = &quot;Log&quot;
  }
 };
 -- same as `override` but specifically for operating system
 -- takes effect when `strict` is true
 override_by_operating_system = {
  [&quot;apple&quot;] = {
    icon = &quot;&quot;,
    color = &quot;#A2AAAD&quot;,
    cterm_color = &quot;248&quot;,
    name = &quot;Apple&quot;,
  },
 };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Get Icon&lt;/h3&gt; 
&lt;p&gt;Get the icon for a given file by passing in the &lt;code&gt;name&lt;/code&gt;, the &lt;code&gt;extension&lt;/code&gt; and an &lt;em&gt;optional&lt;/em&gt; options &lt;code&gt;table&lt;/code&gt;. The name is passed in to check for an exact match e.g. &lt;code&gt;.bashrc&lt;/code&gt; if there is no exact name match the extension is used. Calls &lt;code&gt;.setup()&lt;/code&gt; if it hasn&#39;t already ran.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require&#39;nvim-web-devicons&#39;.get_icon(filename, extension, options)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The optional &lt;code&gt;options&lt;/code&gt; argument can used to change how the plugin works the keys include &lt;code&gt;default = &amp;lt;boolean&amp;gt;&lt;/code&gt; and &lt;code&gt;strict = &amp;lt;boolean&amp;gt;&lt;/code&gt;. If the default key is set to true this function will return a default if there is no matching icon. If the strict key is set to true this function will lookup icon specifically by filename, and if not found then specifically by extension, and fallback to default icon if default key is set to true. e.g.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require&#39;nvim-web-devicons&#39;.get_icon(filename, extension, { default = true })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can check if the setup function was already called with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require&#39;nvim-web-devicons&#39;.has_loaded()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Get icon and color code&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;get_icon_color&lt;/code&gt; differs from &lt;code&gt;get_icon&lt;/code&gt; only in the second return value. &lt;code&gt;get_icon_cterm_color&lt;/code&gt; returns cterm color instead of gui color &lt;code&gt;get_icon&lt;/code&gt; returns icon and highlight name. If you want to get color code, you can use this function.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local icon, color = require&#39;nvim-web-devicons&#39;.get_icon_color(&quot;init.lua&quot;, &quot;lua&quot;)
assert(icon == &quot;&quot;)
assert(color == &quot;#51a0cf&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Get all icons&lt;/h3&gt; 
&lt;p&gt;It is possible to get all of the registered icons with the &lt;code&gt;get_icons()&lt;/code&gt; function:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require&#39;nvim-web-devicons&#39;.get_icons()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This can be useful for debugging purposes or for creating custom highlights for each icon.&lt;/p&gt; 
&lt;p&gt;Mapped categories can be fetched via:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require&#39;nvim-web-devicons&#39;.get_icons_by_filename()
require&#39;nvim-web-devicons&#39;.get_icons_by_extension()
require&#39;nvim-web-devicons&#39;.get_icons_by_operating_system()
require&#39;nvim-web-devicons&#39;.get_icons_by_desktop_environment()
require&#39;nvim-web-devicons&#39;.get_icons_by_window_manager()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Set an icon&lt;/h3&gt; 
&lt;p&gt;You can override individual icons with the &lt;code&gt;set_icon({...})&lt;/code&gt; function:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;nvim-web-devicons&quot;).set_icon {
  zsh = {
    icon = &quot;&quot;,
    color = &quot;#428850&quot;,
    cterm_color = &quot;65&quot;,
    name = &quot;Zsh&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can override the default icon with the &lt;code&gt;set_default_icon(icon, color, cterm_color)&lt;/code&gt; function:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;nvim-web-devicons&quot;).set_default_icon(&#39;&#39;, &#39;#6d8086&#39;, 65)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Getting and setting icons by filetype&lt;/h3&gt; 
&lt;p&gt;You can get the icon and colors associated with a filetype using the &lt;code&gt;by_filetype&lt;/code&gt; functions:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;nvim-web-devicons&quot;).get_icon_by_filetype(filetype, opts)
require(&quot;nvim-web-devicons&quot;).get_icon_colors_by_filetype(filetype, opts)
require(&quot;nvim-web-devicons&quot;).get_icon_color_by_filetype(filetype, opts)
require(&quot;nvim-web-devicons&quot;).get_icon_cterm_color_by_filetype(filetype, opts)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or set the icon to use for a filetype with:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;nvim-web-devicons&quot;).set_icon_by_filetype { cpp = &quot;c&quot;, pandoc = &quot;md&quot;, }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;These functions are the same as their counterparts without the &lt;code&gt;_by_filetype&lt;/code&gt; suffix, but they take a filetype instead of a name/extension.&lt;/p&gt; 
&lt;p&gt;You can also use &lt;code&gt;get_icon_name_by_filetype(filetype)&lt;/code&gt; to get the icon name associated with the filetype.&lt;/p&gt; 
&lt;h2&gt;Known Issues&lt;/h2&gt; 
&lt;h3&gt;My &lt;code&gt;setup&lt;/code&gt; Overrides Are Not Applied&lt;/h3&gt; 
&lt;p&gt;&lt;em&gt;Cause:&lt;/em&gt; A plugin may be calling nvim-web-devicons &lt;code&gt;setup&lt;/code&gt; before you do. Your &lt;code&gt;setup&lt;/code&gt; call will be ignored.&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;Workaround:&lt;/em&gt; Call nvim-web-devicons &lt;code&gt;setup&lt;/code&gt; before the plugin&#39;s own &lt;code&gt;setup&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;Windows and WSL not rendering icons properly on some terminals&lt;/h3&gt; 
&lt;p&gt;On Windows and WSL, it is possible that the icons are not rendered properly when using a terminal that relies on Windows&#39; default system libraries. An example of this is Alacritty (&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons/issues/271#issuecomment-2081280928&quot;&gt;#271&lt;/a&gt;). Other terminals (e.g. Windows Terminal, and WezTerm) do no have this issue, as they ship newer versions of these libraries. More precisely, they use newer versions of &lt;code&gt;conpty.dll&lt;/code&gt; and &lt;code&gt;OpenConsole.exe&lt;/code&gt;. So, as a workaround to the rendering issue, you need to make your terminal use these newer files. Whether this is possible depends on the terminal you are using. Please refer to the terminal&#39;s documentation for this.&lt;/p&gt; 
&lt;p&gt;In the specific case of Alacritty, you need to place up-to-date &lt;code&gt;conpty.dll&lt;/code&gt; and &lt;code&gt;OpenConsole.exe&lt;/code&gt; files in your &lt;code&gt;PATH&lt;/code&gt;. Microsoft does not provide these files directly, but you can get them from other terminal emulators that ship them.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;PRs are always welcome! Please see &lt;a href=&quot;https://raw.githubusercontent.com/nvim-tree/nvim-web-devicons/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING&lt;/a&gt;&lt;/p&gt; 
&lt;hr class=&quot;footnotes-sep&quot; /&gt; 
&lt;section class=&quot;footnotes&quot;&gt; 
 &lt;ol class=&quot;footnotes-list&quot;&gt; 
  &lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Not limited to Nerd Font icons: unicode and other fonts may be used. &lt;a href=&quot;https://raw.githubusercontent.com/nvim-tree/nvim-web-devicons/master/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/section&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/a0e51b98ddc333f07a1f74326fb4adb05669fbe1407d4b9e8627b74be09a4939/nvim-tree/nvim-web-devicons" medium="image" />
      
    </item>
    
    <item>
      <title>mason-org/mason.nvim</title>
      <link>https://github.com/mason-org/mason.nvim</link>
      <description>&lt;p&gt;Portable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-%23.svg?logo=linux&amp;amp;color=FCC624&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/macOS-%23.svg?logo=apple&amp;amp;color=000000&amp;amp;logoColor=white&quot; alt=&quot;macOS&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Windows-%23.svg?logo=windows&amp;amp;color=0078D6&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt; &lt;a href=&quot;https://github.com/mason-org/mason.nvim/actions?query=workflow%3ATests+branch%3Amain+event%3Apush&quot;&gt;&lt;img src=&quot;https://github.com/mason-org/mason.nvim/workflows/Tests/badge.svg?sanitize=true&quot; alt=&quot;GitHub CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/sponsors/williamboman&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/sponsors/williamboman&quot; alt=&quot;Sponsors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt; &lt;img src=&quot;https://user-images.githubusercontent.com/6705160/177613416-0c0354d2-f431-40d8-87f0-21310f0bba0e.png&quot; alt=&quot;mason.nvim&quot; /&gt; &lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; Portable package manager for Neovim that runs everywhere Neovim runs.&lt;br /&gt; Easily install and manage LSP servers, DAP servers, linters, and formatters.&lt;br /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;code&gt;:help mason.nvim&lt;/code&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;sup&gt;Latest version: v2.2.1&lt;/sup&gt; 
 &lt;!-- x-release-please-version --&gt; &lt;/p&gt; 
&lt;h2&gt;Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#installation--usage&quot;&gt;Installation &amp;amp; Usage&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#recommended-setup-for-lazynvim&quot;&gt;Recommended setup for &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#requirements&quot;&gt;Requirements&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#commands&quot;&gt;Commands&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#registries&quot;&gt;Registries&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#screenshots&quot;&gt;Screenshots&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#configuration&quot;&gt;Configuration&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Introduction&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L11&quot;&gt;&lt;code&gt;:h mason-introduction&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; is a Neovim plugin that allows you to easily manage external editor tooling such as LSP servers, DAP servers, linters, and formatters through a single interface. It runs everywhere Neovim runs (across Linux, macOS, Windows, etc.), with only a small set of &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#requirements&quot;&gt;external requirements&lt;/a&gt; needed.&lt;/p&gt; 
&lt;p&gt;Packages are installed in Neovim&#39;s data directory (&lt;a href=&quot;https://neovim.io/doc/user/starting.html#standard-path&quot;&gt;&lt;code&gt;:h standard-path&lt;/code&gt;&lt;/a&gt;) by default. Executables are linked to a single &lt;code&gt;bin/&lt;/code&gt; directory, which &lt;code&gt;mason.nvim&lt;/code&gt; will add to Neovim&#39;s PATH during setup, allowing seamless access from Neovim builtins (LSP client, shell, terminal, etc.) as well as other 3rd party plugins.&lt;/p&gt; 
&lt;p&gt;For a list of all available packages, see &lt;a href=&quot;https://mason-registry.dev/registry/list&quot;&gt;https://mason-registry.dev/registry/list&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Installation &amp;amp; Usage&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L42&quot;&gt;&lt;code&gt;:h mason-quickstart&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Install using your plugin manager of choice. &lt;strong&gt;Setup is required&lt;/strong&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason&quot;).setup()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; is optimized to load as little as possible during setup. Lazy-loading the plugin, or somehow deferring the setup, is not recommended.&lt;/p&gt; 
&lt;p&gt;Refer to the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#configuration&quot;&gt;Configuration&lt;/a&gt; section for information about which settings are available.&lt;/p&gt; 
&lt;h3&gt;Recommended setup for &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;The following is the recommended setup when using &lt;code&gt;lazy.nvim&lt;/code&gt;. It will set up the plugin for you, meaning &lt;strong&gt;you don&#39;t have to call &lt;code&gt;require(&quot;mason&quot;).setup()&lt;/code&gt; yourself&lt;/strong&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &quot;mason-org/mason.nvim&quot;,
    opts = {}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L25&quot;&gt;&lt;code&gt;:h mason-requirements&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; relaxes the minimum requirements by attempting multiple different utilities (for example, &lt;code&gt;wget&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;, and &lt;code&gt;Invoke-WebRequest&lt;/code&gt; are all perfect substitutes). The &lt;em&gt;minimum&lt;/em&gt; recommended requirements are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;neovim &lt;code&gt;&amp;gt;= 0.10.0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;For Unix systems: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;git(1)&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;curl(1)&lt;/code&gt; or &lt;code&gt;GNU wget(1)&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;unzip(1)&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;GNU tar (&lt;code&gt;tar(1)&lt;/code&gt; or &lt;code&gt;gtar(1)&lt;/code&gt; depending on platform)&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;gzip(1)&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;For Windows systems: 
  &lt;ul&gt; 
   &lt;li&gt;pwsh or powershell&lt;/li&gt; 
   &lt;li&gt;git&lt;/li&gt; 
   &lt;li&gt;GNU tar&lt;/li&gt; 
   &lt;li&gt;One of the following: 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://www.7-zip.org/&quot;&gt;7zip&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://peazip.github.io/&quot;&gt;peazip&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://github.com/mholt/archiver&quot;&gt;archiver&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://www.winzip.com/&quot;&gt;winzip&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://www.win-rar.com/&quot;&gt;WinRAR&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Note that &lt;code&gt;mason.nvim&lt;/code&gt; will regularly shell out to external package managers, such as &lt;code&gt;cargo&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt;. Depending on your personal usage, some of these will also need to be installed. Refer to &lt;code&gt;:checkhealth mason&lt;/code&gt; for a full list.&lt;/p&gt; 
&lt;h2&gt;Commands&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L140&quot;&gt;&lt;code&gt;:h mason-commands&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:Mason&lt;/code&gt; - opens a graphical status window&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonUpdate&lt;/code&gt; - updates all managed registries&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonInstall &amp;lt;package&amp;gt; ...&lt;/code&gt; - installs/re-installs the provided packages&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonUninstall &amp;lt;package&amp;gt; ...&lt;/code&gt; - uninstalls the provided packages&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonUninstallAll&lt;/code&gt; - uninstalls all packages&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonLog&lt;/code&gt; - opens the &lt;code&gt;mason.nvim&lt;/code&gt; log file in a new tab window&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Registries&lt;/h2&gt; 
&lt;p&gt;Mason&#39;s core package registry is located at &lt;a href=&quot;https://github.com/mason-org/mason-registry&quot;&gt;mason-org/mason-registry&lt;/a&gt;. Before any packages can be used, the registry needs to be downloaded. This is done automatically for you when using the different Mason commands (e.g. &lt;code&gt;:MasonInstall&lt;/code&gt;), but can also be done manually by using the &lt;code&gt;:MasonUpdate&lt;/code&gt; command.&lt;/p&gt; 
&lt;p&gt;If you&#39;re utilizing Mason&#39;s Lua APIs to access packages, it&#39;s recommended to use the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L520&quot;&gt;&lt;code&gt;:h mason-registry.refresh()&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L513&quot;&gt;&lt;code&gt;:h mason-registry.update()&lt;/code&gt;&lt;/a&gt; functions to ensure you have the latest package information before retrieving packages.&lt;/p&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Main window&quot; src=&quot;https://github.com/user-attachments/assets/b9a57d21-f551-45ad-a1e5-a9fd66291510&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Language search&quot; src=&quot;https://github.com/user-attachments/assets/3d24fb7b-2c57-4948-923b-0a42bb627cbe&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Language filter&quot; src=&quot;https://github.com/user-attachments/assets/c0ca5818-3c74-4071-bc41-427a2cd1056d&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Package information&quot; src=&quot;https://github.com/user-attachments/assets/6f9f6819-ac97-483d-a77c-8f6c6131ac85&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;New package versions&quot; src=&quot;https://github.com/user-attachments/assets/ff1adc4d-2fcc-46df-ab4c-291c891efa50&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Help window&quot; src=&quot;https://github.com/user-attachments/assets/1fbe75e4-fe69-4417-83e3-82329e1c236e&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L200&quot;&gt;&lt;code&gt;:h mason-settings&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;You may optionally configure certain behavior of &lt;code&gt;mason.nvim&lt;/code&gt; when calling the &lt;code&gt;.setup()&lt;/code&gt; function. Refer to the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#default-configuration&quot;&gt;default configuration&lt;/a&gt; for a list of all available settings.&lt;/p&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason&quot;).setup({
    ui = {
        icons = {
            package_installed = &quot;✓&quot;,
            package_pending = &quot;➜&quot;,
            package_uninstalled = &quot;✗&quot;
        }
    }
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Configuration using &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &quot;mason-org/mason.nvim&quot;,
    opts = {
        ui = {
            icons = {
                package_installed = &quot;✓&quot;,
                package_pending = &quot;➜&quot;,
                package_uninstalled = &quot;✗&quot;
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Default configuration&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;---@class MasonSettings
local DEFAULT_SETTINGS = {
    ---@since 1.0.0
    -- The directory in which to install packages.
    install_root_dir = path.concat { vim.fn.stdpath &quot;data&quot;, &quot;mason&quot; },

    ---@since 1.0.0
    -- Where Mason should put its bin location in your PATH. Can be one of:
    -- - &quot;prepend&quot; (default, Mason&#39;s bin location is put first in PATH)
    -- - &quot;append&quot; (Mason&#39;s bin location is put at the end of PATH)
    -- - &quot;skip&quot; (doesn&#39;t modify PATH)
    ---@type &#39;&quot;prepend&quot;&#39; | &#39;&quot;append&quot;&#39; | &#39;&quot;skip&quot;&#39;
    PATH = &quot;prepend&quot;,

    ---@since 1.0.0
    -- Controls to which degree logs are written to the log file. It&#39;s useful to set this to vim.log.levels.DEBUG when
    -- debugging issues with package installations.
    log_level = vim.log.levels.INFO,

    ---@since 1.0.0
    -- Limit for the maximum amount of packages to be installed at the same time. Once this limit is reached, any further
    -- packages that are requested to be installed will be put in a queue.
    max_concurrent_installers = 4,

    ---@since 1.0.0
    -- [Advanced setting]
    -- The registries to source packages from. Accepts multiple entries. Should a package with the same name exist in
    -- multiple registries, the registry listed first will be used.
    registries = {
        &quot;github:mason-org/mason-registry&quot;,
    },

    ---@since 1.0.0
    -- The provider implementations to use for resolving supplementary package metadata (e.g., all available versions).
    -- Accepts multiple entries, where later entries will be used as fallback should prior providers fail.
    -- Builtin providers are:
    --   - mason.providers.registry-api  - uses the https://api.mason-registry.dev API
    --   - mason.providers.client        - uses only client-side tooling to resolve metadata
    providers = {
        &quot;mason.providers.registry-api&quot;,
        &quot;mason.providers.client&quot;,
    },

    github = {
        ---@since 1.0.0
        -- The template URL to use when downloading assets from GitHub.
        -- The placeholders are the following (in order):
        -- 1. The repository (e.g. &quot;rust-lang/rust-analyzer&quot;)
        -- 2. The release version (e.g. &quot;v0.3.0&quot;)
        -- 3. The asset name (e.g. &quot;rust-analyzer-v0.3.0-x86_64-unknown-linux-gnu.tar.gz&quot;)
        download_url_template = &quot;https://github.com/%s/releases/download/%s/%s&quot;,
    },

    pip = {
        ---@since 1.0.0
        -- Whether to upgrade pip to the latest version in the virtual environment before installing packages.
        upgrade_pip = false,

        ---@since 1.0.0
        -- These args will be added to `pip install` calls. Note that setting extra args might impact intended behavior
        -- and is not recommended.
        --
        -- Example: { &quot;--proxy&quot;, &quot;https://proxyserver&quot; }
        install_args = {},
    },

    ui = {
        ---@since 1.0.0
        -- Whether to automatically check for new versions when opening the :Mason window.
        check_outdated_packages_on_open = true,

        ---@since 1.0.0
        -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|.
        -- Defaults to `:h &#39;winborder&#39;` if nil.
        border = nil,

        ---@since 1.11.0
        -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent.
        backdrop = 60,

        ---@since 1.0.0
        -- Width of the window. Accepts:
        -- - Integer greater than 1 for fixed width.
        -- - Float in the range of 0-1 for a percentage of screen width.
        width = 0.8,

        ---@since 1.0.0
        -- Height of the window. Accepts:
        -- - Integer greater than 1 for fixed height.
        -- - Float in the range of 0-1 for a percentage of screen height.
        height = 0.9,

        icons = {
            ---@since 1.0.0
            -- The list icon to use for installed packages.
            package_installed = &quot;◍&quot;,
            ---@since 1.0.0
            -- The list icon to use for packages that are installing, or queued for installation.
            package_pending = &quot;◍&quot;,
            ---@since 1.0.0
            -- The list icon to use for packages that are not installed.
            package_uninstalled = &quot;◍&quot;,
        },

        keymaps = {
            ---@since 1.0.0
            -- Keymap to expand a package
            toggle_package_expand = &quot;&amp;lt;CR&amp;gt;&quot;,
            ---@since 1.0.0
            -- Keymap to install the package under the current cursor position
            install_package = &quot;i&quot;,
            ---@since 1.0.0
            -- Keymap to reinstall/update the package under the current cursor position
            update_package = &quot;u&quot;,
            ---@since 1.0.0
            -- Keymap to check for new version for the package under the current cursor position
            check_package_version = &quot;c&quot;,
            ---@since 1.0.0
            -- Keymap to update all installed packages
            update_all_packages = &quot;U&quot;,
            ---@since 1.0.0
            -- Keymap to check which installed packages are outdated
            check_outdated_packages = &quot;C&quot;,
            ---@since 1.0.0
            -- Keymap to uninstall a package
            uninstall_package = &quot;X&quot;,
            ---@since 1.0.0
            -- Keymap to cancel a package installation
            cancel_installation = &quot;&amp;lt;C-c&amp;gt;&quot;,
            ---@since 1.0.0
            -- Keymap to apply language filter
            apply_language_filter = &quot;&amp;lt;C-f&amp;gt;&quot;,
            ---@since 1.1.0
            -- Keymap to toggle viewing package installation log
            toggle_package_install_log = &quot;&amp;lt;CR&amp;gt;&quot;,
            ---@since 1.8.0
            -- Keymap to toggle the help view
            toggle_help = &quot;g?&quot;,
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;sup&gt; 👋 didn&#39;t find what you were looking for? Try looking in the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt&quot;&gt;help docs&lt;/a&gt; &lt;code&gt;:help mason.nvim&lt;/code&gt;! &lt;/sup&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/2d9857be39ff9e6740ebd4a0778368091718d025555cf6f38f88ec93c84f6298/mason-org/mason.nvim" medium="image" />
      
    </item>
    
  </channel>
</rss>
