从bash shell脚本中打开vim

web*_*org 11 linux vim bash

我想要执行以下操作的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."
    
    Run Code Online (Sandbox Code Playgroud)

那可能吗?我找到了类似vim脚本的东西,但不知道如何使用它.或者像"HERE"doc这样的东西可以用于此吗?

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

Kon*_*rak 16

ex是命令行版本vi,在脚本中更容易使用.

ex $yourfile <<EOEX
  :%s/$string_to_replace/$string_to_replace_it_with/g
  :x
EOEX
Run Code Online (Sandbox Code Playgroud)


Ben*_*oit 10

Vim有几种选择:

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

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

  • @lakshmipathi:似乎`vim file.txt -c'$ put = \'hello \'' - c'wq'`会更好用. (2认同)

Pat*_*sen 6

你问过如何通过vim将"某些东西"写入文本文件中,但尚无答案.

要插入文字:

ex $yourfile <<EOEX
  :i
  my text to insert
  .
  :x
EOEX
Run Code Online (Sandbox Code Playgroud)

:i进入插入模式.所有后续行都插入文本,直到.看到它自己出现在它自己的行上.

以下是搜索和插入的方法.你可以做一些事情,比如:

ex $yourfile <<EOEX
  :/my search query\zs
  :a
  my text to insert
  .
  :x
EOEX
Run Code Online (Sandbox Code Playgroud)

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

您可以移动\zs以实现不同的结果.例如:

ex $yourfile <<EOEX
  :/start of match \zs end of match
  :a
  my text to insert 
  .
  :x
EOEX
Run Code Online (Sandbox Code Playgroud)

这会将"匹配结束开始"的第一次出现更改为"匹配我的文本以插入匹配结束".

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