vim:ps的代码; ex模式,静音模式,硬拷贝,语法

问题描述 投票:0回答:2

我一直在尝试在我的.bash_profile脚本中添加一个函数,以便轻松地将/打印(大多数)代码文件转换为.ps文件。我的第一次尝试......

    #TRY1
    code2ps() {
        if [ -z $1 ]; then
            echo "ERROR: argument missing\n code2ps [targetfile]"
        else
            ex -c "open $1" -c "syntax on" -c "hardcopy > $1.ps" -c q
        fi
    }

...作品。但是,由于vim在终端窗口中打开和关闭,因此仍然存在短暂的闪烁。

我的第二次尝试......

    #TRY2
    code2ps() {
        if [ -z $1 ]; then
            echo "ERROR: argument missing\n code2ps [targetfile]"
        else
            ex -s -c "open $1" -c "syntax on" -c "hardcopy > $1.ps" -c q
        fi
    }

...通过使用静默模式-s避免闪烁,但会生成.ps文件而不突出显示任何语法。

我错过了什么?


另外:

那根本不起作用,为什么?

    #TRY3
    code2ps() {
        if [ -z $1 ]; then
            echo "ERROR: argument missing\n code2ps [targetfile]"
        else
            string=$(printf 'ex -c \"open %s\" -c \"syntax on\" -c \"hardcopy > %s.ps\" -c q' $1 $1)
            $string
            echo "Executed: $string"
        fi
    }

Thx提前!

- - - - - 编辑 - - - - -

还有一件事:我添加了几行来转换为pdf:

    code2pdf() {
        in_file="${1}"      #input filename
        ps_file="${1}.ps"   #filename.ps
        pdf_file="${1}.pdf" #filename.pdf

        if [[ $in_file == "" ]]
        then
            echo "ERROR: argument missing: code2pdf [targetfile]"
        else
            code2ps $in_file #convert code to .ps
            ps2pdf $ps_file $pdf_file #convert .ps to .pdf
            rm $ps_file #remove .ps fi
    }

哪个工作正常。但有没有更简单的方法,可能是通过管道code2ps()的输出?

code2ps xxx | ps2pdf

不起作用......

bash vim printing syntax-highlighting
2个回答
2
投票

一些东西; if [ -z $1 ];至少,引用"$1";不确定当前的版本,但我认为测试会抱怨如果没有设置$1没有参数,你正在测试。如果[[ "${1}" == "" ]];大部分时间都有效,那么更具可读性的选择。

Try2似乎搞砸了前人对颜色的了解;它有语法高亮,但没有颜色......不完全是你的想法。

Try3可能会失败,因为应该引用$(printf ... )string="$(printf ...)"

实际的答案是由Emily E提供的:通过重定向(大部分缺席)输出(闪烁)到/dev/null(位桶,通常用于所有要丢弃的输出[它包含重定向到它的最后一位])你可以摆脱那闪烁。

所以正确的脚本是:

 code2ps() {
    if [[ "${1}" == "" ]]
    then
        echo "ERROR: argument missing\n code2ps [targetfile]"
    else
        ex -c "open ${1}" -c "syntax on" -c "hardcopy > ${1}.ps" -c q >/dev/null
    fi
 }

0
投票

第二个问题(编辑后)需要一些解释。因为,为了防止闪烁,ex的输出被重定向到/dev/null,正常的管道将无法工作。

hardcopy命令必须写入stdout,但该输出被重定向到/dev/null;你可以通过创建一些额外的文件描述符和一些重定向来解决这个问题,但坦率地说;我认为这不会使您的代码更具可读性或更高效。除非您对磁盘空间的压力很大,否则我会选择制作中间postcript文件的解决方案。

另一个解决方案是创建一个生成pdf文件的虚拟打印机,然后将硬拷贝发送给那个。这确实可以节省额外的步骤,并保持非常干净。

© www.soinside.com 2019 - 2024. All rights reserved.