web-dev-qa-db-ja.com

Bashのコマンドライン編集モードを設定および決定する方法

viまたはemacsコマンドライン編集モードをBashに設定する方法と、現在設定されているモードを確認する方法

10
Blcknx

あなたの質問はbashに固有なので:

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

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

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

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
6
Isaac

setへ:

set -o vi

または:

set -o emacs

(一方を設定すると他方の設定が解除されます。あなたはset -o vi +o vi両方の設定を解除します)

チェックする:

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

その構文はkshから来ています。 set -o viはPOSIXです。 set -o emacsは(POSIXによって指定されているemacsモードにRichard Stallmanが異議を唱えたように)ではありませんが、シェル実装間で非常に一般的です。一部のシェルは、追加の編集モードをサポートしています。 [[ -o option ]]はPOSIXではありませんが、ksh、bash、zshでサポートされています。 [ -o option ]bashkshおよびyashでサポートされています(-oもバイナリですORの演算子[)。

16

もあります bind -V | grep editing-mode

man bashは巨大ですが、詳しく読む価値があります。

4
studog