2011-10-24 56 views
1

我剛開始使用Vim。從Vim以當前打開的文件作爲參數運行shell腳本

這裏是一個shell腳本,我使用BBedit頻繁使用。

#!/bin/sh 

filename=$(basename "${BB_DOC_PATH##*/}" .ly) 
directory=${BB_DOC_PATH%/*}/ 

cd "${directory}" 

lilypondPDFoutput="${directory}"$filename".pdf" 

/Applications/Lilypond.app/Contents/Resources/bin/ lilypond -dno-point-and-click -ddelete-intermediate- files "$BB_DOC_PATH" 

wait 

open "${lilypondPDFoutput}" 

BB_DOC_PATH是一個變量,它表示當前打開的文件的路徑。 (例如/Users/me/Documents/file.ly

我該如何將這個腳本放在我的.vimrc中,然後用簡單的命令調用它,如:typeset

注:我正在排版Lilypond文件。

回答

1

OP詢問如何將腳本放置在.vimrc中。這有點棘手,因爲Vim導入文件的方式很奇怪。這將是這樣的:

command Typeset call Typeset() 
fun Typeset() 
    let $TYPESET_PATH = expand("%:p") 
    let $TYPESET_ROOT = expand("%:p:r") 
    let $TYPESET_DIR = expand("%:p:h") 
    !sh -icx ' 
    \ cd "${TYPESET_DIR}" 
    \; lilypondPDFoutput="${TYPESET_ROOT}.pdf" 
    \; /Applications/Lilypond.app/Contents/Resources/bin/lilypond -dno-point-and-click "$TYPESET_PATH" 
    \; wait 
    \; open "${lilypondPDFoutput}" 
    \' 
endfun 

這裏是實際上現在在一個完全不同的環境(LilyPond的/ Win32的;活力爲Cygwin的)爲我工作。

" Quick compile command for Lilypond. 
command Typeset call Typeset() 
fun Typeset() 
    let $TS_NAME = expand("%:t") 
    let $TS_DIR = expand("%:p:h") 
    let $TS_PDF = expand("%:t:r") . ".pdf" 
    !sh -icx ' cd "${TS_DIR}" && lilypond "${TS_NAME}" && cygstart "${TS_PDF}" ' 
endfun 

注:Lilypond/Win32不理解正斜槓路徑。因此我排除了論證中的道路。你也可以做同樣的事情。您已經使用「cd」設置路徑。同樣對於我的環境,我拿出了點和點擊選項,以及「等待」,並將「打開」改爲「cygstart」。此時外殼部分足夠短,我不需要Vim所要求的相當神祕的線條延續。同時,我添加了快捷操作符,以便在任何階段出現錯誤都會停止該進程。

+0

我將你的函數粘貼到我的.vimrc中,但運行:Typeset引發錯誤 - 請參閱上面我的問題的修改。 – cg433n

+0

我可以嘗試幫助調試它,所以我需要知道你得到的錯誤的具體細節。 – MetaEd

+0

好的,這看起來像我的一部分的骨頭複製和粘貼錯誤。刪除「cd」前面的分號。由於我無法準確地在我的系統上重現您的環境,因此我們可能會在運行之前遇到其他錯誤。 – MetaEd

5

您可以使用類似:

:!your_script % 

如果您在PATH已經your_script它應該工作的罰款。有關文檔,請參閱:!file modifiers