web-dev-qa-db-ja.com

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

以前はUNIXが本当に上手な同僚がいました。

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

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

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

残念ながら、これを設定する方法を覚えていません。

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

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

28
user919860

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

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

set -o vi

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

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


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

あなたも使うことができます j そして k 履歴を移動するには(を押した後 ESC)。

あなたも使うことができます / (打った後 ESC)古いコマンドを検索します。

言い換えると、10分前に実行したsuper-long cpコマンドを見つけるには、次のようにします。

ESC/cpENTER

次に、履歴内のすべての一致するコマンドを循環させることができます n そして N

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

31
jahroy

Bashを使用している場合は、jahroyとevil ottoがすでに回答しているので、

set -o vi

bashにviスタイルの編集コマンドを使用させる。

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

ご希望の場合

set -o emacs

あなたは使うことができます Ctl-XCtl-E 同じことをする。お好みのエディターを使用します$EDITOR、必ずしもemacsではありません。

(個人的には、ほとんどの編集にvi(実際にはvim)を使用していますが、set -o emacsシェル;挿入モードのオンとオフの切り替えは、ファイルの編集には最適ですが、インタラクティブなコマンドには不便です。 YMMV。)

12
Keith Thompson

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

10
evil otto

Vimで最近使用したコマンドを編集し、エディターが保存して終了した後に編集したバージョンを呼び出すには、fc Shellビルトインを使用します。引数がない場合は、次のことを行います。

  1. /tmpに一時ファイルを作成し、最後に入力したコマンドをそのファイルに追加します
  2. エディターが正常に終了した後(終了コード0で)、その一時ファイルにあるコマンドを実行し、このファイルを削除します。編集したバージョンは通常のコマンドとして履歴に保存されます(少なくともzshでは)。エディターがゼロ以外のコードで終了した場合、何も実行されません(vimでは、これを強制終了するか、:cquitを使用してこれを実行できます)。

コマンドはbashとzshの両方で機能します。

6
ZyX

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

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

.editrc

行を含む

bind -v

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

私は年月が経つにつれてやや忘れがちになったので、私の.zshrc いくつかのラッパーをソース をviモードで使用すると、コマンドラインで現在のモードを確認できます。いいね。

私はあなたがタイプできるzshで知っています

bindkey -L

キーバインドのリストを取得します。 bashにも同様のものが必要だと思います。すべてのviキーがデフォルトでバインドされているわけではありません。あなたがどのようにフィットするかを彼らに結び付け、あなたはレースに出かけます。

5
chiggsy

端末にexport EDITOR=viと入力します。

この設定を保存するにはこの行をファイル〜/ .profileに入れます

1
questionersam