vlambda博客
学习文章列表

linux | 批量执行emacs/vi内部命令

最近在看一些tcl文件,但这些文件的格式并不规整。在emacs中可以使用命令(C-x h,C-M-\)对文件内容进行格式化操作(verilog、tcl等格式)。但这次需要处理的tcl 文件比较多,希望找一个命令,可以不用打开文件,就使用emacs的命令对文件进行格式化操作(程序员就要懒到极致)。

经各种百度/google也没有找到这样的命令,难道我这个需求真的是伪需求?

使用emacs -help,可以知道emacs有--batch模式。

-f 后跟一个function;

-l 可以跟一个lisp语言写的文件;

但并不清楚如何将emac 内部命令(C-x h)和function或lisp代码对应起来,自己也不想再学一个lisp语言。

最后在一个网站上发现-f 后跟的function 和内部命令是有一定的对应关系的。

参考网址:

https://www.computerhope.com/unix/uemacs.htm

比如上面的(C-x h) 命令,对应的解释是:

C-x h  Move point to the beginning of the buffer, and set mark at the end (mark-whole-buffer).

C-M-\  Indent all the lines in the region, as though you had typed <TAB> at the beginning of each line (indent-region).

因此,本来在emacs打开后才能在emacs中执行的命令,现在在命令行下就能执行。具体执行命令如下:

emacs xxx.tcl --batch -f mark-whole-buffer -f indent-region -f save-buffer


顺便也说一下vim的一些对应的命令:

  1. gg=G 可以对vim打开的文件进行格式化

  2. vim lc_shell.log -c ":1d" -c ":wq" -v (删除文件第一行后,保存并退出)