diff --git a/README.md b/README.md index f4bcc1e..e926ba3 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ nnoremap lua require('fzf-lua').files() | Command | List | | --- | --- | |`buffers`|open buffers| +|`blines`|current buffer lines| |`files`|`find` or `fd` on a path| |`oldfiles`|opened files history| |`quickfix`|quickfix list| @@ -367,6 +368,7 @@ require'fzf-lua'.setup { cwd_only = false, }, buffers = { + -- previewer = false, -- disable the builtin previewer? prompt = 'Buffers❯ ', file_icons = true, -- show file icons? color_icons = true, -- colorize file|git icons @@ -379,6 +381,16 @@ require'fzf-lua'.setup { ["ctrl-x"] = actions.buf_del, } }, + blines = { + previewer = "builtin", -- set to 'false' to disable + prompt = 'BLines❯ ', + actions = { + ["default"] = actions.buf_edit, + ["ctrl-s"] = actions.buf_split, + ["ctrl-v"] = actions.buf_vsplit, + ["ctrl-t"] = actions.buf_tabedit, + } + }, colorschemes = { prompt = 'Colorschemes❯ ', live_preview = true, -- apply the colorscheme on preview? diff --git a/lua/fzf-lua/config.lua b/lua/fzf-lua/config.lua index ebdf8a2..54ec352 100644 --- a/lua/fzf-lua/config.lua +++ b/lua/fzf-lua/config.lua @@ -291,6 +291,16 @@ M.globals.buffers = { ["ctrl-x"] = actions.buf_del, }, } +M.globals.blines = { + previewer = "builtin", + prompt = 'BLines> ', + actions = { + ["default"] = actions.buf_edit, + ["ctrl-s"] = actions.buf_split, + ["ctrl-v"] = actions.buf_vsplit, + ["ctrl-t"] = actions.buf_tabedit, + }, + } M.globals.tags = { previewer = function() return M.globals.default_previewer end, prompt = 'Tags> ', diff --git a/lua/fzf-lua/init.lua b/lua/fzf-lua/init.lua index 2a6b2fa..e6d38dd 100644 --- a/lua/fzf-lua/init.lua +++ b/lua/fzf-lua/init.lua @@ -67,6 +67,7 @@ M.oldfiles = require'fzf-lua.providers.oldfiles'.oldfiles M.quickfix = require'fzf-lua.providers.quickfix'.quickfix M.loclist = require'fzf-lua.providers.quickfix'.loclist M.buffers = require'fzf-lua.providers.buffers'.buffers +M.blines = require'fzf-lua.providers.buffers'.blines M.help_tags = require'fzf-lua.providers.helptags'.helptags M.man_pages = require'fzf-lua.providers.manpages'.manpages M.colorschemes = require'fzf-lua.providers.colorschemes'.colorschemes diff --git a/lua/fzf-lua/providers/buffers.lua b/lua/fzf-lua/providers/buffers.lua index 678ea78..1a254ba 100644 --- a/lua/fzf-lua/providers/buffers.lua +++ b/lua/fzf-lua/providers/buffers.lua @@ -150,4 +150,49 @@ M.buffers = function(opts) end)() end +M.blines = function(opts) + + opts = config.normalize_opts(opts, config.globals.blines) + + local bufnr = vim.api.nvim_get_current_buf() + local bufnrstr = utils.ansi_codes.magenta(tostring(bufnr)) + + coroutine.wrap(function() + local items = {} + + if api.nvim_buf_is_loaded(bufnr) then + local data = api.nvim_buf_get_lines(bufnr, 0, -1, false) + for l, text in ipairs(data) do + table.insert(items, ("[%s]:%s: %s"):format( + bufnrstr, + utils.ansi_codes.green(tostring(l)), + text)) + end + end + + -- ignore bufnr when searching + -- disable multi-select + opts.nomulti = true + opts._fzf_cli_args = "--delimiter=':' --nth 2,-1" + + local selected = core.fzf(opts, items) + + if not selected then return end + + -- get the line number + local line = tonumber(selected[2]:match(":(%d+):")) + + if #selected > 1 then + for i = 2, #selected do + selected[i] = tostring(getbufnumber(selected[i])) + end + end + + actions.act(opts.actions, selected) + + if line then vim.api.nvim_win_set_cursor(0, {line, 0}) end + + end)() +end + return M