nvimtree.lua 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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. if lvim.builtin.nvimtree._setup_called then
  148. Log:debug "ignoring repeated setup call for nvim-tree, see kyazdani42/nvim-tree.lua#1308"
  149. return
  150. end
  151. lvim.builtin.which_key.mappings["e"] = { "<cmd>NvimTreeToggle<CR>", "Explorer" }
  152. lvim.builtin.nvimtree._setup_called = true
  153. -- Implicitly update nvim-tree when project module is active
  154. if lvim.builtin.project.active then
  155. lvim.builtin.nvimtree.setup.respect_buf_cwd = true
  156. lvim.builtin.nvimtree.setup.update_cwd = true
  157. lvim.builtin.nvimtree.setup.update_focused_file = { enable = true, update_cwd = true }
  158. end
  159. local function telescope_find_files(_)
  160. require("lvim.core.nvimtree").start_telescope "find_files"
  161. end
  162. local function telescope_live_grep(_)
  163. require("lvim.core.nvimtree").start_telescope "live_grep"
  164. end
  165. -- Add useful keymaps
  166. if #lvim.builtin.nvimtree.setup.view.mappings.list == 0 then
  167. lvim.builtin.nvimtree.setup.view.mappings.list = {
  168. { key = { "l", "<CR>", "o" }, action = "edit", mode = "n" },
  169. { key = "h", action = "close_node" },
  170. { key = "v", action = "vsplit" },
  171. { key = "C", action = "cd" },
  172. { key = "gtf", action = "telescope_find_files", action_cb = telescope_find_files },
  173. { key = "gtg", action = "telescope_live_grep", action_cb = telescope_live_grep },
  174. }
  175. end
  176. nvim_tree.setup(lvim.builtin.nvimtree.setup)
  177. if lvim.builtin.nvimtree.on_config_done then
  178. lvim.builtin.nvimtree.on_config_done(nvim_tree)
  179. end
  180. end
  181. function M.start_telescope(telescope_mode)
  182. local node = require("nvim-tree.lib").get_node_at_cursor()
  183. local abspath = node.link_to or node.absolute_path
  184. local is_folder = node.open ~= nil
  185. local basedir = is_folder and abspath or vim.fn.fnamemodify(abspath, ":h")
  186. require("telescope.builtin")[telescope_mode] {
  187. cwd = basedir,
  188. }
  189. end
  190. return M