Headless Mode Scripts

    Definição curta: Scripts que usam o Neovim em modo headless (sem interface) para automação de tarefas como formatação, linting e testes.

    Antes de começar

    O que você vai aprender

    • Explicar Modo headless com suas palavras
    • Explicar Formatar arquivos em batch com suas palavras
    • Explicar Script de linting com suas palavras
    • Localizar o assunto desta página no :help do seu próprio Neovim

    O que é

    O Neovim pode rodar sem interface gráfica (headless). Útil para scripts de automação, CI/CD e processamento em batch.

    Modo headless

    # Neovim sem GUI
    nvim --headless
    
    # Executar comandos e sair
    nvim --headless -c "echo 'Hello'" -c "quit"

    Formatar arquivos em batch

    #!/usr/bin/env bash
    # format-all.sh - Formatar todos os arquivos Lua
    
    for file in $(find . -name "*.lua"); do
      echo "Formatting $file"
      nvim --headless \
        -c "lua vim.lsp.buf.format({ async = true })" \
        -c "sleep 1" \
        -c "wq" \
        -c "quit" \
        "$file"
    done

    Script de linting

    #!/usr/bin/env bash
    # lint.sh - Verificar erros Lua
    
    nvim --headless \
      -c "lua vim.diagnostic.setqflist()" \
      -c "copen" \
      -c "cexpr []" \
      -c "quit" \
      2>&1 | grep -E "error|warning"

    Script de testes

    -- run-tests.lua - Script para executar testes
    local plenary = require("plenary.busted")
    
    -- Setup
    vim.cmd("PlenaryBustedDirectory tests/ { minimal_init = 'tests/minimal_init.lua' }")
    #!/usr/bin/env bash
    # run-tests.sh
    nvim --headless \
      -u tests/minimal_init.lua \
      -c "PlenaryBustedDirectory tests/ { minimal_init = 'tests/minimal_init.lua' }" \
      -c "qa!"

    Pipeline CI/CD

    # .forgejo/workflows/lint.yml
    name: Lint and Format
    
    on: [push, pull_request]
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - name: Setup Neovim
            run: |
              apt-get update
              apt-get install -y neovim
          - name: Check formatting
            run: |
              nvim --headless \
                -c "lua vim.diagnostic.setqflist()" \
                -c "copen" \
                -c "cfirst" \
                -c "if len(getqflist()) > 0 | cexpr [] | cquit 1 | endif" \
                -c "quit" \
                || true

    Diagrama de automação

    flowchart TD
        A["Script Bash"] --> B["nvim --headless"]
        B --> C{"Comando"}
        C --> D["Format"]
        C --> E["Lint"]
        C --> F["Test"]
        D --> G["Arquivos formatados"]
        E --> H["Relatório de erros"]
        F --> I["Resultados de teste"]

    API para scripts

    -- Script para manipular buffers
    vim.api.nvim_buf_set_lines(0, 0, -1, false, {"line1", "line2"})
    local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)

    Você aprendeu

    • Modo headless
    • Formatar arquivos em batch
    • Script de linting
    • Script de testes
    • Pipeline CI/CD

    Perguntas para reflexão

    1. O que Modo headless resolve, e o que se perde sem isso?
    2. O que Formatar arquivos em batch resolve, e o que se perde sem isso?
    3. O que Script de linting 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