Sugestões de Comandos
As sugestões de comandos mostram, enquanto você digita em uma sessão de terminal comum, uma lista de opções obtidas das definições de preenchimento do seu próprio shell. O comando continua na linha de entrada normal do terminal, e escolher uma sugestão insere o texto sem executá-lo. Este recurso não usa nenhum modelo de IA.
As sugestões estão disponíveis no macOS e no Linux. No Windows, o recurso está desativado no momento (consulte a seção Windows abaixo).
Configurações e controles
Configurações ▸ Terminal ▸ "Sugestões de comandos" oferece três modos:
- Automáticas (padrão): o VelaTerm reúne o que você digita por cerca de 25 ms e depois pede sugestões ao shell; continuar digitando não reinicia essa espera. Se você continuar digitando enquanto uma solicitação está em andamento, apenas a entrada mais recente é usada na próxima solicitação, e os resultados desatualizados são descartados. Uma correspondência exata permanece na lista.
- Com Tab: as sugestões aparecem somente quando você pressiona Tab.
- Desativadas: nenhuma lista de sugestões é exibida, e o Tab mantém o comportamento nativo do shell.
A alteração vale imediatamente para os terminais abertos, e a escolha é compartilhada por todos os clientes conectados ao mesmo backend do VelaTerm.
Teclas e mouse:
- As setas para cima e para baixo selecionam uma opção; Page Up e Page Down percorrem listas mais longas.
- Tab, ou um clique do mouse, insere a opção selecionada.
- Enter sempre vai para o shell e executa o comando atual como foi digitado, sem aplicar nenhuma sugestão.
- Esc fecha a lista.
- Ctrl+Espaço solicita sugestões manualmente.
- Quando a seleção não pode avançar mais, as setas para cima e para baixo voltam a atuar no shell. Por isso, pressionar a seta para cima na primeira opção recupera o comando anterior do histórico.
As opções são ordenadas assim: correspondências exatas, correspondências de prefixo, correspondências de trecho e, por fim, as demais correspondências do shell. Entre as correspondências exatas e de prefixo, as que coincidem também em maiúsculas e minúsculas vêm primeiro; dentro de cada grupo, as opções mais curtas vêm primeiro, e os empates são ordenados alfabeticamente.
A lista destaca a parte de cada opção que corresponde ao que você digitou e mostra a descrição do shell, quando houver; passe o mouse sobre uma opção para ler uma descrição longa. A lista mantém a posição e a seleção enquanto os resultados são atualizados. Aceitar uma sugestão fecha a lista, inclusive quando a opção é um diretório terminado em /. Pressione Tab novamente para ver o próximo nível do diretório. No modo "Automáticas", continuar digitando abre a lista de novo.
Se você alterar a entrada enquanto uma inserção está pendente, o VelaTerm aguarda um novo resultado do shell e só insere a opção se ela ainda for oferecida.
Compatibilidade com shells
| Shell | Sugestões |
|---|---|
| Zsh | Widgets de preenchimento nativos e compadd; as definições de preenchimento que você já tem são usadas. |
| Bash 4 ou posterior | Funções e especificações de preenchimento registradas; nomes de comandos e de arquivos quando nada está registrado. |
| Fish | Opções e descrições nativas de complete -C. |
| PowerShell (pwsh) com PSReadLine | CommandCompletion.CompleteInput nativo. |
| Bash 3.2 e outros shells | Apenas o comportamento nativo do Tab, sem lista de sugestões. |
O Bash que acompanha o macOS está na versão 3.2. Para usar as sugestões com o Bash no macOS, defina um Bash mais recente (por exemplo, um instalado com o Homebrew) como shell de login.
As sugestões estão disponíveis apenas em sessões de terminal comuns. As sessões de agente não são alteradas.
Como a integração é carregada
O VelaTerm carrega a integração com o shell quando um terminal é iniciado. Seus arquivos de inicialização do shell nunca são modificados, e um comando de inicialização personalizado continua sendo executado depois que a integração é carregada. Os terminais que já estavam em execução antes da instalação de uma versão com este recurso precisam ser reiniciados.
- O Zsh carrega a integração por meio de arquivos de inicialização temporários, depois dos seus próprios arquivos de login, e em seguida restaura
ZDOTDIR. Nada é digitado no terminal. - O Bash é iniciado com um
--rcfiletemporário que primeiro lê seus arquivos de login na ordem habitual do Bash (/etc/profilee, em seguida, o primeiro encontrado entre~/.bash_profile,~/.bash_logine~/.profile) e depois carrega a integração. Nada é digitado no terminal. Restam duas diferenças em relação a um shell de login normal:shopt -q login_shellretorna falso, e~/.bash_logoutnão é executado quando o shell é encerrado. - O Fish e o PowerShell não oferecem um mecanismo equivalente para executar código na inicialização; por isso, o VelaTerm envia um comando que carrega a integração quando o shell é iniciado, e essa linha aparece no topo do novo terminal.
A política de execução do PowerShell continua valendo para o script de integração; o VelaTerm não a contorna.
As sugestões ficam suspensas enquanto um comando está em execução, enquanto um programa em tela cheia está aberto, durante a composição com um método de entrada (IME) e durante a navegação no histórico (Ctrl+R, Ctrl+S e as setas). As setas nunca iniciam uma solicitação automática; assim, pressionar a seta para cima várias vezes continua percorrendo os comandos anteriores. Quando nenhuma integração está ativa ou nenhuma opção é encontrada, o Tab mantém o comportamento nativo.
Iniciar o SSH ou outro shell aninhado dentro do terminal não instala a integração nesse ambiente.
Windows
No Windows, nenhuma integração é carregada, independentemente da configuração, e a opção "Sugestões de comandos" fica oculta. Os terminais cmd, Windows PowerShell, pwsh, Git Bash e WSL mantêm o comportamento nativo do Tab. O recurso continua desativado porque, nessa plataforma, carregá-lo exigiria digitar um comando em cada novo terminal, e cada solicitação iniciaria processos auxiliares, o que deixaria a digitação mais lenta.
Limitações
- As opções dependem das definições de preenchimento instaladas para o seu shell. O VelaTerm não oferece um catálogo próprio de comandos nem previsões baseadas no histórico.
- Alguns scripts de preenchimento complexos do Bash dependem de detalhes internos do Readline que a integração não consegue reproduzir com exatidão.
- As funções de preenchimento podem executar programas externos e ser lentas. A lista para de esperar após dois segundos, mas uma função do shell que ainda esteja em execução não é encerrada; pressione Ctrl+C para interrompê-la, como de costume.
- A integração reserva Ctrl+F12 para coletar as opções e Ctrl+F11 para inserir uma seleção. Uma configuração do shell que reatribua essas teclas depois que o terminal é iniciado pode desativar as sugestões. No Bash 4.0 a 4.3, a integração também intercepta Enter e Ctrl+J.
- As descrições vêm do shell. Muitas definições de preenchimento do Bash não fornecem descrições, então as opções correspondentes aparecem sem descrição.
Testes
O recurso foi testado no macOS com Zsh e Bash 5.2 e no Linux com Bash, Zsh, Fish e PowerShell 7.4.