从Vim运行shell脚本,当前打开的文件作为参数

时间:2011-10-24 17:03:56

标签: shell vim lilypond

我刚刚开始使用Vim。

这是一个我在BBedit内经常使用的shell脚本。

#!/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文件。

2 个答案:

答案 0 :(得分:5)

您可以使用以下内容:

:!your_script %

如果在PATH中有your_script,它应该可以正常工作。有关文档,请参阅:!file modifiers

答案 1 :(得分: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; Vim for 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要求的相当神秘的线延续。同时我添加了快捷操作符,以便任何阶段的错误都会停止该过程。