Em editores como vim
e 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 zsh
ou bash
normalmente 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:
- 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)
- Use um terminal diferente que suporte'concluindo'do seu "buffer de shell".
Uma solução para 2 é, por exemplo, usar o emacs e multi-term
apenas 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:
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.