是否有可能轻松翻译vim搜索并将+宏替换为sed?

时间:2012-11-16 15:34:35

标签: vim sed

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

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

SED中是否有与VIM宏等效的内容?

2 个答案:

答案 0 :(得分:4)

对于非常简单的文本处理(即使用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的命令。您还可以使用读取的文本填充新缓冲区 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.

答案 1 :(得分: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