özet
Biri diff
çıktısını bir dosya adına = * .diff
yakalar ve bu dosyayı arabellekte açarsa, biri güzel biçimlendirilmiş mod alır: Diff
. İlk önce bir dosyayı yakalamadan doğrudan bu nasıl elde edilir?
ayrıntılar
diff
'ı yalnızca ediff-buffers
(çok sevdiğim) üzerinden değil, aynı zamanda daha karanlık amaçlar için de diff
çıktıları gibi kullanırım. süreçler. Ayrıca yıllardır Emacs kullanıyorum, ancak yeni yönleri ve kullanımları öğrenmeye devam ediyorum. Bu yüzden, bunu yaparken merak etmekten çok şaşırmamıştım (yerel bir git
repo dizininden/klasöründen)
$ git diff master origin/master > /tmp/foo__local_vs_remote.diff
ve dosyayı bir arabellekte açtı, güzel/kullanışlı bir şekilde renklendirildi (à la ediff
) modunda = Diff. Daha önce hiç aynı anda yapmadım
- captured
diff
output to a file
- named the file
*.diff
- opened the file in Emacs
Ancak şimdi diff
çıktısını doğrudan ve arabelleğine yazdırmaya çalışıyorum, mutlu modun çıktısı gibi olsun = Diff ve başarısız oluyorum.
jeneriklik aramak
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). jeneriklik aramak, I'll test 3 usecases: "normal" file-vs-file diff
, git diff
, and process-substitution diff
.
platform
$ 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
seçenekleri
Kabuk-komut
Aşağıdakileri yaparsam (muhtemelen uygun bir çalışma dizinine sahip bir ara belleğe geçtikten sonra)
M-!
C-x b
*Shell Command Output*
(where the output of M-!
==M-x Kabuk-komut
goes by default)
M-x diff-mode
... Güzel formatlı çıktılar alıyorum. ayrıca
- bu, tüm 3 test aracı için işe yarar
- eğer biri
M-!
'i başka bir diff
komutuyla çalıştırırsa, yeni çıktı sadece eskinin üzerine yazar ancak arabellek diff-mode
değerini korur. kullanıcı müdahalesi olmadan
- anahtar bağlama değişikliği yok (terim modunda olduğu gibi)
Seçilen cevap
Kabuk mod
Bende
M-x shell
, goto the correct dir/folder, and run git diff master origin/master
- am in a buffer on the correct dir/folder, and run
M-& git diff master origin/master
Korkarım ki UYARI: terminal tam olarak çalışmıyor
.
terim-modu
Emacs Kullanıcısı'nın işaret ettiği gibi , Mx terimi
bu kullanım için 'dan daha iyi performans gösterir. Mx kabuğu
: eğer Mx terimi
ise, doğru dizine/klasörüne gidersem ve git diff ana kaynak/ana
komutunu çalıştırırsam, güzel renklendirilmiş çıktılar elde ederim. Tam olarak değil mod = Diff, ama işi yapıyor. ne yazık ki
- That only works for
git diff
: I get no colorization for either process-substitution or file diff
.
- I find the terim-modu keybinding changes highly annoying.
- I also found terim-modu navigation odd: when editing history, my cursor would sometimes bounce around oddly.
solved).