diff options
Diffstat (limited to 'lua/conf/plugins/oil.lua')
-rw-r--r-- | lua/conf/plugins/oil.lua | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/lua/conf/plugins/oil.lua b/lua/conf/plugins/oil.lua new file mode 100644 index 0000000..5eeac4d --- /dev/null +++ b/lua/conf/plugins/oil.lua @@ -0,0 +1,160 @@ +local misc = require('core.misc') +local map = misc.map + +local permission_hlgroups = { + ['-'] = 'NonText', + ['r'] = 'DiagnosticSignWarn', + ['w'] = 'DiagnosticSignHint', + ['x'] = 'DiagnosticSignOk', +} + +return { 'stevearc/oil.nvim', + disable = not vim.fn.has("nvim-0.8.0"), + function() + require("oil").setup { + -- ID is automatically added at the beginning, and name at the end + -- See :help oil-columns + columns = { + { + "permissions", + highlight = function(permission_str) + local hls = {} + for i = 1, #permission_str do + local char = permission_str:sub(i, i) + table.insert(hls, { permission_hlgroups[char], i - 1, i }) + end + return hls + end, + }, + { "size", highlight = '@number' } + }, + + -- Window-local options to use for oil buffers + win_options = { + number = false, + relativenumber = false, + wrap = false, + signcolumn = "no", + cursorcolumn = false, + foldcolumn = "0", + spell = false, + list = false, + conceallevel = 3, + concealcursor = "nvic" + }, + + -- Send deleted files to the trash instead of permanently deleting them (:help oil-trash) + delete_to_trash = false, + + -- Skip the confirmation popup for simple operations (:help oil.skip_confirm_for_simple_edits) + skip_confirm_for_simple_edits = false, + + -- Selecting a new/moved/renamed file or directory will prompt you to save changes first + -- (:help prompt_save_on_select_new_entry) + prompt_save_on_select_new_entry = true, + + -- Oil will automatically delete hidden buffers after this delay + -- You can set the delay to false to disable cleanup entirely + -- Note that the cleanup process only starts when none of the oil buffers are currently displayed + cleanup_delay_ms = 2000, + lsp_file_methods = { + -- Enable or disable LSP file operations + enabled = true, + -- Time to wait for LSP file operations to complete before skipping + timeout_ms = 1000, + -- Set to true to autosave buffers that are updated with LSP willRenameFiles + -- Set to "unmodified" to only save unmodified buffers + autosave_changes = "unmodified" + }, + + -- Constrain the cursor to the editable parts of the oil buffer + -- Set to `false` to disable, or "name" to keep it on the file names + constrain_cursor = "editable", + + -- Set to true to watch the filesystem for changes and reload oil + watch_for_changes = false, + + -- Keymaps in oil buffer. Can be any value that `vim.keymap.set` accepts OR a table of keymap + -- options with a `callback` (e.g. { callback = function() ... end, desc = "", mode = "n" }) + -- Additionally, if it is a string that matches "actions.<name>", + -- it will use the mapping at require("oil.actions").<name> + -- Set to `false` to remove a keymap + -- See :help oil-actions for a list of all available actions + keymaps = { + ["g?"] = { "actions.show_help", mode = "n" }, + ["<C-l>"] = "actions.refresh", + ["<CR>"] = "actions.select", + ["-"] = { "actions.parent", mode = "n" }, + ["_"] = { "actions.open_cwd", mode = "n" }, + ["`"] = { "actions.cd", mode = "n" }, + ["~"] = { "actions.cd", opts = { scope = "tab" }, mode = "n" }, + ["gs"] = { "actions.change_sort", mode = "n" }, + ["gx"] = "actions.open_external", + ["g."] = { "actions.toggle_hidden", mode = "n" }, + ["g\\"] = { "actions.toggle_trash", mode = "n" } + }, + + view_options = { + -- Show files and directories that start with "." + show_hidden = false, + + -- This function defines what is considered a "hidden" file + is_hidden_file = function(name, bufnr) + if name == ".." then -- show previous directory + return false + end + local m = name:match("^%.") + return m ~= nil + end, + + -- This function defines what will never be shown, even when `show_hidden` is set + is_always_hidden = function(name, bufnr) + return false + end, + + -- Sort file names with numbers in a more intuitive order for humans. + -- Can be "fast", true, or false. "fast" will turn it off for large directories. + natural_order = "fast", + + -- Sort file and directory names case insensitive + case_insensitive = false, + + sort = { + -- sort order can be "asc" or "desc" + -- see :help oil-columns to see which columns are sortable + { "type", "asc" }, + { "name", "asc" }, + }, + + -- Customize the highlight group for the file name + highlight_filename = function(entry, is_hidden, is_link_target, is_link_orphan) + return nil + end, + }, + + -- Configuration for the floating window in oil.open_float + float = { + border = "solid" + }, + + -- Configuration for the floating action confirmation window + confirmation = { + border = "solid" + }, + -- Configuration for the floating progress window + progress = { + border = "solid" + }, + -- Configuration for the floating SSH window + ssh = { + border = "solid" + }, + -- Configuration for the floating keymaps help window + keymaps_help = { + border = "solid" + } + } + + map('n', '-', '<cmd>Oil<CR>') + end +} |