Configuração do Treesitter

    Definição curta: Tutorial para configurar o Treesitter no Neovim v0.11+ para syntax highlighting avançado, text objects e navegação estrutural.

    Antes de começar

    • Neovim v0.11 ou mais recente instalado — confira com nvim --version
    • Um init.lua que já carrega, ainda que vazio

    O que você vai aprender

    • Explicar Plugins necessários com suas palavras
    • Explicar Instalar parsers com suas palavras
    • Explicar Configuração básica com suas palavras
    • Localizar o assunto desta página no :help do seu próprio Neovim

    O que é

    Treesitter é um parser de código que permite análise sintática incremental e precisa. No Neovim, habilita syntax highlighting de qualidade e text objects estruturais.

    Índice de sub-tópicos

    Plugins necessários

    -- plugins/treesitter.lua
    return {
      "nvim-treesitter/nvim-treesitter",
      build = ":TSUpdate",
      dependencies = {
        "nvim-treesitter/nvim-treesitter-textobjects",
      },
    }

    Instalar parsers

    # Via comando Neovim
    :TSInstall python lua javascript typescript c rust go

    Ou via config Lua:

    require("nvim-treesitter.install").setup({ prefer_git = true })

    Configuração básica

    -- setup/treesitter.lua
    require("nvim-treesitter.configs").setup({
      ensure_installed = {
        "lua",
        "python",
        "javascript",
        "typescript",
        "c",
        "rust",
        "go",
      },
      sync_install = false,
      auto_install = true,
      highlight = {
        enable = true,
        additional_vim_regex_highlighting = false,
      },
      indent = { enable = true },
      incremental_selection = {
        enable = true,
        keymaps = {
          init_selection = "gnn",
          node_incremental = "grn",
          scope_incremental = "grc",
          node_decremental = "grm",
        },
      },
    })

    Text objects

    Com nvim-treesitter-textobjects instalado:

    -- Text objects estruturais
    -- if = inside função
    -- af = around função
    -- ic = inside classe
    -- ac = around classe

    Keymaps para text objects

    vim.keymap.set("o", "if", ":normal V<CR>", { silent = true })  -- inside função
    vim.keymap.set("o", "ac", ":normal V<CR>", { silent = true })  -- around classe
    -- Navigear para nós da árvore
    vim.keymap.set("n", "]", "function()<local parser=r equire'nvim-treesitter'.get_parser()<CR>", opts)

    Você aprendeu

    • Plugins necessários
    • Instalar parsers
    • Configuração básica
    • Text objects
    • Navegação estrutural

    Perguntas para reflexão

    1. O que Plugins necessários resolve, e o que se perde sem isso?
    2. O que Instalar parsers resolve, e o que se perde sem isso?
    3. O que Configuração básica resolve, e o que se perde sem isso?
    4. Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?

    Artigos relacionados

    Veja também

    Referências