emacsを起動して、ファイルまたはディレクトリを編集します。たとえば、次のようなものを希望します。
emacs -f ediff-files file1 file2
しかし、これを行うと、比較する2つのファイルとしてfile1とfile2が使用されません。むしろ、emacsはファイルを区別するように促します。
誰もがこれを1つのコマンドラインで行う方法を知っていますか?
emacsを起動して、ファイルまたはディレクトリを編集します。たとえば、次のようなものを希望します。
emacs -f ediff-files file1 file2
しかし、これを行うと、比較する2つのファイルとしてfile1とfile2が使用されません。むしろ、emacsはファイルを区別するように促します。
誰もがこれを1つのコマンドラインで行う方法を知っていますか?
回答:
他の解決策があると確信していますが--eval
、-f
(--funcall
)の代わりにこれを使用できます:
emacs --eval '(ediff-files "file1" "file2")'
実際には、「Emacsの起動のためのコマンドライン引数」でEmacsのマニュアルは言うこと-f function
と--funcall function
Lisp関数functionを呼び出します。対話関数(コマンド)の場合は、キーシーケンスを使用して同じ関数を呼び出したかのように、対話的に引数を読み取ります。それ以外の場合は、引数なしで関数を呼び出します。
これは、-f
/で希望する動作が得られない理由を説明しています--funcall
。
ediff-directories
3つの引数を取るため、上記のコマンドは次のように変更されます。
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
ここで説明ediff-directories
するようにediff-meta-mode
、を押すとEmacsに入るので、最初に「Ediffセッショングループパネル」に移動します。セッショングループに関するEdiffマニュアルから:
Ediffのいくつかの主要なエントリは、ディレクトリの比較とマージを実行します。、、[...]を入力する
ediff-directories
とediff-directories3
、関連するディレクトリに共通のファイルとそのサイズを一覧表示する、Diredのようなバッファが表示されます。[...] リストされたファイルに関連付けられているすべてのEdiffセッションがこのバッファーを共通の焦点として持つため、このバッファーをセッショングループパネルと呼びます。[...]ディレクトリの比較またはマージでは、セッショングループパネルには、関連するすべてのディレクトリに共通のファイルのみが表示されます。違いは別のディレクトリ差分バッファーに保持されD、対応するセッショングループパネルに入力することで簡単に表示されます。[...]
実際の差分を表示するには、D(ediff-show-dir-diffs
)を押します。
emacs --eval '(ediff-directories "dir1" "dir2" "regexp")'
うまくいきます。
D
(ediff-show-dir-diffs
)を押すだけです。
*** No differences ***
を押すと、dir1とdir2 が表示され、Mxを使用してemacs内からediffを呼び出しても、すべてが期待どおりに機能します(つまり、違いが表示されます)。たぶん私は私の.emacsで違う設定をしています。
私は次のスクリプトを使用します:違いがあるかどうかを事前にチェックし、違いがある場合は、適切な関数が評価された状態でEmacsを開きます。この-d
オプションを使用すると、指定されたアイテムがディレクトリであり、ediff-directories
代わりにediff-files
使用されると想定されます。それ以外の場合は、それらがディレクトリまたはファイルであるかどうかを確認し、それに応じて使用する関数を設定します。
#!/ bin / sh EMACS = $(emacs) if [$#-lt 2]; その後 echo "Usage ::" `basename $ 0`" [-d] item1 item2 " 1番出口 fi dir = "いいえ" if ["$ 1" = "-d"]; その後 dir = "はい" item1 = "$ 2" item2 = "$ 3" そうしないと if [-d "$ 1" -a -d "$ 2"]; その後 dir = "はい" fi item1 = "$ 1" item2 = "$ 2" fi if ["$ dir" = "no"]; その後 #ファイルが存在することを確認 もし[!-f "$ item1"]; その後 printf "ファイル%sが見つかりません。\ n" "$ item1" 2番出口 fi もし[!-f "$ item2"]; その後 printf "ファイル%sが見つかりません。\ n" "$ item2" 2番出口 fi #ファイルが同一かどうかを確認します diffdata = `diff" $ item1 "" $ item2 "` if ["_" = "_ $ diffdata"]; その後 printf "%sと%sは同一です。\ n" "$ item1" "$ item2" 3番出口 fi fi diff_fn = "ediff-files" if ["$ dir" = "yes"]; その後 diff_fn = "ediff-directories" opt = "\" \ "" fi #ediff-files関数でEmacsを実行する printf "ファイル%sと%sを比較しています..." "$ item1" "$ item2" $ EMACS -q -nw -eval "($ diff_fn \" $ item1 \ "\" $ item2 \ "$ opt)" &&エコーが完了しました。 出口0
事前に違いがあるかどうかをチェックするので、親フォルダーで1つのdiffセッションを実行するのではなく、コマンドラインからさまざまなフォルダーの多くのファイルを比較するときに非常に便利です。たとえば、フォルダーAとBを比較し、存在しないファイルを最初のファイルから他のファイルにコピーする場合...