Artikel ini mengatakan bahwa "Emacs telah diulang karena Anda dapat membalikkan arah saat membatalkan, dengan demikian membatalkan membatalkan".
Apa artinya ini? Bagaimana cara pengguna melakukan ulang dengan Emacs?
Artikel ini mengatakan bahwa "Emacs telah diulang karena Anda dapat membalikkan arah saat membatalkan, dengan demikian membatalkan membatalkan".
Apa artinya ini? Bagaimana cara pengguna melakukan ulang dengan Emacs?
Jawaban:
Versi singkat: dengan membatalkan undo. Jika Anda membatalkan, dan kemudian melakukan perintah non-editing seperti C-f, maka membatalkan berikutnya akan membatalkan membatalkan, menghasilkan pengulangan.
Versi yang lebih panjang:
Anda dapat menganggap membatalkan sebagai operasi pada setumpuk operasi. Jika Anda melakukan beberapa perintah (bahkan perintah navigasi seperti C-f) setelah urutan operasi undo, semua undo didorong ke tumpukan operasi. Jadi membatalkan berikutnya membatalkan perintah terakhir. Misalkan Anda memiliki urutan operasi yang terlihat seperti ini:
Sekarang, Anda membatalkan. Ini membatalkan tindakan terakhir, menghasilkan daftar berikut:
Jika Anda melakukan sesuatu selain membatalkan pada saat ini - katakanlah, C-ftumpukan operasi terlihat seperti ini:
Sekarang, ketika Anda membatalkan, hal pertama yang dibatalkan adalah yang dibatalkan. Menghasilkan tumpukan asli Anda (dan status dokumen):
Jika Anda melakukan perintah modifikasi untuk memecahkan urutan undo, perintah itu ditambahkan setelah undo dan dengan demikian hal pertama yang harus dibatalkan setelahnya. Misalkan Anda mundur dari "bar" alih-alih memukul C-f. Maka Anda akan memilikinya
Penambahan / penambahan ulang ini terjadi tanpa batas waktu. Dibutuhkan sedikit membiasakan diri, tetapi itu benar-benar memberi Emacs mekanisme undo / redo yang sangat fleksibel dan kuat.
Untuk membatalkan: C-_
Untuk mengulang setelah membatalkan: C-g C-_
Ketikkan beberapa kali C-_ untuk mengulang apa yang telah dibatalkan oleh C-_ Untuk mengulang perintah emacs beberapa kali, jalankan perintah Anda lalu ketik C-xzdan kemudian ketik berkali-kali pada ztombol untuk mengulangi perintah (menarik ketika Anda ingin menjalankan beberapa kali makro)
C-u
, misalnya C-u 8 *
(memasukkan delapan * di mana tanda sisipan berada). Jadi Anda bisa gunakan C-u x C-_
untuk membatalkan langkah x .
C-x e
), Anda bisa menekan e
sesering yang Anda perlukan untuk menjalankannya lagi.
C-/
dan C-x u
alternatif membatalkan ikatan kunci, setara dengan C-_
. Saya lebih suka C-/
karena lebih mudah dipukul.
C-g C-_
akan "mengulang setelah membatalkan", itu hanya berlaku saat Anda pertama kali menekan kombinasi. Setelah itu, ulangi kunci undo Anda tanpa C-g
. Jadi untuk mengulang tiga kali tepat setelah kehancuran, ketik C-g C-_ C-_ C-_
. Jika Anda mengetik C-g C-_ C-g C-_ C-g C-_
, Anda hanya akan berputar-putar, membatalkan pengulangan dari ...
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Catatan yang C-g
tidak diulang.C-g
C-/
C-g
C-/
C-/
Jika Anda telah menekan tombol apa saja (baik mengetik karakter atau hanya menggerakkan kursor) sejak perintah undo terakhir Anda, tidak perlu mengetik C-g
sebelum undo / redo berikutnya. C-g
hanyalah kunci aman untuk memukul yang tidak melakukan apa-apa sendiri, tetapi dianggap sebagai kunci non-undo untuk menandai akhir dari urutan undo Anda. Menekan perintah lain seperti C-f
akan bekerja juga; hanya saja itu akan memindahkan kursor dari tempat Anda memilikinya.
Jika Anda menekan C-g
atau perintah lain ketika Anda tidak bermaksud, dan Anda sekarang kehancuran di arah yang salah, cukup tekan C-g
untuk membalikkan arah Anda lagi. Anda harus membatalkan semua langkah melalui ulang dan tak sengaja yang tidak disengaja sebelum Anda mencapai undo yang Anda inginkan, tetapi jika Anda terus memukul C-/
, pada akhirnya Anda akan mencapai kondisi yang Anda inginkan. Faktanya, setiap negara bagian yang pernah dijangkau oleh penyangga dapat dijangkau, jika Anda menekan C-g
sekali dan kemudian menekan C-/
waktu yang cukup.
Pintas alternatif untuk undo
, selain C-/
, adalah C-_
, C-x u
, dan M-x
undo
.
Lihat Undo dalam Manual Emacs untuk detail lebih lanjut tentang sistem undo Emacs.
Bagi mereka yang ingin memiliki fungsionalitas undo / redo yang lebih umum, seseorang telah menulis undo-tree.el
. Ini memberikan tampilan dan nuansa non-Emacs undo, tetapi memberikan akses ke seluruh 'pohon' dari undo history.
Saya suka sistem undo bawaan Emacs, tetapi menganggap paket ini sangat intuitif.
Inilah komentar dari file itu sendiri:
Emacs memiliki sistem undo yang kuat. Berbeda dengan sistem undo / redo standar dalam perangkat lunak yang paling, ini memungkinkan Anda untuk memulihkan setiap negara di masa lalu penyangga (sedangkan sistem undo / redo standar bisa kehilangan negara masa lalu segera setelah Anda mengulang). Namun, kekuatan ini ada harganya: banyak orang merasa sistem undo Emac membingungkan dan sulit digunakan, menelurkan sejumlah paket yang menggantikannya dengan sistem undo / redo yang kurang kuat tetapi lebih intuitif.
Baik hilangnya data dengan undo / redo standar, dan kebingungan dari undo Emacs, berasal dari mencoba untuk memperlakukan sejarah undo sebagai urutan perubahan linear. Ini bukan. `Undo-tree-mode 'yang disediakan oleh paket ini menggantikan sistem undo Emacs dengan sistem yang memperlakukan sejarah undo seperti apa adanya: pohon perubahan yang bercabang. Ide sederhana ini memungkinkan perilaku yang lebih intuitif dari sistem undo / redo standar untuk dikombinasikan dengan kekuatan tidak pernah kehilangan sejarah. Bonus tambahan yang ditambahkan adalah bahwa undo history dapat disimpan dalam beberapa kasus lebih efisien, memungkinkan lebih banyak perubahan terakumulasi sebelum Emacs mulai membuang histori.
Waspadalah terhadap suatu kekalahan membatalkan pohon untuk mengulang !
Banyak “starter kit” populer (prelude, purcell, spacemacs) dibundel dengan undo-tree. Sebagian besar (semua?) Bahkan mengaktifkannya secara otomatis. Seperti disebutkan, undo-tree adalah cara praktis untuk memvisualisasikan dan melintasi pohon undo / redo. Prelude bahkan memberinya kunci-kunci ( uu
), dan juga C-x u
.
Masalahnya adalah: undo-tree tampaknya merusak standar dan pengikatan Emacs yang terkenal redo :C-g C-/
.
Sebaliknya, kamu bisa menggunakan kunci simetris ini untuk undo / redo :
C-/ undo
C-S-/ redo
Ini berguna karena kadang-kadang Anda ingin mengulang dengan cepat tanpa membuka visualizer.
Saya merasa sangat redo.el
berguna untuk melakukan undo / redo "normal", dan saya biasanya mengikatnya ke CSz dan membatalkan ke Cz, seperti ini:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Cukup unduh file, letakkan di path lisp Anda dan rekatkan di atas di file Anda .emacs
.
Emacs 28 menambahkan perintah redo (dipanggil undo-redo
).
Jika Anda ingin memiliki undo / redo yang lebih khas, perintah berikut ini dapat digunakan.
(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)
Secara default, mengulang di Emacs memerlukan menekan Cg, lalu membatalkan.
Namun dimungkinkan menggunakan bawaan Emacs untuk membatalkan perintah redo juga.
Paket undo-fu , menggunakan fungsi undo bawaan bawaan Emacs untuk mengekspos undo dan redo.