4 編集

JShellでは、jshellプロンプトでの入力の編集および選択した外部エディタでの編集をサポートしています。

シェル編集を使用すると、スニペットやコマンドを入力するときにこれらを編集したり、以前に入力したスニペットやコマンドを取得したり、編集したりできます。外部エディタではスニペットの編集および作成の代替方法を提供しており、複数行のスニペットを使用する場合に便利です。

シェル編集

コマンド・プロンプトで入力内容を編集すると、入力内容の修正、および以前に入力したコマンドやスニペットの取得と変更が容易になります。

JShellでのシェル編集は、BSD editlineおよびEmacsモードのGNU readlineと同様の機能があります。JLine2ユーザー情報およびGNU Readlineのドキュメントを参照してください。

入力行のナビゲーション

シェル編集は、現在の行の編集またはJShellの前のセッションの履歴へのアクセス用にサポートされています。

入力行をナビゲートする際に、[Ctrl]キーおよびメタ・キーを組み合せて使用します。キーボードにメタ・キーがない場合、[Alt]キーをマップしてメタ・キーの機能を提供することがあります。

行内の基本的なナビゲーションとして、右矢印キーまたは左矢印キーを使用し、後方へのナビゲーションには[Ctrl]+[B]を使用し、前方へのナビゲーションには[Ctrl]+[F]を使用します。履歴内の行間のナビゲーションに、上矢印キーおよび下矢印キーを使用します。上矢印キーを一度押すと、現在の行が前のコマンドまたはスニペットの行に置き換わります。上矢印キーを再度押すと、前の行にナビゲートされます。履歴には、コマンドとスニペットの行の両方が含まれています。複数の行が含まれているスニペットの場合、上矢印キーと下矢印キーでスニペットの各行間をナビゲートします。

次の表に、入力行のナビゲート時に使用するキーと実行されるアクションを示します。

キー アクション

[Return]

現在の行を入力します

左矢印

1文字前に移動します

右矢印

1文字後ろに移動します

上矢印

1行上または前の履歴に移動します

下矢印

1行下または次の履歴に移動します

[Ctrl]+[A]

行の先頭に移動します

[Ctrl]+[E]

行の末尾に移動します

メタ・キー+[B]

1単語前に移動します

メタ・キー+[F]

1単語後ろに移動します

履歴のナビゲーション

スニペットおよびコマンドの履歴がJShellセッションで保持されています。この履歴を使用すると、現在および前のセッションで入力した項目にアクセスできます。

前の入力を再入力または編集するには、上、下、左、右矢印を使用して履歴をナビゲートします。入力したテキストは、カーソルの位置に挿入されます。[Delete]キーを使用して、テキストを削除します。[Enter]キーを押して、履歴の行を変更するかしないかに関係なく、これを再入力します。

上矢印および下矢印キーで、履歴を前後に1行ずつ移動します。次に例を示します。

jshell> class C {
   ...>    int x;
   ...> }
|  created class                                                                                           
jshell> /list

   1 : class C 
         int x;
       }

jshell> <up arrow>

上矢印キーを押すと、次のような行が表示されます。

jshell> /list

上矢印キーを再度押すと、クラス定義の最後の行が表示されます。

jshell> }

下矢印キーを押すと、/listコマンドに戻ります。[Enter]を押すと、実行されます。

jshell> /list

   1 : class C {
         int x;
       }

[Ctrl]+上矢印を押すと、スニペットでは、上に移動します。1行のスニペットの場合、[Ctrl]+上矢印キーを押すと、上矢印キーのみを押す場合と同様に動作します。クラスCのような複数行のスニペットの場合、[Ctrl]+上矢印キーを押すと、行をスキップしてスニペットの先頭に移動します。

入力行の変更

履歴から取得した入力行を必要に応じて変更したり、再入力できます。これにより、変更が少ない場合に行を再入力する必要がなくなります。

現在のカーソル位置にテキストを追加するには、これを入力します。使用するキーおよび行内のカーソルの移動については、「入力行のナビゲーション」を参照してください。

次の表に、入力行の変更時に使用するキーと実行されるアクションを示します。

