summaryrefslogtreecommitdiff
path: root/lua/mo/fzf.lua
blob: b4c22ba456aca473d487615a9392e8464bd0bb2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
--- @diagnostic disable: missing-fields
local fzf = require("fzf-lua")

local swiper = {
    previewer = "swiper",
    winopts = function()
        local height = math.ceil(vim.o.lines / 3)
        return { split = ("botright %snew +set\\ nobl"):format(height) }
    end,
}

fzf.setup({
    { "default-title", "hide" },
    fzf_colors = true,
    lsp = {
        symbols = { symbol_style = 3 },
        document_symbols = swiper,
        code_actions = { previewer = "codeaction_native" },
    },
    manpages = { previewer = "man_native" },
    helptags = { previewer = "help_native" },
    defaults = { git_icons = false, file_icons = false },
    tags = { previewer = "bat" },
    btags = { previewer = "bat" },
    files = {
        previewer = "bat",
        fzf_opts = { ["--ansi"] = true },
        cwd_header = true,
        winopts = { toggle_behavior = "default", preview = { hidden = true } },
        formatter = "path.dirname_first",
    },
    grep = {
        fzf_opts = { ["--ansi"] = false },
        rg_opts = " --color=never --column --line-number --no-heading --smart-case --max-columns=4096 -e",
        rg_glob = true,
        glob_flag = "--iglob",
        glob_separator = "%s%-%-",
    },
    builtin = { winopts = { width = 1, height = 1 } },
    blines = swiper,
    grep_curbuf = swiper,
    treesitter = swiper,
    git = { blame = swiper },

    winopts = function()
        local height = math.ceil(2 * vim.o.lines / 3)
        return {
            backdrop = 80,
            row = 1,
            col = 0,
            width = 1,
            height = height > 3 and height or 1,
            border = { "", " ", "", "", "", "", "", "" },
            toggle_behavior = "extend",
            --- @diagnostic disable-next-line: missing-fields
            preview = {
                default = { "bat" },
                treesitter = false,
                layout = "vertical",
                vertical = "up:60%",
                border = { "", " ", "", "", "", "", "", "" },
            },
            on_create = function()
                vim.keymap.set(
                    "t",
                    "<C-r>",
                    [['<C-\><C-N>"'.nr2char(getchar()).'pi']],
                    {
                        expr = true,
                        buffer = true,
                        desc = "insert register value into the FZF prompt",
                    }
                )
            end,
        }
    end,
    keymap = {
        fzf = {
            true,
            ["ctrl-q"] = "select-all+accept",
            ["alt-p"] = "toggle-preview",
        },
    },
})

_G.old_vim_ui_select = vim.ui.select
fzf.register_ui_select()