有没有一种方法可以在shell脚本中调用vim宏?

4

我正在使用shell脚本和vim宏在Unix环境下进行数据处理。以下是步骤:

  1. 我使用grep从日志文件中获取一些有用的行。
  2. 使用vim内部的宏来操作数据。
  3. 再次使用shell脚本来处理数据。

我必须对许多文件执行此操作。所以,我想知道是否有一种通过特殊包装器在shell脚本中调用vim宏的方法。

2个回答

8
你可以触发已录制的宏,例如:
$ vim -c "normal! @q" file

这是一种脆弱的方法。

替代方案

除非您真正需要特殊的Vim功能,否则最好使用像sedawk或Perl / Python / Ruby / 您喜欢的脚本语言这样的非交互式工具

也就是说,您可以在非交互模式下使用Vim:

静默批处理模式

对于非常简单的文本处理(即使用Vim像加强版的'sed'或'awk',可能仅从:substitute命令中受益于增强的正则表达式),请使用 Ex-mode

REM Windows
call vim -N -u NONE -n -es -S "commands.ex" "filespec"

注意:静默批处理模式-s-ex会破坏Windows控制台,因此您可能需要在Vim运行后执行cls以清除屏幕。
# Unix
vim -T dumb --noplugin -n -es -S "commands.ex" "filespec"

注意:如果"commands.ex"文件不存在,Vim将挂起等待输入;最好事先检查其是否存在!或者,Vim可以从stdin读取命令。如果您使用“-”参数,还可以从stderr中读取命令。
完全自动化: 对于涉及多个窗口的高级处理以及Vim的真正自动化(在这种情况下,您可能需要与用户交互或让Vim保持运行以让用户接管),请使用:
vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"

以下是使用的参数摘要:
-T dumb           Avoids errors in case the terminal detection goes wrong.
-N -u NONE        Do not load vimrc and plugins, alternatively:
--noplugin        Do not load plugins.
-n                No swapfile.
-es               Ex mode + silent batch mode -s-ex
                  Attention: Must be given in that order!
-S ...            Source script.
-c 'set nomore'   Suppress the more-prompt when the screen is filled
                  with messages or output to avoid blocking.

谢谢!这帮助我更好地完成任务。由于我喜欢vim宏的魔力,所以我已经用awk和sed完成了。 - Exchhattu

-1

我不清楚了解你的需求。但也许 vim -s、vim -W、vim -w 可以帮助你!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接