キー アクション

[Delete]

オペレーティング・システムに応じて、カーソルの位置またはカーソルの後ろにある文字を削除します。

[Backspace]

カーソル位置の前にある文字を削除します。

[Ctrl]+[K]

カーソル位置から行の末尾までのテキストを削除します。

メタ・キー+[D]

カーソル位置から単語の末尾までのテキストを削除します。

[Ctrl]+[W]

カーソル位置から前の空白までのテキストを削除します。

[Ctrl]+[Y]

最後に削除されたテキストを行に貼り付けます。

メタ・キー+[Y]

[Ctrl]+[Y]、メタ・キー+[Y]を繰り返すと、削除したテキストが元に戻されます。

検索およびその他

履歴の検索は、作業対象の行を見つけやすくするJShellの機能であり、これを使用すると、1行ずつ履歴を調べる必要がありません。

検索を開始するには、[Ctrl]+[R]を押します。プロンプトで、検索文字列を入力します。検索では、最後の入力からさかのぼって処理し、JShellの前のセッションも処理対象です。次の例は、[Ctrl]+[R]を押した後に表示されるプロンプトを示しています。

jshell> <Ctrl+R>
((reverse-i-search)`': 

「履歴のナビゲーション」の例に基づいて、classと入力すると、表示が変更され、テキストclassを含む直近の行が表示されます。

(reverse-i-search)`class': class C {

検索はインクリメンタルであるため、最初の文字cを入力しただけで前述の行が取得されます。[Ctrl]+[R]を繰返し押すと、履歴内を過去にさかのぼって検索を続行できます。[Ctrl]+[S]を押すと、現在の方向に検索が行われます。

キーボード・マクロを定義するには、[Ctrl]+[x]を押します(その後、テキストを入力し、[Ctrl]を押しながら[x]を押します)。マクロを使用するには、[Ctrl]+[x]+[e]を押します。

次の例は、検索およびマクロの作成を行う場合のキーの組合せを示しています。

キー アクション

[Ctrl]+[R]

履歴を過去にさかのぼって検索します

[Ctrl]+[S]

履歴の新しい方に検索します

[Ctrl]+[X]+[(]

マクロ定義を開始します

[Ctrl]+[X]+[)]

マクロ定義を終了します

[Ctrl]+[X]+[e]

マクロを実行します

外部エディタ

コマンド・プロンプトでの編集の代替方法は、外部エディタを使用することです。このエディタでスニペットを編集および作成でき、特に複数行のスニペットに便利です。JShellを構成すると、選択したエディタを使用できます。

エディタで既存のすべてのスニペットを一度に編集するには、オプションを指定しないで/editを使用します。エディタで特定のスニペットを編集するには、スニペット名またはIDを指定して/editコマンドを使用します。/listコマンドを使用してスニペットIDを取得します。次の例は、エディタを開いてvolumeという名前のスニペット(「前方参照」で定義済)を編集しています。

jshell> /edit volume

エディタで新規スニペットを入力することもできます。エディタで保存する場合、変更されたスニペットまたは新規スニペットはJShellセッションに入力されます。スニペットからのフィードバックはJShellウィンドウに表示されますが、JShellプロンプトは表示されません。エディタを閉じるまで、JShellウィンドウにコマンドまたはスニペットは入力できません。

エディタを指定しない場合、環境変数JSHELLEDITORVISUALEDITORがこの順でチェックされます。これらのうちのいずれも設定しない場合、シンプルなデフォルト・エディタが使用されます。JShellを設定して選択したエディタを開くには、/set editorコマンドを使用します。/set editorコマンドの引数は、使用する外部エディタの起動に必要なコマンドです。次の例は、エディタとしてkwriteを設定し、既存のすべてのスニペットで使用可能なエディタを開いています。

jshell> /set editor kwrite
|  Editor set to: kwrite

jshell> /edit

外部エディタのウィンドウでxを定義して変更を保存すると、JShellウィンドウで次のような出力が得られます。

|  created variable x of type int with initial value 6

外部エディタを閉じると、JShellプロンプトがリストアされます。

jshell>