Text 如何使用elisp处理一系列文件?
我是一个编程新手,所以请容忍我在这里 我有一个名为“foo01.txt”、“foo02.txt”等文件的目录,还有一个名为Text 如何使用elisp处理一系列文件?,text,emacs,elisp,Text,Emacs,Elisp,我是一个编程新手,所以请容忍我在这里 我有一个名为“foo01.txt”、“foo02.txt”等文件的目录,还有一个名为MyFunction的函数。我想将每个文件作为缓冲区打开,在其上运行MyFunction,将缓冲区写入其文件,终止缓冲区,然后移动到系列中的下一个文件,直到所有文件都完成 我想我需要做的所有事情都在烹饪书()中描述过,但我真的不知道如何把它们放在一起。谢谢 由于Emacs的开放性,Emacs的优点在于通常有很多方法可以解决给定的问题 例如,您可以在Emacs中学习一个简单的技
MyFunction
的函数。我想将每个文件作为缓冲区打开,在其上运行MyFunction
,将缓冲区写入其文件,终止缓冲区,然后移动到系列中的下一个文件,直到所有文件都完成
我想我需要做的所有事情都在烹饪书()中描述过,但我真的不知道如何把它们放在一起。谢谢 由于Emacs的开放性,Emacs的优点在于通常有很多方法可以解决给定的问题 例如,您可以在Emacs中学习一个简单的技巧,这将在现在和将来对您有所帮助: 这是一个目录列表,例如来自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
,然后执行以下操作
- C-x(开始宏录制
- f打开该文件
- M-x myfunction来运行该myfunction
- C-x C-s以保存文件
- C-x k关闭该文件,返回dired
- 向下键转到下一个文件(本例中为
)b.txt
- C-x)以结束宏
b.txt
)执行以下操作
- 要执行宏,它将对
执行相同的操作,然后指向b.txt
。(如果在两次宏执行之间不执行任何操作,则可以执行C.txt
重新执行宏)e
- 如果在创建宏的过程中出错,Emacs将中断录制过程(因此,C-x将抱怨没有录制宏)。在这种情况下,必须从C-x()重新启动宏
- C键是控制键,M键是元键,通常是Alt键。C-XK表示控制x,然后是k键
(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$")))
进程文件
将迭代给定目录中的每个文件,并将进程文件
应用于所有.txt文件。您可以这样调用它:
(process-files "~/target-directory")
您可以将其复制到*scratch*缓冲区中,并对各个部件进行处理。最有趣的功能是:
-将函数应用于列表中的每个项目mapc
-获取目录中的所有文件和文件夹,在本例中检索所有.txt文件目录文件
-在缓冲区中打开一个文件(这是在键入查找文件
时运行的)C-x C-f
学习口齿不清
如果您是为了学习Lisp,我可以推荐您。您可以使用Elisp阅读大量的书籍。否则,请下载一个常见的Lisp环境,如。我没有想到这一点。我希望掌握使用Lisp的诀窍,但这可能会更简单,对我来说是一个更简单的解决方案。