Làm thế nào để chèn văn bản sau khi điểm?


7

Tôi muốn chèn (lập trình) một số văn bản ngay sau điểm (mà không di chuyển nó). Tôi nghĩ ra cái này:

(save-excursion (insert "my text"))

Nó dường như làm việc. Đó có phải là một cách tốt để làm những gì tôi muốn? Ví dụ, có những tình huống mà điều này có thể phá vỡ? (Khác với những nơi insertsẽ phá vỡ mọi thứ, như bộ đệm chỉ đọc.) Nó có khác với những gì mà các hacker Elisp có kinh nghiệm sẽ làm không?


5
Đúng. Không còn nhiều điều để nói.
shosti

Cảm ơn; Tôi đã hơi lo lắng về một số tình huống (lạ?) Khi nó không hoạt động, v.v.
mbork

3
Bạn có thể viết lại câu hỏi trong trường hợp đó. Nhưng 99% thời gian, save-excursion+ insertlà con đường để đi.
shosti

Được thôi tôi sẽ làm điều đó. BTW: 1% là gì?
mbork

1
Các chế độ lạ với lớp phủ chỉ đọc và loại điều đó. Không có gì phải lo lắng thực sự.
shosti

Câu trả lời:


6

Một ví dụ rất phổ biến của hành vi này là electric-pair-modetrong thư viện tiêu chuẩn Emacs. Nếu bạn chưa từng sử dụng chế độ này trước đây thì (trích dẫn từ hướng dẫn ):

Bất cứ khi nào bạn chèn một dấu phân cách mở, dấu phân cách đóng phù hợp cũng sẽ tự động được chèn, để lại điểm giữa hai.

Bạn có thể kiểm tra mã electric-pair-post-self-insert-functionđể xem cách nó hoàn thành việc chèn. Spoiler:

(defun electric-pair-post-self-insert-function ()
  [lots of cond logic to decide if it's time to insert a matching closer]
      (save-excursion (insert closer)))))))

6

Vâng, đó là cách chèn văn bản thành ngữ nhất sau điểm mà tôi biết. save-excursionrất linh hoạt với các thay đổi trong bộ đệm, vì vậy đây là cách ưa thích để thực hiện chỉnh sửa phá hoại. Nơi duy nhất bạn có khả năng gặp vấn đề là nơi bạn sẽ gặp vấn đề với insertchính nó, chẳng hạn như bộ đệm trong đó một số văn bản chỉ đọc.

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.