2011-10-24 7 views
1

Vimの使用を開始しました。現在オープンしているファイルを引数としてVimからシェルスクリプトを実行します。

私が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ファイルを植字しています。あなたがPATHにyour_scriptしている場合は、それが正常に動作する必要があり

:!your_script % 

答えて

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 

ここでは、実際に今全く異なる環境(; CygwinのためのVimのLilyPond/Win32の)で私のために働いているものです。

" 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

次のようなものを使用することができます。ドキュメントの場合は:!file modifiersをご覧ください。

関連する問題