Difference between revisions of "Readline (Italiano)"

From ArchWiki
Jump to: navigation, search
(fixed title level)
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 +
 
[[Category:Command shells (Italiano)]]  
 
[[Category:Command shells (Italiano)]]  
{{i18n|Readline}}
+
[[en:Readline]]
 +
[[zh-CN:Readline]]
 
{{Article summary start|Sommario}}
 
{{Article summary start|Sommario}}
 
{{Article summary text|Implementare readline oltre alle sue capacità di default.}}
 
{{Article summary text|Implementare readline oltre alle sue capacità di default.}}
 +
{{Article summary heading|Pagine importanti}}
 +
{{Article summary link|Sito ufficiale|http://www.gnu.org/s/readline/}}
 
{{Article summary heading|Articoli correlati}}
 
{{Article summary heading|Articoli correlati}}
 
{{Article summary wiki|Bash (Italiano)}}
 
{{Article summary wiki|Bash (Italiano)}}
Line 10: Line 14:
  
 
==Editing della linea di comando==
 
==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 appassionati di [[vi]], probabilmente vorrete inserire la seguente linea nel proprio {{Filename|~/.bashrc}} per abilitare le scorciatoie di vi:
+
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 [[Vim (Italiano)|vi]], probabilmente vorrete inserire la seguente linea nel proprio {{ic|~/.inputrc}} per abilitare le scorciatoie di vi:
 
  set -o vi
 
  set -o vi
  
Troverete le pagine dei trucchi di [http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf vi] o [http://www.catonmat.net/download/readline-emacs-editing-mode-cheat-sheet.pdf emacs] molto utili.
+
Esistono a questo scopo le pagine dei trucchi di [http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf vi] o [http://www.catonmat.net/download/readline-emacs-editing-mode-cheat-sheet.pdf emacs].
  
 
==Cronologia==
 
==Cronologia==
Line 19: Line 23:
  
 
Ad esempio, se l'utente ha digitato i seguenti comandi:
 
Ad esempio, se l'utente ha digitato i seguenti comandi:
* {{Codeline|ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig}}
+
* {{ic|ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig}}
* {{Codeline|who}}
+
* {{ic|who}}
* {{Codeline|mount}}
+
* {{ic|mount}}
* {{Codeline|man mount}}
+
* {{ic|man mount}}
In questa situazione, se digitiamo {{codeline|ls}} e successivamente premiamo la freccia su, l'attuale input sarà sostituito con {{codeline|man mount}}, cioè l'ultimo comando eseguito. Avendo la ricerca nella cronologia abilitata, verranno mostrati invece solo i comandi eseguiti che cominciano con {{codeline|ls}} (l'attuale input), in questo caso {{codeline|ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig}}.
+
In questa situazione, se digitiamo {{ic|ls}} e successivamente premiamo la freccia su, l'attuale input sarà sostituito con {{ic|man mount}}, cioè l'ultimo comando eseguito. Avendo la ricerca nella cronologia abilitata, verranno mostrati invece solo i comandi eseguiti che cominciano con {{ic|ls}} (l'attuale input), in questo caso {{ic|ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig}}.
  
Sarà possibile abilitare questa modalità aggiungendo le seguenti linee al file {{Filename|/etc/inputrc}} orppure al file {{Filename|~/.inputrc}}:
+
Sarà possibile abilitare questa modalità aggiungendo le seguenti linee al file {{ic|/etc/inputrc}} orppure al file {{ic|~/.inputrc}}:
 
  "\e[A":history-search-backward
 
  "\e[A":history-search-backward
 
  "\e[B":history-search-forward
 
  "\e[B":history-search-forward
  
Se si sceglie di inserire le righe sopra al file {{Filename|~/.inputrc}}, è consigliato aggiungere anche la seguente linea all'inizio del file per evitare strani comportamenti come [https://bbs.archlinux.org/viewtopic.php?id=112537 questo]:
+
Se si usa la modalità "vi" è possibile aggiungere queste righe a {{ic|~/.inputrc}} (come indicato in [https://bbs.archlinux.org/viewtopic.php?pid=428760#p428760 questo posto]):
 +
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 {{ic|~/.inputrc}}, è consigliato aggiungere anche la seguente linea all'inizio del file per evitare strani comportamenti come [https://bbs.archlinux.org/viewtopic.php?id=112537 questo]:
  
 
  $include /etc/inputrc
 
  $include /etc/inputrc
  
In alternativa, si può utilizzare la reverse-search-history (ricerca incrementale) premendo {{Keypress|Ctrl}}+{{Keypress|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 {{Keypress|Ctrl}}+{{Keypress|R}} durante questa modalità verrà mostrata la linea precedente nel buffer che corrisponde all'attuale termine di ricerca, mentre premendo {{Keypress|Ctrl}}+{{Keypress|G}} (abort) verrà annullata la ricerca e riproposto l'input corrente. Quindi per ricercare tra i precedenti comandi {{codeline|mount}}, sarà necessario premere {{Keypress|Ctrl}}+{{Keypress|R}}, digitare  'mount' e continuare a premere {{Keypress|Ctrl}}+{{Keypress|R}} finchè non si raggiunge la linea desiderata.
+
In alternativa, si può utilizzare la reverse-search-history (ricerca incrementale) premendo {{Keypress|Ctrl}}+{{Keypress|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 {{Keypress|Ctrl}}+{{Keypress|R}} durante questa modalità verrà mostrata la linea precedente nel buffer che corrisponde all'attuale termine di ricerca, mentre premendo {{Keypress|Ctrl}}+{{Keypress|G}} (abort) verrà annullata la ricerca e riproposto l'input corrente. Quindi per ricercare tra i precedenti comandi {{ic|mount}}, sarà necessario premere {{Keypress|Ctrl}}+{{Keypress|R}}, digitare  'mount' e continuare a premere {{Keypress|Ctrl}}+{{Keypress|R}} finchè non si raggiunge la linea desiderata.
  
 
L'equivalente ricerca ma in avanti chiamata forward-search-history è legata alla combinazione {{Keypress|Ctrl}}+{{Keypress|S}} di default. Attenzione perché molti terminali sovrappongono la combinazione {{Keypress|Ctrl}}+{{Keypress|S}} per sospendere l'esecuzione fino a che non viene premuta la combinazione {{Keypress|Ctrl}}+{{Keypress|Q}}. (Questo viene chiamato  XON/XOFF flow control). Per attivare la forward-search-history, e quindi disabilitare il flow control eseguire il comando:
 
L'equivalente ricerca ma in avanti chiamata forward-search-history è legata alla combinazione {{Keypress|Ctrl}}+{{Keypress|S}} di default. Attenzione perché molti terminali sovrappongono la combinazione {{Keypress|Ctrl}}+{{Keypress|S}} per sospendere l'esecuzione fino a che non viene premuta la combinazione {{Keypress|Ctrl}}+{{Keypress|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
 
  $ stty -ixon
oppure utilizzare un'altra combinazione di tasti nel file {{Filename|inputrc}}. Ad esempio se si vuole utilizzare {{Keypress|Alt}}+{{Keypress|S}} che solitamente per default non è legato a nessun evento :
+
oppure utilizzare un'altra combinazione di tasti nel file {{ic|inputrc}}. Ad esempio se si vuole utilizzare {{Keypress|Alt}}+{{Keypress|S}} che solitamente per default non è legato a nessun evento :
 
  "\es":forward-search-history
 
  "\es":forward-search-history
  
 
===Ricerca nella cronologia===
 
===Ricerca nella cronologia===
 
==== Evitare i duplicati ====
 
==== Evitare i duplicati ====
Se si ripetono spesso diversi comandi, essi verranno aggiunti ogni volta alla propria cronologia. Per evitarlo, aggiungere questo al proprio {{Filename|~/.bashrc}}:
+
Se si ripetono spesso diversi comandi, essi verranno aggiunti ogni volta alla propria cronologia. Per evitarlo, aggiungere questo al proprio {{ic|~/.bashrc}}:
 
  export HISTCONTROL=ignoredups
 
  export HISTCONTROL=ignoredups
  
 
==== Evitare gli spazi ====
 
==== Evitare gli spazi ====
Per impedire che vengano considerati nella cronologia i comandi vuoti aggiungere questa linea al file {{Filename|~/.bashrc}}:
+
Per impedire che vengano considerati nella cronologia i comandi vuoti aggiungere questa linea al file {{ic|~/.bashrc}}:
 
  export HISTCONTROL=ignorespace
 
  export HISTCONTROL=ignorespace
 
Se nel file è già presente  
 
Se nel file è già presente  
Line 57: Line 74:
 
  bind '"\ew":"\C-e # macro"'
 
  bind '"\ew":"\C-e # macro"'
  
o aggiungere la parte contenuta tra apici al file {{Filename|~/.inputrc}}:
+
o aggiungere la parte contenuta tra apici al file {{ic|~/.inputrc}}:
 
  "\ew":"\C-e # macro"
 
  "\ew":"\C-e # macro"
  
Adesso scriviamo una linea e premiamo {{Keypress|Alt}}+{{Keypress|W}}. Readline si comporterà come se avessimo premuto {{Keypress|Ctrl}}+{{Keypress|E}} (spostamento a fine riga) ed aggiungerà '{{codeline| # macro}}'.
+
Adesso scriviamo una linea e premiamo {{Keypress|Alt}}+{{Keypress|W}}. Readline si comporterà come se avessimo premuto {{Keypress|Ctrl}}+{{Keypress|E}} (spostamento a fine riga) ed aggiungerà '{{ic| # 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 {{Keypress|Ctrl}}+{{Keypress|Alt}}+{{Keypress|L}} aggiunga "| less" alla linea e la esegua  ({{Keypress|Ctrl}}+{{Keypress|M}} equivale a {{Keypress|Enter}}):
 
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 {{Keypress|Ctrl}}+{{Keypress|Alt}}+{{Keypress|L}} aggiunga "| less" alla linea e la esegua  ({{Keypress|Ctrl}}+{{Keypress|M}} equivale a {{Keypress|Enter}}):
Line 68: Line 85:
 
  "\e\C-y":"\C-ayes | \C-m"
 
  "\e\C-y":"\C-ayes | \C-m"
  
Questo esempio incapsula la linea digitata all'interno di {{Codeline|su -c ''}}, se viene premuta la combinazione {{Keypress|Alt}}+{{Keypress|S}}:
+
Questo esempio incapsula la linea digitata all'interno di {{ic|su -c ''}}, se viene premuta la combinazione {{Keypress|Alt}}+{{Keypress|S}}:
 
  "\es":"\C-a su -c '\C-e'\C-m"
 
  "\es":"\C-a su -c '\C-e'\C-m"
  
Line 76: Line 93:
 
==Tips and tricks==
 
==Tips and tricks==
 
===Disabilitare la visualizzazione delle combinazioni control===
 
===Disabilitare la visualizzazione delle combinazioni control===
A causa di un aggiornamento di {{Package Official|readline}}, il terminale ora visualizza {{Codeline|^C}} dopo aver premuto {{Keypress|Ctrl}}+{{Keypress|C}}. Per gli utenti che vogliono disabilitare questa visualizzazione, basterà semplicemente aggiungere la seguente linea al file {{Filename|~/.inputrc}}:
+
A causa di un aggiornamento di {{Pkg|readline}}, il terminale ora visualizza {{ic|^C}} dopo aver premuto {{Keypress|Ctrl}}+{{Keypress|C}}. Per gli utenti che vogliono disabilitare questa visualizzazione, basterà semplicemente aggiungere la seguente linea al file {{ic|~/.inputrc}}:
 
  set echo-control-characters off
 
  set echo-control-characters off
 
==Risorse==
 
* [http://www.gnu.org/s/readline/ Documentazione di Readline]
 

Revision as of 15:34, 13 June 2012

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary link Template:Article summary heading Template:Article summary wiki Template:Article summary end

Readline è una libreria del progetto GNU usata da Bash 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 del progetto dato che in questo articolo saranno introdotte solo semplici configurazioni.

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, 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 o emacs.

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):

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:

$include /etc/inputrc

In alternativa, si può utilizzare la reverse-search-history (ricerca incrementale) premendo Template:Keypress+Template:Keypress, 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 Template:Keypress+Template:Keypress durante questa modalità verrà mostrata la linea precedente nel buffer che corrisponde all'attuale termine di ricerca, mentre premendo Template:Keypress+Template:Keypress (abort) verrà annullata la ricerca e riproposto l'input corrente. Quindi per ricercare tra i precedenti comandi mount, sarà necessario premere Template:Keypress+Template:Keypress, digitare 'mount' e continuare a premere Template:Keypress+Template:Keypress finchè non si raggiunge la linea desiderata.

L'equivalente ricerca ma in avanti chiamata forward-search-history è legata alla combinazione Template:Keypress+Template:Keypress di default. Attenzione perché molti terminali sovrappongono la combinazione Template:Keypress+Template:Keypress per sospendere l'esecuzione fino a che non viene premuta la combinazione Template:Keypress+Template:Keypress. (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 Template:Keypress+Template:Keypress 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 Template:Keypress+Template:Keypress. Readline si comporterà come se avessimo premuto Template:Keypress+Template:Keypress (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 Template:Keypress+Template:Keypress+Template:Keypress aggiunga "| less" alla linea e la esegua (Template:Keypress+Template:Keypress equivale a Template:Keypress):

"\e\C-l":"\C-e | less\C-m"

Il comando successivo inserisce ad inizio riga la stringa 'yes |' quando viene premuta la combinazione Template:Keypress+Template:Keypress+Template:Keypress, 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 Template:Keypress+Template:Keypress:

"\es":"\C-a su -c '\C-e'\C-m"

Come ultimo esempio, per avviare facilmente un comando in background con Template:Keypress+Template:Keypress+Template:Keypress, 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, il terminale ora visualizza ^C dopo aver premuto Template:Keypress+Template:Keypress. Per gli utenti che vogliono disabilitare questa visualizzazione, basterà semplicemente aggiungere la seguente linea al file ~/.inputrc:

set echo-control-characters off