Come impostare e determinare la modalità di modifica della riga di comando di Bash?


10

Come impostare la modalità di modifica della riga di comando vio emacsil Bash E come determinare quale modalità è attualmente impostata?

Risposte:


6

Poiché la tua domanda è specifica su bash:

Per impostarlo in modo permanente per ogni nuova sessione:

echo 'set -o vi' >> ~/.bashrc

oppure (consigliato), aggiungere (o modificare) una riga in ./inputrc:

set editing-mode vi

Questo imposterà la modalità di modifica di readline che viene utilizzata da molti altri programmi oltre a bash.

Disattivare entrambe le opzioni è facile:

shopt -ou vi emacs

Per impostarne uno, sia:

set -o vi

O

shopt -os vi

Lo stesso per emacs. Setting viunsets emacse viceversa.

Per elencare lo stato:

$ shopt -op emacs
set +o emacs

$ shopt -op vi
set -o vi

O entrambi contemporaneamente:

$ shopt -op emacs vi
set +o emacs
set -o vi

Per verificare se viè impostato:

shopt -oq vi      &&   echo vi is set

Oppure (sintassi ksh):

[[ -o vi ]]        &&   echo vi is set

emacs:

shopt -oq emacs   &&   echo emacs is set

O:

[[ -o emacs ]]    &&   echo emacs is set

oppure, per verificare che non sia impostata alcuna opzione:

! ( shopt -oq emacs || shopt -oq vi ) && echo no option is set

16

A set:

set -o vi

O:

set -o emacs

(impostando uno si disinserisce l'altro. È possibile fare set -o vi +o viper disinserire entrambi)

Controllare:

if [[ -o emacs ]]; then
  echo emacs mode
elif [[ -o vi ]]; then
  echo vi mode
else
  echo neither
fi

Questa sintassi viene ksh. Il set -o viè POSIX. set -o emacsnon è (come Richard Stallman ha obiettato alla emacsmodalità specificata da POSIX) ma molto comune tra le implementazioni della shell. Alcune shell supportano modalità di modifica extra. [[ -o option ]]non è POSIX, ma supportato da ksh, bash e zsh. [ -o option ]è supportato da bash, kshe yash(si noti che -oè anche un operatore binario OR per [).


Funziona ed è sorprendente che sia così difficile determinare la modalità.
Blcknx,

4
set -o | egrep -w '^emacs|vi'restituirà se è impostato emacs o vi.
Stephen Harris,

4

C'è anche bind -V | grep editing-mode.

man bash è enorme ma vale la pena leggere in profondità.

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.