问题描述
对于不在ubuntu上进行python编程的人来说,ipython是类固醇上的python shell,但是它具有令人惊叹的功能,它不仅可以基于已知名称自动完成操作(即bash按下tab时的方式相同),但是如果您开始键入命令并按下,则它不会滚动浏览整个历史记录(例如bash),而只会滚动显示以相同字母组成的最近命令。
因此,如果您执行了一些长命令,例如scp -r -P 8000 -l user server.com:~/dir/to/copy ./
,然后再执行其他几个命令。如果您开始输入scp
并按下,bash会显示之前显示的命令,而不仅仅是滚动整个历史记录。
bash有这样的扩展名吗?或是否有提供这种功能的 shell ?
最佳思路
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
+ R
并输入几个字母。它也以相反的顺序工作。
第三种思路
并且不要忘记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.
我经常使用该功能来引用上一个命令的最后一个’word’。例如。,
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.
因此,它是”similar”。其中任何一个都可能在csh
或tcsh
中中断。或您不使用的任何csh后代,因为它不如bash
精彩。