3
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 函数时,它不起作用。

4

2 回答 2

3

好吧,您希望它做什么,错误是什么/在哪里?

首先,您忽略对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 脚本中正确引用。

于 2012-08-29T10:32:27.843 回答
1

我同意Ingo Karkat的观点。其他方式可能是替代

:call system(cmd)

vimrc,里面的冒号是不正确

exe "!" . cmd

假设你cmd没有像空格这样的特殊字符,换行符是这样的。

于 2012-08-29T10:38:44.367 回答