我们可以使用向上和向下箭头在命令历史记录中导航。
在某些IDE(例如Matlab)中,如果我们输入一些内容然后按箭头键,则仅在以输入内容开头的历史记录命令之间滚动。那真的很方便,但是在Shell终端中,这是行不通的。
有什么方法可以在Shell终端中获得类似的功能?还有其他提高终端使用效率的技巧吗?
我们可以使用向上和向下箭头在命令历史记录中导航。
在某些IDE(例如Matlab)中,如果我们输入一些内容然后按箭头键,则仅在以输入内容开头的历史记录命令之间滚动。那真的很方便,但是在Shell终端中,这是行不通的。
有什么方法可以在Shell终端中获得类似的功能?还有其他提高终端使用效率的技巧吗?
Answers:
将它们放在您的~/.inputrc
:
"\e[5~": history-search-backward
"\e[6~": history-search-forward
这些使得Page Up和Page Down行为,如你所愿。(有些发行版已经为您配置了它。)我个人觉得这些方法比Ctrl+ R或更加方便history
。
~/.inputrc
或/etc/inputrc
环境变量引用的$INPUTRC
文件是使用readline的所有应用程序的行编辑配置文件,包括bash(您的shell)。它具有某些内置的行编辑功能,包括以下两项:在bash的手册页中搜索这些关键字之一以了解更多信息。\e[5~
/ \e[6~
是大多数终端仿真器中的Page Up / Down键生成的转义序列;要查看它,请启动cat
命令,然后按以下键(转义字节在终端中表示为^[
,在inputrc中表示为\e
)。
echo $INPUTRC
它是空的。我正在使用Ubuntu 14.04
"\e[A": history-search-backward
和"\e[B": history-search-forward
除了^ r / ^ s的历史记录i-search:
alt.在光标处插入上一个命令的最后一个“单词”。重复此操作以从较旧的命令中获取最后的单词。(但是请注意,结尾&
命令是背景命令的最后一个字)。
这是超级方便mkdir foo
, cd
ALT点。甚至比向上箭头^ a,alt-d(删除前向单词)快cd
。
要获得倒数第二个单词,请使用esc
-
2
alt+.
(即,使用emacs样式的数字参数作为alt+.
。负数从头算起,正数从头开始算起。)在某些时候,鼠标和复制/粘贴或向上箭头和^ w / ^ y部分的到达速度更快(请参见下文)。
如果您的终端设置正确/正确,则ctrl-left和ctrl-right将按单词向后/向前移动。如果不是这样,希望至少alt-b和alt-f会做同样的事情。
ctrl- /是撤消操作。如果您可以在有点超调的情况下撤消操作,则可以使用自动重复功能更有效地删除单词。
使用kill-ring更有效地混合/匹配命令,就像在Emacs中一样。ctrl-y粘贴最后一个ctrl-w / ctrl-u / ctrl-backspace / alt-d。alt-y循环显示较旧的被杀死的文本。
多个ctrl-w或连续执行的任何操作都会在kill-ring条目上输入。如果要删除两件事并且以后只粘贴一件事,请使用向左和向右箭头或其他方式将条目分开。
将所有这些结合在一起,您可以
alt+r
将其还原到删除部分之前的状态。>
返回历史记录的末尾(即一直向下箭头),返回到您位于中间的命令。其他交互式使用技巧:
启用shopt -s globstar
,您就可以这样做**/*.c
(递归包括当前目录)。有时便于交互使用,但通常find -name '*.c' -exec foo {} +
更好。
如果您编写bash脚本,那么shopt -s extglob
在交互式shell中启用它也会很方便。有时,您会发现某些用途,例如*.!(c|h)
匹配不以.c或.h结尾的文件。
找到你喜欢的别名ls -l
,less
和其他任何你做了很多。(cp -i
,mv -i
和rm -I
很好。不要养成依靠他们来做选择性rm 的习惯。GNUrm的-我要对所有的arg一次询问。)
我喜欢alias m=less
(表示“更多”)。我已经less
设置,并.绑定到上一个/下一个文件(lesskey
)。默认值为多按键序列,不能与自动重复一起使用。
我喜欢在GNU屏幕内做所有事情。与Konsole(或我尝试过的任何其他终端模拟器)中的一系列选项卡相比,我发现跟踪编号的屏幕窗口更容易。如果您还不了解screen
,请学习tmux,因为它是新的并且不那么笨拙。
为了获得类似的功能,即使用与另一个外壳相同的cwd打开一个新外壳,我对cd / pushd / popdcds 8
使用了一个自定义钩子,使我可以将cd切换到屏幕窗口8中我的外壳正在使用的任何目录。 即使只有一个屏幕会话,此方法也适用于屏幕会话之外的外壳。
gnome-terminal
在我切换到KDE之前,它对于Ubuntu 14.04 来说是开箱即用的。相关选项在您的终端设置中,包括esc-prefix和high-bit以及其他一些设置。其中有些不能通过ssh对我完美地工作。(例如ctrl向左/向右移动箭头键的转义码,我从5D
字面上出现)
我通常使用的方法是将history
命令与grep
IE浏览器:
history | grep <command im looking for>
这将显示您键入的包含该命令的命令的编号历史记录,然后可以使用:
!<number listed in history command>
重做该命令。
IE浏览器:
history | grep history
142 history
143 history | grep lvresize
568 history | grep echo
570 history | grep echo
571 history | grep history
其次是:
!571
将重复 history | grep history
!
历史记录替换不太安全。
如果可以使用zsh
而不是bash
使用cona,请使用oh-my-zsh。
它包含在命令历史记录中的上下箭头导航。当您已经键入文本(如Mathlab)时,它还允许相同的导航。
编辑:它还包含其他以开发人员为中心的内容,例如别名和主题。这些额外功能使发行版更大,使用更复杂。
oh-my-zsh
包含大量的东西。您可能会说:当您仅需要特定的设置或应用程序时,该发行版中便包含此确切功能。
将以下别名添加到〜/ .bashrc
alias h='history | awk '"'"'{$1="";print}'"'"' |sed "s/^ *//" |grep -v "^h " | sort | uniq | grep'
用法:h fire
将为我提供包含fire的命令列表。否则h ^fire
我会得到以火开头的命令列表。
当我想同时查看一系列命令时,这很有用。
顺便说一句,这'"'"'
很丑陋,但我找不到其他方法来避免在单引号中使用单引号。
h="history | awk '{\$1=\"\"; print}'
应该工作。或者创建一个函数并调用它。
fish
;)