質問: macターミナルで実行されているemacsでc-m-%を使用してquery-replace-regexpを実行する os x10.6.2を実行しているmacbookproのターミナルプログラムで実行しているemacsで正規表現の検索と置換を実行しようとしています。私の知る限り、これはc-m-%を押すことで実行できます(これはctrl + alt + shift + 5を意味すると思います。emacsを学び始めたばかりなので、間違っている場合は訂正してください)。しかし、私がそうすると、それは機能しません。mx query-replace-regexpと入力すると実行できます。実行すると、画面の下部にcm-%でも実行できるというリマインダーが表示されますが、cm-%を試しても何も起こりません。 。編集:「メタキーとしてオプションを使用する」ターミナルオプションが有効になっていることを追加したいと思いますが、正常に動作しているようです。たとえば、alt-bとalt-fを使用して、bashとemacsで一度に1つの単語を前後に移動できます。編集2:端末タイプをデフォルトの「xterm-color」ではなく「xterm」として宣言するように端末を設定していることにも言及したいと思います。私はこの質問とは関係のない理由でそれを行いました(reverse-i-searchをキャンセルした後に色付きのプロンプトがおかしくなるのを防ぐため)。しかし、私は「xterm」と「xterm-color」を使ってemacsで実験しましたが、どちらの方法でもc-m-%で同じ問題が発生します。どうすればこれを機能させることができますか?
回答: guiベースのアプリとは異なり、ターミナルベースのアプリ(内部で実行するほとんどすべてのアプリのようにterminal windows)は、感知できるキーの組み合わせに制限があります。端末が実際のハードウェアであったとき(terminalやxtermなどのプログラムでエミュレートされただけではありません)、decのvt-100などの端末には control キーですが、 他の特定のキーとの組み合わせでのみ機能します 。ほとんどの端末エミュレーションプログラムはvt-100(およびvt-102とvt-220を含むその後継プログラム)をエミュレートするため、実際に送信する方法はありません。 control-shift-5 (またはキーボードにあるc-%)を端末ベースのプログラムに変換します。query-replace-regexpを、実際に何かを送信するキー(組み合わせ)にマッピングする方が幸運です。 「fキー」は(通常)vt-220スタイルでマップされ、xterm-color termcap/terminfoエントリは解析方法を知っています(ただし、f1-f4/f5はvt-100スタイルである可能性があります!)。必要に応じて、terminalを構成して、termcap/terminfoが期待するコードを送信できます(少なくとも、10.4 terminalで送信できます)。裸のfキーまたは単一の修飾子(shift、control、またはoption)を使用してfキーにコードを割り当てることができます。修飾子は(ターミナルを介して)emacs自体に渡されることはありませんが、それらの組み合わせの一部を、より高いファンクションキー(f14〜f20)のターミナルキーコードにマップできます(組み合わせがシステムショートカットによって取得されない限り)フルキーボードアクセス」、公開、およびスペース(?))。(global-set-key (kbd "<f13>") 'query-replace-regexp) ; i have a full-sized keyboard with an f13 on it. terminalおよびemacsの設定によっては、f1-f4が正しく動作しない場合があることに注意してください。たとえば、私のシステム(10.4)では、terminalは「[〜#〜] esc [〜#〜] op」(vt-100キーコード)で構成されています。 f1の場合、ただしemacsは「[〜#〜] esc [〜#〜] [11〜」(「古い」xtermシーケンス)を予期します。 terminal(⌘i;キーボード)またはemacs(以下を参照)のいずれかを再構成すると、キーはemacsで正常に機能します。; 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])