Skip to content

weirongxu/coc-explorer

Repository files navigation

coc-explorer

Explorer extension for coc.nvim

Note: This project is still under development and may be broken.

Build Status

Screenshot

image

Requirements

>= vim 8.1.1418 or >= neovim 0.3.1

Usage

  1. Install by coc.nvim command:
    :CocInstall coc-explorer
    
  2. Configuration custom vim mapping
    :nmap <space>e <Cmd>CocCommand explorer<CR>
    
  3. Open explorer
    <space>e
    
  4. Press ? to show mappings help

More at Quickstart

Feature

  • Buffer source
    • Highlight visible buffers in real time
  • File tree source
    • Basic actions
      • Open file in select / vsplit / tab explorer.openAction.strategy options:
        • select: Open action use selection UI
        • vsplit: Open action use vsplit
        • split: Open action use split
        • tab: Open action use tab
        • previousBuffer: Open action use last used buffer
        • previousWindow: Open action use last used window
        • sourceWindow: Open action use the window where explorer opened
      • Selection
      • Cut / Copy / Paste
      • Delete action use trash by default
      • Other actions, press ? in explorer to check out the all actions
    • Git status
    • Automatically reveal the current file
    • Icons, use nerdfont
    • Search files by Coc-list
    • Preview file attributes by floating window
    • LSP
      • diagnostic
      • file rename (won't support, use watchman)
    • Exrename, like defx
    • Archive file (use lsar / unar)
    • SSH
  • Bookmark source (DEPRECATED) (require coc-bookmark)
  • Git source
    • Git actions
  • Show help

Command

:CocCommand explorer [options] [root-uri]

User events

  • CocExplorerOpenPre: triggered before open explorer
  • CocExplorerOpenPost: triggered after open explorer
  • CocExplorerQuitPre: triggered before quit explorer
  • CocExplorerQuitPost: triggered after quit explorer

Example

:CocCommand explorer
    \ --toggle
    \ --sources=buffer+,file+
    \ /root/path

Reveal to current buffer for closest coc-explorer

nmap <Leader>er <Cmd>call CocAction('runCommand', 'explorer.doAction', 'closest', ['reveal:0'], [['relative', 0, 'file']])<CR>

Presets

let g:coc_explorer_global_presets = {
\   '.vim': {
\     'root-uri': '~/.vim',
\   },
\   'cocConfig': {
\      'root-uri': '~/.config/coc',
\   },
\   'tab': {
\     'position': 'tab',
\     'quit-on-open': v:true,
\   },
\   'tab:$': {
\     'position': 'tab:$',
\     'quit-on-open': v:true,
\   },
\   'floating': {
\     'position': 'floating',
\     'open-action-strategy': 'sourceWindow',
\   },
\   'floatingTop': {
\     'position': 'floating',
\     'floating-position': 'center-top',
\     'open-action-strategy': 'sourceWindow',
\   },
\   'floatingLeftside': {
\     'position': 'floating',
\     'floating-position': 'left-center',
\     'floating-width': 50,
\     'open-action-strategy': 'sourceWindow',
\   },
\   'floatingRightside': {
\     'position': 'floating',
\     'floating-position': 'right-center',
\     'floating-width': 50,
\     'open-action-strategy': 'sourceWindow',
\   },
\   'simplify': {
\     'file-child-template': '[selection | clip | 1] [indent][icon | 1] [filename omitCenter 1]'
\   },
\   'buffer': {
\     'sources': [{'name': 'buffer', 'expand': v:true}]
\   },
\ }

" Use preset argument to open it
nmap <space>ed <Cmd>CocCommand explorer --preset .vim<CR>
nmap <space>ef <Cmd>CocCommand explorer --preset floating<CR>
nmap <space>ec <Cmd>CocCommand explorer --preset cocConfig<CR>
nmap <space>eb <Cmd>CocCommand explorer --preset buffer<CR>

" List all presets
nmap <space>el <Cmd>CocList explPresets<CR>

Options

[root-uri]

Explorer root, default is use root-strategies

--root-strategies <root-strategies>

Strategies for root uri, types list of (keep | workspace | cwd | sourceBuffer | reveal | custom:name)

  • keep: never change the root path
  • workspace: workspace.root
  • cwd: getcwd()
  • sourceBuffer: directory of buffer
  • reveal: directory of reveal path

default is: workspace,cwd,sourceBuffer,reveal or "explorer.root.strategies" of coc-settings

Custom root patterns settings

{
  "explorer.root.customRules": {
    "vcs": {
      "patterns": [".git", ".hg", ".projections.json"],
    },
    "vcs-r": {
      "patterns": [".git", ".hg", ".projections.json"],
      "bottomUp": true,
    },
  },
}

Using custom root patterns

{
  "explorer.root.strategies": ["workspace", "custom:vcs", "custom:vcs-r"],
}

or :CocCommand explorer --root-strategies workspace,custom:vcs,custom:vcs-r

--preset <name>

Open explorer use presets

--toggle | --no-toggle

Close the explorer if it exists, default: --toggle

--focus | --no-focus

Focus to explorer when opened, default: --focus

--open-action-strategy <strategy>

Strategy for open action, types: select | vsplit | split | tab | previousBuffer | previousWindow | sourceWindow, default: select

--quit-on-open | --no-quit-on-open

quit explorer when open action, default: --no-quit-on-open

--sources <sources>

Explorer sources, example: buffer+,file+, default: buffer-,file+

              expand
      collapsed β”‚
          ↓     ↓
    buffer-,file+
    β””β”€β”€β”¬β”€β”˜  β””β”€β”¬β”˜
buffer source β”‚
          file source

--position <position>

Explorer position, supported position: left, right, tab, tab:0, tab:$, floating, default: left

--width <number>

Width of Explorer window for open in left or right side, default: 40

--content-width <number>

Content width, default: 0

--content-width-type <type>

Type of content width, types: win-width, vim-width, , default: vim-width

--floating-position <position>

Explorer position for floating window, positions:

  • left-center
  • center
  • right-center
  • center-top
  • <number for left>,<number for top>

default: center

--floating-width <number>

Width of Explorer window when position is floating, use negative value or zero to as width - value, default: 0

--floating-height <number>

Height of Explorer window when position is floating, use negative value or zero to as height - value, default: 0

--floating-content-width <number>

Width of content when position is floating, use negative value or zero to as width - value, default: 0

--buffer-root-template <template>

Template for root node of buffer source

Columns:

  • icon
  • hidden
  • title

default: [icon] [title] [hidden & 1]

--buffer-child-template <template>

Template for child node of buffer source

Columns:

  • selection
  • name
  • bufname
  • modified
  • bufnr
  • readonly
  • fullpath
  • relativePath

default: [selection | 1] [bufnr] [name][modified][readonly] [fullpath]

--buffer-child-labeling-template <template>

Labeling template for child node of buffer source, use for preview when previewAction is labeling

Columns: same with --buffer-child-template

default: [name][bufname][fullpath][modified][readonly]

--file-root-template <template>

Template for root node of file source

Columns:

  • icon
  • hidden
  • title
  • root
  • fullpath

default: [icon] [title] [hidden & 1][root] [fullpath]

--file-root-labeling-template <template>

Labeling template for root node of file source, use for preview when previewAction is labeling

Columns: same with --file-root-template

default: [fullpath]

--file-child-template <template>

Template for child node file source

Columns:

  • git
  • selection
  • icon
  • filename
  • linkIcon
  • link
  • fullpath
  • indent
  • clip
  • size
  • readonly
  • modified
  • timeModified
  • timeCreated
  • timeAccessed
  • diagnosticError
  • diagnosticWarning

default: [git | 2] [selection | clip | 1] [indent][icon | 1] [diagnosticError & 1][filename omitCenter 1][modified][readonly] [linkIcon & 1][link growRight 1 omitCenter 5][size]

--file-child-labeling-template <template>

Labeling template for child node of file source, use for preview when previewAction is labeling

Columns: same with --file-child-template

default: [fullpath][link][diagnosticWarning][diagnosticError][size][timeAccessed][timeModified][timeCreated][readonly][modified]

--bookmark-root-template <template>

Template for root node of bookmark source

Columns:

  • icon
  • hidden
  • title

default: [icon] [title] [hidden & 1]

--bookmark-child-template <template>

Template for child node of bookmark source

Columns:

  • selection
  • position
  • filename
  • fullpath
  • line
  • annotation

default: [selection | 1] [filename] [position]

--bookmark-child-labeling-template <template>

Labeling template for child node of bookmark source, use for preview when previewAction is labeling

Columns: same with --bookmark-child-template

default: [filename][fullpath][position][line][annotation]

--reveal <filepath>

Explorer will expand to this filepath, default: current buffer

--reveal-when-open | --no-reveal-when-open

Explorer will automatically reveal to the current buffer when open explorer, default: "explorer.file.reveal.whenOpen"

Template grammar

Example:

[git | 2] [selection | clip | 1] [diagnosticError & 1][filename growRight 1 omitCenter 5]
  • [git]
    • Display git.
  • [git | 2]
    • If git is not empty, display git, otherwise display 2 spaces.
  • [selection | clip | 1]
    • Checking selection and clip in turn, if one is not empty, display it, otherwise display 1 spaces.
  • [diagnosticError & 1]
    • If diagnosticError is empty, display nothing. otherwise display diagnosticError and 1 space.
  • [filename growRight 1 omitCenter 5]
    • Flexible to display filename, grow right column volume is 1, omit center volume is 5

Grammar:

                      block
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
[selection | clip | 1] [filename growRight 1 omitCenter 5]
                      ↑
                 plain string

            column
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚                     β”‚   volume of modifier
     β”‚         β”Œβ”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”‚β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”Œβ”€β”€β”€β”΄β”€β”€β”€β”   β”Œβ”€β”΄β”   ↓   β”Œβ”€β”€β”΄β”€β”€β”€β”           ↓            ↓
[selection | clip | 1] [filename growRight 1 omitCenter 5]
           ↑      ↑              β””β”€β”€β”€β”¬β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜
           β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           modifier

Custom mappings example

You can use ? to view all actions of current source

// coc-settings.json
{
  "explorer.keyMappings.global": {
    "i": false, // cancel default mapkey
    "<c-o>": "noop",

    "*": "toggleSelection",
    "<tab>": "actionMenu",

    "gk": ["wait", "expandablePrev"],
    "gj": ["wait", "expandableNext"],
    "h": ["wait", "collapse"],
    "l": ["wait", "expandable?", "expand", "open"],
    "J": ["wait", "toggleSelection", "normal:j"],
    "K": ["wait", "toggleSelection", "normal:k"],
    "gl": ["wait", "expand:recursive"],
    "gh": ["wait", "collapse:recursive"],
    "<2-LeftMouse>": [
      "expandable?",
      ["expanded?", "collapse", "expand"],
      "open",
    ],
    "o": ["wait", "expanded?", "collapse", "expand"],
    "<cr>": ["wait", "expandable?", "cd", "open"],
    "e": "open",
    "s": "open:split",
    "E": "open:vsplit",
    "t": "open:tab",
    "<bs>": ["wait", "gotoParent"],
    "gs": ["wait", "reveal:select"],
    "il": "preview:labeling",
    "ic": "preview:content",
    "Il": "previewOnHover:toggle:labeling",
    "Ic": "previewOnHover:toggle:content",
    "II": "previewOnHover:disable",

    "yp": "copyFilepath",
    "yn": "copyFilename",
    "yy": "copyFile",
    "dd": "cutFile",
    "p": "pasteFile",
    "df": "delete",
    "dF": "deleteForever",

    "a": "addFile",
    "A": "addDirectory",
    "r": "rename",

    "zh": "toggleHidden",
    "g<dot>": "toggleHidden",
    "R": "refresh",

    "?": "help",
    "q": "quit",
    "<esc>": "esc",
    "X": "systemExecute",
    "gd": "listDrive",

    "f": "search",
    "F": "searchRecursive",

    "gf": "gotoSource:file",
    "gb": "gotoSource:buffer",

    "[[": ["wait", "sourcePrev"],
    "]]": ["wait", "sourceNext"],

    "[i": ["wait", "indentPrev"],
    "]i": ["wait", "indentNext"],

    "[m": ["wait", "markPrev:modified"],
    "]m": ["wait", "markNext:modified"],

    "[d": ["wait", "markPrev:diagnosticError:diagnosticWarning"],
    "]d": ["wait", "markNext:diagnosticError:diagnosticWarning"],
    "[D": ["wait", "markPrev:diagnosticError"],
    "]D": ["wait", "markNext:diagnosticError"],

    "[c": ["wait", "markPrev:git"],
    "]c": ["wait", "markNext:git"],
    "<<": "gitStage",
    ">>": "gitUnstage",
  },
}

WIKI

FAQ

Example by Vim API and event hooks

function! s:explorer_cur_dir()
  let node_info = CocAction('runCommand', 'explorer.getNodeInfo', 0)
  return fnamemodify(node_info['fullpath'], ':h')
endfunction

function! s:exec_cur_dir(cmd)
  let dir = s:explorer_cur_dir()
  execute 'cd ' . dir
  execute a:cmd
endfunction

function! s:init_explorer()
  set winblend=10

  " Integration with other plugins

  " CocList
  nmap <buffer> <Leader>fg <Cmd>call <SID>exec_cur_dir('CocList -I grep')<CR>
  nmap <buffer> <Leader>fG <Cmd>call <SID>exec_cur_dir('CocList -I grep -regex')<CR>
  nmap <buffer> <C-p> <Cmd>call <SID>exec_cur_dir('CocList files')<CR>

  " vim-floaterm
  nmap <buffer> <Leader>ft <Cmd>call <SID>exec_cur_dir('FloatermNew --wintype=floating')<CR>
endfunction

function! s:enter_explorer()
  if &filetype == 'coc-explorer'
    " statusline
    setl statusline=coc-explorer
  endif
endfunction

augroup CocExplorerCustom
  autocmd!
  autocmd BufEnter * call <SID>enter_explorer()
  autocmd FileType coc-explorer call <SID>init_explorer()
augroup END

more API: https://github.com/weirongxu/coc-explorer/wiki/Vim-API

Settings

Commands

explorer: Open explorer.

Configuration

Definitions

Explorer1: Explorer1. Type:
{
    /**
     * Explorer source name
     */
    name: 'bookmark' | 'buffer' | 'file';
    /**
     * Whether to expand it by default
     */
    expand: boolean;
    [k: string]: unknown | undefined;
}[]
Position: Position. Type:
'left' | 'right' | 'tab' | 'floating'
MappingActionExp: MappingActionExp. Type:
MappingAction | MappingActionExp[]
MappingAction: MappingAction. Type:
string | {
    name?: string;
    args?: string[];
    [k: string]: unknown | undefined;
}
PreviewActionStrategy: PreviewActionStrategy. Type:
'labeling' | 'content'
RootStrategy: RootStrategy. Type:
'keep' | 'workspace' | 'cwd' | 'sourceBuffer' | 'reveal'
Properties
explorer.presets: Explorer presets. Type:
{
    [k: string]: {
        'root-uri'?: string;
        /**
         * Close the explorer if it exists
         */
        toggle?: boolean;
        /**
         * Focus to explorer when opened
         */
        focus?: boolean;
        /**
         * Strategy for open action
         */
        'open-action-strategy'?: 'select' | 'split' | 'split.plain' | 'split.intelligent' | 'vsplit' | 'vsplit.plain' | 'vsplit.intelligent' | 'tab' | 'drop.select' | 'drop.tab' | 'previousBuffer' | 'previousWindow' | 'sourceWindow';
        /**
         * quit explorer when open action
         */
        'quit-on-open'?: boolean;
        reveal?: string;
        sources?: Explorer1;
        /**
         * Explorer position
         */
        position?: Position | [
            Position
        ] | [
            Position,
            string
        ];
        /**
         * Width of explorer window for open in left or right side
         */
        width?: number;
        /**
         * Content width, use negative value or zero to as `width - value`
         */
        'content-width'?: number;
        /**
         * Type of content width
         */
        'content-width-type'?: 'win-width' | 'vim-width';
        /**
         * Position of Explorer for floating window
         */
        'floating-position'?: ('left-center' | 'right-center' | 'center' | 'center-top') | [
            number,
            number
        ];
        /**
         * Width of explorer window when position is floating, use negative value or zero to as `width - value`
         */
        'floating-width'?: number;
        /**
         * Height of explorer window when position is floating, use negative value or zero to as `height - value`
         */
        'floating-height'?: number;
        /**
         * Width of content when position is floating, use negative value or zero to as `width - value`
         */
        'floating-content-width'?: number;
        /**
         * Template for root node of buffer source
         */
        'buffer-root-template'?: string;
        /**
         * Template for child node of buffer source
         */
        'buffer-child-template'?: string;
        /**
         * Labeling template for child node of buffer source, use for preview when previewAction is labeling
         */
        'buffer-child-labeling-template'?: string;
        /**
         * Template for root node of file source
         */
        'file-root-template'?: string;
        /**
         * Labeling template for root node of file source, use for preview when previewAction is labeling
         */
        'file-root-labeling-template'?: string;
        /**
         * Template for child node file source
         */
        'file-child-template'?: string;
        /**
         * Labeling template for child node of file source, use for preview when previewAction is labeling
         */
        'file-child-labeling-template'?: string;
        [k: string]: unknown | undefined;
    } | undefined;
}
Default:
null
explorer.mouseMode: Mouse mode. Type:
'none' | 'singleclick' | 'doubleclick'
Default:
"doubleclick"
explorer.keyMappingMode: Keymapping mode. Type:
'none' | 'default'
Default:
"default"
explorer.keyMappings.global: . Type:
Mapping
Default:
{}
explorer.keyMappings.vmap: . Type:
Mapping1
Default:
{}
explorer.keyMappings.sources: Custom key mappings in source. Type:
{
    [k: string]: Mapping2 | undefined;
}
Default:
{}
explorer.toggle: Close the explorer if it exists. Type:
boolean
Default:
true
explorer.focus: Focus to explorer when opened. Type:
boolean
Default:
true
explorer.position: Explorer position. Type:
Position | [
    Position
] | [
    Position,
    string
]
Default:
"left"
explorer.width: Width of explorer window for open in left or right side. Type:
number
Default:
40
explorer.contentWidth: Content width, use negative value or zero to as `width - value`. Type:
number
Default:
0
explorer.contentWidthType: Type of content width. Type:
'win-width' | 'vim-width'
Default:
"vim-width"
explorer.floating.position: Position of Explorer for floating window. Type:
('left-center' | 'right-center' | 'center' | 'center-top') | [
    number,
    number
]
Default:
"center"
explorer.floating.width: Width of explorer window when position is floating, use negative value or zero to as `width - value`. Type:
number
Default:
-10
explorer.floating.height: Height of explorer window when position is floating, use negative value or zero to as `height - value`. Type:
number
Default:
-10
explorer.floating.contentWidth: Width of content when position is floating, use negative value or zero to as `width - value`. Type:
number
Default:
0
explorer.floating.border.enable: . Type:
boolean
Default:
true
explorer.floating.border.chars: Border chars for floating window, their order is top/right/bottom/left/topleft/topright/botright/botleft. Type:
string[]
Default:
[
  "─",
  "β”‚",
  "─",
  "β”‚",
  "β”Œ",
  "┐",
  "β”˜",
  "β””"
]
explorer.floating.border.title: . Type:
string
Default:
"coc-explorer"
explorer.floating.hideOnCocList: Hide floating window, when opening CocList. Type:
boolean
Default:
true
explorer.autoExpandMaxDepth: Automatically expand maximum depth of one time. Type:
number
Default:
20
explorer.autoExpandOptions: Automatically expand options. Type:
('recursive' | 'compact' | 'uncompact' | 'recursiveSingle')[]
Default:
[
  "compact",
  "uncompact"
]
explorer.autoCollapseOptions: Automatically collapse options. Type:
'recursive'[]
Default:
[
  "recursive"
]
explorer.quitOnOpen: quit explorer when open action. Type:
boolean
Default:
false
explorer.previewAction.onHover: Open preview when hovering over on node. Type:
false | PreviewActionStrategy | [
    PreviewActionStrategy,
    number
]
Default:
false
explorer.previewAction.content.maxHeight: Preview content maximum height. Type:
number
Default:
30
explorer.openAction.strategy: Strategy for open action. Type:
'select' | 'split' | 'split.plain' | 'split.intelligent' | 'vsplit' | 'vsplit.plain' | 'vsplit.intelligent' | 'tab' | 'drop.select' | 'drop.tab' | 'previousBuffer' | 'previousWindow' | 'sourceWindow'
Default:
"select"
explorer.openAction.select.filter: Filter windows for select strategy. Type:
BufferFilter & {
    /**
     * Filter windows for select strategy in source
     */
    sources?: {
        [k: string]: BufferFilter;
    };
    [k: string]: unknown | undefined;
}
Default:
{
  "buftypes": [
    "terminal"
  ],
  "filetypes": [
    "vista",
    "vista_kind",
    "qf",
    "tagbar",
    "coctree"
  ],
  "floatingWindows": true,
  "sources": {
    "buffer": {
      "buftypes": []
    }
  }
}
explorer.openAction.select.chars: Chars for select strategy. Type:
string
Default:
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
explorer.openAction.for.directory: The action when you open a directory of file source. Type:
MappingAction | MappingActionExp[]
Default:
"cd"
explorer.openAction.relativePath: Use relative path when open a file with openAction. Type:
boolean
Default:
false
explorer.expandStores: The expand stores of sources. Type:
boolean | {
    includes: string[];
} | {
    excludes: string[];
}
Default:
true
explorer.sources: . Type:
Explorer1
Default:
[
  {
    "name": "bookmark",
    "expand": false
  },
  {
    "name": "buffer",
    "expand": false
  },
  {
    "name": "file",
    "expand": true
  }
]
explorer.root.strategies: Strategies for root uri. Type:
(RootStrategy | string)[]
Default:
[
  "workspace",
  "cwd",
  "sourceBuffer",
  "reveal"
]
explorer.root.customRules: Patterns for root uri. Type:
{
    [k: string]: {
        patterns: string[];
        /**
         * Search outward from the current buffer, default is false
         */
        bottomUp?: boolean;
        [k: string]: unknown | undefined;
    } | undefined;
}
Default:
null
explorer.enableFloatinput: Enable integrated with coc-floatinput. Type:
boolean
Default:
true
explorer.icon.enableNerdfont: Enable nerdfont. Type:
boolean
Default:
false
explorer.icon.source: The source or file type icon and color. Type:
'builtin' | 'vim-devicons' | 'nvim-web-devicons' | 'nerdfont.vim'
Default:
"builtin"
explorer.icon.customIcons: Custom icons and color highlights. Type:
{
    /**
     * Icons for extension groups
     */
    icons?: {
        /**
         * Icon for an extension group
         */
        [k: string]: {
            /**
             * Group icon
             */
            code: string;
            /**
             * Group icon color
             */
            color: string;
            [k: string]: unknown | undefined;
        } | undefined;
    };
    /**
     * File extension to icon group
     */
    extensions?: {
        [k: string]: unknown | undefined;
    };
    /**
     * Filename to icon group
     */
    filenames?: {
        [k: string]: unknown | undefined;
    };
    /**
     * Filename to icon group
     */
    dirnames?: {
        [k: string]: unknown | undefined;
    };
    /**
     * Pattern to icon group
     */
    patternMatches?: {
        [k: string]: unknown | undefined;
    };
    /**
     * Pattern to icon group
     */
    dirPatternMatches?: {
        [k: string]: unknown | undefined;
    };
    [k: string]: unknown | undefined;
}
Default:
{
  "icons": {},
  "extensions": {},
  "filenames": {},
  "dirnames": {},
  "patternMatches": {},
  "dirPatternMatches": {}
}
explorer.icon.expanded: Icon for expanded node. Type:
string
Default:
"-"
explorer.icon.collapsed: Icon for collapsed node. Type:
string
Default:
"+"
explorer.icon.selected: Selection selected chars for File source. Type:
string
Default:
"βœ“"
explorer.icon.hidden: Icon for hidden status. Type:
string
Default:
"β€₯"
explorer.icon.link: Icon for soft link. Type:
string
Default:
"β†’"
explorer.icon.readonly: Icon for readonly. Type:
string
Default:
"RO"
explorer.bookmark.root.template: Template for root node of bookmark source. Type:
string
Default:
"[icon] [title] [hidden & 1]"
explorer.bookmark.child.template: Template for child node of bookmark source. Type:
string
Default:
"[selection | 1] [filename] [position] - [annotation]"
explorer.bookmark.child.labelingTemplate: Labeling template for child node of bookmark source, use for preview when previewAction is labeling. Type:
string
Default:
"[filename][fullpath][position][line][annotation]"
explorer.buffer.showHiddenBuffers: Default show hidden buffers. Type:
boolean
Default:
false
explorer.buffer.tabOnly: Default only show buffers in current tab. Type:
boolean
Default:
false
explorer.buffer.root.template: Template for root node of buffer source. Type:
string
Default:
"[icon] [title] [hidden & 1]"
explorer.buffer.child.template: Template for child node of buffer source. Type:
string
Default:
"[git | 2] [selection | 1] [bufnr] [name][modified][readonly] [relativePath]"
explorer.buffer.child.labelingTemplate: Labeling template for child node of buffer source, use for preview when previewAction is labeling. Type:
string
Default:
"[name][bufname][fullpath][modified][readonly][diagnosticError][diagnosticWarning][git]"
explorer.datetime.format: Explorer datetime format, check out https://date-fns.org/v2.9.0/docs/format. Type:
string
Default:
"yy/MM/dd HH:mm:ss"
explorer.file.reveal.whenOpen: Explorer will automatically reveal to the current buffer when open explorer. Type:
boolean
Default:
true
explorer.file.reveal.auto: Explorer will automatically reveal to the current buffer when enter a buffer. Type:
boolean
Default:
false
explorer.file.reveal.filter: Exlorer will not automatically reveal to these buffers. Type:
{
    /**
     * Filter buffer by RegExp
     */
    patterns?: string[];
    /**
     * Filter buffer by literal string
     */
    literals?: string[];
    [k: string]: unknown | undefined;
}
Default:
{}
explorer.file.hiddenRules: Custom hidden rules for file. Type:
{
    extensions?: string[];
    filenames?: string[];
    /**
     * Pattern to icon group
     */
    patternMatches?: unknown[];
    [k: string]: unknown | undefined;
}
Default:
{
  "extensions": [
    "o",
    "a",
    "obj",
    "pyc"
  ],
  "filenames": [],
  "patternMatches": [
    "^\\."
  ]
}
explorer.file.showHiddenFiles: Default show hidden files. Type:
boolean
Default:
false
explorer.file.root.template: Template for root node of file source. Type:
string
Default:
"[icon] [title] [git & 1][hidden & 1][root] [fullpath]"
explorer.file.root.labelingTemplate: Labeling template for root node of file source, use for preview when previewAction is labeling. Type:
string
Default:
"[fullpath][git]"
explorer.file.child.template: Template for child node file source. Type:
string
Default:
"[git | 2] [selection | clip | 1] [indent][icon | 1] [diagnosticError & 1][filename omitCenter 1][modified][readonly] [linkIcon & 1][link growRight 1 omitCenter 5][size]"
explorer.file.child.labelingTemplate: Labeling template for child node of file source, use for preview when previewAction is labeling. Type:
string
Default:
"[fullpath][link][diagnosticError][diagnosticWarning][git][size][timeAccessed][timeModified][timeCreated][readonly][modified]"
explorer.file.column.link.copy: Whether the file has been copied. Type:
string
Default:
null
explorer.file.column.clip.copy: Whether the file has been copied. Type:
string
Default:
null
explorer.file.column.clip.cut: Whether the file has been cut. Type:
string
Default:
null
explorer.file.column.indent.chars: Indent chars for file source. Type:
string
Default:
"  "
explorer.file.column.indent.indentLine: Whether to display the alignment line. Type:
boolean
Default:
null
explorer.file.cdCommand: Change directory when performing the cd action. Type:
false | 'cd' | 'tcd'
Default:
false
explorer.filename.colored.enable: Enable colored filenames based on status. Type:
boolean | {
    diagnosticError?: boolean;
    diagnosticWarning?: boolean;
    git?: boolean;
    [k: string]: unknown | undefined;
}
Default:
true
explorer.file.git.showUntrackedFiles: Show untracked file in git. Type:
boolean | 'system'
Default:
null
explorer.trash.command: Trash command template, arguments(%s source filepath, %l source filepath list), example: 'trash-put %l', 'mv --backup=t %l ~/.trash/'. Type:
('nodejs:module' | 'trash-put %s') | string
Default:
"nodejs:module"
explorer.diagnostic.displayMax: Maximum count of diagnostic column. Type:
number
Default:
99
explorer.diagnostic.enableSubscriptNumber: Subscript number for diagnostic count. Type:
boolean
Default:
false
explorer.git.enable: Enable git. Type:
boolean
Default:
true
explorer.git.command: Git command. Type:
string
Default:
"git"
explorer.git.icon.rootStatus.stashed: Icon for a stash exists for the local repository. Type:
string
Default:
"$"
explorer.git.icon.rootStatus.ahead: Icon for current branch ahead of upstream. Type:
string
Default:
"⇑"
explorer.git.icon.rootStatus.behind: Icon for current branch behind upstream. Type:
string
Default:
"⇣"
explorer.git.icon.rootStatus.conflicted: Icon for current branch has merge conflicts. Type:
string
Default:
"="
explorer.git.icon.rootStatus.untracked: Icon for there are untracked files in the working directory. Type:
string
Default:
"?"
explorer.git.icon.rootStatus.modified: Icon for there are file modifications in the working directory. Type:
string
Default:
"~"
explorer.git.icon.rootStatus.added: Icon for a new file has been added to the staging area. Type:
string
Default:
"+"
explorer.git.icon.rootStatus.renamed: Icon for a renamed file has been added to the staging area. Type:
string
Default:
"β†’"
explorer.git.icon.rootStatus.deleted: Icon for a file's deletion has been added to the staging area. Type:
string
Default:
"βœ—"
explorer.git.icon.status.mixed: Icon for git mixed status. Type:
string
Default:
"*"
explorer.git.icon.status.unmodified: Icon for git unmodified status. Type:
string
Default:
" "
explorer.git.icon.status.modified: Icon for git modified status. Type:
string
Default:
"M"
explorer.git.icon.status.added: Icon for git added status. Type:
string
Default:
"A"
explorer.git.icon.status.deleted: Icon for git removed status. Type:
string
Default:
"D"
explorer.git.icon.status.renamed: Icon for git renamed status. Type:
string
Default:
"R"
explorer.git.icon.status.copied: Icon for git copied status. Type:
string
Default:
"C"
explorer.git.icon.status.unmerged: Icon for git unmerged status. Type:
string
Default:
"U"
explorer.git.icon.status.untracked: Icon for git untracked status. Type:
string
Default:
"?"
explorer.git.icon.status.ignored: Icon for git ignored status. Type:
string
Default:
"!"
explorer.git.showIgnored: Show ignored files in git. Type:
boolean
Default:
true
explorer.debug: Enable debug. Type:
boolean
Default:
false

Inspired by