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的一些对应的命令:
gg=G 可以对vim打开的文件进行格式化
vim lc_shell.log -c ":1d" -c ":wq" -v (删除文件第一行后,保存并退出)