2009-05-05 30 views
89

Hãy nói về các biện pháp tương đối. Vim của tôi trông giống như:Làm thế nào tôi có thể bọc văn bản với một số chiều dài trong Vim?

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc 

Tôi muốn nó được nhỏ hơn:

aaaaa 
aaaaa 
bbbbb 
bbbbb 
ccccc 
ccccc 
etc 

Làm thế nào tôi có thể nhận được nó? Và làm thế nào tôi có thể quản lý thiết lập độ dài của một khối như vậy?

+0

Bạn có nghĩa là văn bản quấn và không phải là văn bản thụt lề không? –

+0

lc: Tôi không biết sự khác biệt. Tôi sẽ viết cuốn sách theo ý tôi, nhưng tôi chưa bao giờ làm nó. –

Trả lời

164

Bạn thực sự có thể làm hai việc:

  1. Hãy định dạng vim (tức thay đổi) văn bản của bạn để có các dòng ngắn hơn, bằng cách chèn dấu ngắt dòng
  2. dòng Để lại như họ đang có, nhưng hiển thị họ quấn

Mà bạn có muốn?

Tùy chọn 1 sẽ đạt được bằng cách đặt textwidth (ví dụ: :set textwidth=30 (từ câu trả lời của Swaarop)). Sau đó, bạn có thể định dạng lại văn bản của mình bằng cách tô sáng nó (trong chế độ trực quan) và nhập gq.

Tùy chọn 2 có thể được bật bằng cách chạy :set wrap hoặc :set nowrap.

Cả hai đều độc lập.

+30

+1 cho lệnh khóa gq từ chế độ trực quan, tức là hữu ích awsomely –

+23

Cũng hữu ích là 'gq}' - định dạng cho đến cuối của đoạn văn. –

+3

FYI điều này phá vỡ trên không gian và gqgq không làm bất cứ điều gì để một dòng như được hiển thị trong câu hỏi ngay cả khi tw = 5. – dlamblin

21

Sử dụng lần (1) là một trong những khả năng:

:%!fold -w5 

Kết quả:

aaaaa 
aaaaa 
aaa 
bbbbb 
bbbbb 
bbb 
ccccc 
ccccc 
ccc 
+4

Điều này giả định một lệnh 'fold' được cài đặt. –

+1

Điều này cũng không tôn trọng không gian để gấp – Lionel

+7

@Lionel: Có. Để tôn trọng không gian, hãy thêm tùy chọn "-s" vào lệnh gấp. – sleske

14
:set textwidth=30 
+0

Văn bản xử lý nó như thế nào khi không có khoảng trắng, như trong ví dụ của poster gốc? Tôi đã có một vở kịch và nó chỉ có vẻ như định dạng dựa trên văn bản nếu có không gian (hoặc giả định, nếu biến breakat được thiết lập để cái gì khác). – Andy

+3

@Andy 'textwidth' sẽ không xử lý tình huống không gian. Bạn có thể viết hàm 'formatexpr' của riêng bạn để làm điều đó. –

+0

Cảm ơn, tôi sẽ xem xét formatexpr – Andy

54

Khi bạn đặt 'độ rộng văn bản', bạn có thể chọn văn bản có chế độ trực quan và nhấn gq để bọc nó đẹp (bạn cũng có thể sử dụng Q trên một số cấu hình cũ hơn/cũ).

Một vài lời khuyên hữu ích:

gqgq (wrap the current line) 
gq} (wrap this 'paragraph', i.e. until the next blank line) 
:h gq 
+3

+1, tôi vô tình nhấn gq trong khi vim, đã dành nửa giờ cố gắng để xem những gì nó đã được tôi nhấn. Điều này rất hữu ích. – user176121

+4

Tôi nghĩ lệnh thứ hai thực sự là 'gq}'. – Martey

+0

Tôi nghĩ rằng lệnh đầu tiên có thể được đơn giản hóa thành 'gq $' – wil93

7

Nếu bạn có văn bản mà không cần không gian mà bạn muốn phá vỡ tại một thời gian nhất định, nó không phải là cần thiết để sử dụng bên ngoài fold cũng không viết riêng formatexpr của bạn.

:%s/\(.\{80\}\)/\1\r/g

sẽ ngắt tất cả các dòng ở 80 ký tự.

+1

Điều này đã lưu ngày của tôi trong khi khôi phục chứng chỉ OpenSSL. Cảm ơn bạn –

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