我有以下命令,我需要在bash脚本中插入:
vim file.txt -c ':let var=$foo' -c ':execute "normal! gg/string\<cr>V"' -c ":normal! d" -c ':execute "normal inewstring\<Esc>"' -c ':put =var'
它做什么(或者我想要它做什么)是使用在脚本上定义的变量foo
,搜索string
的第一个外观选择整行并删除它,然后插入newstring
并在此新字符串后面附加foo
的值。但是,无论我是否更改:[x]put
中的x值,我的代码都会将值始终放在下一行中。
作为vim
的新手我不确定即使这样实现我的目标是有效的,所以任何建议都是受欢迎的。提前谢谢。
假设我们有这个输入文件:
$ cat file.txt
blah
string foo
string foo
blah
我期望得到的(定义$ foo =“hello”)是:
$ cat file.txt
blah
newstringhello
string foo
blah
答案 0 :(得分:2)
我是一个很棒的粉丝,但如果我是你,我不会用vim做的。
由于您未将示例输入发布到所需的输出,因此我只能猜测您想要的描述。
鉴于我们有:
kent$ cat f
blah
string foo bar
string foo bar
blah
而var="hello"
,下一个sed one-liner将输入文件更改为:
kent$ sed "0,/string/{/string/s/.*/newString/};$ a \\$var" f
blah
newString
string foo bar
blah
hello
但是我不知道它是不是你想要的。
kent$ sed "0,/string/{/string/s/.*/newString$var/}" f
blah
newStringhello
string foo bar
blah