summaryrefslogtreecommitdiff
path: root/.config/nvim/lua/plugins/telescope.lua
blob: 90add7295485effe6d604892f166f5e122b75fcc (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
return {
    { 'nvim-telescope/telescope-fzf-native.nvim' },
    { 'nvim-telescope/telescope-ui-select.nvim' },
    {
        'nvim-telescope/telescope.nvim',
        tag = '0.1.5',
        dependencies = { 'nvim-lua/plenary.nvim' },
        config = function()
            local builtin = require('telescope.builtin')

            vim.keymap.set('n', '<leader>h', builtin.help_tags, { desc = '[H]elp' })
            vim.keymap.set('n', '<leader>m', builtin.man_pages, { desc = '[M]an Pages' })
            vim.keymap.set('n', '<leader>th', builtin.colorscheme, { desc = 'List [Th]eme' })

            vim.keymap.set('n', '<leader>fs', builtin.find_files, { desc = '[F]ile [S]ystem' })
            vim.keymap.set('n', '<leader>fw', builtin.grep_string, { desc = '[F]ind current [W]ord' })
            vim.keymap.set('n', '<leader>lv', builtin.live_grep, { desc = '[L]ive [G]rep' })
            vim.keymap.set('n', '<leader>f.', builtin.oldfiles, { desc = '[F]ind Recent Files ("." for old)' })

            vim.keymap.set('n', 'gd', builtin.lsp_definitions, { desc = '[G]oto [D]efinition' })
            vim.keymap.set('n', 'gh', vim.lsp.buf.hover, { desc = '[G]oto [H]over' })
            vim.keymap.set('n', 'gu', builtin.lsp_references, { desc = '[G]oto [U]sages' })
            vim.keymap.set('n', 'gi', builtin.lsp_implementations, { desc = '[G]oto [I]mplementations' })
            vim.keymap.set('n', 'gt', builtin.lsp_type_definitions, { desc = '[G]oto [T]ype Definitions' })
            vim.keymap.set('n', 'gw', builtin.diagnostics, { desc = '[G]oto [W]arnings' })

            vim.keymap.set('n', '<leader>ds', builtin.lsp_document_symbols, { desc = '[D]ocument [S]symbols' })
            vim.keymap.set('n', '<leader>ps', builtin.lsp_workspace_symbols, { desc = '[P]roject [S]ymbols' })

            vim.keymap.set('n', '<leader>ca', vim.lsp.buf.code_action, { desc = '[C]ode [A]ction' })
            vim.keymap.set('n', '<M-Enter>', vim.lsp.buf.code_action, { desc = 'Code Actions' })

            -- TODO: Use some cool plugin to have IntelliJ-like renaming
            -- Make sure to include a rr version for normal renaming and Shift+R for ciw + rr
            vim.keymap.set('n', 'R', vim.lsp.buf.rename, { desc = '[R]ename' })

            -- TODO: Look into the following
            -- builtin.git_commits
            -- builtin.git_branches
            -- builtin.git_status
            -- builtin.git_stash

            local telescope = require('telescope')
            telescope.setup({
                defaults = {
                    mappings = {
                        i = {
                            -- map actions.which_key to <C-h> (default: <C-/>)
                            -- actions.which_key shows the mappings for your picker,
                            -- e.g. git_{create, delete, ...}_branch for the git_branches picker
                            ['<C-h>'] = 'which_key',
                            ['<C-s>'] = 'cycle_previewers_next',
                            ['<C-a>'] = 'cycle_previewers_prev',
                        },
                    },
                },
                pickers = {
                    find_files = { follow = true },
                    grep_string = { additional_args = '--follow' },
                    live_grep = { additional_args = '--follow' },
                },
                extensions = {
                    ui_select = {
                        require('telescope.themes').get_dropdown({}),
                    },
                    fzf = {
                        fuzzy = true,                   -- false will only do exact matching
                        override_generic_sorter = true, -- override the generic sorter
                        override_file_sorter = true,    -- override the file sorter
                        case_mode = 'smart_case',       -- or "ignore_case" or "respect_case"
                        -- the default case_mode is "smart_case"
                    },
                },
            })
            telescope.load_extension('ui-select')
            telescope.load_extension('fzf')
        end,
    },
}