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)

関数は、適切に動作する特定の引数に対してのみ機能します。shellescape()Vimで使用し、シェルスクリプトで適切に引用してください。

于 2012-08-29T10:32:27.843 に答える
1

IngoKarkatに同意します。他の方法は代用することかもしれません

:call system(cmd)

vimrc内のコロンが正しくないこと

exe "!" . cmd

スペースのような特殊文字がないと仮定するとcmd、改行はそのようなものになります。

于 2012-08-29T10:38:44.367 に答える