Bashのコマンドライン編集モードを設定して決定する方法は?

Bashのコマンドライン編集モードを設定して決定する方法は?

viBashまたはコマンドライン編集モードをどのように設定し、emacs現在どのモードが設定されているかを確認するにはどうすればよいですか?

答え1

到着set:

set -o vi

または:

set -o emacs

(1つを設定すると、もう1つは設定解除されます。set -o vi +o vi両方を設定解除できます。)

行って確認してください:

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

構文はkshPOSIXset -o viから来ます。set -o emacsいいえ(Richard StallmanがemacsPOSIX指定モードに反対したため)。しかし、これはシェルの実装では一般的です。一部のシェルは追加の編集モードをサポートしています。[[ -o option ]]POSIXではありませんが、ksh、bash、zshでサポートされています。 、および でサポートされています[ -o option ](バイナリOR演算子でもあります)。bashkshyash-o[

答え2

あなたの質問はbashに関するものなので:

新しいセッションごとに恒久的に設定するには:

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

または(推奨)./inputrcに1行を追加(または変更)します。

set editing-mode vi

これは、bashの他に、他の多くのプログラムで使用されるreadlineの編集モードを設定します。

両方のオプションをオフにするのは簡単です。

shopt -ou vi emacs

設定するには:

set -o vi

または

shopt -os vi

についても同様ですemacs。設定はvi指定されておらず、emacsその逆も同様です。

リストの状態:

$ shopt -op emacs
set +o emacs

$ shopt -op vi
set -o vi

または同時に両方:

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

vi設定されているかテストします。

shopt -oq vi      &&   echo vi is set

または(ksh構文):

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

Emacs:

shopt -oq emacs   &&   echo emacs is set

または:

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

または、オプションが設定されていないことをテストします。

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

答え3

しかもbind -V | grep editing-mode

man bash膨大な内容ですが、深く読んでみる価値が十分にあります。

関連情報