Câu hỏi Sử dụng C-M-% để thực hiện truy vấn-thay thế-regexp trong các Emacs đang chạy trong thiết bị đầu cuối Mac


Tôi đang cố gắng để làm một biểu thức chính quy tìm kiếm và thay thế trong Emacs, chạy trong chương trình Terminal trên MacBook Pro của tôi, đang chạy OS X 10.6.2. Theo tôi biết, điều này có thể được thực hiện bằng cách nhấn C-M-% (Tôi giả định điều này có nghĩa là Ctrl + Alt + Shift + 5. Vui lòng sửa tôi nếu tôi sai, vì tôi chỉ bắt đầu học Emacs). Tuy nhiên, khi tôi làm điều đó, nó không hoạt động.

Tôi có thể làm điều đó bằng cách gõ Mx query-replace-regexp, và khi tôi làm điều đó, tôi thấy lời nhắc ở dưới cùng của màn hình nói rằng tôi cũng có thể làm điều đó với CM-%, nhưng khi tôi thử CM-%, không có gì xảy ra .

EDIT: Tôi muốn thêm rằng tôi có "Sử dụng tùy chọn như meta key" tùy chọn thiết bị đầu cuối được kích hoạt, và nó có vẻ làm việc tốt. Ví dụ, tôi có thể sử dụng alt-B và alt-F để tiến lên và quay lại một từ tại một thời điểm trong bash và Emacs.

EDIT 2: Tôi cũng muốn đề cập đến rằng tôi có thiết bị đầu cuối của tôi thiết lập để khai báo các loại thiết bị đầu cuối như "xterm" chứ không phải là mặc định của "xterm-màu". Tôi đã làm điều đó vì những lý do không liên quan đến câu hỏi này (để ngăn chặn lời nhắc màu của tôi trông buồn cười sau khi tôi hủy bỏ tìm kiếm ngược lại). Tuy nhiên, tôi đã thử nghiệm trong Emacs với "xterm" và "xterm-color", và cả hai cách tôi có cùng một vấn đề với C-M-%.

Làm thế nào tôi có thể thực hiện công việc này?


6
2017-12-14 18:30


gốc


Trong aquamac, M-% công trình, đó là Option+Shift+5. Tôi cứ đánh Option+5 và đang tự hỏi cái quái gì đang diễn ra, đã hạ cánh tôi ở đây. Mặc dù bạn không được nhắc với các lựa chọn sau: dấu cách hoặc "y" thực hiện thay thế, "n" bỏ qua thay thế, "q" thoát khỏi tìm kiếm. - 7stud


Các câu trả lời:


Không giống như các ứng dụng dựa trên GUI, các ứng dụng dựa trên thiết bị đầu cuối (giống như hầu hết các ứng dụng mà bạn chạy bên trong Thiết bị đầu cuối cửa sổ) bị giới hạn trong đó các tổ hợp phím mà chúng có thể cảm nhận được. Quay lại khi thiết bị đầu cuối là phần cứng thực (không chỉ được mô phỏng bởi các chương trình như Thiết bị đầu cuối và xterm), các thiết bị đầu cuối như VT-100 của DEC có Điều khiển chìa khóa, nhưng nó chỉ hoạt động kết hợp với một số phím khác. Vì hầu hết các chương trình mô phỏng thiết bị đầu cuối mô phỏng VT-100 (và những người kế thừa của nó, bao gồm VT-102 và VT-220), không có cách nào để thực sự gửi Điều khiển- -Shift- -5 (hoặc bất kỳ C-% nào trên bàn phím của bạn) cho một chương trình dựa trên đầu cuối.

Bạn có thể sẽ có bản đồ may mắn hơn query-replace-regexp với một khóa (kết hợp) thực sự truyền một cái gì đó. 'Các phím F' (thường) được ánh xạ theo kiểu VT-220 mà xterm-color Các mục termcap / terminfo biết cách phân tích cú pháp (F1-F4 / F5 có thể theo kiểu VT-100!). Nếu cần, bạn có thể định cấu hình Thiết bị đầu cuối để gửi bất kỳ mã nào mà termcap / terminfo của bạn đang mong đợi (ít nhất tôi có thể trong 10.4 Thiết bị đầu cuối). Bạn có thể gán mã cho một phím F hoặc phím F bằng một công cụ sửa đổi duy nhất (Shift, Control hoặc Option). Bất kỳ công cụ sửa đổi nào sẽ không được chuyển qua Emacs như vậy, nhưng bạn có thể ánh xạ một số kết hợp đó tới các mã khóa đầu cuối cho các phím chức năng cao hơn (F14-F20) (trừ khi kết hợp được thực hiện bởi một phím tắt hệ thống— “ Truy cập bàn phím đầy đủ ”, Expose và Spaces (?)).

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

