vi編集ユーティリティのプロンプトラインを使用するには? [閉鎖]

vi編集ユーティリティのプロンプトラインを使用するには? [閉鎖]

read -eSQLクエリに似たクエリのヒントを提供するユーティリティをbashに書きました。時々これはかなり長いので、viを開いて現在の行を編集して終了するときにその行をvimの内容に置き換えることを望んでいます。私は読み取りラインを使用しますread。それは次のとおりです。

query> select .... from .... very long... <ctrl-e> 

今viから

select .... from .... very long...

次のように編集

select ...
from ....
very long ...

6番出口

query> select ...
from ....
very long ... <enter>

クエリが実行されます。

更新:「read -e」の前に「set -o vi」を使用するのが私にとっては良い方法だと思いますが、現在<esc>v開いているバッファをクリックするとその行の内容は含まれませんが、私の履歴の内容は含まれません。その他のクエリ(以前に入力したクエリではありません)

答え1

まず、viをシェルコマンドラインエディタとして使用していることを確認する必要があります。

set -o vi

これで、コマンドラインにコマンドを入力/コピーできます。挿入モードを終了して通常モードに入るには、EscまたはShift+を使用しますTab。これでvi開くを押すことができますv

では、vi必要な変更をすべて実行し、バッファを保存して終了すると、viコマンドが実行されます。

答え2

CtrlBashでは、+ xCtrl+を使用して現在のコマンドラインのエディタを呼び出すことができますe

私が持っているシステムでは、この機能は独自のドキュメントではman readlineなくman bash「readline」セクションにあるので、これがbash専用の機能であるかどうか、または他のreadlineベースのプログラムでサポートされているかどうかはわかりません。

bashのドキュメントは次のとおりです。

edit-and-execute-command( C-xC-e)

現在のコマンドラインからエディタを呼び出し、結果をシェルコマンドとして実行します。 Bashは$VISUAL$EDITORおよびエディタを順番に呼び出そうとします。emacs

答え3

プロンプトがシェルプロンプトである限り、他のすべてのread答えは有効で便利です(例:

そうでない場合(完全にはっきりしていない場合)、たとえばSQLインタプリタを使用するときに特別な(設定可能な)キーを使用して、選択したエディタ(入力で指定されたなど)を呼び出すことがxxxsqlできます。カーソルを保持するのに便利です。呼び出し時の位置)rlwrap --multi-line -a xxxsqlexport RLWRAP_EDITOR="vim '+call cursor(%L,%C)"call_cursorvim

追加ボーナスとして、複数行コマンドの場合でも、完全なコマンド履歴が得られます(これらのコマンド履歴は、履歴リストに入れる前に1行コマンドに「圧縮」されますが、再使用すると再び拡張されます)。

編集:より多くの情報を見つけることができます rlwraps Github ページ。あらゆる用途のようにGNUライン読み取りライブラリその行動のほとんどは指定済み ユーザーには、上記の外部エディタ呼び出し用の特殊キーを制御するためのいくつかの独自のオプションが$INPUTRC 追加されました(デフォルトは+)。rlwrapCTRL^

関連情報