シェルのiPythonのようなコマンド履歴


24

UbuntuでPythonプログラミングをしていない人にとって、ipythonはステロイドのPythonシェルですが、既知の名前に基づいて自動補完するだけでなく(つまり、bashを押したときのbashと同じように)、この驚くべき機能を備えていますただし、コマンドの入力を開始して上に押すと、履歴全体(bashなど)がスクロールされるのではなく、同じ文字列で開始された最近のコマンドのみがスクロールされます。

したがって、scp -r -P 8000 -l user server.com:~/dir/to/copy ./他のいくつかのコマンドが続くような長いコマンドを実行した場合。入力を開始scpして押した場合、bashは単に履歴全体をスクロールするのではなく、前に示したコマンドを表示します。

bashにこのような拡張機能はありますか?または、この種の機能を提供するシェルはありますか?

回答:


26

Bashにもその機能がありますが、デフォルトでは有効になっていません。これを~/.inputrc以下に貼り付けることで、カーソルを上下にバインドできます。

"\e[A": history-search-backward
"\e[B": history-search-forward

Ctrl代わりに+ up / downにバインドすることを好みます:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

編集:単語全体を保持ctrl+leftおよびctrl+right前後に移動するには、~/.inputrcファイルに次の行も含めます。

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

このヒントを使用すると、ターミナルでCtrlキーを押しながら左/右を使用して次/前の単語にジャンプすることができなくなり、全体の目的が損なわれます。回避策はありますか?
ゼータ

@zetah私は答え動かす言葉のための私の回避策に編集
WIM

1
すべてのデフォルトを保持するには$include /etc/inputrc、できれば最初の行にを追加することもできます。
トゥリオカサグランデ

9

Ctrl+ Rを押して、いくつかの文字を入力してみてください。逆の順序でも機能します。


6

また、bashの素晴らしい歴史拡張ショートカットを忘れないでください。1

あなたが腕に入れ墨していない(または記憶していない)場合に備えて、マンページからの抜粋を投稿しています。

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

前のコマンドの最後の「単語」を参照する機能を頻繁に使用します。例えば、

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

どちらの場合も、ここで!$一致し/foo/shmoo/adir.horribilus.fooます。


1 ... cshから取得されました。bashの機能盗難の範囲を緩和するために、bashのマニュアルページには次のように記載されています。

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

だから、それは「類似」です。これはどれもに壊れるかもしれませんcshtcsh。または、どのcshの子孫でも、あなたが使用していないのは、それがのように素晴らしいものではないという事実のためbashです。


0

上記の @ ak2に似たものがありますが、新しい.inputrcファイルを作成する必要はありません。

代わりに、sudo権限がある場合は、/ etc / inputrcファイルでこれを有効にできます。このファイルには、履歴検索機能(少なくとも18.04を含む)を含むさまざまなキーボード設定があります。/ etc / inputrcからの抜粋は次のとおりです。

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

sudoファイルエディタ($ sudo vimなど)を使用して下の2行のコメントを解除するだけで、新しいターミナルセッションに履歴検索機能が(すべてのユーザーに対して)あります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.