Existe alguma maneira de fazer com que o bash tenha destaque de sintaxe como peixe?


41

No shell do peixe , a linha de comando real é destacada na sintaxe:

insira a descrição da imagem aqui

Existe alguma maneira de obter esse mesmo comportamento no bash?

Existe algo assim, mas para o zsh, não para o bash. É possível que isso possa ser portado para o bash?

Para esclarecer para quem não entende a captura de tela, a explicação ou o link fornecido: Quero destacar o texto real que é inserido no terminal. Os comandos, parênteses, aspas, etc.


Não pense que o bash aceita plugins como o zsh, por isso pode exigir uma construção personalizada do shell / binário do bash. Alguma razão para não usar apenas peixe? Além disso, obrigado por me indicar outro shell para brincar e ver se consigo aprender alguns recursos avançados do haha.
Matrix Mole

11
@Matrix: Eu não posso usar peixes porque tenho uma configuração de bash muito complexa que não podia desistir.
Wuffers

Infelizmente, não acho que isso seja possível no bash. Tenho certeza de que a pesquisa que você fez aponta para isso também. Se você absolutamente não pode mudar para o zsh, então isso é compreensível, mas caso contrário, você pode querer dar uma olhada no fizsh, que incorpora alguns recursos semelhantes ao peixe no zsh, embora ele não tenha sido atualizado desde fevereiro, então talvez o link de destaque da sintaxe zsh que você forneceu seria mais robusto.
voithos 19/07/11

11
Isso seria extremamente benéfico para o aprendizado do bash, pois permite brincar de uma maneira totalmente diferente. Identificar facilmente que você esqueceu de escapar de um personagem especial seria valioso.
quer

Respostas:


8

O Bash é usado readlinepara entrada interativa; portanto, o destaque da sintaxe precisaria ser implementado nesse programa. Encontrei uma discussão dos Grupos do Google sobre como codificar esse recurso.

O shell do peixe usa seu próprio editor de linha específico para esse programa e não pode ser portado diretamente.

Você pode achar que zshé muito semelhante ao bash e seu editor de linha é extensível . Encontrei zsh-syntax-realce para ativar esse recurso no zsh.


1

Não existe uma maneira simples de obter realce de sintaxe no GNU Bash (ou GNU Readline), mas é, em princípio, possível implementar seu próprio editor de linha nos scripts Bash, vinculando todas as entradas do usuário às funções do shell usando o comando embutido bind -x 'BYTE: SHELL-COMMAND'. É claro que é possível integrar o recurso de destaque de sintaxe em seu próprio editor de linha.

Na verdade, implementei um editor de linha ble.shcom recursos como destaque de sintaxe e sugestões automáticas. Ele suporta o Bash 3.0--5.0. Como está escrito em scripts Bash (quase) puros, você pode apenas sourceo script ~/.bashrc. Aqui está um exemplo para configurar ble.shno bashrc (consulte o README para obter detalhes):

$ git clone https://github.com/akinomyoga/ble.sh.git
$ cd ble.sh
$ make
$ make INSDIR="$HOME/.local/share/blesh" install
# bashrc

# Add the following line at the beginning of bashrc
[[ $- == *i* ]] &&
  source "$HOME/.local/share/blesh/ble.sh" --attach=none

# ... other bashrc settings ...

# Add the following line at the end of bashrc
((_ble_bash)) && ble-attach

Nota : Sei que às vezes responder a perguntas com links para produtos próprios é considerado autopromoção e imprevisível, por isso evitei responder a essa pergunta. No entanto, nenhuma outra solução apareceu por muito tempo, e essa pergunta também tem muitas visões (o que reflete sua demanda significativa). Então, eu decidi responder a esta pergunta hoje. Referindo as seguintes meta perguntas / respostas, descrevi a idéia primeiro e a seguir forneceu um link para o meu projeto como uma implementação de exemplo.

Sim, tenho que admitir que isso é realmente autopromoção , mas acredito que isso ajude as pessoas que desejam o recurso. Se houver problemas, eu apreciaria se você pudesse me dizer isso pelos comentários.


-1

Eu não acho que o realce da sintaxe deva acontecer no nível do shell, mas no nível da interface (apenas a minha opinião - e de outra pessoa parece) -, então eu procuraria em "plugins" para o Terminal ou seu console favorito, por exemplo, este plug- in para Kate pode ajudar, ou este outro que oferece destaque de sintaxe no nano

Aqui ainda há mais informações sobre como destacar a sintaxe no Terminal:

Adicione o alias ls = 'ls -G' a .bash_profile.

embora aqui seja melhor explicado como

Espero que ajude


11
Parece que você está respondendo como configurar o destaque da sintaxe nos editores, não no shell. A ls-colorization nem é destaque de "sintaxe".
Kyle Strand

Eu acho que você está se concentrando em semântica mais do que na solução, com o código a partir dos links e solução sugerida eu recebo cores na festa, que eu acredito é o que o OP queria saber
Purefan

10
A pergunta original é realmente muito clara sobre realce de sintaxe real. Isso é mostrado pela captura de tela da concha de peixe e pela sentença final: "Quero destacar o texto real digitado no terminal. Os comandos, parênteses, aspas, etc."
Kyle Strand

9
Como eu disse, não é destaque de "sintaxe". Eles estão destacando a saída do lscomando com base no tipo de arquivo, que não tem nada a ver com a sintaxe do shell.
Kyle Strand

2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) e Fish ( fishshell.com/docs/current/tutorial.html ) possuem destaque de sintaxe, esta pergunta está obviamente perguntando sobre um recurso semelhante para o bash. É uma solicitação completamente válida solicitar um recurso "difícil de implementar e manter consistente", especialmente quando ele já existe em outros shells.
Brandon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.