Bu makalede , "Emacs yinelendi, çünkü geri alırken yönü tersine çevirebilir, böylece geri almayı geri alabilirsiniz".
Ne anlama geliyor? Bir kullanıcı Emacs ile nasıl yeniden yapabilir?
Bu makalede , "Emacs yinelendi, çünkü geri alırken yönü tersine çevirebilir, böylece geri almayı geri alabilirsiniz".
Ne anlama geliyor? Bir kullanıcı Emacs ile nasıl yeniden yapabilir?
Yanıtlar:
Kısa versiyon: geri almayı geri alarak. Geri alır ve sonra gibi bir düzenleme dışı komut yaparsanız, bir C-fsonraki geri alma geri alma işlemini geri alır ve bu da yinelemeyle sonuçlanır.
Daha uzun versiyon:
Geri alma işlemini bir yığın işlem üzerinde çalışmak olarak düşünebilirsiniz. C-fBir dizi geri alma işlemi sonrasında bir komut (hatta bir navigasyon komutu bile ) gerçekleştirirseniz, tüm geri alma işlemleri işlem yığınına gönderilir. Böylece bir sonraki geri alma son komutu geri alır. Şöyle bir işlem diziniz olduğunu varsayalım:
Şimdi, geri al. Son eylemi geri alır ve aşağıdaki listede bulunur:
Bu noktada geri alma dışında bir şey yaparsanız - örneğin, C-fişlem yığını şöyle görünür:
Şimdi, geri aldığınızda, geri alınan ilk şey geri alınır. Orijinal yığınınız (ve belge durumunuz) sonucu:
Geri alma sırasını kırmak için bir değiştirme komutu yaparsanız, geri alma işleminden sonra bu komut eklenir ve bu nedenle daha sonra geri alınacak ilk şeydir. Vurmak yerine "çubuk" üzerinde geri gittiğinizi varsayalım C-f. Sonra olurdu
Bu ekleme / yeniden ekleme reklam sonsuz olur. Alışmak biraz zaman alır, ancak Emacs'a oldukça esnek ve güçlü bir geri alma / yineleme mekanizması verir.
Geri almak için: C-_
Geri alma işleminden sonra yeniden yapmak için: C-g C-_
Birden çok kez yazın C-_ tarafından geri alınan geçenlere yeniden yapmak C-_ , bir emacs birden çok kez komuta yinelemek komut sonra yazın yürütmek için C-xzve daha sonra birçok kez yazın z(birden çok kez makro çalıştırmak istediğinizde ilginç) komutu tekrarlamak için anahtarın
C-u
Örneğin, tekrarlamak için kullanabilirsiniz C-u 8 *
(kablonun bulunduğu yere sekiz * ekler). Böylece x adımlarını C-u x C-_
geri almak için kullanabilirsiniz .
C-x e
) yürüttükten hemen sonra , e
tekrar yürütmek için istediğiniz sıklıkta basabilirsiniz .
C-/
ve C-x u
alternatif geri bağlama anahtar bağları, eşdeğerdir C-_
. Vurmak C-/
daha kolay olduğu için tercih ederim .
C-g C-_
"geri alma işleminden sonra yinelenir" yazdığında, bu yalnızca kombinasyona ilk kez bastığınızda geçerlidir. Bundan sonra geri alma anahtarınızı olmadan tekrarlayın C-g
. Geri aldıktan hemen sonra üç kez yeniden yapmak için yazın C-g C-_ C-_ C-_
. Eğer yazarsanız C-g C-_ C-g C-_ C-g C-_
, geri alma işleminizi tekrarlayarak geri
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Not C-g
tekrar edilmez.C-g
C-/
C-g
C-/
C-/
Son geri alma komutunuzdan bu yana herhangi bir tuşa bastıysanız (karakterleri yazın veya yalnızca imleci hareket ettirin) C-g
, bir sonraki geri al / yinele işleminden önce yazmanıza gerek yoktur . C-g
tek başına hiçbir şey yapmayan vurmak için güvenli bir anahtardır, ancak geri alma dizinizin sonunu bildirmek için geri alınmayan bir anahtar olarak sayılır. Bunun gibi başka bir komuta basılması C-f
da işe yarayacaktır; sadece imleci sahip olduğunuz yerden hareket ettirecekti.
C-g
Demek istemediğiniz bir anda vurursanız veya başka bir komut alırsanız ve şimdi yanlış yönde geri alıyorsanız C-g
, yönünüzü tekrar tersine çevirmek için vurmanız yeterlidir . İstediğiniz geri alma işlemlerine erişmeden önce yanlışlıkla yapılan yinelemeler ve geri alma işlemleriniz boyunca geri almanız gerekir, ancak vurmaya devam C-/
ederseniz, sonunda istediğiniz duruma ulaşırsınız. Aslında, bir C-g
kez vurursanız ve daha sonra C-/
yeterli kez basarsanız , tamponun bulunduğu her duruma ulaşılabilir .
İçin alternatif kısayollar undo
dışında C-/
vardır C-_
, C-x u
ve M-x
undo
.
Emacs'ın geri alma sistemi hakkında daha fazla bilgi için Emacs El Kitabı'ndaki Geri Al bölümüne bakın .
Daha yaygın geri alma / yineleme işlevine sahip olmak isteyenler için birileri yazdı undo-tree.el
. Emac olmayan geri almanın görünümünü ve hissini sağlar, ancak geri alma geçmişinin tüm 'ağacına' erişim sağlar.
Emacs'ın yerleşik geri alma sistemini seviyorum, ancak bu paketi çok sezgisel buluyorum.
Dosyanın kendisinden yorumlar:
Emacs güçlü bir geri alma sistemine sahiptir. Çoğu yazılım standart geri alma / yeniden yapma sisteminin aksine, kurtarmak sağlayan herhangi (standart geri alma / yeniden yapma sistemi yinelemek yakında kadar geçmiş durumları kaybedebilir oysa) bir tampon geçmiş halini. Bununla birlikte, bu gücün bir bedeli vardır: birçok insan Emacs'ın geri alma sistemini kafa karıştırıcı ve kullanımı zor buluyor, daha az güçlü ama daha sezgisel geri alma / yineleme sistemi ile değiştirilen bir dizi paket ortaya çıkarıyor.
Hem standart geri alma / yineleme ile veri kaybı hem de Emacs'ın geri alma karışıklığı, geri alma geçmişini doğrusal bir değişiklik dizisi olarak ele almaya çalışmaktan kaynaklanır. Değil. Bu paket tarafından sağlanan `` ağaç geri alma modu '', Emacs'ın geri alma sistemini, geri alma geçmişini olduğu gibi ele alan bir sistemle değiştirir: dallanan bir değişiklik ağacı. Bu basit fikir, standart geri alma / yineleme sisteminin daha sezgisel davranışının hiçbir geçmişi kaybetmeme gücü ile birleştirilmesini sağlar. Ek bir yan bonus, geri alma geçmişinin bazı durumlarda daha verimli bir şekilde saklanabilmesidir ve Emacs geçmişi atmadan önce daha fazla değişikliğin birikmesine izin verir.
Yinele için ağaç geri alma tuhaflığına dikkat edin !
Birçok popüler “başlangıç kiti” (başlangıç, purcell, spacemacs) ağaçla birlikte gelir. Çoğu (tümü?) Hatta otomatik olarak etkinleştirir. Belirtildiği gibi, geri alma ağacı, geri alma / yineleme ağacını görselleştirmenin ve çaprazlama yapmanın kullanışlı bir yoludur. Prelude ona bir anahtar akoru ( uu
) da verir C-x u
.
Sorun şudur: Geri alma ağacı Emacs' varsayılan ve bağlayıcı tanınmış enkaza görünüyor redo :C-g C-/
.
Bunun yerine, geri alma / yineleme için şu simetrik tuşları kullanabilirsiniz :
C-/ undo
C-S-/ redo
Bunlar, bazen görselleştiriciyi açmadan hızlı bir şekilde yeniden yapmak istediğiniz için yararlıdır .
Ben "normal" geri al / yinele yapmak için redo.el
son derece kullanışlı buluyorum , ve ben genellikle CSz bağlamak ve Cz geri, şöyle:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Sadece dosyayı indirin, lisp yolunuza koyun ve yukarıdakileri bilgisayarınıza yapıştırın .emacs
.
Emacs 28 bir yineleme komutu (çağrılır undo-redo
) ekler .
Daha tipik bir geri alma / yineleme işlemine sahip olmak istiyorsanız, aşağıdaki komutlar kullanılabilir.
(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)
Varsayılan olarak, Emacs'daki yinele Cg tuşuna basıp geri almayı gerektirir.
Ancak, yineleme komutunu uygulamak için Emacs yerleşik geri alma işlevini kullanmak da mümkündür.
Undo-fu paketi , hem geri alma hem de yinelemeyi ortaya çıkarmak için Emacs yerleşik geri alma işlevini kullanır.