如何使用 emacs 脚本重新格式化文件
how to reformat files with an emacs script
我有大量 XML 文件是从 python 脚本生成的。缩进不是应该的,我在 Emacs 中打开文件,C-x h
、TAB
、C-x C-s
、C-x k
。
有没有办法编写这个脚本?换句话说,我想使用 emacs 选项卡,它缩进了文件夹中所有 XML 文件的整个选择。
我尝试在 python 脚本中使用 Element.tail 设置正确的缩进,但无法正确设置。
第一步是编写一个重新格式化当前缓冲区的函数,就像您手动执行的那样。为此,您需要找出您键入的各种键序列所绑定的命令。 C-h c
可用于此,例如输入 C-h c C-x h
告诉您它绑定的命令是 mark-whole-buffer
。完成后,编写一个函数来自动执行序列就很容易了:
(defun reformat-buffer ()
"Reformat the current buffer"
(interactive)
(mark-whole-buffer)
(indent-for-tab-command)
(save-buffer))
您可以将函数绑定到某个键序列,但由于我将在另一个循环文件的函数中使用此函数,所以我不会打扰。我也没有在此处包含 (kill-buffer)
(绑定到 C-x k
的函数),因为我将在循环函数中使用临时缓冲区。
下一步是遍历所有文件。您没有提供有关文件组织方式的任何信息,因此我将做一个假设以便写下具体内容:根据文件的组织方式,您可能需要修改它。
我假设所有文件都在一个目录中并具有 .xml
后缀。
然后我们可以做相当于 ls *.xml
的操作来获取所有要操作的文件:
(defun reformat-files ()
"Loop over all the files with suffix `.xml' in the current directory
and apply the reformat-buffer function to each of them."
(interactive)
(dolist (file (directory-files "." nil "\.xml$")
(with-temp-buffer
(find-file file)
(reformat-buffer))))
假设您在正确的目录中(执行 M-x cd
以确保),您可以使用 M-x reformat-files
.
执行此操作
此处完全没有错误处理,也没有保证:确保您拥有任何无法轻易重新生成的文件的副本。
我有大量 XML 文件是从 python 脚本生成的。缩进不是应该的,我在 Emacs 中打开文件,C-x h
、TAB
、C-x C-s
、C-x k
。
有没有办法编写这个脚本?换句话说,我想使用 emacs 选项卡,它缩进了文件夹中所有 XML 文件的整个选择。
我尝试在 python 脚本中使用 Element.tail 设置正确的缩进,但无法正确设置。
第一步是编写一个重新格式化当前缓冲区的函数,就像您手动执行的那样。为此,您需要找出您键入的各种键序列所绑定的命令。 C-h c
可用于此,例如输入 C-h c C-x h
告诉您它绑定的命令是 mark-whole-buffer
。完成后,编写一个函数来自动执行序列就很容易了:
(defun reformat-buffer ()
"Reformat the current buffer"
(interactive)
(mark-whole-buffer)
(indent-for-tab-command)
(save-buffer))
您可以将函数绑定到某个键序列,但由于我将在另一个循环文件的函数中使用此函数,所以我不会打扰。我也没有在此处包含 (kill-buffer)
(绑定到 C-x k
的函数),因为我将在循环函数中使用临时缓冲区。
下一步是遍历所有文件。您没有提供有关文件组织方式的任何信息,因此我将做一个假设以便写下具体内容:根据文件的组织方式,您可能需要修改它。
我假设所有文件都在一个目录中并具有 .xml
后缀。
然后我们可以做相当于 ls *.xml
的操作来获取所有要操作的文件:
(defun reformat-files ()
"Loop over all the files with suffix `.xml' in the current directory
and apply the reformat-buffer function to each of them."
(interactive)
(dolist (file (directory-files "." nil "\.xml$")
(with-temp-buffer
(find-file file)
(reformat-buffer))))
假设您在正确的目录中(执行 M-x cd
以确保),您可以使用 M-x reformat-files
.
此处完全没有错误处理,也没有保证:确保您拥有任何无法轻易重新生成的文件的副本。