如何在bashrc中编写自动补全函数补全历史中的单个单词
实现Bash历史记录单单词自动补全的方法
步骤1:编写自定义补全函数
在~/.bashrc中添加以下函数,它会从命令历史里提取所有曾作为参数使用过的单词,去重后生成补全候选:
_history_word_complete() { # 提取历史命令中所有非命令本身的单词(从第2个字段开始),去重并过滤空行 local history_words=$(history | awk '{for(i=2; i<=NF; i++) print $i}' | sort -u | grep -v '^$') # 根据当前输入的前缀生成匹配的补全列表 COMPREPLY=($(compgen -W "$history_words" -- "${COMP_WORDS[COMP_CWORD]}")) }
步骤2:绑定触发快捷键
在~/.bashrc中添加快捷键绑定,这里选择绑定到Alt+/(避免和默认Tab补全冲突):
bind -x '"\e/": _history_word_complete'
步骤3:生效配置
执行以下命令让配置立即生效,或者重新打开终端:
source ~/.bashrc
测试效果
- 先执行两个测试命令:
less firstFile.txt gvim secondFile.txt
- 输入
cat firs,然后按下Alt+/,就会自动补全为cat firstFile.txt。
注意事项
- 确保Bash的历史记录足够多:可以检查
~/.bashrc中的HISTSIZE和HISTFILESIZE参数,建议设置为较大的值(比如HISTSIZE=10000),避免历史记录被截断。 - 如果需要补全包括命令本身的所有单词,只需把awk的循环起始
i=2改成i=1即可。
内容的提问来源于stack exchange,提问作者Sidharth C. Nadhan
相关产品推荐
相关产品推荐

