telescope.lua 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. return {
  2. {
  3. "nvim-telescope/telescope.nvim",
  4. enabled = true,
  5. lazy = false,
  6. cmd = "Telescope",
  7. dependencies = {
  8. "nvim-lua/plenary.nvim", "nvim-telescope/telescope-ui-select.nvim"
  9. },
  10. config = function(_, _)
  11. local builtin = require("telescope.builtin")
  12. local actions = require("telescope.actions")
  13. local conf = require("telescope.config").values
  14. local finders = require("telescope.finders")
  15. local pickers = require("telescope.pickers")
  16. local themes = require("telescope.themes")
  17. local action_state = require("telescope.actions.state")
  18. require("telescope").setup({
  19. extensions = {
  20. ["ui-select"] = { require("telescope.themes").get_dropdown() }
  21. },
  22. defaults = {
  23. ["borderchars"] = {
  24. "-", "¦", "-", "¦", "⌌", "⌍", "⌏", "⌎"
  25. },
  26. layout_strategy = "horizontal",
  27. layout_config = {
  28. horizontal = { width = { padding = 0 }, height = 0.99 }
  29. },
  30. cache_picker = {
  31. num_pickers = 100,
  32. limit_entries = 100,
  33. ignore_empty_prompt = true
  34. }
  35. },
  36. pickers = {
  37. live_grep = {
  38. additional_args = function(_)
  39. return { "--hidden", "--glob=!**/.git/*" }
  40. end
  41. }
  42. }
  43. })
  44. vim.keymap.set("n", "sf", function()
  45. require("telescope").extensions.file_browser.file_browser({
  46. select_buffer = true,
  47. grouped = true,
  48. no_ignore = true,
  49. hidden = true,
  50. respect_gitignore = false,
  51. path = vim.fn.expand("%:p:h")
  52. })
  53. end, {})
  54. vim.keymap.set("n", "ss", builtin.resume)
  55. vim.keymap.set("n", "sS", builtin.pickers)
  56. vim.keymap.set("n", "sa", builtin.find_files)
  57. vim.keymap.set("n", "sg", builtin.git_files)
  58. vim.keymap.set("n", "si", builtin.live_grep)
  59. vim.keymap.set("n", "sI", function()
  60. local async = require 'plenary.async'
  61. local sender, receiver = async.control.channel.mpsc()
  62. local results = {}
  63. async.run(function()
  64. local result = vim.fn.system(
  65. "fd -t f | rev | cut -d/ -f1 -s | cut -d. -f1 -s | rev | tr '[:upper:]' '[:lower:]' | sort | uniq | xargs -I{} -n 1 printf '*.{}\n!*.{}\n'")
  66. sender.send(result)
  67. end)
  68. async.run(function()
  69. local result = vim.fn.system(
  70. "fd -t d | xargs -n 1 -I{} printf '{}*\n!{}*\n'")
  71. sender.send(result)
  72. end)
  73. async.run(function()
  74. local result = vim.fn.system(
  75. "fd -t d | rev | cut -d/ -f2 -s | rev | sort | uniq | xargs -n 1 -I{} printf '**/{}/*\n!**/{}/*\n'")
  76. sender.send(result)
  77. end)
  78. for _ = 1, 3 do
  79. local value = receiver.recv()
  80. if value ~= nil then
  81. results = vim.list_extend(results,
  82. vim.split(value, "\n"))
  83. end
  84. end
  85. pickers.new(themes.get_dropdown({}),
  86. {
  87. finder = finders.new_table({
  88. results = results
  89. }),
  90. sorter = conf.generic_sorter(),
  91. attach_mappings = function(prompt_bufnr, _)
  92. actions.select_default:replace(function()
  93. actions.close(prompt_bufnr)
  94. local selection = action_state
  95. .get_selected_entry()
  96. builtin.live_grep({ glob_pattern = selection })
  97. end)
  98. return true
  99. end,
  100. }):find()
  101. end)
  102. vim.keymap.set("n", "sb", builtin.buffers)
  103. vim.keymap.set("n", "sj", builtin.jumplist)
  104. vim.keymap.set("n", "sw", builtin.grep_string)
  105. vim.keymap.set("n", "sld", builtin.lsp_definitions)
  106. vim.keymap.set("n", "slt", builtin.lsp_type_definitions)
  107. vim.keymap.set("n", "slr", builtin.lsp_references)
  108. vim.keymap.set("n", "sli", builtin.lsp_implementations)
  109. vim.keymap.set("n", "sls", builtin.lsp_dynamic_workspace_symbols)
  110. require("telescope").load_extension("ui-select")
  111. require("telescope").load_extension("file_browser")
  112. end
  113. }, {
  114. "nvim-telescope/telescope-file-browser.nvim",
  115. dependencies = { "nvim-telescope/telescope.nvim" },
  116. enabled = true,
  117. lazy = false,
  118. config = function(_, _)
  119. require("telescope").setup({
  120. extensions = {
  121. file_browser = {
  122. respect_gitignore = false,
  123. hidden = { file_browser = true, folder_browser = true },
  124. hijack_netrw = true,
  125. display_stat = { date = false, size = true, mode = false },
  126. mappings = {}
  127. }
  128. }
  129. })
  130. require("telescope").load_extension("file_browser")
  131. end
  132. }
  133. }