Làm thế nào để thay thế một nhân vật bằng một dòng mới trong Emacs?


285

Tôi đang cố gắng thay thế một ký tự - nói ;- bằng một dòng mới bằng cách sử dụng replace-stringvà / hoặc replace-regexptrong Emacs.

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

  • M-x replace-string RET ; RET \n

    Điều này sẽ thay thế ;bằng 2 ký tự : \n.

  • M-x replace-regex RET ; RET \n

    Điều này dẫn đến lỗi sau (hiển thị trong bộ thu nhỏ):

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

Có gì sai khi sử dụng replace-stringcho 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.

Câu trả lời:


427

M-x replace-string RET ; RET C-q C-j.

  • C-qcho quoted-insert,

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

Chúc mừng!


3
Cq thực sự là quote-inserttrích dẫn các nhân vật tiếp theo.
Joe Casadonte

2
Tôi tin rằng nó thực sự "được trích dẫn" chứ không phải là "trích dẫn", như trong "trích dẫn-chèn". Ít nhất đó là cách nó diễn ra trên phiên bản 22.1.
Bryan Oakley

8
C-jlà một 0x0amã kiểm soát theo nghĩa đen , so với Retđó là chìa khóa bên cạnh trích dẫn của bạn và gửi 0x0d. vi.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell

2
Lưu ý cho người dùng vim, sử dụng C-jtrong emacs , trong khi C-mtrong vim .
Alpha TAN

2
@JonathanArkell Đó là một mô tả về cách thức hoạt động, nhưng không phải tại sao . Trong trình chỉnh sửa, Ret tạo ra 0x0a, vậy tại sao nó phải tạo 0x0d trong phần trích dẫn? Điều đó không có ý nghĩa gì. (? Chỉ vì mã bàn phím nội bộ được 0x0d vì những lý do lịch sử Chúng tôi sử dụng chìa khóa bản đồ ở khắp mọi nơi, tại sao không ở đây, nơi nó làm cho cảm giác hoàn hảo?)
VOG

74

Có bốn cách tôi đã tìm thấy để đưa một dòng mới vào xe buýt nhỏ.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 là giá trị bát phân của dòng mới)

  4. C-x ovào cửa sổ chính, giết một dòng mới với C-k, sau đó C-x oquay lại xe buýt nhỏ, kéo nó bằngC-y


10
+1 để đề cập C-o! Một đột quỵ ít hơn so với C-q C-j. Chưa từng nghĩ đến việc sử dụng cái đó trước đây.
itjeyd

Cảm ơn phiên bản 4! Hữu ích nếu bạn có Co và Cq phục hồi.
Joachim W

Cảm ơn rất nhiều. Bạn có thể giải thích tại sao Co hoạt động và Cq Cj không?
Christian Madsen

C-okhông di chuyển điểm sau khi chèn dòng mới vào bộ thu nhỏ, vì vậy bạn vẫn cần nhấn phím mũi tên phải nếu bạn muốn chèn nội dung nào đó sau dòng mới trong chuỗi thay thế.
Robin Green

Trên phiên bản Emacs 25.2.2 của tôi, C-osẽ nhập một dòng mới trong cửa sổ chính khi sử dụng tìm kiếm, trong khi C-q C-jsẽ nhập dòng mới trong bộ thu nhỏ. C-okhông hoạt động với truy vấn - thay thế mặc dù.
TC Proctor

25

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

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 mình, sau đó kéo nó khi được nhắc cho văn bản thay thế.


2
Đó thực sự là một ý tưởng tốt cho các nhân vật mà tôi không biết ràng buộc chính.
Lôi

Ah ah ! quá đơn giản !
Jérémy Pouyet

8

Nói rõ hơn:

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

  1. định vị con trỏ ở phía trên bên trái của bộ đệm chứa văn bản bạn muốn thay đổi
  2. Nhập chuỗi thay thế mx và nhấn RETURN
  3. bộ đệm mini sẽ hiển thị một cái gì đó như thế này: Thay thế chuỗi (mặc định ^ ->):
  4. Nhập vào ký tự bạn muốn thay thế. Trong trường hợp này, ; và nhấn TRẢ LẠI
  5. bộ đệm mini sẽ hiển thị một cái gì đó như thế này: chuỗi; với:
  6. Bây giờ thực hiện Cq Cj
  7. Tất cả các phiên bản 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 bộ đệm sẽ xuất hiện)

Bit nhiều hơn nó giải thích ban đầu nói.


2

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

M-x text-mode

Đánh dấu khối để thụt lề

Thụt lề

C+M \

Chuyển về chế độ bất cứ điều gì ..


0

nội tuyến chỉ: C-M-S-%(nếu khóa ràng buộc vẫn mặc định) hơn replace-string^J

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.