我有一个较大的 tex 项目,该项目分为几个 tex 文件。每次我想处理它时,我都会打开 emacs 并手动找到C-x C-f
我想要处理的所有文件。
我想知道是否有办法从包含文件名列表的文件中打开文件(从命令行),例如
文件列表.txt:
file1.tex file2.tex file3.tex
然后做
cat files | emacs -nw
除了 emacs 不支持所使用的命令,因为它不喜欢重新分配 stdin。
有任何想法吗?
答案1
而是通过 xargs 传递它:
cat files | xargs emacs
xargs
从 stdin 获取文本并将其作为参数传递给指定的程序。将files
文件传输到 is 会导致它调用 emacs 类似:
emacs file1.tex file2.tex file3.tex
答案2
Collin Hockey 建议的另一种方法是使用 shell 中的命令替换。以下语法在 Bourne like shell 中有效(sh
、bash
等zsh
)。
emacs $( cat files )
或等效地(但可读性较差且更含糊)
emacs ` cat files `
不过,这仍然不是一个优雅的解决方案。我一般不是一名emacs
用户,但我猜有些答案这里也许这就是你真正想要的。看看吧!
附言
如果文件名列表的长度超过字节,那么我和 Collin 的解决方案都无法正常工作getconf ARG_MAX
。在我的系统上,这个长度大约是 2 MiB。
答案3
这实际上并不能解决您的问题,但可以作为替代方案。检查一下,desktop-save-mode
如果在关闭 emacs 时打开了某些缓冲区,则在重新打开 emacs 时,它将重新打开您拥有的所有缓冲区。