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
- Ter lido Init.lua básico
- Um gerenciador de plugins configurado
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
:helpdo 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"
doneScript 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" \
|| trueDiagrama 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
- O que Modo headless resolve, e o que se perde sem isso?
- O que Formatar arquivos em batch resolve, e o que se perde sem isso?
- O que Script de linting resolve, e o que se perde sem isso?
- Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?
Artigos relacionados
Veja também
- DAP Debugging — Debugging
- Lua API — API Lua
Referências
- Neovim Headless — Documentação oficial
- Headless Neovim Scripts — Tutorial