Answers:
我发现以下readline命令非常有用
history-search-backward,
history-search-forward
(注意它们是从通常的不同reverse-search-history
,forward-search-history
,绑Ctrl- ,R- )。CtrlS
我将这些命令与Ctrl- Up和Ctrl- Down将以下几行关联~/.inputrc
:
"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward
工作原理:在命令开头写上几个字符,按Ctrl- Up,将显示以该前缀开头的下一个较旧的命令,再按一次以查看下一个,依此类推。如果满意,可以修改命令后,按Enter执行。
"\e[B": history-search-forward
和"\e[A": history-search-backward
HISTFILESIZE
和/或HISTSIZE
(仅zsh支持HISTSIZE
,bash同时支持),以确保缓冲区足够大。SO问题bash HISTSIZE与HISTFILESIZE?可以进一步照亮。
另一个提示:我有时会使用注释为命令添加书签/标记:
my_command #bookmark
然后:
[ctrl-r]#bookmark
$_bookmark
。可以说这是一个可怕的骇客,它利用了一个事实,即不存在的变量会扩展为零,但是它确实有效,但要注意,不允许使用空格(请使用_代替)。
尽管范围非常有限,但我想指出以下两个扩展占位符:
!!
是最后一个命令的占位符扩展。如果您忘记放在sudo
命令前,则很有用。
!$
重复最后一个参数。如果您想重复执行不同的命令,则很有用a/very/long/path/name/you/do/not/want/to/type/again
alias
是一个很好的工具。
使用别名时,就像您键入别名一样,因此它非常灵活。例如,您可以将其与管道一起使用:
alias findfoo="grep 'foo'"
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo # Does your custom grep
您应该能够通过传递尚未指定的任何标志来进行“轻微变化”。
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo -v # finds non-matches
我为常用命令创建了最少的Shell脚本,并给它们起了短的名字。它们都存储在添加到中的相同位置PATH
。
这样,我可以快捷地访问非常复杂的命令,并且与之不同的是,alias
我可以将任务的可更改部分转换为快捷方式的命令行参数。
我在Git中维护.bash_history的副本。为了简化这一点,我设置了
# don't put duplicate lines in the history
# don't save commands which start with a space
HISTCONTROL=ignoredups:erasedups:ignorespace
# append to the history file, don't overwrite it
shopt -s histappend
在.bashrc中,和下面的命令在(经修饰用于一般用途)清除脚本
# Ensure a single space at the end of each line to easier add more parameters
sed -i -e 's/ *$/ /' "~/.bash_history"
sort --unique --output="~/.bash_history" "~/.bash_history"
我在添加行之前运行git gui
。由于历史记录文件是通过每个命令修改的,因此我还得到了一个特殊命令来更新该特定存储库:
git stash && git pull && git stash pop
HISTCONTROL=ignorespace
,这有时对避免混乱历史很重要。
在这里所有其他涉及历史的答案中。
我设置
HISTFILESIZE=2024
HISTSIZE=1024
在〜/ .bash_profile中
除了其他评论以外:历史
另一个有用的功能...
开始历史回顾
!first few letters<ESC>Ctrl-E
会记得以前几个字母开头的最后一条命令
例如:
!find<ESC>Ctrl-E
您没有提到您是使用GUI还是仅使用命令行。如果使用的是GUI,则可以使用持久性剪贴板管理器之一来复制/粘贴常用命令,用户ID,密码,URL等。
!find<ESC>CTRL-E
行得通,但我怀疑我明天能否记得它。那是什么ESC CTRL-E?
学习使用Ctrl-R并Ctrl-S可以轻松地在历史记录中搜索所需的命令,并且您已经发现HISTCONTROL环境变量可以忽略重复项并更改bash历史记录文件的站点。
如果我由于打了太多次而跳过了找到的命令,通常会执行很多操作,Ctrl-R然后Ctrl-E更改一些参数以进行救援。Ctrl-RCtrl-S
除了上面的好答案之外,如果您碰巧使用的是基于kde或gnome的gui,那么AutoKey可能会非常有用。
https://code.google.com/p/autokey/
它允许您创建通过键入几个字符或按热键触发的短语。这些短语随后被替换或添加到您的输入中。
它还支持用python编写的脚本,如果您了解python,则可以执行几乎所有操作。我还不了解python,但是我已经有了一些非常基本的脚本来完成整洁的事情。
一切似乎都来自您的键盘,因此它可以与任何接受键盘输入的应用程序一起使用,也可以与您自己的桌面一起使用。
它具有许多选项来控制这些事物的激活方式和激活位置,因此您可以使某些仅在控制台中工作,而另一些仅在另一个窗口中工作。您还可以设置短语,使其在键入触发它们的字符串后立即运行,或者等到您给它们确定后再运行。
alias
也许更有用。例如。alias gfc="git fetch origin"