1

我正在使用 VIM 清理数据源,并将其正确格式化以与 SIMILE Timeline 一起使用。

VIM 效果很好,但据我所知它不能自动化,所以我正在考虑使用 SED 之类的东西来清理数据源。我知道 SED 可以用来进行搜索和替换,但是当我使用 VIM 清理数据时,我使用了 VIM 宏和 vim 正则表达式搜索和替换的组合。

SED 中是否有任何等效于 VIM 的宏?

4

2 回答 2

4

对于非常简单的文本处理(即像增强的 'sed' 或 'awk' 一样使用 Vim,也许只是受益于:substitute命令中增强的正则表达式),请使用Ex-mode

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

注意:静默批处理模式-s-ex会弄乱 Windows 控制台,因此您可能需要cls在 Vim 运行后进行清理。

# 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.
于 2012-11-16T15:49:25.303 回答
3

实际上,您可以自动化 vim 以及所有以前版本的 vi。(但是是的,通常你会使用 sed(1)。) Vim 可以使用 ex(1) 链接启动,在这种情况下它保持在行模式。

例如:

ex - /etc/hosts << \eof
$a
10.11.12.13 a-host-name
.
w /tmp/otherhosts
q
eof

如果你把它放进去,autovim.sh你可以:

$ sh autovim.sh
$ cat /tmp/otherhosts
于 2012-11-16T15:44:36.377 回答