[英]How to execute the vim commands through shell script
嗨我有一个情况
我有一个shell脚本,我必须将输入传递给vim 。
详细解释
在这里,我已经编写了我无法更改的shell脚本。 这是它的代码。
sudo vim /mnt/etc/{hosts,hostname,ports}
由于打开了这个主机文件,我们可以手动在主机名文件旁边通过:n和ports文件的类似文件。
但我必须从我的.sh文件中执行相同的操作。 此外,我必须编辑ports文件,完成后我必须保存并完成它:wq命令。
我该怎么做?
除非你真的需要特殊的Vim功能,否则最好使用非交互式工具,如sed
, awk
或Perl / Python / Ruby / 你最喜欢的脚本语言 。
也就是说,您可以非交互式使用Vim:
对于非常简单的文本处理(即使用Vim,如增强型'sed'或'awk',可能只是受益于:substitute
命令中的增强正则表达式),请使用Ex模式 。
# 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.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.