有没有办法在没有先打开emacs和使用M-x等的情况下启动emacs合并?

时间:2012-11-09 21:41:42

标签: emacs

我有时想合并多对文件,假设我要合并fileA.old和fileA.new,以及fileB.old和fileB.new ..等等。目前我必须打开emacs。执行M-x ediff-merge-files并输入第一个文件的名称,返回键,第二个文件的名称,返回键......以及在合并模式下...有没有办法启动带有两个文件名作为参数的emacs并在合并中登陆模式?

1 个答案:

答案 0 :(得分:3)

您可以通过命令行将Lisp代码传递给Emacs:

emacs --eval '(ediff-merge-files "path/to/file1" "path/to/file2")'

当然,这可以包含在脚本中,以便更方便地调用。例如,在bourne shell中,你可以做一个这样的简单版本:

#!/bin/sh

# check correct invocation
if [ $# != 2 ]; then
   echo "USAGE: $(basename "${0}") <file1> <file2>"
   exit 1
fi

# check that file1 exists and is readable
if [ -f "${1}" ]; then
    if [ ! -r "${1}" ]; then
        echo "Cannot open '${1}', access denied."
        exit 3
    fi
else
    echo "File not found: '${1}'"
    exit 2
fi

# check that file2 exists and is readable
if [ -f "${2}" ]; then
    if [ ! -r "${2}" ]; then
        echo "Cannot open '${2}', access denied."
        exit 5
    fi
else
    echo "File not found: '${2}'"
    exit 4
fi

# invoke emacs
emacs --eval "(ediff-merge-files \"${1}\" \"${2}\")"

如果您将其保存在ediff的{​​{1}}文件中,则只需写下:

$PATH
命令行上的

和Emacs将弹出ediff file1 file2 中的两个给定文件。