ファイル名= *。diff
に diff
の出力をキャプチャしてそのファイルをバッファに開くと、きれいにフォーマットされたmode = Diff
。最初にファイルに取り込むことなく、直接取得する方法は?
ediff-buffers
(私が気に入っている)だけでなく、 diff
のようなもっとわかりにくい目的のために、 diff
プロセス。私は数十年前からEmacsを使ってきましたが、新しい側面や使い方を学び続けています。だから、私が(ローカルの git
リポジトリのdir /フォルダから)それを見つけたのが面白いほど驚くことではありませんでした。
$ git diff master origin/master > /tmp/foo__local_vs_remote.diff
バッファにファイルをオープンしたとき、それはきれいに/有益に色分けされた( ediff
)mode = Diffで表示されました。私は今までに一度もなかった
diff
output to a file*.diff
しかし、今私は diff
の出力をバッファーと出力を幸福モード= Diffのようにキャプチャしようとしていますが、失敗しています。
Note also that, since I use diff
in lots of contexts, I'm looking for a solution to the general problem, and not, e.g., just to the git diff
problem (which I suspect Magit etc have solved). 一般性を追求する, I'll test 3 usecases: "normal" file-vs-file diff
, git diff
, and process-substitution diff
.
$ lsb_release -ds
LMDE 2 Betsy
$ cat /etc/debian_version
8.3
$ uname -rv
3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (2016-02-29)
$ emacs --version
GNU Emacs 24.4.1
私が次のことをした場合(おそらく適切な作業ディレクトリを持つバッファに移動した後に)
M-!
C-x b
*Shell Command Output*
(where the output of M-!
==M-x シェルコマンド
goes by default)M-x diff-mode
...うまくフォーマットされた出力が得られます。さらに
M - !
を別の diff
コマンドで実行すると、新しい出力は古いものを上書きしますが、バッファは diff-mode
ユーザーの介入なしに
選ばれた答え。
もし私が
M-x shell
, goto the correct dir/folder, and run git diff master origin/master
M-& git diff master origin/master
私は恐ろしい WARNING:端末が完全に機能していない
を得る。
git diff
: I get no colorization for either process-substitution or file diff
.あなたはいつもあなたのためのすべての繰り返しステップを行うための関数を書くことができます。これはあなたを開始する必要があります:
(defun diff-generic(command)
(interactive "sDiff command:")
(let ((buffer (generate-new-buffer "*diff-generic*")))
(with-current-buffer buffer (diff-mode))
(call-process-shell-command command nil buffer 0)
(switch-to-buffer buffer)))
In general you can do M-x diff
to get that diff output for two arbitrary files. More info on that here: (info "(emacs) Diff Mode")
Magitはdiff機能を提供しますが、一般的なemacsの diff-mode
とは異なる magit-diff-mode
という独自のモードを使用しています。
Also emacs bundled package VC
provides diff functionality for version control diffs. Unlike magit it works with backends other than git and uses diff-mode
, also you can use ediff
. Relevant manual: (info "(emacs) Old Revisions")