Làm cách nào tôi có thể chia đoạn văn thành một dòng trên mỗi câu nhưng vẫn giữ cho nó được bao bọc trực quan?


14

Điều này tương tự như Chỉnh sửa các tệp với một câu trên mỗi dòng (về chức năng cũng như động cơ), nhưng tôi muốn có một đoạn văn đầy đủ, trôi chảy thay vì ngắt trực quan ở mỗi câu.

Tôi muốn có một chế độ nhỏ, khi hoạt động, sẽ trực quan nối các dòng từ cùng một đoạn (không được phân tách bởi \n\nhoặc paragraph-separatehoặc ...) và sau đó kích hoạt hành vi (có lẽ xuất phát từ visual-line-mode) sẽ bao bọc dòng mà không thực sự chèn \n.

Liệu một chế độ như vậy tồn tại? Nếu không, tôi sẽ làm thế nào về quá trình thay đổi thuộc tính hiển thị của đoạn để đạt được kết quả? (Rốt cuộc, đây là mấu chốt của chế độ như vậy và người ta có thể được phát triển từ đoạn trích.)


[...] Sẽ tham gia trực quan [...]. Bạn có nghĩa là giữ bên dưới \n(nếu có), hoặc bạn muốn nó thực sự loại bỏ các dòng mới để cung cấp 1 đoạn văn trên mỗi dòng?
Jonathan Leech-Pepin

1
Có lẽ bạn có thể sử dụng buffer-display-tableđể làm cho các dòng mới \ndường như là một cái gì đó khác như dấu cách hoặc thứ gì đó - xem ví dụ sau trong liên kết: stackoverflow.com/a/24842771/2112361 Ưu điểm với điều này sẽ là văn bản trong tài liệu không được sửa đổi. Dòng mới có thể là bất cứ thứ gì - ví dụ, khuôn mặt cười, không gian, biểu tượng người hành hương, v.v ... Hiệu ứng hình ảnh là sự bao bọc sẽ xảy ra.
luật

@ JonathanL336-Pepin Tôi muốn giữ các dòng mới ở nơi hiện tại. Trong thực tế, tôi muốn buộc dòng mới vào cuối câu, nhưng điều này có thể được thực hiện thông qua hook riêng.
Sean Allred

1
@lawlist hiệu ứng hình ảnh là các dòng mới sẽ xuất hiện ở mọi nơi, phải không? Không phải tất cả các đoạn được thu gọn thành một?
Malabarba

1
Tôi đồng cảm với yêu cầu này nhưng nghĩ rằng chế độ nhỏ được mô tả bởi OP không phải là giải pháp chính xác. Vấn đề cơ bản là diff không hoạt động tốt cho văn bản vì nó được thiết kế cho mã. Làm việc xung quanh vấn đề này trong Emacs là một giải pháp khả thi nhưng không phải vì nhiều lý do. Sẽ tốt hơn nhiều nếu cải thiện diff để làm việc tốt với văn bản.
tmalsburg

Câu trả lời:


3

Như Tom đã nói, việc đặt một tài sản hiển thị trên các dòng mới sẽ loại công việc.

Vấn đề là tìm ra những dòng cần bọc.

Đây là một ví dụ để giúp bạn bắt đầu:

(let ((eol-regexp "[[:graph:]] ?\\(\n\\)[^\t\n ]"))
  (font-lock-add-keywords nil
   `((,eol-regexp 1 '(face default display " ")))))

(visual-line-mode 1)

Điều này sẽ "loại bỏ" các dòng mới nếu nó đi trước các ký tự đồ họa và dòng tiếp theo không được thụt lề hoặc trống. Bạn sẽ phải thử nghiệm để tìm ra thứ gì đó phù hợp với bạn.

Một số giải thích thêm:

  1. font-lock-add-keywordsthêm một danh sách các quy tắc để khóa phông chữ (vì vậy phải bật khóa phông chữ. Đối số đầu tiên có thể là chế độ (ví dụ text-mode); trong trường hợp của chúng tôi là không, có nghĩa là chỉ thêm quy tắc cho bộ đệm hiện tại.
  2. "Quy tắc" của chúng tôi là (,eol-regexp 1 '(face default display " ")). Yếu tố đầu tiên là biểu thức chính quy mà chúng ta đã xây dựng trước đó; thứ hai là sự phụ thuộc mà chúng ta quan tâm; thứ ba là "khuôn mặt" mà chúng tôi muốn áp dụng.
  3. Mặc dù việc sử dụng một khuôn mặt cho các dòng mới không có ích cho chúng ta, chúng ta cũng có thể thêm các thuộc tính văn bản. Vì vậy, chúng tôi sử dụng khuôn mặt mặc định và hơn là thêm một thuộc tính hiển thị thay thế chuỗi con 1 (tức là dòng mới) bằng một khoảng trắng.
  4. Nếu bạn tự bắn vào chân mình, hãy xóa bộ đệm hoặc xóa từ khóa bằng font-lock-remove-keywords.
  5. Bạn cũng có thể muốn thêm displayvào font-lock-extra-managed-props(Tôi chưa thử điều này).
  6. Phần khó khăn là để có được quyền khai thác. "\ (\ n \) [^ \ n]" sẽ khớp với bất kỳ dòng mới nào không được theo sau bởi một dòng khác. ". \ {30, \} \ (\ n \)" sẽ chỉ khớp với các dòng mới có ít nhất 30 ký tự.

Người ta có thể tìm thấy một triển khai ở trên dưới dạng gói tại github.com/andersjohansson/tex-
Fold

0

Nếu tôi hiểu vấn đề chính xác, đó là bạn muốn duy trì tất cả các dòng mới trong bộ đệm như hiện tại; nhưng bạn muốn hiển thị một số trong số chúng dưới dạng khoảng trắng. Sau đó, bạn thích gói từ.

Đối với gói từ tôi nghĩ bạn có thể sử dụng visual-line-mode.

Để xử lý các dòng mới, tôi nghĩ có lẽ bạn có thể đặt một thuộc displaytính với " "(một chuỗi bao gồm một khoảng trắng) làm giá trị trên các dòng mới mà bạn muốn hiển thị khác nhau.

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.