从bash shell脚本中打开vim

时间:2011-05-12 12:38:31

标签: linux bash vim

我想要执行以下操作的bash shell

  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."
    
  4. 有可能吗?我找到了类似vim脚本的东西,但不知道如何使用它。 或者像“HERE”doc这样的东西可以用于此吗?

    编辑:我需要验证vim编辑器在我们的文件系统上工作正常。所以我需要编写调用vim的脚本并执行一些命令并关闭它。我的要求不适合像“echo”这样的东西“> file.txt”。我必须使用vim打开文件。

5 个答案:

答案 0 :(得分:16)

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

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

答案 1 :(得分:10)

Vim有几个选择:

  • -c =&gt;传递ex命令。示例:vim myfile.txt -c 'wq'强制文件的最后一行被换行(除非脚本以某种方式设置binary
  • -s =&gt;播放用-W录制的脚本。例如,如果您的文件包含ZZ,则vim myfile.txt -s the_file_containing_ZZ将执行与之前相同的操作。

另请注意,调用为ex时,vim将以ex模式启动;你可以尝试ex my_file.txt <<< wq

答案 2 :(得分:5)

你问过如何通过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}

答案 3 :(得分:1)

如果您想在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

答案 4 :(得分:1)

最近我有answered一个类似的问题,“automated edit of several files”。可能是我描述的解决方案,可满足您的需求。