Lưu ý rằng F1-F4 có thể không hoạt động đúng cách, tùy thuộc vào cấu hình của Thiết bị đầu cuối và emacs. Ví dụ, trên hệ thống của tôi (10.4), Thiết bị đầu cuối được cấu hình với “ESCOP ”(mã khóa VT-100) cho F1, nhưng emacs mong đợi “ESC[11 ~ ”(một chuỗi xterm cũ). Các phím hoạt động tốt emacs nếu tôi cấu hình lại Thiết bị đầu cuối (⌘I; Bàn phím) hoặc emacs (xem bên dưới).

; 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])

2
2017-12-15 08:40



Những gì bạn mô tả không phải là ở tất cả các hành vi trong linux. Trên Linux, khi tôi chạy các emacs bên trong một thiết bị đầu cuối, phím Alt được giải thích bởi thiết bị đầu cuối tốt (ví dụ: tôi có thể nhấn Alt-Shift-5 để thực hiện tìm kiếm và thay thế). Tại sao điều này lại khác trên máy Mac? - Steven C. Howell


Bạn đã thử chưa <esc> C-%? Nó làm việc cho tôi.

Phím thoát thường được ánh xạ tới meta (và alt (tùy chọn trên mac) là không phải luôn được ánh xạ tới meta). Điều duy nhất là bạn không giữ nó xuống như một phím thay đổi, bạn chỉ cần nhấn nó.

BTW - Nếu bạn quen với việc sử dụng alt làm meta, câu hỏi tiếp theo là "Làm cách nào để ánh xạ alt thành meta trong thiết bị đầu cuối mac?" Tôi tin rằng đã được hỏi về Stack Overflow từ lâu: Tùy chọn hoặc phím Command dưới dạng khóa Meta cho LispBox trên Macintosh gợi ý đưa (setq mac-command-modifier 'meta) trong tệp .emacs của bạn.


1
2017-12-15 02:39



Tôi khá chắc chắn rằng các câu hỏi SO liên kết chỉ đề cập đến Emacs GUI, không Emtys tty. - Chris Johnsen
Tôi biết rằng thoát có thể hoạt động như meta. Nó dường như làm việc hầu hết thời gian, nhưng tôi đã thử <esc> C-% và điều đó không hiệu quả với tôi. - Elias Zamaria


Poking xung quanh trong function-key-map (C-h v function-key-map), Tôi thấy rằng C-x @ c là ràng buộc để event-apply-control-modifier. Điều này có vẻ như nó sẽ làm việc, nhưng nó tương tác kém với cách Thiết bị đầu cuối gửi các khóa Meta bằng tùy chọn “Sử dụng tùy chọn làm khóa meta” (nó gửi một ký tự ESC trước ký tự thông thường).

Khi bạn nhập Điều khiển- -x  @  c  Tùy chọn- -Shift- -5, emacs nhìn C-x @ c ESC %. Tuy nhiên, nó liên kết công cụ sửa đổi điều khiển nhân tạo với phím Escape thay vì dịch dấu sau ESC % đến M-%. Vì vậy, nó kết thúc giải thích nó như C-ESC %. Cố gắng để ngăn xếp các điều khiển nhân tạo và điều chỉnh Meta này cũng không thành công, bởi vì C-x trong trình tự sửa đổi nhân tạo thứ hai hấp thụ công cụ sửa đổi nhân tạo đầu tiên.

Nhưng, nó chỉ đến một khả năng:

; 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)

Bây giờ, bạn có thể nhập Điều khiển- -x  @  Shift- -5  Shift- -5, emacs sẽ thấy C-x @ % %, diễn giải nó như C-M-%và chạy cuối cùng query-replace-regexp.


1
2017-12-16 11:16



Cảm ơn vì đã góp ý. Tôi có thể thử điều đó, nhưng có vẻ phức tạp. Có vẻ như những điều kỳ quặc mà tôi đang trải qua đang đến từ chương trình đầu cuối mà tôi đang sử dụng, vì vậy tôi có thể thử một phiên bản không phải của thiết bị đầu cuối của Emacs. - Elias Zamaria
Có, một phiên bản dựa trên GUI của Emacs sẽ hoạt động tốt hơn khi gõ C-M-% theo cách thông thường (Control-Option-Shift-5). Tôi khá hài lòng với Aquamacs Emacs 1.9 (dựa trên GNU Emacs 22.3.1). Nó có một tùy chọn để làm cho phím Option là sửa đổi Meta của Emacs hoặc để làm phím Mac OS X chết / nhân vật mở rộng bình thường. - Chris Johnsen


Để thay thế truy vấn trên MacBook Pro 2017 với OSX Sierra, chạy các emacs tích hợp trong Terminal, sử dụng

<esc> % 

theo thứ tự. Nếu được yêu cầu (tùy thuộc vào bố cục bàn phím), hãy sử dụng phím <shift> đồng thời để truy cập dấu%.


1
2017-08-14 08:52