iPython 类似 Shell 的命令历史记录

iPython 类似 Shell 的命令历史记录

对于那些不在 ubuntu 上进行 Python 编程的人来说,ipython 是一个增强版的 Python shell,但它有一个令人惊叹的特性,它不仅可以根据已知名称自动完成(即与 bash 按下 tab 键时的方式相同),而且如果你开始输入命令并按下向上键,它不会滚动浏览整个历史记录(像 bash 一样),而只会滚动浏览以相同字母串开头的最近命令。

因此,如果您执行了一些较长的命令(例如,scp -r -P 8000 -l user server.com:~/dir/to/copy ./后面跟着几个其他命令)。如果您开始输入scp并按下向上键,bash 将显示之前显示的命令,而不是仅仅滚动浏览整个历史记录。

是否有类似 bash 的扩展?或者是否有提供此类功能的 shell?

答案1

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

答案2

尝试按Ctrl+R并输入几个字母。反向操作也有效。

答案3

并且不要忘记 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

答案4

有一个与@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)取消注释下面两行,新的终端会话就会具有历史搜索功能(针对所有用户)。

相关内容