arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
175 lines (107 loc) • 6.93 kB
Markdown
**Readline** è una libreria del [progetto GNU](/index.php/GNU_Project "GNU Project") usata da [Bash](/index.php/Bash_(Italiano) "Bash (Italiano)") e da altre interfacce per la linea di comando per modificare ed interagire con la linea di comando. Prima di leggere questo articolo fare riferimento alla [home page](http://www.gnu.org/s/readline/) del progetto dato che in questo articolo saranno introdotte solo semplici configurazioni.
## Contents
* [1 Editing della linea di comando](#Editing_della_linea_di_comando)
* [2 Cronologia](#Cronologia)
* [2.1 Ricerca nella cronologia](#Ricerca_nella_cronologia)
* [2.1.1 Evitare i duplicati](#Evitare_i_duplicati)
* [2.1.2 Evitare gli spazi](#Evitare_gli_spazi)
* [3 Macro](#Macro)
* [4 Tips and tricks](#Tips_and_tricks)
* [4.1 Disabilitare la visualizzazione delle combinazioni control](#Disabilitare_la_visualizzazione_delle_combinazioni_control)
## Editing della linea di comando
Come default Readline usa le combinazioni da tastiera di Emacs, per interagire con la linea di comando. Comunque, è supportata anche la modalità vi. Nel caso siate utenti [vi](/index.php/Vim_(Italiano) "Vim (Italiano)"), probabilmente vorrete inserire la seguente linea nel proprio `~/.inputrc` per abilitare le scorciatoie di vi:
```
set -o vi
```
Esistono a questo scopo le pagine dei trucchi di [vi](http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf) o [emacs](http://www.catonmat.net/download/readline-emacs-editing-mode-cheat-sheet.pdf).
## Cronologia
Solitamente, premendo la freccia che punta in alto, verrà mostrato l'ultimo comando eseguito anche se sono stati digitati alcuni caratteri. Comunque, gli utenti potrebbero trovare più pratico elencare i comandi digitati che hanno una corrispondenza con quanto digitato.
Ad esempio, se l'utente ha digitato i seguenti comandi:
* `ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig`
* `who`
* `mount`
* `man mount`
In questa situazione, se digitiamo `ls` e successivamente premiamo la freccia su, l'attuale input sarà sostituito con `man mount`, cioè l'ultimo comando eseguito. Avendo la ricerca nella cronologia abilitata, verranno mostrati invece solo i comandi eseguiti che cominciano con `ls` (l'attuale input), in questo caso `ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig`.
Sarà possibile abilitare questa modalità aggiungendo le seguenti linee al file `/etc/inputrc` orppure al file `~/.inputrc`:
```
"\e[A":history-search-backward
"\e[B":history-search-forward
```
Se si usa la modalità "vi" è possibile aggiungere queste righe a `~/.inputrc` (come indicato in [questo posto](https://bbs.archlinux.org/viewtopic.php?pid=428760#p428760)):
```
set editing-mode vi
$if mode=vi
set keymap vi-command
# these are for vi-command mode
"\e[A": history-search-backward
"\e[B": history-search-forward
set keymap vi-insert
# these are for vi-insert mode
"\e[A": history-search-backward
"\e[B": history-search-forward
$endif
```
Se si sceglie di inserire le righe sopra al file `~/.inputrc`, è consigliato aggiungere anche la seguente linea all'inizio del file per evitare strani comportamenti come [questo](https://bbs.archlinux.org/viewtopic.php?id=112537):
```
$include /etc/inputrc
```
In alternativa, si può utilizzare la reverse-search-history (ricerca incrementale) premendo `Ctrl`+`R`, che non effettua una ricerca basata sull'input ma sposta il buffer di ricerca mentre i tasti vengono digitati ed utilizzandoli come termini di ricerca. Premendo nuovamente `Ctrl`+`R` durante questa modalità verrà mostrata la linea precedente nel buffer che corrisponde all'attuale termine di ricerca, mentre premendo `Ctrl`+`G` (abort) verrà annullata la ricerca e riproposto l'input corrente. Quindi per ricercare tra i precedenti comandi `mount`, sarà necessario premere `Ctrl`+`R`, digitare 'mount' e continuare a premere `Ctrl`+`R` finchè non si raggiunge la linea desiderata.
L'equivalente ricerca ma in avanti chiamata forward-search-history è legata alla combinazione `Ctrl`+`S` di default. Attenzione perché molti terminali sovrappongono la combinazione `Ctrl`+`S` per sospendere l'esecuzione fino a che non viene premuta la combinazione `Ctrl`+`Q`. (Questo viene chiamato XON/XOFF flow control). Per attivare la forward-search-history, e quindi disabilitare il flow control eseguire il comando:
```
$ stty -ixon
```
oppure utilizzare un'altra combinazione di tasti nel file `inputrc`. Ad esempio se si vuole utilizzare `Alt`+`S` che solitamente per default non è legato a nessun evento :
```
"\es":forward-search-history
```
### Ricerca nella cronologia
#### Evitare i duplicati
Se si ripetono spesso diversi comandi, essi verranno aggiunti ogni volta alla propria cronologia. Per evitarlo, aggiungere questo al proprio `~/.bashrc`:
```
export HISTCONTROL=ignoredups
```
#### Evitare gli spazi
Per impedire che vengano considerati nella cronologia i comandi vuoti aggiungere questa linea al file `~/.bashrc`:
```
export HISTCONTROL=ignorespace
```
Se nel file è già presente
```
export HISTCONTROL=ignoredups
```
Sostituirlo con
```
export HISTCONTROL=ignoreboth
```
## Macro
Readline supporta anche l'assegnazione di combinazioni di tasti a delle macro. Per esempio, eseguire questo comando in Bash:
```
bind '"\ew":"\C-e # macro"'
```
o aggiungere la parte contenuta tra apici al file `~/.inputrc`:
```
"\ew":"\C-e # macro"
```
Adesso scriviamo una linea e premiamo `Alt`+`W`. Readline si comporterà come se avessimo premuto `Ctrl`+`E` (spostamento a fine riga) ed aggiungerà ' `# macro`'.
Usare ogni possibile combinazione di tasti per una macro tramite readline, può essere molto utile per automatizzare le opreazioni effettuate spesso. Ad esempio questa macro fa si che la combinazione `Ctrl`+`Alt`+`L` aggiunga "| less" alla linea e la esegua (`Ctrl`+`M` equivale a `Enter`):
```
"\e\C-l":"\C-e | less\C-m"
```
Il comando successivo inserisce ad inizio riga la stringa 'yes |' quando viene premuta la combinazione `Ctrl`+`Alt`+`Y`, utile per confermare ogni domanda di tipo yes/no dal terminale:
```
"\e\C-y":"\C-ayes | \C-m"
```
Questo esempio incapsula la linea digitata all'interno di `su -c ''`, se viene premuta la combinazione `Alt`+`S`:
```
"\es":"\C-a su -c '\C-e'\C-m"
```
Come ultimo esempio, per avviare facilmente un comando in background con `Ctrl`+`Alt`+`B`, redirigendo ogni tipo di output:
```
"\e\C-b":"\C-e > /dev/null 2>&1 &\C-m"
```
## Tips and tricks
### Disabilitare la visualizzazione delle combinazioni control
A causa di un aggiornamento di [readline](https://www.archlinux.org/packages/?name=readline), il terminale ora visualizza `^C` dopo aver premuto `Ctrl`+`C`. Per gli utenti che vogliono disabilitare questa visualizzazione, basterà semplicemente aggiungere la seguente linea al file `~/.inputrc`:
```
set echo-control-characters off
```