Este script Lua para Neovim fornece uma funcionalidade para gerar automaticamente comandos echo de debug para variáveis shell em uma seleção visual. Ele é específico para arquivos shell (.sh) e é carregado como um plugin after/ftplugin.
- Extrai nomes de variáveis de atribuições em shell script
- Gera comandos
echoformatados para debug - Insere os comandos automaticamente após a seleção
- Suporte a ranges visuais através de comando e mapeamento de teclas
Parâmetros:
lines(table): Lista de strings contendo linhas de código shell
Retorno:
- Table com nomes de variáveis encontradas
Descrição:
Extrai nomes de variáveis de linhas que seguem o padrão VARIAVEL=valor. Busca por linhas que começam com optional whitespace, seguido por caracteres maiúsculos, underscores ou dígitos, seguidos por =.
Parâmetros:
line1(number): Linha inicial do range (1-based)line2(number): Linha final do range (1-based)
Descrição:
- Processa as linhas no range especificado
- Extrai variáveis usando
extract_variables - Gera blocos de debug formatados com comandos
echo - Insere o bloco após a última linha do range
Sintaxe:
:'<,'>ShellEchoCaracterísticas:
- Aceita range (obrigatório)
- Funciona em modo visual com
:'<,'> - Processa apenas a seleção visual atual
Tecla: <F2> no modo visual
Ação: Executa :'<,'>ShellEcho<CR>
Descrição: Gera echos de debug para variáveis na seleção visual atual.
O script gera um bloco de debug no formato:
###############################################
# DEBUG #
###############################################
echo VARIAVEL1 = ${VARIAVEL1}
echo VARIAVEL2 = ${VARIAVEL2}Código original (selecionado visualmente):
NAME="John"
AGE=30
CITY="New York"Após pressionar <F2> no modo visual:
NAME="John"
AGE=30
CITY="New York"
###############################################
# DEBUG #
###############################################
echo NAME = ${NAME}
echo AGE = ${AGE}
echo CITY = ${CITY}Arquivo: after/ftplugin/sh.lua
Propósito: Plugin específico para arquivos shell que carrega após os ftplugins padrão.
- Neovim com API Lua habilitada
- Buffer contendo código shell
- Usa a abordagem recomendada do Vim com
opts.line1eopts.line2 - Não depende de marks (
'<,'>) diretamente, evitando problemas de contexto - O range é tratado automaticamente pelo Neovim quando usando
:'<,'>ShellEcho
- Busca por
^%s*([%u_%d]+)%s*= - Encontra variáveis que começam no início da linha (com whitespace opcional)
- Aceita letras maiúsculas, números e underscores
- Requer sinal de
=após o nome da variável
- "Nenhuma linha no range." - Quando a seleção está vazia
- "Nenhuma variável encontrada." - Quando não há atribuições de variáveis no range
- Só detecta variáveis em linhas de atribuição simples
- Variáveis devem estar em maiúsculas (convenção shell)
- Não detecta variáveis em comandos complexos ou multi-linha
Se o mapeamento não funcionar:
- Certifique-se de estar no modo visual
- Verifique se há variáveis no padrão correto na seleção
- Use o comando manualmente:
:'<,'>ShellEcho
Este script substitui abordagens problemáticas baseadas em marks, oferecendo uma solução robusta e integrada com o ecossistema Vim.