インタラクティブモード

インタラクティブモード

私はしばしば端末を通して研究実験を行います。コマンドが非常に長いため、呼び出しパラメーターを変更する必要があることがよくあります。問題は、コールラインが長く、パラメータがたとえばラインの中央にあることです。パラメータを置き換えるには、パラメータがある場所に達するまで左矢印/右矢印を押してから、文字を削除して再作成する必要があります。

マウスカーソル位置を使用してターミナルコマンドラインをナビゲートする方法はありますか?もちろん、行の中央をクリックしても効果はありません。

例:

端末にいるとしましょう。

~> runThisProgram(a, b, c, d, ..., v, w, x, y, z)。

それでは、パラメータcの代わりにXを使って実行したいと思います。行の終わりに行き、cに達するまで左矢印を押し続け、削除してXを書きます。 (または対称的に行の先頭に移動し、cに達するまで右矢印を押し続け、削除してXを書き込みます)。 ?

答え1

シェルから一度に1単語ずつ移動できます。Alt+Bカーソルを 1 つの単語の後ろに移動し、Alt+Fカーソルを 1 つの単語の前に移動します。Alt+Dカーソルの後ろの単語を削除します。ショートカットの組み合わせの詳細については、以下bashを参照してください。手動

答え2

必要なことを行う方法はいくつかあります。

インタラクティブモード

bashやzshなどの最新(そして最も人気のある)シェルは、入力ライブラリとしてGNU readlineを使用します。バラより男3読書船、部分編集コマンド。 emacsとviの2つのモードがあります。

 Emacsスタイル

set -o emacs

@sebasthの答えはこの部分をカバーしています。

CTRL+ P(またはUP):最後のコマンド

ALT+ B:単語を逆に

ALT+ F: 単語の前方

ALT+ D: 次の単語を削除

ALT+ backspace: 前の単語を削除

CTRL+ A: 行の始まり

CTRL+ E: 行末

 次元スタイル

set -o vi

I挿入モードに入り、ESCコマンドモードに入るには押します。コマンドモードに入り、次の操作を行います。

K:最後のコマンド

B:言葉を逆さまに

W:これからの話

DW: 次の単語を削除

DB: 前の単語を削除

0:行の始まり

$: 行末

外部エディタの使用

fc最後のコマンド(記録で他のコマンドを指定することもできます)は、お気に入りのエディタに貼り付けられます($ EDITOR変数を参照)。このコマンドはエディタを終了すると実行されます。

コマンドラインが長くなり始めたら、シェルのreadlineの代わりに実際のエディタを使用できます。ボーナスとしてディスクにスクリプトファイルとして保存できます。

1つのパラメータのみを修正

使用し^before^afterて文字列を 。beforeafter

たとえば、

abitbol@localhost $ echo 1 2 3 4 5 6 7 
1 2 3 4 5 6 7

abitbol@localhost $ ^3^42
echo 1 2 42 4 5 6 7 
1 2 42 4 5 6 7

答え3

変数(テキストカーソルの位置)を目的の列に設定する関数をbash使用できるように使用しているようです。列を見つける最も手頃な方法は、行の先頭から目的の位置まですべてのテキストをマウスで選択してから、この選択項目の読み取りを使用することです。readlineREADLINE_POINTxsel

たとえば、これを試すには、文字を!関数にバインドしますgotocolumn

$ bind '-x "!":gotocolumn' 
$ gotocolumn(){ local x=$(xsel);READLINE_POINT=${#x}; }

長い行を読み込むには、前に数文字を選択してカーソルを!入力して移動します。


テキストカーソルをマウスの位置に移動する機能が実際に組み込まれていることを確認しました。xtermこのreadline-button機能があり、適切なバインディングのみが必要です。たとえば、次のようにします。

xterm -xrm 'XTerm.VT100.translations:  #override\
 Mod4 <Btn1Down>: readline-button()\n'

その後、入力行の文字をMeta(またはSuper)キーで左クリックすると、xtermはカーソルが揃うまで左または右クリックを生成します。

同様に、UrxVTman urxvt-readlineデフォルトでは有効になり、Shiftと左クリックをバインドする組み込みのPerl拡張(参考資料を参照)があります。

答え4

これを単純なシェルスクリプトでラップし、シェル変数を調整したいパラメータとして使用します。

#!/bin/sh

param_c=340

./myprogram 1 2 "$param_c" \
            4 5 6 7

関連情報