Mac terminalinde çalışan Emac'larda bir query-change-regexp yapmak için CM-% kullanımı


6

OS X 10.6.2 çalıştıran MacBook Pro'mdaki Terminal programında çalışan Emacs'ta düzenli aralıklarla arama ve değiştirme işlemi yapmaya çalışıyorum. Bildiğim kadarıyla, bu CM-% 'ye basarak yapılabilir (bunun Ctrl + Alt + Shift + 5 anlamına geldiğini tahmin ediyorum. Lütfen hatalıysam düzeltin, çünkü yalnızca Emacs öğrenmeye başladım). Ancak, bunu yaptığımda, işe yaramaz.

Mx query-replace-regexp yazarak bunu yapabilirim ve bunu yaptığımda, ekranın altında ayrıca CM-% ile de yapabileceğimi söyleyen bir hatırlatıcı görüyorum, ancak CM-% denediğimde hiçbir şey olmuyor .

EDIT: "Seçeneği meta anahtar olarak kullan" terminal seçeneğinin etkin olduğunu ve bunun iyi sonuç verdiğini eklemek istiyorum. Örneğin bash ve Emacs'ta bir defada bir sözcük ileri ve geri gitmek için alt-B ve alt-F'yi kullanabilirim.

2. EDİT: Terminalimin "xterm-color" varsayılanından ziyade "xterm" olarak tanımlamak için ayarlanmış terminalim olduğunu da belirtmek isterim. Bunu, bu soru ile ilgisi olmayan nedenlerden dolayı yaptım (renkli istemi ters arama işlemini iptal ettikten sonra komik görünmesini engellemek için). Ancak, Emacs'ta "xterm" ve "xterm-color" ile denedim ve her iki şekilde de CM-% ile aynı problemi yaşadım.

Bu işi nasıl yapabilirim?


Aquamac'larda, M-%eserler Option+Shift+5. Vurmaya devam ettim Option+5ve halının neler döndüğünü merak ediyordum, bu beni buraya getirdi. Aşağıdaki seçeneklerden sizden istenmese bile: boşluk veya "y" değiştirme yapar, "n" değiştirme işlemini atlar, "q" aramadan çıkar.
7

Yanıtlar:


2

