Preenchimento automático de palavras do buffer do terminal

Preenchimento automático de palavras do buffer do terminal

Em editores como vime emacs, pode-se usar teclas de atalho como C-p(vim) ou M-/(emacs) para realizar o preenchimento automático da palavra atual usando outras palavras no mesmo buffer.

É possível obter a mesma funcionalidade dentro de um shell? Se eu vir alguma palavra na saída de um comando anterior e quiser preenchê-la automaticamente rapidamente ao digitar outro comando.

Só para ficar claro, um exemplo:

$ ls
Desktop/  Mail/  music/  osx@  something_with_a_pretty_long_name

$ someth

A partir daqui, gostaria de poder pressionar uma tecla de atalho e concluir automaticamente o que estou digitando something_with_a_pretty_long_name.

EDITAR: Atire. Usar um nome de arquivo foi um mau exemplo do que procuro. Considere o seguinte segundo exemplo:

$ cat /var/log/something.log
[19:30] Service started
[19:35] Something else happened

$ happ

Onde eu poderia preencher automaticamente 'happ' para 'aconteceu' simplesmente porque apareceu no buffer do meu terminal. Espero que isso esclareça o que procuro.

Responder1

Resposta curta: Não, não com shells clássicos como zshou bashnormalmente seu shell e terminal são entidades diferentes.

Resposta longa: talvez. O que acontece normalmente é você digitar um comando e pressionar Enter- agora seu shellgarfose executa o comando especificado. Então a casca temnãoideia do que está acontecendo, o shell não sabe o que será escrito no terminal ou o que o programa executado fez, se iniciou outros programas, escreveu no seu terminal ou algo assim.

Existem duas soluções possíveis para o seu problema:

  1. Capture toda a saída dos comandos executados e use-a de alguma forma para fins de conclusão (pode ser feito, mas provavelmente não deveria ser feito)
  2. Use um terminal diferente que suporte'concluindo'do seu "buffer de shell".

Uma solução para 2 é, por exemplo, usar o emacs e multi-termapenas usar M- /como você faria normalmente para concluir as coisas no terminal. Outros terminais podem oferecer uma solução semelhante.

Mas você realmente precisa desse tipo de conclusão? A conclusão do shell hoje em dia pode completar páginas de manual, comandos, pids, soquetes, opções de comando, caminhos de arquivos de sistemas remotos e muito mais. Isso já pode ser suficiente para o seu caso de uso ou pode ser aprimorado para o seu problema específico.

Responder2

http://www.iterm2.com/#/section/features/autocomplete

iterm2 tem exatamente o que você precisa. Pena que é para Mac.

Mas como é um terminal, você pode fazer ssh para Linux/Unix e ainda funciona.

Responder3

Você pode fazer isso comextratoque usa tmux para capturar a saída e permite uma seleção difusa com fzf:

extrato

Responder4

Esta provavelmente não é a resposta que você espera, mas pode atender a algumas de suas necessidades.

Você pode usar TAB para completar automaticamente o comando que está em $PATH (ou comandos internos), portanto, se o nome do arquivo for um arquivo executável e estiver em $PATH, ele será preenchido automaticamente.

Se você deseja preencher automaticamente o nome do arquivo que não é executável, você pode digitar " ." -ponto, depois espaço (ou qualquer outro lugar no lugar do ponto), depois a parte do nome do arquivo e TAB. Dessa forma, você enganará o shell para acreditar que está executando um comando e fornecendo o nome do arquivo como argumento para o comando. Pressionar TAB preencherá automaticamente o nome do arquivo, mas talvez você precise remover o ponto + espaço na frente.

Outra possibilidade é usar oRecurso de conclusão BASH. Isso pode completar automaticamente mais do que apenas nomes de arquivos.

informação relacionada