mirror of
https://github.com/Rainyy21/framework_note.git
synced 2026-10-11 01:10:28 -04:00
83 lines
3.7 KiB
Markdown
83 lines
3.7 KiB
Markdown
---
|
|
tags: [neovim, treesitter, mason, telescope, coding-tools, tutorial]
|
|
created: 2026-05-29
|
|
status: complete
|
|
type: lesson
|
|
---
|
|
|
|
# Deep Dive: The Power Trio (Tree-sitter, Mason, & Telescope)
|
|
|
|
While LazyVim provides the framework, its "superpowers" come from three specific plugins that redefine how you interact with code. Understanding these tools in-depth will allow you to master your editor.
|
|
|
|
---
|
|
|
|
## 1. Tree-sitter: The Syntactic Engine
|
|
Traditional editors use "Regex" (Regular Expressions) to highlight code. Regex is just fancy pattern matching. **Tree-sitter** is different: it is a **parser**. It builds a concrete syntax tree (CST) of your source file.
|
|
|
|
### Why it matters:
|
|
- **Semantic Awareness:** It knows the difference between a variable, a function, and a type, even if they have the same name.
|
|
- **Incremental Parsing:** It updates the tree instantly as you type, making it incredibly fast.
|
|
- **Language-Agnostic:** One engine powers hundreds of languages.
|
|
|
|
### Key Modules:
|
|
- **Highlighting:** Precise, context-aware colors.
|
|
- **Incremental Selection:** Logical selection (select word -> select expression -> select function).
|
|
- **Indentation:** Uses the tree structure to know exactly where a line should start.
|
|
|
|
### Pro Commands:
|
|
- `:TSInstall <lang>`: Install a specific language parser.
|
|
- `:InspectTree`: Opens a side window showing the actual tree structure of your code.
|
|
- `:EditQuery`: Advanced tool to create custom highlights or behavior.
|
|
|
|
---
|
|
|
|
## 2. Mason.nvim: The Tool Manager
|
|
In the past, installing an LSP (Language Server) or a Formatter was a nightmare. You had to use `npm`, `pip`, `go install`, and `cargo` manually. **Mason** abstracts all of this.
|
|
|
|
### The Architecture:
|
|
- **Isolated Binaries:** Mason installs tools in `~/.local/share/nvim/mason/bin/`. It does **not** pollute your system global PATH.
|
|
- **The "Bridge":** Mason only *downloads* the tools. Plugins like `mason-lspconfig` are needed to connect those downloads to Neovim's internal LSP client.
|
|
|
|
### Essential Workflow:
|
|
1. Open `:Mason`.
|
|
2. Find your tool (e.g., `ruff` for Python, `gopls` for Go).
|
|
3. Press `i` to install.
|
|
4. Use `ensure_installed` in your config to automate this across machines.
|
|
|
|
---
|
|
|
|
## 3. Telescope.nvim: The Central Nervous System
|
|
Telescope is a highly extendable fuzzy finder. It is the primary way you find and jump to information.
|
|
|
|
### The "Picker" Concept:
|
|
Everything in Telescope is a **Picker**. A picker consists of three parts:
|
|
1. **Finder:** Where the data comes from (files, git, buffers).
|
|
2. **Sorter:** How it ranks the results (FZF, native).
|
|
3. **Previewer:** Shows you the content before you click.
|
|
|
|
### Advanced Mappings (Inside Telescope):
|
|
- `<C-j>` / `<C-k>`: Move through results.
|
|
- `<Tab>`: Select multiple items.
|
|
- `<C-q>`: Send all selected items to the **Quickfix List** (powerful for mass refactoring).
|
|
- `<C-/>`: Show all keybindings for the current picker.
|
|
|
|
### Must-Have Extensions:
|
|
- **`fzf-native`:** Uses a C-port of FZF for blazing fast sorting.
|
|
- **`ui-select`:** Makes *all* Neovim selection menus (like Code Actions) use the Telescope UI.
|
|
- **`undo`:** A visual search for your file's history.
|
|
|
|
---
|
|
|
|
## How They Work Together
|
|
Imagine you are editing a file:
|
|
1. **Mason** has installed the `Pyright` LSP server.
|
|
2. **Tree-sitter** is providing beautiful syntax highlighting and logical selection.
|
|
3. You realize you need to find where a function is used. You trigger **Telescope** (`lsp_references`).
|
|
4. Telescope uses the LSP (installed by **Mason**) to find the references and displays them in its UI.
|
|
|
|
---
|
|
**Next Steps:**
|
|
- Try `:InspectTree` on a complex file to see how Tree-sitter "sees" your code.
|
|
- Run `:Mason` and check if you have any outdated tools.
|
|
- Experiment with `live_grep` in Telescope to find text across your entire project.
|