/ido.nvim

Simple fuzzy searcher for Neovim

Primary LanguageLuaMIT LicenseMIT

ido.nvim

Simple fuzzy searcher for Neovim

Ido

Install

Plug 'shoumodip/ido.nvim'

Basic Usage

  • ido.start(items, callback, title)
require("ido").start({"red", "green", "blue"}, function (v)
  print(v)
end)
Key Description
<esc> Quit
<c-c> Quit
<c-j> Accept the query
<cr> Accept the selection
<tab> Select next item
<s-tab> Select previous item

Execute

Execute registered ido functions, which are listed below

require("lua").execute()

Browse

Navigate the filesystem

require("ido").browse()
Key Description
<a-l> Enter directory
<a-h> Parent directory
<a-o> Change directory to current active

Buffers

Switch between buffers

require("ido").buffers()

Colorschemes

Switch between colorschemes

require("ido").colorschemes()

Git Files

Open git files, default to Browser outside git repos

require("ido").git_files()

Git Grep

Search patterns in git repos

require("ido").git_grep()

Projects

Switch to a project within a directory and run Git Files (optional)

require("ido").projects("~/Git") -- Projects base path of choice

-- OR --

require("ido").projects()        -- Select projects base path via input prompt

Man Pages

Open man pages

require("ido").man_pages()

Helptags

Open vim helptags

require("ido").helptags()

Global Keybindings

Will bind for all Ido runs

local ido = require("ido")

ido.bind {
  ["jk"] = ido.exit,
  ["<c-j>"] = ido.next,
  ["<c-k>"] = ido.prev,
  ["<tab>"] = ido.accept_item,
}

Instance Keybindings

Will bind for the current run only

local ido = require("ido")

ido.git_files()
ido.bind {
  ["<a-i>"] = function ()
    vim.fn.mkdir(ido.get_query())
  end
}

Custom Window Title

require("ido").start({"red", "green", "blue"}, print, "Select Colors")

Custom Registered Function

Registered functions show up in the ido.execute selector as well as in the ido namespace

local ido = require("ido")

ido.register("lines", function ()
  local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
  for i in ipairs(lines) do
    lines[i] = i..": "..lines[i]
  end

  ido.start(lines, function (line)
    local index = line:find(":")
    if index then
      vim.api.nvim_win_set_cursor(0, {tonumber(line:sub(1, index - 1)), 0})
    end
  end, "Lines")
end)

This function can now be called with both the following ways

require("ido").lines()

OR

require("ido").execute()