Table of Contents

stuff

nvim_put

require(“which-key”).add

In Neovim, the which-key plugin is a tool that helps users discover keybindings by displaying a popup with available keybindings as you start typing a command. The require('which-key').add function in Lua is used to add custom keybindings to the which-key plugin.

Here’s a basic example of how you might use it:

local wk = require("which-key")

wk.register({
  f = {
    name = "file", -- optional group name
    f = { "<cmd>Telescope find_files<cr>", "Find File" }, -- create a binding for finding files
    r = { "<cmd>Telescope oldfiles<cr>", "Open Recent File" }, -- create a binding for recent files
  },
}, { prefix = "<leader>" })

In this example, pressing <leader>f will show a menu with options for finding files and opening recent files. The name field is optional and provides a description for the group of keybindings.

In which-key, you can specify different keybindings for different modes, including normal, visual, insert, etc. By default, the keybindings are set for normal mode, but you can specify the mode explicitly using the mode option.

Here’s how you can specify keybindings for visual mode:

local wk = require("which-key")

wk.register({
  f = {
    name = "file",
    f = { "<cmd>Telescope find_files<cr>", "Find File" },
    r = { "<cmd>Telescope oldfiles<cr>", "Open Recent File" },
  },
}, { prefix = "<leader>", mode = "v" }) -- 'v' specifies visual mode

In this example, the keybindings will only be active when you are in visual mode. You can specify multiple modes by providing a string with the desired modes, like "nv" for normal and visual modes.

can i get lua in neovim to give a popup list of items to choose from. i have telescope installed if that helps.

Yes, you can use Telescope in Neovim to create a popup list of items to choose from. Here’s a basic example using Lua:

  1. Ensure you have Telescope installed and set up in your Neovim configuration.

  2. Create a Lua function to use Telescope’s pickers and finders to display a list of items:

local actions = require('telescope.actions')
local action_state = require('telescope.actions.state')
local pickers = require('telescope.pickers')
local finders = require('telescope.finders')
local conf = require('telescope.config').values

local function choose_item()
  local items = { "Item 1", "Item 2", "Item 3" }

  pickers.new({}, {
    prompt_title = "Choose an Item",
    finder = finders.new_table {
      results = items
    },
    sorter = conf.generic_sorter({}),
    attach_mappings = function(prompt_bufnr, map)
      actions.select_default:replace(function()
        actions.close(prompt_bufnr)
        local selection = action_state.get_selected_entry()
        print("You selected: " .. selection[1])
      end)
      return true
    end,
  }):find()
end

return choose_item
  1. Call choose_item() in your Neovim to display the popup list.

This script will show a popup with a list of items, and you can select one to print it in the command line. Adjust the items list to fit your needs.

please explain local init_path = vim.fn.stdpath(‘config’) .. ‘/init.lua’

Certainly! The line local init_path = vim.fn.stdpath('config') .. '/init.lua' is constructing the file path to your Neovim configuration file, init.lua. Here’s a breakdown:

  • local init_path: This declares a local variable named init_path to store the file path.

  • vim.fn.stdpath('config'): This function call retrieves the standard path for Neovim’s configuration directory. The 'config' argument specifies that you want the path where Neovim expects configuration files, typically ~/.config/nvim on Unix-like systems.

  • .. '/init.lua': The .. operator in Lua is used for string concatenation. This appends '/init.lua' to the path obtained from vim.fn.stdpath('config'), resulting in the full path to the init.lua file.

This line effectively constructs the full path to your init.lua file, allowing you to open it programmatically.

If you want to use your own absolute path to init.lua, you can directly assign that path to the init_path variable. Here’s how you can modify the function:

-- Function to open init.lua in a new buffer using a custom path
function OpenInitLua()
  local init_path = '/your/absolute/path/to/init.lua'  -- Replace with your actual path
  vim.cmd('edit ' .. init_path)
end

-- Map the function to a key combination, e.g., <leader>i
vim.api.nvim_set_keymap('n', '<leader>i', ':lua OpenInitLua()<CR>', { noremap = true, silent = true })

Replace '/your/absolute/path/to/init.lua' with the actual absolute path to your init.lua file. This way, the function will open the specified file directly, regardless of Neovim’s standard configuration directory.

i have this item in lua but i would rather read from a tmp file: local items = { “reconcile_reserve”, “Item 2”, “test1” }

To read items from a temporary file in Lua, you can modify your code to read the file’s contents and populate the items table. Here’s an example of how you can achieve this:

  1. Create a temporary file with your items, each on a new line.
  2. Use Lua to read the file and populate the items table.

Here’s a sample implementation:

-- Function to read items from a temporary file
local function readItemsFromFile(filePath)
  local items = {}
  local file = io.open(filePath, "r")  -- Open the file in read mode
  if file then
    for line in file:lines() do
      table.insert(items, line)  -- Insert each line into the items table
    end
    file:close()  -- Close the file
  else
    print("Error: Could not open file " .. filePath)
  end
  return items
end

-- Specify the path to your temporary file
local tmpFilePath = "/path/to/your/tmpfile.txt"  -- Replace with your actual file path

-- Read items from the file
local items = readItemsFromFile(tmpFilePath)

-- Print the items to verify
for _, item in ipairs(items) do
  print(item)
end

Replace "/path/to/your/tmpfile.txt" with the actual path to your temporary file. This script reads each line from the file and adds it to the items table. Make sure the file exists and is accessible at the specified path.


This site uses Just the Docs, a documentation theme for Jekyll.