nvimtree.lua 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. local M = {}
  2. local Log = require "lvim.core.log"
  3. function M.config()
  4. lvim.builtin.nvimtree = {
  5. active = true,
  6. on_config_done = nil,
  7. setup = {
  8. ignore_ft_on_setup = {
  9. "startify",
  10. "dashboard",
  11. "alpha",
  12. },
  13. auto_reload_on_write = false,
  14. hijack_directories = {
  15. enable = false,
  16. },
  17. update_cwd = true,
  18. diagnostics = {
  19. enable = lvim.use_icons,
  20. show_on_dirs = false,
  21. icons = {
  22. hint = lvim.icons.diagnostics.BoldHint,
  23. info = lvim.icons.diagnostics.BoldInformation,
  24. warning = lvim.icons.diagnostics.BoldWarning,
  25. error = lvim.icons.diagnostics.BoldError,
  26. },
  27. },
  28. update_focused_file = {
  29. enable = true,
  30. update_cwd = true,
  31. ignore_list = {},
  32. },
  33. system_open = {
  34. cmd = nil,
  35. args = {},
  36. },
  37. git = {
  38. enable = true,
  39. ignore = false,
  40. timeout = 200,
  41. },
  42. view = {
  43. width = 30,
  44. hide_root_folder = false,
  45. side = "left",
  46. mappings = {
  47. custom_only = false,
  48. list = {},
  49. },
  50. number = false,
  51. relativenumber = false,
  52. signcolumn = "yes",
  53. },
  54. renderer = {
  55. indent_markers = {
  56. enable = false,
  57. icons = {
  58. corner = "└",
  59. edge = "│",
  60. item = "│",
  61. none = " ",
  62. },
  63. },
  64. icons = {
  65. webdev_colors = lvim.use_icons,
  66. show = {
  67. git = lvim.use_icons,
  68. folder = lvim.use_icons,
  69. file = lvim.use_icons,
  70. folder_arrow = lvim.use_icons,
  71. },
  72. glyphs = {
  73. default = lvim.icons.ui.Text,
  74. symlink = lvim.icons.ui.FileSymlink,
  75. git = {
  76. deleted = lvim.icons.git.FileDeleted,
  77. ignored = lvim.icons.git.FileIgnored,
  78. renamed = lvim.icons.git.FileRenamed,
  79. staged = lvim.icons.git.FileStaged,
  80. unmerged = lvim.icons.git.FileUnmerged,
  81. unstaged = lvim.icons.git.FileUnstaged,
  82. untracked = lvim.icons.git.FileUntracked,
  83. },
  84. folder = {
  85. default = lvim.icons.ui.Folder,
  86. empty = lvim.icons.ui.EmptyFolder,
  87. empty_open = lvim.icons.ui.EmptyFolderOpen,
  88. open = lvim.icons.ui.FolderOpen,
  89. symlink = lvim.icons.ui.FolderSymlink,
  90. },
  91. },
  92. },
  93. highlight_git = true,
  94. group_empty = false,
  95. root_folder_modifier = ":t",
  96. },
  97. filters = {
  98. dotfiles = false,
  99. custom = { "node_modules", "\\.cache" },
  100. exclude = {},
  101. },
  102. trash = {
  103. cmd = "trash",
  104. require_confirm = true,
  105. },
  106. log = {
  107. enable = false,
  108. truncate = false,
  109. types = {
  110. all = false,
  111. config = false,
  112. copy_paste = false,
  113. diagnostics = false,
  114. git = false,
  115. profile = false,
  116. },
  117. },
  118. actions = {
  119. use_system_clipboard = true,
  120. change_dir = {
  121. enable = true,
  122. global = false,
  123. restrict_above_cwd = false,
  124. },
  125. open_file = {
  126. quit_on_open = false,
  127. resize_window = false,
  128. window_picker = {
  129. enable = true,
  130. chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890",
  131. exclude = {
  132. filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" },
  133. buftype = { "nofile", "terminal", "help" },
  134. },
  135. },
  136. },
  137. },
  138. },
  139. }
  140. end
  141. function M.setup()
  142. local status_ok, nvim_tree = pcall(require, "nvim-tree")
  143. if not status_ok then
  144. Log:error "Failed to load nvim-tree"
  145. return
  146. end
  147. local status_ok_1, utils = pcall(require, "nvim-tree.utils")
  148. if not status_ok_1 then
  149. return
  150. end
  151. local function notify_level()
  152. return function(msg)
  153. vim.schedule(function()
  154. vim.api.nvim_echo({ { msg, "WarningMsg" } }, false, {})
  155. end)
  156. end
  157. end
  158. utils.notify.warn = notify_level(vim.log.levels.WARN)
  159. utils.notify.error = notify_level(vim.log.levels.ERROR)
  160. utils.notify.info = notify_level(vim.log.levels.INFO)
  161. utils.notify.debug = notify_level(vim.log.levels.DEBUG)
  162. if lvim.builtin.nvimtree._setup_called then
  163. Log:debug "ignoring repeated setup call for nvim-tree, see kyazdani42/nvim-tree.lua#1308"
  164. return
  165. end
  166. lvim.builtin.which_key.mappings["e"] = { "<cmd>NvimTreeToggle<CR>", "Explorer" }
  167. lvim.builtin.nvimtree._setup_called = true
  168. -- Implicitly update nvim-tree when project module is active
  169. if lvim.builtin.project.active then
  170. lvim.builtin.nvimtree.setup.respect_buf_cwd = true
  171. lvim.builtin.nvimtree.setup.update_cwd = true
  172. lvim.builtin.nvimtree.setup.update_focused_file = { enable = true, update_cwd = true }
  173. end
  174. local function telescope_find_files(_)
  175. require("lvim.core.nvimtree").start_telescope "find_files"
  176. end
  177. local function telescope_live_grep(_)
  178. require("lvim.core.nvimtree").start_telescope "live_grep"
  179. end
  180. -- Add useful keymaps
  181. if #lvim.builtin.nvimtree.setup.view.mappings.list == 0 then
  182. lvim.builtin.nvimtree.setup.view.mappings.list = {
  183. { key = { "l", "<CR>", "o" }, action = "edit", mode = "n" },
  184. { key = "h", action = "close_node" },
  185. { key = "v", action = "vsplit" },
  186. { key = "C", action = "cd" },
  187. { key = "gtf", action = "telescope_find_files", action_cb = telescope_find_files },
  188. { key = "gtg", action = "telescope_live_grep", action_cb = telescope_live_grep },
  189. }
  190. end
  191. nvim_tree.setup(lvim.builtin.nvimtree.setup)
  192. if lvim.builtin.nvimtree.on_config_done then
  193. lvim.builtin.nvimtree.on_config_done(nvim_tree)
  194. end
  195. end
  196. function M.start_telescope(telescope_mode)
  197. local node = require("nvim-tree.lib").get_node_at_cursor()
  198. local abspath = node.link_to or node.absolute_path
  199. local is_folder = node.open ~= nil
  200. local basedir = is_folder and abspath or vim.fn.fnamemodify(abspath, ":h")
  201. require("telescope.builtin")[telescope_mode] {
  202. cwd = basedir,
  203. }
  204. end
  205. return M