我是一个编程新手,请谅解我的问题...
我有一个文件夹,里面有许多名为“foo01.txt”,“foo02.txt”等的文件,并且有一个叫做MyFunction
的函数。我想打开每个文件作为缓冲区,在其上运行MyFunction
,将缓冲区写入其文件,关闭缓冲区并继续进行下一个文件,直到所有文件都完成。
我认为我需要做这件事的所有组件都在菜谱中描述了 (http://emacswiki.org/emacs/ElispCookbook),但我不太明白如何将它们组合起来。谢谢!
我是一个编程新手,请谅解我的问题...
我有一个文件夹,里面有许多名为“foo01.txt”,“foo02.txt”等的文件,并且有一个叫做MyFunction
的函数。我想打开每个文件作为缓冲区,在其上运行MyFunction
,将缓冲区写入其文件,关闭缓冲区并继续进行下一个文件,直到所有文件都完成。
我认为我需要做这件事的所有组件都在菜谱中描述了 (http://emacswiki.org/emacs/ElispCookbook),但我不太明白如何将它们组合起来。谢谢!
如果你正在寻找纯Elisp的答案,你可以像这样做:
(defun process-file (f)
(save-excursion
(find-file f)
(my-function) ; Call your function here.
(write-file f)
(kill-buffer (current-buffer))))
(defun process-files (dir)
(mapc 'process-file
(directory-files dir t ".txt$")))
process-files
会迭代给定目录中的每个文件,并将process-file
应用于所有.txt文件。您可以这样调用它:
(process-files "~/target-directory")
mapc
- 对列表中的每个项目应用一个函数
- directory-files
- 获取目录中的所有文件和文件夹,本例中检索所有.txt文件
- find-file
- 在缓冲区中打开一个文件(当你键入C-x C-f
时运行)
如果你是为了学习Lisp本身,我可以推荐Practical Common Lisp。你可以使用Elisp完成书中惊人数量的工作。否则,请下载像SBCL这样的Common Lisp环境。
Emacs的优点在于,由于其开放性,通常有许多方法可以解决给定的问题。
例如,您可以学习Emacs中的一个简单技巧,这将在现在和未来帮助您:
这是一个dired列表,例如从C-x f/home/me/mydir/
/home/me/mydir:
total used in directory 32 available 5575136
drwxr-xr-x 10 me brainers 340 Jan 18 15:50 .
drwxr-xr-x 78 me brainers 2652 Feb 2 18:08 ..
-rw-r--r-- 4 me brainers 136 Apr 1 2012 a.txt
-rw-r--r-- 16 me brainers 544 Feb 1 09:56 b.txt
-rw-r--r-- 6 me brainers 204 Apr 6 2012 c.txt
先进入第一个文件(使用 上 和 下 键),即 a.txt
,然后执行以下操作:
b.txt
)然后对于每个文件(从 b.txt
开始),执行以下操作:
b.txt
做同样的操作,然后指向 c.txt
。(如果两次宏执行之间没有任何操作,则可以直接按 e
重新执行宏)请注意不要在不想处理的内容上运行宏。
注: