danh sách gạch đầu dòng cho các tài liệu văn bản đơn giản trong Vim


8

Mặc dù Vim hỗ trợ thụt lề tự động trong danh sách, cài đặt mặc định chỉ bao gồm các danh sách được sắp xếp, bắt đầu bằng các chữ số, chẳng hạn như:

1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
   tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
2. veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
   commodo consequat.

Tôi chưa thể tìm ra cách mở rộng danh sách này thành các danh sách gạch đầu dòng, chẳng hạn như:

* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
  tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
* veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
  commodo consequat.

Thay đổi formatlistpatRegEx không dẫn đến kết quả mong muốn (thực sự, nó thậm chí đã phá vỡ danh sách theo thứ tự).

Câu trả lời:


10

Biết những gì bạn đã cố gắng đặt giá trị sẽ có ích, nhưng tôi đoán bạn đã không thoát khỏi dấu gạch chéo ngược.

Giá trị mặc định là

formatlistpat=^\s*\d\+[\]:.)}\t ]\s*

nhưng để thực sự đặt giá trị đó (trong vimrc của bạn hoặc tại cmdline), bạn phải sử dụng

set formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s*

Điều này được giải thích trong :help option-backslash. Một sửa đổi đơn giản để cho phép formatlistpatlàm việc với *các danh sách được phân tách, không có thứ tự sẽ là

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*

Thật vậy, điều đó làm việc - cảm ơn rất nhiều! Tôi nghĩ rằng tôi đã thoát đúng mọi thứ (thậm chí giảm độ phức tạp của mẫu), nhưng rõ ràng tôi đã sai. Tôi có thể đã thoát khỏi các dấu sao, điều này sẽ giải thích những rắc rối của tôi ...
AnC

2
Như đã giải thích trong phần trợ giúp []để sử dụng nhanh hơn [[:digits:]*]hoặc [\d*]hơn là[0-9*]
Aditya

Người ta có thể bỏ qua vấn đề trích dẫn bằng cách sử dụng letchứ không phải set, ví dụ : let &formatlistpat='^\s*\(\d\+[\]:.)}\t ]\|[*-][\t ]\)\s*'. (Điều này thêm hỗ trợ cho *-dưới dạng đạn, ngoài số.)
wjv

@wjv Tôi đã thử giải pháp của bạn và nó hoạt động cho - danh sách, nhưng không phải với dấu hoa thị. có ai biết cái gì làm ra thế này không?
lang Ức

@wjv có vẻ như * bên trong commentsbiến, mặc dù là phần giữa của một nhận xét ba phần, cho phép vim nhầm lẫn dấu hoa thị với một nhận xét dòng.
lang Ức

3

Ngoài những gì jamessan đã viết (cụ thể là formatlistpatđề xuất của anh ấy để làm việc với * danh sách), điều quan trọng là không có tùy chọn 'c' (định dạng nhận xét) trong formatoptions:

set formatoptions-=c

mặt khác, Vim bị lẫn lộn giữa định dạng của * danh sách dấu đầu dòng và định dạng của các bình luận. Bạn kết thúc với một dấu phụ * trên dòng thứ 2 và tiếp theo.


Không chỉ vậy, nhưng cờ q(cho phép định dạng bình luận với gq) formatoptionscó thể gây ra sự cố khi định dạng với gq. +1
Kazark

1

Tôi gặp một số khó khăn khi nhận danh sách như a)được công nhận, vì vậy tôi sẽ đăng giải pháp của mình tại đây:

" Recognise lists like 1), 1., a), a., and so on
" Note that | need to be escaped AND preceeded by a literal backslash
set formatlistpat=^\\s*\\([0-9]\\+\\\|[a-z]\\)[\\].:)}]\\s\\+

1

Tôi đang viết một câu trả lời mới cho câu hỏi này vì tôi phải kết hợp nhiều câu trả lời từ câu hỏi nàycâu hỏi khác này để làm cho câu hỏi này hoạt động. Đây là cấu hình cuối cùng của tôi.

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
set formatoptions-=c
set comments-=mb:*
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.