function! ReName()
let old_name = expand("<cword>")
let new_name = input("new name: ",old_name)
let cmd = "ref.sh ".expand(old_name).expand(" ").expand(new_name)
:call system(cmd)
endfunction
ref.sh是一个bash文件,上下文是
#! /bin/bash
find . -name '*.[ch]' | xargs sed -i s/$1/$2/g
但现在,当我在vim中使用ReName函数时,它不起作用。
答案 0 :(得分:2)
那么,你期望它做什么,错误是什么/在哪里?
首先,您忽略了对system()
的调用的输出。如果有输出,请使用:echo
代替:call
,将其分配给变量或:return
。否则,请检查v:shell_error
变量以获取命令的退出状态。
更多批评:而不是
let cmd = "ref.sh ".expand(old_name).expand(" ").expand(new_name)
忽略多余的expand()
:
let cmd = "ref.sh ".old_name." ".new_name
或通过printf()
汇总命令:
let cmd = printf("ref.sh %s %s", old_name, new_name)
您的功能仅适用于某些表现良好的参数。在Vim中使用shellescape()
,在shell脚本中使用正确的引用。
答案 1 :(得分:1)
我同意 Ingo Karkat 。其他方式可以替代
:call system(cmd)
中的冒号与vimrc
,
exe "!" . cmd
假设您的cmd
没有像空格这样的特殊字符,换句话就像那样。