2012-08-29 24 views
1
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文件,背景是如何調用系統()以2個參數的VIM

#! /bin/bash 
find . -name '*.[ch]' | xargs sed -i s/$1/$2/g 

但現在,當我在VIM使用重命名功能,這是行不通的。

回答

2

嗯,你能指望它做的,什麼/哪裏是錯誤?

首先,您忽略從system()的呼叫輸出。如果存在輸出,要麼使用:echo代替:call,將其分配給一個變量,或者它:return。否則,請檢查v:shell_error變量以瞭解命令的退出狀態。


一些更多的批評:通過printf()

let cmd = "ref.sh ".old_name." ".new_name 

或組裝命令:代替

let cmd = "ref.sh ".expand(old_name).expand(" ").expand(new_name) 

離開了多餘expand()

let cmd = printf("ref.sh %s %s", old_name, new_name) 

您的功能將僅適用於特定,乖巧的參數工作。在Vim中使用shellescape(),並在shell腳本中正確引用。

+0

試試這個辦法,但仍無法執行該腳本! – user1632780

0

我同意英戈Karkat。其他的方式可以是替代

:call system(cmd) 

,它是不正確與vimrc內結腸,

exe "!" . cmd 

假設你cmd有沒有特殊字符,如空格,換行OS類似的東西。

+0

你可以使用':call';但只有在鍵入(進入命令行模式)時才需要「:」,在腳本中可選。 –

+0

@IngoKarkat:謝謝。編輯修復它。 – Birei

+0

它的over.The原因是,對於bash.thank你的路徑! – user1632780