从bash shell脚本中打开vim

我想要bashshell,执行以下操作

  1. 用vim打开一个文件
  2. 写入文件的东西
  3. 保存并退出该文件

    bashpromt# cat mybash.sh echo "about to open a file" vim file.txt #I need to use vim application to open a file #now write something into file.txt #close the that file. echo "done." 

那可能吗? 我发现像vim脚本,但不知道如何使用它。 或者像“HERE”doc这样的东西可以用于这个?

编辑:我需要validationvim编辑器工作正常,我们的文件系统。所以我需要编写调用vim的脚本,并执行一些命令,并closures它。 我的要求不适合做“回声”东西“> file.txt”的东西。 我得用vim打开这个文件。

Vim有几个选项:

  • -c =>传递ex命令。 例如: vim myfile.txt -c 'wq'强制文件的最后一行被换行(除非脚本以某种方式设置binary
  • -s =>播放用-W记录的-W 。 例如,如果你的文件包含ZZ ,那么vim myfile.txt -s the_file_containing_ZZ将和以前一样。

还要注意,调用ex ,vim将以ex模式启动; 你可以试试ex my_file.txt <<< wq

exvi的命令行版本,在脚本中使用起来更容易。

 ex $yourfile <<EOEX :%s/$string_to_replace/$string_to_replace_it_with/g :x EOEX 

你问过如何通过vim将“东西”写入文本文件,但没有答案一定涵盖了这一点。

要插入文字:

 ex $yourfile <<EOEX :i my text to insert . :x EOEX 

:i进入插入模式。 以下所有行都插入文字直到. 被看作自己出现在自己的路线上。

这里是如何搜索和插入。 你可以做一些事情,如:

 ex $yourfile <<EOEX :/my search query\zs :a my text to insert . :x EOEX 

这将找到匹配正则表达式的第一个选择:/ ,将光标放在\zs指定的位置,并在光标后面进入插入模式。

您可以移动\zs来获得不同的结果。 例如:

 ex $yourfile <<EOEX :/start of match \zs end of match :a my text to insert . :x EOEX 

这将把“比赛开始结束”的第一次出现改为“比赛开始我的文本插入比赛结束”。

如果您希望在关键字之间允许任意数量的空格,请使用\_s* 。 例如,搜索返回0的函数:/\_s*return\_s*0}

如果你想看看在vim或gvim里面做的工作,你可以使用–remote-send

 gvim --servername SHELL_DRIVER bashpromt# cat mybash.sh #!/bin/bash echo "about to open $1" gvim --servername SHELL_DRIVER $1 #I need to use vim application to open a file #now write something into file.txt and close it gvim --servername SHELL_DRIVER --remote-send '<ESC>i something to the file<ESC>:wq<CR>' echo "done." 

这将是缓慢的,但会做你想做的。
首先我们打开一个gvim,在其中可以打开我们所有的文件(为了提高效率)
使用第一个gvim行,我们在之前打开的gvim中打开文件。
在第二个gvim行上,我们向先前打开的gvim实例发送一个命令(所需的文件仍然打开)。
命令如下:
<ESC> – 退出gvim可能已经进入的任何模式
i something to the file – 进入插入模式,并键入“的东西到文件”
<ESC> – 退出插入模式
:wq – 写入文件并退出vim

最近我回答了一个类似的问题,“ 几个文件的自动编辑 ”。 可能是我在那里描述的解决方案将满足您的需求。