kickstart.nvim/lua/plugins/oil.lua

103 lines
3.3 KiB
Lua

return {
'stevearc/oil.nvim',
dependencies = { 'nvim-tree/nvim-web-devicons' },
event = 'VimEnter',
keys = {
{
'~',
'<CMD>Oil<CR>',
mode = '',
desc = 'Open parent directory',
},
},
opts = {
default_file_explorer = true,
restore_window_options = true,
keymaps = {
['gd'] = {
desc = 'Toggle file detail view',
callback = function()
vim.g.detail = not vim.g.detail
if vim.g.detail then
require('oil').set_columns { 'icon', 'permissions', 'size', 'mtime' }
else
require('oil').set_columns { 'icon' }
end
end,
},
},
win_options = {
wrap = true,
-- signcolumn = '',
cursorcolumn = false,
foldcolumn = '0',
spell = false,
list = false,
conceallevel = 3,
concealcursor = 'nivc',
},
view_options = {
show_hidden = true,
is_always_hidden = function(name, _)
return name:match '.git'
end,
},
},
init = function()
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWinEnter' }, {
pattern = 'oil://*',
callback = function(params)
local bufnr = params.buf
if params.event == 'BufEnter' then
-- double Q to close window
vim.keymap.set('', 'qq', require('oil').close, { buffer = bufnr, desc = 'Close current window' })
-- toggle detailed list mode
vim.keymap.set('', '<leader>tnnn', function()
local fu = require 'fancyutil'
local winnr = 0
local val = fu.get_oil_nnn(winnr)
fu.set_oil_nnn(val ~= true, winnr)
end, { buffer = bufnr, desc = '[T]oggle [nnn] Mode' })
--- nnn move up file tree
vim.keymap.set('', '<Left>', function()
if require('oil.util').is_oil_bufnr(bufnr) and require('fancyutil').get_oil_nnn() then
local oil = require 'oil'
local bufname = vim.api.nvim_buf_get_name(bufnr)
local parent = oil.get_buffer_parent_url(bufname, true)
return oil.open(parent)
end
local keys = vim.api.nvim_replace_termcodes('<Left>', true, false, true)
vim.api.nvim_feedkeys(keys, 'n', false) -- send consumed keys
end, { buffer = bufnr, desc = 'Move up the file tree' })
-- nnn move down file tree
vim.keymap.set('', '<Right>', function()
local oil = require 'oil'
local entry = oil.get_cursor_entry()
local dir = oil.get_current_dir()
if entry and dir and require('fancyutil').get_oil_nnn(0) then
local path = dir .. entry.name
local stat = vim.loop.fs_stat(path)
if stat and stat.type == 'directory' then
return oil.open(path)
end
end
local keys = vim.api.nvim_replace_termcodes('<Right>', true, false, true)
vim.api.nvim_feedkeys(keys, 'n', false) -- send consumed keys
end, { buffer = bufnr, desc = 'Move down the file tree' })
return
end
local winnr = vim.fn.bufwinid(bufnr)
local val = require('fancyutil').get_oil_nnn(winnr)
if val == nil then
require('fancyutil').set_oil_nnn(true, winnr)
end
end,
})
end,
}