C'è un modo per ottenere bash per evidenziare la sintassi come i pesci?


41

Nella shell di pesce , l'attuale riga di comando è evidenziata dalla sintassi:

inserisci qui la descrizione dell'immagine

C'è un modo per ottenere questo stesso comportamento in bash?

C'è qualcosa come questo, ma per zsh, non bash. È possibile che questo possa essere portato su bash?

Per chiarire chi non capisce lo screenshot, la spiegazione o il link fornito: voglio evidenziare il testo reale inserito nel terminale. Comandi, parentesi, virgolette, ecc.


Non pensare che bash accetti plugin come fa zsh, quindi potrebbe richiedere una build personalizzata della shell / binario bash. Qualche motivo per non usare solo pesce? Inoltre, grazie per avermi indicato un'altra shell con cui giocare e vedere se posso imparare alcune funzionalità avanzate di haha.
Matrix Mole,

1
@Matrix: non riesco ad usare il pesce perché ho una configurazione bash molto complessa a cui non posso rinunciare.
Wuffers,

Sfortunatamente, non penso che questo sia attualmente possibile in bash. Sono sicuro che la ricerca che hai fatto punta anche a questo. Se non puoi assolutamente passare a zsh, allora è comprensibile, ma altrimenti potresti voler guardare Fizsh che incorpora alcune funzionalità simili a pesci in zsh, anche se non è stato aggiornato da febbraio, quindi forse il link per evidenziare la sintassi di zsh che hai fornito sarebbe più robusto.
voithos,

1
Ciò sarebbe estremamente vantaggioso per l'apprendimento bash, poiché consente di giocare in un modo completamente diverso. Sarebbe prezioso solo scorgere facilmente che hai dimenticato di sfuggire a un personaggio speciale.
Sirap,

Risposte:


8

Bash utilizza readlineper l'input interattivo, quindi l'evidenziazione della sintassi dovrebbe essere implementata in quel programma. Ho trovato una discussione di Google Gruppi su come codificare tale funzione.

Fish shell utilizza un proprio editor di linee specifico per quel programma e non può essere portato direttamente.

Potresti scoprire che zshè molto simile a bash e il suo editor di linee è estensibile . Ho trovato l' evidenziazione della sintassi zsh per abilitare questa funzione in zsh.


1

Non esiste un modo semplice per ottenere l'evidenziazione della sintassi in GNU Bash (o GNU Readline), ma in linea di principio è possibile implementare il proprio editor di linee negli script Bash associando tutti gli input dell'utente alle funzioni della shell usando il comando incorporato bind -x 'BYTE: SHELL-COMMAND'. È ovviamente possibile integrare la funzione di evidenziazione della sintassi nel proprio editor di linee.

In effetti ho implementato un editor di linea ble.shcon funzionalità come l'evidenziazione della sintassi e i suggerimenti automatici. Supporta Bash 3.0--5.0. Dal momento che è scritto in script (quasi) puri di Bash, puoi solo inserire sourcelo script ~/.bashrc. Ecco un esempio da configurare ble.shin bashrc (vedi il README per i dettagli):

$ 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 : so che a volte rispondere alle domande con collegamenti ai propri prodotti è considerato autopromozione e non preferibile, quindi mi sono astenuto dal rispondere a questa domanda. Tuttavia, nessuna altra soluzione non è apparsa a lungo, e anche questa domanda ha molte opinioni (che riflette la sua significativa domanda). Quindi ho deciso di rispondere a questa domanda oggi. Riferendomi alle seguenti meta domande / risposte, ho descritto l'idea prima e poi ho fornito un link al mio progetto come esempio di implementazione.

Sì, devo ammettere che si tratta in realtà di autopromozione , ma credo che ciò aiuti le persone che desiderano la funzionalità. Se ci sono problemi, ti sarei grato se potessi dirmelo dai commenti.


-1

Non credo che l'evidenziazione della sintassi dovrebbe avvenire a livello di shell ma a livello di interfaccia (solo la mia opinione - e sembra qualcun altro -), quindi cercherei i "plugin" per Terminal o la tua console preferita, ad esempio questo plug- in per Kate potrebbe aiutare, o quest'altro che offre l'evidenziazione della sintassi in nano

Ecco ancora altri discorsi su come evidenziare la sintassi nel Terminale:

Aggiungi alias ls = 'ls -G' a .bash_profile.

anche se qui è meglio spiegato come

Spero che sia d'aiuto


11
Sembra che tu stia rispondendo come impostare l'evidenziazione della sintassi negli editor, non nella shell. La ls-colorization non è nemmeno l'evidenziazione della "sintassi".
Kyle Strand,

Penso che ti stai concentrando sulla semantica più che sulla soluzione, con il codice dai collegamenti e la soluzione suggerita ottengo i colori in bash, che credo sia ciò che l'OP voleva sapere
Purefan,

10
La domanda originale è in realtà abbastanza chiara sull'evidenziazione della sintassi effettiva. Ciò è mostrato sia dallo screenshot della conchiglia che dalla frase finale: "Voglio evidenziare il testo reale che viene inserito nel terminale. I comandi, le parentesi, le virgolette, ecc."
Kyle Strand,

9
Come ho detto, non è l'evidenziazione della "sintassi". Questi stanno evidenziando l'output del lscomando in base al tipo di file, che non ha nulla a che fare con la sintassi della shell.
Kyle Strand,

2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) e Fish ( fishshell.com/docs/current/tutorial.html ) hanno entrambi l'evidenziazione della sintassi, questa domanda ovviamente chiede una funzione simile per bash. È una richiesta completamente valida chiedere una funzione che è "difficile da implementare e mantenere coerente" soprattutto quando esiste già in altre shell
Brandon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.