使用方法:使用vim将变量附加到当前行的末尾

时间:2017-02-16 13:23:45

标签: bash vim

我有以下命令,我需要在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

1 个答案:

答案 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