我想要bashshell,执行以下操作
保存并退出该文件
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
ex
是vi
的命令行版本,在脚本中使用起来更容易。
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
最近我回答了一个类似的问题,“ 几个文件的自动编辑 ”。 可能是我在那里描述的解决方案将满足您的需求。