UNIX で VI キーを使用してシェル コマンドを編集する

UNIX で VI キーを使用してシェル コマンドを編集する

以前、UNIX に非常に長けた同僚がいました。

彼は、Vi キーバインディングを使用してシェルコマンドを編集する方法を教えてくれました。

彼は、私がログインするたびに実行されるファイルにコマンドを配置しました。

それ以来、私は別のプロジェクトに移りました。

残念ながら、これをどのように設定するかは覚えていません。

Vi キーバインディングを使用してターミナルでコマンドを編集する方法を知っている人はいますか?

その設定を永続的にするにはどうすればいいでしょうか?

答え1

まさに史上最高の機能ですね!

ファイルに以下を追加することで、vi コマンドを使用してシェル コマンド (およびコマンド履歴) を編集できます.bashrc

set -o vi

コマンドラインからそのコマンドを実行して、現在のセッションのみに影響を与えることもできます。

bash を使用しない場合は、シェルの適切な rc ファイルを置き換えてください。


これにより、vi コマンドを使用して任意のコマンドを編集できるようになります...

jと を使用してk履歴内を移動することもできます( を押した後ESC)。

/( を押した後ESC) を使用して古いコマンドを検索することもできます。

つまり、cp10 分前に実行した非常に長いコマンドを見つけるには、次のようにします。

ESC/cpENTER

n次に、とを使用して、履歴内の一致するすべてのコマンドを循環表示できますN

これらすべてにより、コマンドラインでの生産性が 10 兆倍向上します。

答え2

bashを使用している場合は、jahroyとevil ottoがすでに回答しているように、次のように使用できます。

set -o vi

bash が vi スタイルの編集コマンドを使用するようにします。

これを実行したら、 と入力して、Esc v現在のコマンド ラインのコピーを含む一時ファイルを使用して vi エディターを起動できます。コマンドを編集して、複数の行に置き換えることもできます。ファイルを保存すると ( :wq)、シェルは編集したコマンドを実行します。

ご希望の場合は

set -o emacs

Ctl-XCtl-E同じことを行うには を使用できます。$EDITOR必ずしも emacs ではなく、好みのエディタが使用されます。

(個人的には、ほとんどの編集作業に vi (実際は vim) を使用していますが、set -o emacsシェルでの使用を好みます。挿入モードのオン/オフの切り替えはファイルの編集には便利ですが、対話型コマンドには不便です。状況によって異なります。)

答え3

set -o vi@jahroy が投稿したように、行編集コマンドを変更するには を使用できますが、 のことを考えている可能fc性があります (bash と ksh では使用できますが、tcsh ではおそらく使用できません)。このコマンドは、前のコマンドをエディター (FCEDIT または EDITOR、おそらく vi に設定されています) に入力し、エディターを終了するときにコマンドを実行します。help fc詳細については、man ページまたはを参照するか、試してみてください。

答え4

実際、これはこれまでで最も素晴らしい機能です。しかし、それだけではありません。

という名前のファイルを作成します

.editrc

行を含む

bind -v

編集行は、readline のようなサービスを提供する BSD ライセンス バージョンのライブラリです。この .editrc は、MySQL のコマンド ライン シェル、または readline を使用しないアプリケーションで、キーバインドを vi モードに設定します。

私は年月とともに物忘れがひどくなってきたので、.zshrcいくつかのラッパーのソースvi モードでは、コマンドラインでどのモードになっているかを表示します。便利です。

zshでは次のように入力できます

bindkey -L

キーバインドのリストを取得します。bash にも同様のものがあるはずです。vi のすべてのキーがデフォルトでバインドされているわけではありません。適切と思われる方法でバインドすれば、すぐに使用できます。

関連情報