我面临着逃跑的挑战:
流程:
第 1 步 - 文件检索:在 bash 中,将调用 find 命令。
Find 命令输出是 1 个单个文件,其路径如下:
./vacation/the united states/"best times of our lives"/persona notes.org
笔记:
• 在路径内
出现2 次双引号
"
,将短语括起来best times of our lives
大多数子目录包含 1 个或多个空白字符
• 在文件名内
- 此外,还出现 1 个或多个空白字符
步骤 2 - 通过引用相应的 find 命令结果来访问找到的 1 文件,在 bash 中启动 Emacs:
通过仅通过棘手的路径来做到这一点会像这样工作
$ emacs -nw './vacation/the united states/"best times of our lives"/persona notes.org'
emacs 在 bash 中启动,屏幕上显示的内容从 bash 内容切换到包含所述文件的文件内容的 Emacs 缓冲区。
现在的最后一个问题是:如何通过在 bash 中为 emacs 命令提供开头提到的 find 命令输出来准确实现这一点?
一般来说,替代是要走的路:
$ emacs -nw $(find ./vacation/ -mmin -700 -type f -iname *.org)
但正如字面上的替代品是
./vacation/the united states/"best times of our lives"/persona notes.org
结果线
$ emacs -nw ./vacation/the united states/"best times of our lives"/persona notes.org
需要转义空白字符和双引号。
但如何呢?
•$ emacs -nw '$(find ./vacation/ -mmin -700 -type f -iname *.org)'
- 不起作用:Emacs 在 bash 中启动,但设置了一个名为“
-mmin -700 -type f -iname *.org)
这样的文件不存在,因此缓冲区为空”的缓冲区
• 用双引号替换单引号也不起作用
$ emacs -nw "$(find ./vacation/ -mmin -700 -type f -iname *.org)"
- 尝试一下……作品我很困惑!它确实有效
- 嗯,你知道吗?这正是为什么我不再对它进行黑客攻击,而是采取了另一种方法 - 向您提出这个问题,向您解释它以寻求解决建议
- 因此,将所有这些视为两者,特别是作为某个问题及其解决方案的呈现,并且总体上作为如何解决摆在您面前的问题的灵感,这使您陷入僵局 - 后退一步,尝试不同的方法,其中寻求别人的建议,向别人解释问题,质疑自己,做你一开始就排除的事情是非常有帮助的,是你克服当前局限性的一种方式。
- 您可能会问自己:“为什么不简单地通过合适的 -exec 选项打开带有相应 find 调用扩展名的找到的文件?”答案是:那么该过程将是 find 调用,而不是 emacs 调用,因此您对 emacs 的访问会更差。例如,您设置的用于恢复之前挂起的当前 emacs 会话的别名将不起作用,因为作业列表仅包含 find 作业(包含 emacs 作业),但别名依赖于独立的 emacs 作业。
答案1
使用find
和xargs
:
find ... -print0 | \
xargs -0 --no-run-if-empty -n 1 \
emacs -nw
如果您添加(server-start)
到您的 Emacs 启动文件,~/.emacs
您可以在不同的窗口中启动emacs
一次,然后使用它emacsclient
来打开您想要的文件,而开销要少得多。
读man find xargs emacsclient emacs
。