GUI tabanlı uygulamaların aksine, terminal tabanlı uygulamalar ( Terminal pencerelerinde çalıştırdığınızların neredeyse tümü gibi ) hangi tuş kombinasyonlarını algılayabilecekleri konusunda sınırlıdır. Terminaller gerçek donanımdayken (sadece Terminal ve xterm gibi programlar tarafından taklit edilmedi ), DEC'in VT-100 gibi terminalleri bir Controlanahtara sahipti , ancak sadece diğer bazı anahtarlarla birlikte çalıştı . Terminal emülasyon programlarının çoğu bir VT-100'e (ve VT-102 ve VT-220 de dahil olmak üzere haleflerine) öykündüğünden, aslında bir Control- Shift- 5(veya klavyenizdeki C% 'sini) göndermenin bir yolu yoktur. terminal tabanlı program.

Muhtemelen query-replace-regexpbir şey ileten bir anahtara haritalama şansınız daha da artar . 'F tuşları' (genellikle), xterm-colortermcap / terminfo girişlerinin nasıl ayrıştırılacağını bildikleri bir VT-220 tarzında eşlenir (F1-F4 / F5, VT-100 tarzında olabilir!). Gerekirse, Terminal'i termcap / terminfo'unuzun beklediği kodları gönderecek şekilde yapılandırabilirsiniz (en azından 10.4 Terminalinde yapabilirim). Kodları çıplak bir F tuşuna veya tek bir değiştirici olan bir F tuşuna (Shift, Control veya Option) atayabilirsiniz. Herhangi bir değiştirici Emacs'a (terminal üzerinden) Emacs'a aktarılmaz, ancak bu kombinasyonların bazılarını daha yüksek fonksiyon tuşları için terminal tuş kodlarıyla eşleştirebilirsiniz (F14-F20) (kombinasyon bir sistem kısayolu tarafından alınmadıkça - “ Tam Klavye Erişimi ”, Göster ve Boşluklar (?)).

(global-set-key (kbd "<f13>") 'query-replace-regexp) ; I have a full-sized keyboard with an F13 on it.

Terminal ve emacs yapılandırmasına bağlı olarak F1-F4'ün düzgün çalışmayabileceğini unutmayın . Örneğin, sistemimde (10.4), Terminal F1 için “ ESC OP” (VT-100 anahtar kodu) ile yapılandırılmış , ancak emacsESC [11 ~” (bir 'eski' xterm dizisi) bekliyor. Tuşları iyi çalışır Emacs'ta ben yeniden ya eğer Terminali ya; (Klavye ⌘I) emacs (aşağıya bakınız).

; Expect VT-100 key codes for F1-F4
(define-key function-key-map "\eOP" [f1])
(define-key function-key-map "\eOQ" [f2])
(define-key function-key-map "\eOR" [f3])
(define-key function-key-map "\eOS" [f4])

Tarif ettiğiniz şey linux'taki davranışların hiçbiri değil. Linux üzerinde, bir terminal içinde emacs çalıştırdığımda Alt tuşu terminal tarafından yorumlanır (örneğin, arama yapmak ve değiştirmek için Alt-Shift-5 tuşlarına basabilirim). Bu neden Mac'te farklı olsun?
Steven C. Howell

1

Denedin <esc> C-%mi Benim için çalışıyor.

Kaçış tuşu sıklıkla meta (bir mac ve alt (opsiyon) eşleştirilir değil , her zaman meta ile eşleştirilmiş). Tek şey, onu değişen bir anahtar gibi tutmamanız, sadece vurmanız.

BTW - alt olarak meta kullanmaya alışkınsanız, aşağıdaki soru "alttan üste mac terminalinde nasıl eşleştiririm?" Şeklindedir. Yığın Taşması konusunda uzun zaman önce sorulduğuna inanıyorum: Macintosh'ta LispBox için Meta tuşu olarak Option ya da Command tuşu(setq mac-command-modifier 'meta) .emacs dosyanızın yerleştirilmesini önerir .


Bağlantılı SO sorununun sadece TI Emacs değil, GUI Emacs'a atıfta bulunduğundan eminim.
Chris Johnsen,

Kaçışın meta gibi davranabileceğinin farkındayım. Çoğu zaman çalışıyor gibi görünüyor, ancak <esc>% C- denedim ve bu benim için işe yaramadı.
Elias Zamaria

1

Etrafında dolaşarak function-key-map( C-h v function-key-map), C-x @ cbunun bağlı olduğunu gördüm event-apply-control-modifier. Bu işe yarayacak gibi gözüküyor, ancak Terminal'in “Meta anahtar olarak seçeneği kullan” seçeneğiyle Meta anahtarlarını gönderme biçimiyle zayıf bir şekilde etkileşime giriyor (normal karakterden önce bir ESC karakteri gönderir).

Control- x @ c Option- Shift- yazdığınızda 5, emacs görür C-x @ c ESC %. Bununla birlikte, bunun yerine sondaki çeviri Escape anahtarına yapay Kontrol değiştirici bağlar ESC %için M-%. Böylece sonuç olarak yorumladı C-ESC %. Bu yapay Kontrol ve Meta değiştiricileri istiflemeye çalışmak da başarısız olur çünkü C-xikinci yapay değiştirici dizisindeki ilki, ilk yapay değiştiriciyi emer.

Ancak, bir olasılığı işaret ediyor:

; cargo cult adaptation of event-apply-control-modifier
(defun event-apply-control-meta-modifiers (ignore-prompt)
  (vector
   (event-apply-modifier
    (event-apply-modifier (read-event)
                          'control 26 "C-")
    'meta 27 "M-")))
(define-key function-key-map (kbd "C-x @ %") 'event-apply-control-meta-modifiers)

Şimdi, Control- x @ Shift- 5 Shift- yazabilirsiniz 5, emacs görecek C-x @ % %, yorumlayabilecek C-M-%ve sonunda çalışacaktır query-replace-regexp.


Öneriniz için teşekkür ederim. Bunu deneyebilirim, ama biraz karmaşık görünüyor. Karşılaştığım tuhaflıklar kullandığım terminal programından geliyor gibi görünüyor, bu yüzden Emacs'in terminal olmayan bir sürümünü deneyebilirim.
Elias Zamaria

Evet, GUI tabanlı bir Emac sürümü, CM% 'yi normal şekilde yazmak için daha iyi çalışır (Control-Option-Shift-5). Aquamacs Emacs 1.9'dan (GNU Emacs 22.3.1'e dayanarak) oldukça memnunum. Seçenek tuşunu Emacs'ın Meta değiştiricisi yapmak veya normal Mac OS X ölü anahtarı / genişletilmiş karakteri yapmak için bir seçeneği vardır.
Chris Johnsen

1

MacBook Pro 2017'deki OSX Sierra ile sorgu değiştirme için, yerleşik EMAC'leri çalıştırarak Terminal'de

<esc> % 

sırayla. Gerekirse (klavye düzenine bağlı olarak),% işaretine erişmek için eşzamanlı <shift> tuşunu kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.