如何在Mac终端利用命令补全高效打开PDF文件?
解决Mac上bash-completion下快速打开PDF的问题
我完全懂你的痛点!在Linux上用evince配合命令补全,能飞快定位PDF文件,尤其是pdflatex编译后一堆同名不同后缀的文件时,体验特别爽。但Mac上的open命令补全确实不给力,得循环切半天才能找到PDF。不过咱们可以通过几个基于bash-completion的方案来搞定:
方案1:自定义专属PDF打开命令+补全
这个方法最直接,给PDF单独整个命令,补全只认PDF:
- 先创建bash-completion规则文件:
sudo touch /opt/local/etc/bash_completion.d/open-pdf-completion - 编辑这个文件,写入以下内容:
_open_pdf() { local cur=${COMP_WORDS[COMP_CWORD]} # 只匹配后缀为.pdf的文件 COMPREPLY=( $(compgen -f -X '!*.pdf' -- "$cur") ) } # 给openpdf命令绑定补全逻辑 complete -F _open_pdf openpdf - 把这个规则加载到你的bash配置里,编辑
~/.bash_profile或者~/.bashrc,添加一行:source /opt/local/etc/bash_completion.d/open-pdf-completion - 重启终端或者执行
source ~/.bash_profile生效,之后输入openpdf sam按Tab,就只会补全以sam开头的PDF文件了!
方案2:给现有阅读器命令加PDF补全
如果你习惯用特定的PDF阅读器(比如Preview或者Skim),可以给它的启动命令加补全:
- 先在bash配置里加个别名(比如用Preview):
alias pdfopen='open -a Preview' - 同样创建补全规则文件(或者直接加到刚才的
open-pdf-completion里):_pdfopen() { local cur=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen -f -X '!*.pdf' -- "$cur") ) } complete -F _pdfopen pdfopen - 加载配置后,用
pdfopen命令就能享受PDF专属补全了。
方案3:修改open命令的默认补全(谨慎操作)
如果你不想用新命令,想直接改open的补全逻辑:
- 找到MacPorts安装的
open补全文件,一般路径是/opt/local/etc/bash_completion.d/open - 编辑这个文件,找到生成补全列表的部分,添加
-X '!*.pdf'的过滤条件,这样open命令就只会补全PDF文件了。不过这个方法会影响open对其他文件类型的补全,所以只推荐你平时几乎只用open打开PDF的情况。
这些方法都是基于bash-completion的原生机制,完全符合你想要的快捷补全需求~
内容的提问来源于stack exchange,提问作者user254985




