2009-03-04 43 views
227

Tôi đang cố gắng thay thế một ký tự - giả sử ; - với một dòng mới bằng cách sử dụng replace-string và/hoặc replace-regexp trong Emacs.Làm thế nào để thay thế một ký tự bằng một dòng mới trong Emacs?

Tôi đã thử các lệnh sau:

  • M-xreplace-stringRET;RET\n

    này sẽ thay thế ; với 2 nhân vật: \n.

  • M-xreplace-regexRET;RET\n

    Điều này dẫn đến các lỗi sau (thể hiện trong minibuffer):

    sử dụng không hợp lệ của `\' trong văn bản thay thế.

Có gì sai với việc sử dụng replace-string cho nhiệm vụ này? CÒn cách nào khác để thực hiện việc này không?

Cảm ơn.

Trả lời

340

M-xreplace-stringRET;RETC-q C-j.

  • C-q cho quoted-insert,

  • C-j là một dòng mới.

Chúc mừng!

+1

C-q là thực sự 'quote-insert' mà trích ký tự tiếp theo. –

+2

Tôi tin rằng nó thực sự "được trích dẫn" thay vì "trích dẫn", như trong "trích dẫn". Ít nhất đó là cách trên phiên bản 22.1. –

+4

Vậy tại sao 'Ret' không hoạt động thay vì' C-j' sau 'C-q'? – Cactus

22

Đừng quên rằng bạn luôn có thể cắt và dán vào minibuffer.

Vì vậy, bạn chỉ có thể sao chép một ký tự dòng mới (hoặc bất kỳ chuỗi nào) từ bộ đệm của bạn, sau đó giật nó khi được nhắc cho văn bản thay thế.

+2

Thực sự là một ý tưởng hay cho các ký tự mà tôi không biết . – Lei

7

Cụ thể hơn:

Để thay thế ký tự dấu chấm phẩy (;) bằng dòng mới, hãy làm theo các bước chính xác sau.

  1. xác định vị trí con trỏ ở phía trên bên trái của bộ đệm chứa văn bản mà bạn muốn thay đổi
  2. Loại mx thay thế dây và nhấn RETURN
  3. mini-đệm sẽ hiển thị một cái gì đó như thế này: Chuỗi thay thế (mặc định^- >):
  4. Nhập ký tự bạn muốn thay thế. Trong trường hợp này, ; và nhấn RETURN
  5. bộ đệm nhỏ sẽ hiển thị nội dung như sau: chuỗi; với:
  6. Bây giờ thực hiện Cq Cj
  7. Tất cả các trường hợp của dấu chấm phẩy sẽ được thay thế một dòng mới (từ vị trí con trỏ đến cuối của bộ đệm sẽ xuất hiện)

Bit hơn để nó hơn lời giải thích ban đầu nói.

2

Chuyển đến chế độ văn bản

M-x text-mode 

khối Highlight để thụt

Indent

C+M \ 

Chuyển trở lại bất kỳ phương tiện ..

52

Có bốn cách tôi đã tìm thấy để đặt một dòng mới vào minibuffer.

  1. Co

  2. Cq Cj

  3. Cq12 (12 là giá trị bát phân của newline)

  4. Cx o vào cửa sổ chính , giết một newline với C-k, sau đó C-x o trở lại minibuffer, yank nó với C-y

+6

+1 để đề cập đến 'C-o'!Một cú đánh ít quan trọng hơn so với 'C-q C-j'. Đã không nghĩ đến việc sử dụng cái đó trước đây. – itsjeyd

+0

Cảm ơn phiên bản 4! Hữu ích nếu bạn có hồi phục C-o và C-q. –

+0

Cảm ơn rất nhiều. Bạn có thể giải thích tại sao C-o hoạt động và C-q C-j không? –

Các vấn đề liên quan