From aba394896b933fc9d1cecfab591c3b7865070a41 Mon Sep 17 00:00:00 2001 From: gegoune <69750637+gegoune@users.noreply.github.com> Date: Sat, 18 Jun 2022 06:14:42 +0200 Subject: [PATCH] docs: lighten up readme and rework docs (#1327) * docs: lighten up readme and rework docs * docs: clean up mappings from readme + some other small changes * docs: move sections around * ci: remove readme parts of docs' autogen * docs: discuss nvim-web-devicons and provide an example * docs: add an example setup * docs: fix opts scraping; try and make more macos compatible * docs: add *nvim-tree* tag at start of help * docs: add an example setup * docs: update quick start to match readme * docs: add basic commands * docs: add g? hint * docs: add :help links to readme * docs: restore help wanted * docs: add example screenshot * docs: add features * docs: add example screenshot * docs: add features to help * docs: clarify option functions Co-authored-by: Alexander Courtis --- .github/example.png | Bin 0 -> 86318 bytes README.md | 406 +++++--------------------- doc/nvim-tree-lua.txt | 263 ++++++++++------- scripts/generate_default_mappings.lua | 20 -- scripts/update-default-opts.sh | 17 +- 5 files changed, 230 insertions(+), 476 deletions(-) create mode 100644 .github/example.png diff --git a/.github/example.png b/.github/example.png new file mode 100644 index 0000000000000000000000000000000000000000..da02e7ecdb2bf1f79bf89f86f5ed1227373864c9 GIT binary patch literal 86318 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

YWR{h{C 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

Y)CAX|)4i%D*?oBc6 z%=+P=6cT9l@`Yn}bE=Q?s@}-K+nxU%{#seA%-mSb1;>n!rh7e;vZBFNU)Jwxs4|R# z7;g*3$Jx~0z+g2I_Mz2vgGPgbc2m=!-X+?43=9}-vX<}^x9I<+7&y7Bd8Le(?J1_i z2Ff%{Wya$ZEkRS^7Z&~H6;q#hk1TOTU*HQ;Zs?8KZ)-DS$;+f#%kmKqynKkD4_bz= z2;qVQ7x7k@OuuaZ0`5-@R|SfW!d`-)@hFAQ{#?ig%?#?-7n>SR`^9|RwxAjG}UcDF{0rvxZGzU2!_K(!v5LAiew zt#p>FzBk{zsyO`6plw>+g2mR}U-n-C(~b_B z>o0SUmBMb~MH}D)e zeZ9Gjl6mVT*H7qBc5`w9NL&LL6-*Vs7HDd%!4t%}3WA=mo)xMQgPKqwhK}7+vH4~3 za%0?&_uI!mPa;88m^=|e(0>CfMz(WGZ&*wA9UAbbDtfQHil2 zrg{`&Zf>C>iAopevFv<;UKaCVeF`QO*pqyC48jA0g4k$!Z;w!j9O>=s;3(5?JWgzf()KYPDK^WLv){jEED(kb{$MoRHy Js-(Wx{{fZ>lVAV< literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 67c18ce2..0722125c 100644 --- a/README.md +++ b/README.md @@ -2,379 +2,117 @@ [![CI](https://github.com/kyazdani42/nvim-tree.lua/actions/workflows/ci.yml/badge.svg)](https://github.com/kyazdani42/nvim-tree.lua/actions/workflows/ci.yml) -## Notice + -This plugin requires [neovim >=0.7.0](https://github.com/neovim/neovim/wiki/Installing-Neovim). + Automatic updates -If you have issues since the recent setup migration, check out [this guide](https://github.com/kyazdani42/nvim-tree.lua/issues/674) + File type icons + + Git integration + + Diagnostics integration: LSP and COC + + (Live) filtering + + Cut, copy, paste, rename, delete, create + + Highly customisable + +
## Install +This plugin requires [neovim >=0.7.0](https://github.com/neovim/neovim/wiki/Installing-Neovim). + Install with [vim-plug](https://github.com/junegunn/vim-plug): ```vim -" requires -Plug 'kyazdani42/nvim-web-devicons' " for file icons +Plug 'kyazdani42/nvim-web-devicons' " optional, for file icons Plug 'kyazdani42/nvim-tree.lua' ``` -Install with [packer](https://github.com/wbthomason/packer.nvim): +or with [packer](https://github.com/wbthomason/packer.nvim): ```lua use { - 'kyazdani42/nvim-tree.lua', - requires = { - 'kyazdani42/nvim-web-devicons', -- optional, for file icon - }, - tag = 'nightly' -- optional, updated every week. (see issue #1193) + 'kyazdani42/nvim-tree.lua', + requires = { + 'kyazdani42/nvim-web-devicons', -- optional, for file icons + }, + tag = 'nightly' -- optional, updated every week. (see issue #1193) } ``` ## Setup -Setup should be run in a lua file or in a lua heredoc (`:help lua-heredoc`) if using in a vim file. +Setup should be run in a lua file or in a lua heredoc [:help lua-heredoc](https://neovim.io/doc/user/lua.html) if using in a vim file. -Legacy `g:` options have been migrated to the setup function. See [this issue](https://github.com/kyazdani42/nvim-tree.lua/issues/674) for information on migrating your configuration. - -Setup may only be run once; subsequent calls will result in a warning. Do not invoke from, say, a packer config function and then call it again later. - -```vim -" vimrc -nnoremap :NvimTreeToggle -nnoremap r :NvimTreeRefresh -nnoremap n :NvimTreeFindFile -" More available functions: -" NvimTreeOpen -" NvimTreeClose -" NvimTreeFocus -" NvimTreeFindFileToggle -" NvimTreeResize -" NvimTreeCollapse -" NvimTreeCollapseKeepBuffers - -set termguicolors " this variable must be enabled for colors to be applied properly - -" a list of groups can be found at `:help nvim_tree_highlight` -highlight NvimTreeFolderIcon guibg=blue -``` +Setup may only be run once; subsequent calls will result in a warning. ```lua --- init.lua +-- examples for your init.lua --- empty setup using defaults: add your own options -require'nvim-tree'.setup { -} +-- empty setup using defaults +require("nvim-tree").setup() --- OR - --- setup with all defaults --- each of these are documented in `:help nvim-tree.OPTION_NAME` --- nested options are documented by accessing them with `.` (eg: `:help nvim-tree.view.mappings.list`). -require'nvim-tree'.setup { -- BEGIN_DEFAULT_OPTS - auto_reload_on_write = true, - create_in_closed_folder = false, - disable_netrw = false, - hijack_cursor = false, - hijack_netrw = true, - hijack_unnamed_buffer_when_opening = false, - ignore_buffer_on_setup = false, - open_on_setup = false, - open_on_setup_file = false, - open_on_tab = false, - sort_by = "name", - update_cwd = false, - reload_on_bufenter = false, - respect_buf_cwd = false, +-- OR setup with some options +require("nvim-tree").setup({ + sort_by = "case_sensitive", view = { - adaptive_size = false, - centralize_selection = false, - width = 30, - height = 30, - hide_root_folder = false, - side = "left", - preserve_window_proportions = false, - number = false, - relativenumber = false, - signcolumn = "yes", + adaptive_size = true, mappings = { - custom_only = false, list = { - -- user mappings go here + { key = "u", action = "dir_up" }, }, }, }, renderer = { - add_trailing = false, - group_empty = false, - highlight_git = false, - full_name = false, - highlight_opened_files = "none", - root_folder_modifier = ":~", - indent_markers = { - enable = false, - icons = { - corner = "└ ", - edge = "│ ", - item = "│ ", - none = " ", - }, - }, - icons = { - webdev_colors = true, - git_placement = "before", - padding = " ", - symlink_arrow = " ➛ ", - show = { - file = true, - folder = true, - folder_arrow = true, - git = true, - }, - glyphs = { - default = "", - symlink = "", - folder = { - arrow_closed = "", - arrow_open = "", - default = "", - open = "", - empty = "", - empty_open = "", - symlink = "", - symlink_open = "", - }, - git = { - unstaged = "✗", - staged = "✓", - unmerged = "", - renamed = "➜", - untracked = "★", - deleted = "", - ignored = "◌", - }, - }, - }, - special_files = { "Cargo.toml", "Makefile", "README.md", "readme.md" }, - }, - hijack_directories = { - enable = true, - auto_open = true, - }, - update_focused_file = { - enable = false, - update_cwd = false, - ignore_list = {}, - }, - ignore_ft_on_setup = {}, - system_open = { - cmd = "", - args = {}, - }, - diagnostics = { - enable = false, - show_on_dirs = false, - icons = { - hint = "", - info = "", - warning = "", - error = "", - }, + group_empty = true, }, filters = { - dotfiles = false, - custom = {}, - exclude = {}, + dotfiles = true, }, - filesystem_watchers = { - enable = false, - interval = 100, - }, - git = { - enable = true, - ignore = true, - timeout = 400, - }, - actions = { - use_system_clipboard = true, - change_dir = { - enable = true, - global = false, - restrict_above_cwd = false, - }, - expand_all = { - max_folder_discovery = 300, - }, - open_file = { - quit_on_open = false, - resize_window = true, - window_picker = { - enable = true, - chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890", - exclude = { - filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame" }, - buftype = { "nofile", "terminal", "help" }, - }, - }, - }, - remove_file = { - close_window = true, - }, - }, - trash = { - cmd = "gio trash", - require_confirm = true, - }, - live_filter = { - prefix = "[FILTER]: ", - always_show_folders = true, - }, - log = { - enable = false, - truncate = false, - types = { - all = false, - config = false, - copy_paste = false, - diagnostics = false, - git = false, - profile = false, - watcher = false, - }, - }, -} -- END_DEFAULT_OPTS +}) ``` +For complete list of available configuration options see [:help nvim-tree.setup](doc/nvim-tree-lua.txt) + +Each option is documented in `:help nvim-tree.OPTION_NAME`. Nested options can be accessed by appending `.`, for example [:help nvim-tree.view.mappings](doc/nvim-tree-lua.txt) + +## Commands + +See [:help nvim-tree-commands](doc/nvim-tree-lua.txt) + +Basic commands: + +`:NvimTreeToggle` Open or close the tree. Takes an optional path argument. + +`:NvimTreeFocus` Open the tree if it is closed, and then focus on the tree. + +`:NvimTreeFindFile` Move the cursor in the tree for the current buffer, opening folders if needed. + +`:NvimTreeCollapse` Collapses the nvim-tree recursively. + ## Mappings -The `list` option in `view.mappings.list` is a table of -```lua --- key can be either a string or a table of string (lhs) --- action is the name of the action, set to `""` to remove default action --- action_cb is the function that will be called, it receives the node as a parameter. Optional for default actions --- mode is normal by default +nvim-tree comes with number of mappings; for default mappings please see [:help nvim-tree-default-mappings](doc/nvim-tree-lua.txt), for way of configuring mappings see [:help nvim-tree-mappings](doc/nvim-tree-lua.txt) -local tree_cb = require'nvim-tree.config'.nvim_tree_callback +`g?` toggles help, showing all the mappings and their actions. -local function print_node_path(node) { - print(node.absolute_path) -} +## Tips & tricks -local list = { - { key = {"", "o" }, action = "edit", mode = "n"}, - { key = "p", action = "print_path", action_cb = print_node_path }, - { key = "s", cb = tree_cb("vsplit") }, --tree_cb and the cb property are deprecated - { key = "<2-RightMouse>", action = "" }, -- will remove default cd action -} -``` +* You can add a directory by adding a `/` at the end of the paths, entering multiple directories `BASE/foo/bar/baz` will add directory foo, then bar and add a file baz to it. +* You can update window options for the tree by setting `require"nvim-tree.view".View.winopts.MY_OPTION = MY_OPTION_VALUE` +* `toggle` has a second parameter which allows to toggle without focusing the explorer (`require"nvim-tree".toggle(false, true)`). +* You can allow nvim-tree to behave like vinegar, see [:help nvim-tree-vinegar](doc/nvim-tree-lua.txt) +* If you `:set nosplitright`, the files will open on the left side of the tree, placing the tree window in the right side of the file you opened. +* You can automatically close the tab/vim when nvim-tree is the last window in the tab: . WARNING: other plugins or automation may interfere with this. -### Defaults +## Troubleshooting - -| Default Keys | Action | Description | -| - | - | - | -| \
o
\<2-LeftMouse> | edit | open a file or folder; root will cd to the above directory | -| \ | edit_in_place | edit the file in place, effectively replacing the tree explorer | -| O | edit_no_picker | same as (edit) with no window picker | -| \
\<2-RightMouse> | cd | cd in the directory under the cursor | -| \ | vsplit | open the file in a vertical split | -| \ | split | open the file in a horizontal split | -| \ | tabnew | open the file in a new tab | -| \< | prev_sibling | navigate to the previous sibling of current file/directory | -| > | next_sibling | navigate to the next sibling of current file/directory | -| P | parent_node | move cursor to the parent directory | -| \ | close_node | close current opened directory or parent | -| \ | preview | open the file as a preview (keeps the cursor in the tree) | -| K | first_sibling | navigate to the first sibling of current file/directory | -| J | last_sibling | navigate to the last sibling of current file/directory | -| I | toggle_git_ignored | toggle visibility of files/folders hidden via `git.ignore` option | -| H | toggle_dotfiles | toggle visibility of dotfiles via `filters.dotfiles` option | -| U | toggle_custom | toggle visibility of files/folders hidden via `filters.custom` option | -| R | refresh | refresh the tree | -| a | create | add a file; leaving a trailing `/` will add a directory | -| d | remove | delete a file (will prompt for confirmation) | -| D | trash | trash a file via `trash` option | -| r | rename | rename a file | -| \ | full_rename | rename a file and omit the filename on input | -| x | cut | add/remove file/directory to cut clipboard | -| c | copy | add/remove file/directory to copy clipboard | -| p | paste | paste from clipboard; cut clipboard has precedence over copy; will prompt for confirmation | -| y | copy_name | copy name to system clipboard | -| Y | copy_path | copy relative path to system clipboard | -| gy | copy_absolute_path | copy absolute path to system clipboard | -| [c | prev_git_item | go to next git item | -| ]c | next_git_item | go to prev git item | -| - | dir_up | navigate up to the parent directory of the current file/directory | -| s | system_open | open a file with default system application or a folder with default file manager, using `system_open` option | -| f | live_filter | live filter nodes dynamically based on regex matching. | -| F | clear_live_filter | clear live filter | -| q | close | close tree window | -| W | collapse_all | collapse the whole tree | -| E | expand_all | expand the whole tree, stopping after expanding `actions.expand_all.max_folder_discovery` folders; this might hang neovim for a while if running on a big folder | -| S | search_node | prompt the user to enter a path and then expands the tree to match the path | -| . | run_file_command | enter vim command mode with the file the cursor is on | -| \ | toggle_file_info | toggle a popup with file infos about the file under the cursor | -| g? | toggle_help | toggle help | - +### Diagnostic Logging -```lua - view.mappings.list = { -- BEGIN_DEFAULT_MAPPINGS - { key = { "", "o", "<2-LeftMouse>" }, action = "edit" } - { key = "", action = "edit_in_place" } - { key = "O", action = "edit_no_picker" } - { key = { "", "<2-RightMouse>" }, action = "cd" } - { key = "", action = "vsplit" } - { key = "", action = "split" } - { key = "", action = "tabnew" } - { key = "<", action = "prev_sibling" } - { key = ">", action = "next_sibling" } - { key = "P", action = "parent_node" } - { key = "", action = "close_node" } - { key = "", action = "preview" } - { key = "K", action = "first_sibling" } - { key = "J", action = "last_sibling" } - { key = "I", action = "toggle_git_ignored" } - { key = "H", action = "toggle_dotfiles" } - { key = "U", action = "toggle_custom" } - { key = "R", action = "refresh" } - { key = "a", action = "create" } - { key = "d", action = "remove" } - { key = "D", action = "trash" } - { key = "r", action = "rename" } - { key = "", action = "full_rename" } - { key = "x", action = "cut" } - { key = "c", action = "copy" } - { key = "p", action = "paste" } - { key = "y", action = "copy_name" } - { key = "Y", action = "copy_path" } - { key = "gy", action = "copy_absolute_path" } - { key = "[c", action = "prev_git_item" } - { key = "]c", action = "next_git_item" } - { key = "-", action = "dir_up" } - { key = "s", action = "system_open" } - { key = "f", action = "live_filter" } - { key = "F", action = "clear_live_filter" } - { key = "q", action = "close" } - { key = "W", action = "collapse_all" } - { key = "E", action = "expand_all" } - { key = "S", action = "search_node" } - { key = ".", action = "run_file_command" } - { key = "", action = "toggle_file_info" } - { key = "g?", action = "toggle_help" } - } -- END_DEFAULT_MAPPINGS -``` - -## Tips & reminders - -1. You can add a directory by adding a `/` at the end of the paths, entering multiple directories `BASE/foo/bar/baz` will add directory foo, then bar and add a file baz to it. -2. You can update window options for the tree by setting `require"nvim-tree.view".View.winopts.MY_OPTION = MY_OPTION_VALUE` -3. `toggle` has a second parameter which allows to toggle without focusing the explorer (`require"nvim-tree".toggle(false, true)`). -4. You can allow nvim-tree to behave like vinegar (see `:help nvim-tree-vinegar`). -5. If you `:set nosplitright`, the files will open on the left side of the tree, placing the tree window in the right side of the file you opened. -6. You can automatically close the tab/vim when nvim-tree is the last window in the tab: https://github.com/kyazdani42/nvim-tree.lua/discussions/1115. WARNING: other plugins or automation may interfere with this. - -## Diagnostic Logging - -You may enable diagnostic logging to `$XDG_CACHE_HOME/nvim/nvim-tree.log`. See `:help nvim-tree.log`. +You may enable diagnostic logging to `$XDG_CACHE_HOME/nvim/nvim-tree.log`. See [:help nvim-tree.log](doc/nvim-tree-lua.txt) ## Performance Issues @@ -403,7 +141,11 @@ Please attach `$XDG_CACHE_HOME/nvim/nvim-tree.log` if you raise an issue. * Try temporarily disabling git integration by setting `git.enable = false` in your setup. -## Help Wanted +## Contributing + +PRs are always welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) + +### Help Wanted Developers with the following environments: @@ -415,9 +157,7 @@ Developers with the following environments: Help triaging, diagnosing and fixing issues specific to those environments is needed, as the nvim-tree developers do not have access to or expertise in these environments. -## Contributing - -PRs are always welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) +Let us know you're interested by commenting on issues and raising PRs. ## Screenshots diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index d867b639..3d574d2a 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -1,92 +1,157 @@ -*nvim-tree.lua* A file explorer written in lua - -Minimum version of neovim: 0.6.0 +*nvim-tree* *nvim-tree.lua* A File Explorer For Neovim Written In Lua Author: Yazdani Kiyan ============================================================================== -INTRODUCTION *nvim-tree-introduction* +CONTENTS *nvim-tree* -This file explorer requires `neovim >= 0.6.0` + 1. Introduction nvim-tree-introduction + 2. Quickstart nvim-tree-quickstart + 3. Commands nvim-tree-commands + 4. Setup/Configuration nvim-tree-setup + 4.1 Vinegar Style nvim-tree-vinegar + 5. Mappings nvim-tree-mappings + 6. Highlight Groups nvim-tree-highlight + 7. Events nvim-tree-events + 7.1 Available Events nvim-tree.events ============================================================================== -QUICK START *nvim-tree-quickstart* + 1. INTRODUCTION *nvim-tree-introduction* -open the tree with :NvimTreeToggle +Features + + - Automatic updates + - File type icons + - Git integration + - Diagnostics integration: LSP and COC + - (Live) filtering + - Cut, copy, paste, rename, delete, create + - Highly customisable + +File Icons + + See https://github.com/kyazdani42/nvim-web-devicons + Requires a patched font. +  should look like an open folder. + + Syntax highlighting uses g:terminal_color_ from colorschemes, fallbacks to + ugly colors otherwise. + +Git Integration + + Icon indicates when a file is: + - ✗ unstaged or folder is dirty + - ✓ staged + - ★ new file + - ✓ ✗ partially staged + - ✓ ★ new file staged + - ✓ ★ ✗ new file staged and has unstaged modifications + - ═ merging + - ➜ renamed + +Requirements + + This file explorer requires `neovim >= 0.7.0` + +============================================================================== + 2. QUICK START *nvim-tree-quickstart* + +Setup should be run in a lua file or in a |lua-heredoc| if using in a vim file. + +Setup may only be run once; subsequent calls will result in a warning. > - nnoremap :NvimTreeToggle - lua require 'nvim-tree'.toggle() -< + -- examples for your init.lua + -- empty setup using defaults + require("nvim-tree").setup() + + -- OR setup with some options + require("nvim-tree").setup({ + sort_by = "case_sensitive", + view = { + adaptive_size = true, + mappings = { + list = { + { key = "u", action = "dir_up" }, + }, + }, + }, + renderer = { + group_empty = true, + }, + filters = { + dotfiles = true, + }, + }) +< ============================================================================== -COMMANDS *nvim-tree-commands* + 3. COMMANDS *nvim-tree-commands* |:NvimTreeOpen| -opens the tree. Takes an optional path argument. + opens the tree. Takes an optional path argument. |:NvimTreeClose| -closes the tree + closes the tree |:NvimTreeToggle| -open or close the tree. Takes an optional path argument. + open or close the tree. Takes an optional path argument. |:NvimTreeFocus| -open the tree if it is closed, and then focus on the tree + open the tree if it is closed, and then focus on the tree |:NvimTreeRefresh| -refresh the tree + refresh the tree |:NvimTreeFindFile| -The command will change the cursor in the tree for the current bufname. + The command will change the cursor in the tree for the current bufname. -It will also open the leafs of the tree leading to the file in the buffer -(if you opened a file with something else than the NvimTree, like `fzf` or -`:split`) + It will also open the leafs of the tree leading to the file in the buffer + (if you opened a file with something else than the NvimTree, like `fzf` or + `:split`) |:NvimTreeFindFileToggle| -close the tree or change the cursor in the tree for the current bufname, -similar to combination of |:NvimTreeToggle| and |:NvimTreeFindFile|. Takes an -optional path argument. + close the tree or change the cursor in the tree for the current bufname, + similar to combination of |:NvimTreeToggle| and |:NvimTreeFindFile|. Takes an + optional path argument. |:NvimTreeClipboard| -Print clipboard content for both cut and copy + Print clipboard content for both cut and copy |:NvimTreeResize| -Resize the NvimTree window to the given size. Example: `:NvimTreeResize 50` -resizes the window to the width of 50. If the size starts with "+" or "-" it -adds or removes the given value to the current window width. -Example `:NvimTreeResize -20` removes the value 20 from the current width. And -`:NvimTreeResize +20` adds the value 20 to the current width. + Resize the NvimTree window to the given size. Example: `:NvimTreeResize 50` + resizes the window to the width of 50. If the size starts with "+" or "-" it + adds or removes the given value to the current window width. + Example `:NvimTreeResize -20` removes the value 20 from the current width. And + `:NvimTreeResize +20` adds the value 20 to the current width. |:NvimTreeCollapse| -Collapses the nvim-tree recursively. + Collapses the nvim-tree recursively. |:NvimTreeCollapseKeepBuffers| -Collapses the nvim-tree recursively, but keep the directories open, which are -used in an open buffer. + Collapses the nvim-tree recursively, but keep the directories open, which are + used in an open buffer. ============================================================================== -SETUP *nvim-tree.setup* + 4. SETUP *nvim-tree-setup* -To configure the tree (and make it runnable), you should call the setup -function. +You must run setup() function to initialise nvim-tree. -Setup may only be run once; subsequent calls will result in a warning. Do not -invoke from, say, a packer config function and then call it again later. +setup() function takes one optional argument: configuration table. If omitted +nvim-tree will be initialised with default configuration. -Values may be functions. Warning: this may result in unexpected behaviour. +Setup may only be run once; subsequent calls will result in a warning. > require("nvim-tree").setup { -- BEGIN_DEFAULT_OPTS auto_reload_on_write = true, @@ -465,14 +530,16 @@ Window / buffer setup. Type: `boolean`, Default: `false` *nvim-tree.view.width* - Width of the window, can be either a `%` string or a number representing columns. + Width of the window, can be a `%` string, a number representing columns or + a function. Only works with `side` is `left` or `right`. - Type: `string | number`, Default: `30` + Type: `string | number | function`, Default: `30` *nvim-tree.view.height* - Height of the window, can be either a `%` string or a number representing rows. + Height of the window, can be `%` string or a number representing rows or a + function. Only works with `side` is `top` or `bottom` - Type: `string | number`, Default: `30` + Type: `string | number | function`, Default: `30` *nvim-tree.view.side* Side of the tree, can be `"left"`, `"right"`, `"bottom"`, `"top"`. @@ -782,9 +849,47 @@ Configuration for diagnostic logging. Type: `boolean`, Default: `false` ============================================================================== -INFORMATIONS *nvim-tree-info* + 4.1 VINEGAR STYLE *nvim-tree-vinegar* -MAPPINGS *nvim-tree-mappings* +|nvim_tree_vinegar| *nvim_tree_vinegar* + +nvim-tree can behave like vinegar. To allow this, you will need to configure +it in a specific way: + +- Use `require"nvim-tree".open_replacing_current_buffer()` instead of the +default open command. +You can easily implement a toggle using this too: +> + local function toggle_replace() + local view = require"nvim-tree.view" + if view.is_visible() then + view.close() + else + require"nvim-tree".open_replacing_current_buffer() + end + end +< +- Use the `edit_in_place` action to edit files. It's bound to `` by +default, vinegar uses ``. You can override this with: +> + require"nvim-tree".setup { + view = { + mappings = { + list = { + { key = "", action = "edit_in_place" } + } + } + } + } +< +Going up a dir is bound to `-` by default in nvim-tree which is identical to +vinegar, no change is needed here. + +You'll also need to set |nvim-tree.hijack_netrw| to `true` during setup. +A good functionnality to enable is |nvim-tree.hijack_directories|. + +============================================================================== + 5. MAPPINGS *nvim-tree-mappings* The `list` option in `view.mappings.list` is a table of @@ -806,6 +911,8 @@ The `list` option in `view.mappings.list` is a table of { key = "<2-RightMouse>", action = "" }, -- will remove default cd action } < +Mouse support defined in |KeyBindings| + DEFAULT MAPPINGS *nvim-tree-default-mappings* `` edit open a file or folder; root will cd to the above directory @@ -900,30 +1007,8 @@ DEFAULT MAPPINGS *nvim-tree-default-mappings { key = "g?", action = "toggle_help" } } -- END_DEFAULT_MAPPINGS < -FEATURES *nvim-tree-features* - -File icons with vim-devicons. - -Uses other type of icons so a good font support is recommended. -If the tree renders weird glyphs, install the correct fonts. - -Syntax highlighting uses g:terminal_color_ from colorschemes, fallbacks to -ugly colors otherwise. - -Git integration tells when a file is: -- ✗ unstaged or folder is dirty -- ✓ staged -- ★ new file -- ✓ ✗ partially staged -- ✓ ★ new file staged -- ✓ ★ ✗ new file staged and has unstaged modifications -- ═ merging -- ➜ renamed - -Mouse support defined in |KeyBindings| - ============================================================================== -HIGHLIGHT GROUPS *nvim-tree-highlight* + 6. HIGHLIGHT GROUPS *nvim-tree-highlight* All the following highlight groups can be configured by hand. Aside from `NvimTreeWindowPicker`, it is not advised to colorize the background of these @@ -988,47 +1073,7 @@ NvimTreeLiveFilterPrefix NvimTreeLiveFilterValue ============================================================================== -VINEGAR STYLE *nvim-tree-vinegar* - -|nvim_tree_vinegar| *nvim_tree_vinegar* - -nvim-tree can behave like vinegar. To allow this, you will need to configure -it in a specific way: - -- Use `require"nvim-tree".open_replacing_current_buffer()` instead of the -default open command. -You can easily implement a toggle using this too: -> - local function toggle_replace() - local view = require"nvim-tree.view" - if view.is_visible() then - view.close() - else - require"nvim-tree".open_replacing_current_buffer() - end - end -< -- Use the `edit_in_place` action to edit files. It's bound to `` by -default, vinegar uses ``. You can override this with: -> - require"nvim-tree".setup { - view = { - mappings = { - list = { - { key = "", action = "edit_in_place" } - } - } - } - } -< -Going up a dir is bound to `-` by default in nvim-tree which is identical to -vinegar, no change is needed here. - -You'll also need to set |nvim-tree.hijack_netrw| to `true` during setup. -A good functionnality to enable is |nvim-tree.hijack_directories|. - -============================================================================== -EVENTS *nvim-tree-events* + 7. EVENTS *nvim-tree-events* |nvim_tree_events| @@ -1056,7 +1101,7 @@ For example, registering a handler for when a node is renamed is done like this: end) ============================================================================== -Lua module: nvim-tree.events *nvim-tree.events* + 7.1 Lua module: nvim-tree.events *nvim-tree.events* *nvim-tree.events.on_nvim_tree_ready()* on_nvim_tree_ready({handler}) diff --git a/scripts/generate_default_mappings.lua b/scripts/generate_default_mappings.lua index afbc2b84..476698b8 100644 --- a/scripts/generate_default_mappings.lua +++ b/scripts/generate_default_mappings.lua @@ -82,23 +82,3 @@ for _, m in pairs(outs_lua) do io.write(string.format(fmt, m.key, m.action)) end io.close(file) - --- md -file = io.open("/tmp/DEFAULT_MAPPINGS.md", "w") -io.output(file) -io.write "| Default Keys | Action | Description |\n" -io.write "| - | - | - |\n" -for _, m in pairs(M.mappings) do - local keys = "" - if type(m.key) == "table" then - local first = true - for _, sub_key in pairs(m.key) do - keys = keys .. (first and "" or "
") .. sub_key:gsub("<", "\\<") - first = false - end - else - keys = m.key:gsub("<", "\\<") - end - io.write(string.format("| %s | %s | %s |\n", keys, m.action, m.desc:gsub("|", "`"))) -end -io.close(file) diff --git a/scripts/update-default-opts.sh b/scripts/update-default-opts.sh index d729ed8e..1ff23041 100755 --- a/scripts/update-default-opts.sh +++ b/scripts/update-default-opts.sh @@ -1,7 +1,7 @@ #!/bin/sh # run after changing nvim-tree.lua DEFAULT_OPTS or nvim-tree/actions/init.lua M.mappings -# scrapes and updates README.md, nvim-tree-lua.txt +# scrapes and updates nvim-tree-lua.txt # run from repositry root: scripts/update-default-opts.sh @@ -14,13 +14,9 @@ sed -n -e "/${begin}/,/${end}/{ /${begin}/d; /${end}/d; p; }" lua/nvim-tree.lua # indent some more sed -e "s/^ / /" /tmp/DEFAULT_OPTS.2.lua > /tmp/DEFAULT_OPTS.6.lua -# README.md indented at 2 -sed -i -e "/${begin}/,/${end}/{ /${begin}/{p; r /tmp/DEFAULT_OPTS.2.lua - }; /${end}/p; d }" README.md - # help, indented at 6 sed -i -e "/${begin}/,/${end}/{ /${begin}/{p; r /tmp/DEFAULT_OPTS.6.lua - }; /${end}/p; d }" doc/nvim-tree-lua.txt + }; /${end}/p; d; }" doc/nvim-tree-lua.txt begin="BEGIN_DEFAULT_MAPPINGS" @@ -28,17 +24,10 @@ end="END_DEFAULT_MAPPINGS" # generate various DEFAULT_MAPPINGS sed -n -e "/${begin}/,/${end}/{ /${begin}/d; /${end}/d; p; }" lua/nvim-tree/actions/init.lua > /tmp/DEFAULT_MAPPINGS.M.lua -lua <(cat /tmp/DEFAULT_MAPPINGS.M.lua scripts/generate_default_mappings.lua) - -# README.md -sed -i -e "/${begin}/,/${end}/{ /${begin}/{p; r /tmp/DEFAULT_MAPPINGS.lua - }; /${end}/p; d }" README.md -sed -i -e "/BEGIN_DEFAULT_MAPPINGS_TABLE/,/END_DEFAULT_MAPPINGS_TABLE/{ /BEGIN_DEFAULT_MAPPINGS_TABLE/{p; r /tmp/DEFAULT_MAPPINGS.md - }; /END_DEFAULT_MAPPINGS_TABLE/p; d }" README.md +cat /tmp/DEFAULT_MAPPINGS.M.lua scripts/generate_default_mappings.lua | lua # help sed -i -e "/${begin}/,/${end}/{ /${begin}/{p; r /tmp/DEFAULT_MAPPINGS.lua }; /${end}/p; d }" doc/nvim-tree-lua.txt sed -i -e "/^DEFAULT MAPPINGS/,/^>$/{ /^DEFAULT MAPPINGS/{p; r /tmp/DEFAULT_MAPPINGS.help }; /^>$/p; d }" doc/nvim-tree-lua.txt -