UNIXのVIキーを使用したシェルコマンドの編集

UNIXのVIキーを使用したシェルコマンドの編集

かつてUNIXをとても上手な仲間がいました。

彼はViキーバインディングを使ってシェルコマンドを編集する方法を示しました。

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

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

残念ながら、どのように設定したのか覚えていません。

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

この設定を永久に作成するにはどうすればよいですか?

答え1

あなたはこれまでの最大の機能について話しています!

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

set -o vi

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

Bash を使用しない場合は、対応する rc ファイルをシェルに置き換えます。


これにより、viコマンドを使用してすべてのコマンドを編集できます。

(押した後)履歴を使用してj閲覧することもできます。kESC

/(次へクリック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好みます。挿入モードを切り替えるのはファイル編集には適していますが、対話型コマンドには不便です。YMMV。)

答え3

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

答え4

実際、これは実際に最大の機能です。もっとあります:

というファイルを作成します。

.editrc

ラインを含む

bind -v

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

年月が経つにつれ、私は少し忘れてしまいました。だから私の.zshrcいくつかのラッパーソースを提供viモードの場合は、コマンドラインに現在のモードを表示します。これは素晴らしいです。

zshを入力できることを知っています。

bindkey -L

そしてキーバインディングのリストを取得します。 bashにも似たものがあるはずだと確信しています。すべてのviキーがデフォルトでバインドされているわけではありません。適切だと思われる方法でバインドするとレースする準備ができます。

関連情報