*symbols-outline.txt* For NVIM v0.8.0 Last change: 2023 November 01 ============================================================================== Table of Contents *symbols-outline-table-of-contents* 1. ⚠️ NOTE: THIS IS A FORK |symbols-outline-⚠️-note:-this-is-a-fork| - Maintenance status|symbols-outline-⚠️-note:-this-is-a-fork-maintenance-status| - Features |symbols-outline-⚠️-note:-this-is-a-fork-features| 2. symbols-outline.nvim |symbols-outline-symbols-outline.nvim| - Prerequisites |symbols-outline-symbols-outline.nvim-prerequisites| - Installation |symbols-outline-symbols-outline.nvim-installation| - Setup |symbols-outline-symbols-outline.nvim-setup| - Configuration |symbols-outline-symbols-outline.nvim-configuration| - Commands |symbols-outline-symbols-outline.nvim-commands| - Default keymaps |symbols-outline-symbols-outline.nvim-default-keymaps| - Highlights |symbols-outline-symbols-outline.nvim-highlights| ============================================================================== 1. ⚠️ NOTE: THIS IS A FORK *symbols-outline-⚠️-note:-this-is-a-fork* This is a fork of the original symbols-outline.nvim which merges some selected PRs from the original repo, plus some other improvements due to personal preferences. It does not attempt to be an up-to-date successor of the original repo, nor does it attempt to ensure everyone’s use-cases are satisfied by providing an overall better experience. It is merely a fork which I maintain for my personal use-cases which incorporates some selected PRs. MAINTENANCE STATUS*symbols-outline-⚠️-note:-this-is-a-fork-maintenance-status* This fork is NOT guaranteed to be completely bug-free, nor as stable as the original. However, since I use this plugin myself, it is guaranteed that selected issues that I encounter myself would be fixed (to the best of my ability). I do not merge PRs from the original repo that I don’t personally need. - **DO use this fork if**: - You want to use features available in this fork, which are not included upstream (listed below) - You MIGHT want some up-to-date fixes to problems (that I also face) but is OK with some things not being looked after well (things I don’t personally use) - **Do NOT use this fork if**: - You want a stable plugin - You don’t need the extra features in this fork FEATURES *symbols-outline-⚠️-note:-this-is-a-fork-features* Below is a list of features I’ve included in this fork which, at the time of writing, has not been included upstream (in the original repo). I try my best to keep this list up to date. - Feat: Toggling folds (and added default keymaps for it) (simrat39/symbols-outline.nvim#194) - Feat: when `auto_close=true` only auto close if `goto_location` is used (where focus changed), and not for `focus_location` (simrat39/symbols-outline.nvim#119) - Fix `SymbolsOutlineClose` crashing when already closed: simrat39/symbols-outline.nvim#163 - Support Nerd fonts v3.0: simrat39/symbols-outline.nvim#225 - Fix newlines in symbols crash: simrat39/symbols-outline.nvim#204 (simrat39/symbols-outline.nvim#184) - Fix `code_actions`: simrat39/symbols-outline.nvim#168 (simrat39/symbols-outline.nvim#123) - Fix fold all operation too slow: simrat39/symbols-outline.nvim#223 (simrat39/symbols-outline.nvim#224) PRS ~ - Open handler checks if view is not already open (#235 by eyalz800) - auto_jump config param (#229 by stickperson) - ✅ Update nerd fonts to 3.0 (#225 by anstadnik) - ✅ fix(folding): optimize fold/unfold all (#223 by wjdwndud0114) - ✅ Support markdown setext-style headers (#222 by msr1k) - ✅ fix(icons): replace obsolete icons (#219 by loichyan) **Superseded by #225** - ✅ Support ccls symbols (#218 by rqdmap) - ✅ fix: replace newlines with spaces in writer (#204 by tbung) - ✅ Make close_outline idempotent (#200 by showermat) **Superseded by #163** - Distinguish between public and private function display in Elixir (#187 by scottming) - ✅ Fix some options (#180 by cljoly) - fix: Invalid buffer id error (#177 by snowair) - ✅ fix(code_actions): use the builtin code_action (#168 by zjp-CN) - ✅ fix: plugin crashes when SymbolOutlineClose used (#163 by beauwilliams) - feat: Add window_bg_highlight to config (#137 by Zane-) - Added preview width and relative size (#130 by Freyskeyd) - Improve preview, hover windows configurability and looks (#128 by toppair) - ✅ Do not close outline when focus_location occurs (#119 by M1Sports20) - feat: instant_preview (#116 by axieax) - check if code_win is nill (#110 by i3Cheese) - Floating window (Draft) (#101 by druskus20) TODO ~ KEY: > - [ ] : Planned - [/] : WIP - : Idea < Items will be moved to above list when complete. - Folds - ☐ Org-like shift+tab behavior: Open folds level-by-level - ☐ Optionally not opening all child nodes when opening parent node - Fold siblings and siblings of parent on startup - Navigation - Go to parent - Cycle siblings RELATED PLUGINS ~ - nvim-navic - nvim-navbuddy - dropdown.nvim - treesitter (inspect/edit) ------------------------------------------------------------------------------ ============================================================================== 2. symbols-outline.nvim *symbols-outline-symbols-outline.nvim* **A tree like view for symbols in Neovim using the Language Server Protocol. Supports all your favourite languages.** PREREQUISITES *symbols-outline-symbols-outline.nvim-prerequisites* - `neovim 0.7+` - Properly configured Neovim LSP client INSTALLATION *symbols-outline-symbols-outline.nvim-installation* Use `hedyhli/symbols-outline.nvim` if you wish to use this fork. Packer: >lua use 'simrat39/symbols-outline.nvim' < Lazy: >lua { "simrat39/symbols-outline.nvim", config = function() -- Example mapping to toggle symbols-outline vim.keymap.set("n", "tt", "SymbolsOutline", { desc = "SymbolsOutline" }) require("symbols-outline").setup { -- Your setup opts here (optional) } end, }, < SETUP *symbols-outline-symbols-outline.nvim-setup* Put the setup call in your init.lua or any lua file that is sourced. **NOTE**: A call to `.setup()` is _required_ for this plugin to work! (simrat39/symbols-outline.nvim#213) >lua require("symbols-outline").setup() < CONFIGURATION *symbols-outline-symbols-outline.nvim-configuration* Pass a table to the setup call above with your configuration options. >lua local opts = { highlight_hovered_item = true, show_guides = true, auto_preview = false, position = 'right', relative_width = true, width = 25, -- Behaviour changed in this fork: -- Auto close the outline window if goto_location is triggered and not for -- focus_location auto_close = false, show_numbers = false, show_relative_numbers = false, show_symbol_details = true, preview_bg_highlight = 'Pmenu', autofold_depth = nil, auto_unfold_hover = true, fold_markers = { '', '' }, wrap = false, keymaps = { -- These keymaps can be a string or a table for multiple keys close = {"", "q"}, goto_location = "", focus_location = "o", hover_symbol = "", toggle_preview = "K", rename_symbol = "r", code_actions = "a", fold = "h", fold_toggle = '', -- Only in this fork fold_toggle_all = '', -- Only in this fork unfold = "l", fold_all = "W", unfold_all = "E", fold_reset = "R", }, lsp_blacklist = {}, symbol_blacklist = {}, symbols = { -- Changed in this fork File = { icon = "󰈔", hl = "@text.uri" }, Module = { icon = "󰆧", hl = "@namespace" }, Namespace = { icon = "󰅪", hl = "@namespace" }, Package = { icon = "󰏗", hl = "@namespace" }, Class = { icon = "𝓒", hl = "@type" }, Method = { icon = "ƒ", hl = "@method" }, Property = { icon = "", hl = "@method" }, Field = { icon = "󰆨", hl = "@field" }, Constructor = { icon = "", hl = "@constructor" }, Enum = { icon = "ℰ", hl = "@type" }, Interface = { icon = "󰜰", hl = "@type" }, Function = { icon = "", hl = "@function" }, Variable = { icon = "", hl = "@constant" }, Constant = { icon = "", hl = "@constant" }, String = { icon = "𝓐", hl = "@string" }, Number = { icon = "#", hl = "@number" }, Boolean = { icon = "⊨", hl = "@boolean" }, Array = { icon = "󰅪", hl = "@constant" }, Object = { icon = "⦿", hl = "@type" }, Key = { icon = "🔐", hl = "@type" }, Null = { icon = "NULL", hl = "@type" }, EnumMember = { icon = "", hl = "@field" }, Struct = { icon = "𝓢", hl = "@type" }, Event = { icon = "🗲", hl = "@type" }, Operator = { icon = "+", hl = "@operator" }, TypeParameter = { icon = "𝙏", hl = "@parameter" }, Component = { icon = "󰅴", hl = "@function" }, Fragment = { icon = "󰅴", hl = "@constant" }, -- ccls TypeAlias = { icon = ' ', hl = '@type' }, Parameter = { icon = ' ', hl = '@parameter' }, StaticMethod = { icon = ' ', hl = '@function' }, Macro = { icon = ' ', hl = '@macro' }, }, } < -------------------------------------------------------------------------------------------- Property Description Type Default ------------------------ --------------------------------------- -------------- ------------ highlight_hovered_item Whether to highlight the currently boolean true hovered symbol (high cpu usage) show_guides Whether to show outline guides boolean true position Where to open the split window ‘right’ or ‘right’ ‘left’ relative_width Whether width of window is set relative boolean true to existing windows width Width of window (as a % or columns int 25 based on relative_width) auto_close Whether to automatically close the boolean false window after goto_location auto_preview Show a preview of the code on hover boolean false show_numbers Shows numbers with the outline boolean false show_relative_numbers Shows relative numbers with the outline boolean false show_symbol_details Shows extra details with the symbols boolean true (lsp dependent) preview_bg_highlight Background color of the preview window string Pmenu winblend Pseudo-transparency of the preview int 0 window keymaps Which keys do what table here (dictionary) symbols Icon and highlight config for symbol table scroll up icons (dictionary) lsp_blacklist Which lsp clients to ignore table (array) {} symbol_blacklist Which symbols to ignore (possible table (array) {} values) autofold_depth Depth past which nodes will be folded int nil by default auto_unfold_hover Automatically unfold hovered symbol boolean true fold_markers Markers to denote foldable symbol’s table (array) { ‘’, ‘’ } status wrap Whether to wrap long lines, or let them boolean false flow off the window -------------------------------------------------------------------------------------------- COMMANDS *symbols-outline-symbols-outline.nvim-commands* Command Description ---------------------- ------------------------ :SymbolsOutline Toggle symbols outline :SymbolsOutlineOpen Open symbols outline :SymbolsOutlineClose Close symbols outline LUA ~ > require'symbols-outline'.toggle_outline() require'symbols-outline'.open_outline() require'symbols-outline'.close_outline() < DEFAULT KEYMAPS *symbols-outline-symbols-outline.nvim-default-keymaps* Key Action ------------ ---------------------------------------------------- Escape Close outline Enter Go to symbol location in code o Go to symbol location in code without losing focus Ctrl+Space Hover current symbol K Toggles the current symbol preview r Rename symbol a Code actions h fold symbol tab toggle fold under cursor shift+tab toggle all folds l Unfold symbol W Fold all symbols E Unfold all symbols R Reset all folding ? Show help message HIGHLIGHTS *symbols-outline-symbols-outline.nvim-highlights* Highlight Purpose ------------------------- ---------------------------------------- FocusedSymbol Highlight of the focused symbol Pmenu Highlight of the preview popup windows SymbolsOutlineConnector Highlight of the table connectors Comment Highlight of the info virtual text ============================================================================== 3. Links *symbols-outline-links* 1. *demo*: https://github.com/simrat39/rust-tools-demos/raw/master/symbols-demo.gif Generated by panvimdoc vim:tw=78:ts=8:noet:ft=help:norl: