3

我想创建一个脚本,为我简单地清理文件夹中多个文件上的空格和制表符。我创建了一个 bash 文件,其中包括:

emacsclient -t -e '(progn (prelude-cleanup-buffer-or-region) (save-buffer-kill-terminal))' $FILE

现在这似乎不起作用,因为它将所有文件参数解释为要运行的函数(因此 $FILE 作为函数执行)。(PS prelude-cleanup-buffer-or-region来自这里

现在我真正想要的似乎在--batch 这里描述(因为我实际上不想在屏幕上显示任何内容)但这不是 emacsclient 的选项之一。我想使用 emacsclient 而不仅仅是使用的原因emacs --batch是我有很多启动文件,所以希望所有这些都保持加载,否则我的脚本会花费太长时间。

有人对如何解决这个问题有任何建议吗?

提前致谢。

4

1 回答 1

2

emacsclient -e 表示评估 lisp 表单,不编辑文件

从手册页

 -e, --eval
              do  not  visit files but instead evaluate the arguments as Emacs
              Lisp expressions.

我想您可以在(find-file "file")要执行的表单列表中添加一个

我刚试过这个片段 -

/opt/local/bin/emacsclient  -e '(progn (find-file "./tmpfoo") 
    (end-of-buffer) (insert "ffff") (save-buffer))' 

它会像您期望的那样默默地编辑文件。

您可以使用 shell globbing 和脚本将参数文件名展开到表单列表中。

也不要使用-t开关运行,-e不希望有一个持久的编辑器窗口,并且您不需要 kill-terminal。客户端只会运行您的 elisp 并退出。

我想我可能会编写一个带有文件名参数的 lisp 函数,我在启动时将其加载到 emacs 中,然后通过 emacsclient 使用文件名调用它,

例如FILENAME="somefile"; emacsclient -e "(now-do-my-thing $FILENAME)"

于 2014-10-27T12:54:51.843 回答