OSX配置Bash的历史命令补全等功能

1. 文件配置

配置在~/.bash_profile或者 /.bashrc;按键相关配置在/.inputrc 也可以。 区别是,inputrc为特定的情况处理键盘映射,例如bash的热键,profile中会判断是否有用户自定义的inputrc。当shell是login shell,.bash_profile才会加载,而bashrc正好相反(non-login shell的时候加载)。例如在linux下,当用户登录到一个图形界面,然后打开一个终端terminal,那些shell是non-login shell。例如在OS X登录的时候,并没有运行着一个shell,所以,在运行Terminal.app的时候,其实那是一个login shell。
为了通用,可以在 ~/.bash_profile里写上这个来加载.bashrc,然后把配置写在bashrc里,确保都可以执行。

if["${BASH-no}"!="no"];then
  [ -r ~/.bashrc ] && . ~/.bashrc
fi

2. .bashrc的配置

HISTCONTROL=ignoredups  #忽略重复命令
HISTCONTROL=erasedups #清除重复命令, 多个终端写history的时候还是有可能重复
HISTFILESIZE=1000000000 #命令历史文件大小
HISTSIZE=10000  # 保存历史命令条数
PROMPT_COMMAND="history -a" 
export HISTSIZE PROMPT_COMMAND
bind '"\C-f": forward-word'     #按照单词forward
bind '"\C-b": backward-word'  #按照单词backward
bind '"\e[A": history-search-backward'  #搜索历史补全
bind '"\e[B": history-search-forward'

其中,“HISTFILESIZE 表示记录在文件中的命令条数,HISTSIZE 表示记录在内存中的命令条数,Bash 会首先读取整个历史记录文件, 然后再把它截短到 $HISTSIZE 所定义的长度 – 因此如果你的历史记录文件变得非常非常大, bash 的启动时间会受到一定影响。”解决办法是存档。--https://blog.felixc.at/2013/09/how-to-avoid-losing-any-history-lines/ http://stackoverflow.com/questions/19454837/bash-histsize-vs-histfilesize
history -a 是把多个终端的history强制立刻写入命令历史记录,上面的文章里也有描述。但是发现个问题,写是即时的,但是我这里读不是及时的,已经开的终端并没有即时都到新的history。
下面的bind很好理解,看注释就好了。history-search搜的就是HISTSIZE对应的条数,这个自己test下就可以知道。

你可能感兴趣的:(OSX配置Bash的历史命令补全等功能)