Làm cách nào để tôi có thể kéo dài văn bản trong Vim?


102

Hãy nói về các biện pháp tương đối. Vim của tôi trông giống như:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

Tôi muốn nó 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ý việc thiết lập độ dài của một khối như vậy?


Ý bạn có phải là văn bản gói chứ không phải văn bản thụt lề?
lc.

lc: Tôi không biết sự khác biệt. Tôi đã định viết cuốn sách như nó được đề nghị cho tôi, nhưng tôi chưa bao giờ làm cho nó hoạt động.
Léo Léopold Hertz 준영

Câu trả lời:


177

Bạn thực sự có thể làm hai điều:

  1. Hãy để định dạng vim (iechange) 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. Giữ nguyên các dòng nhưng hiển thị chúng được bọc

Bạn muốn cái nào?

Lựa chọn 1 sẽ đạt được bằng cách thiết lập 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 đánh dấu nó (ở chế độ trực quan) và nhập gq. ( textwidthCó thể được viết tắt là tw, do đó :set tw=30.)

Tùy chọn 2 có thể được chuyển đổi bằng cách chạy :set wrap/ :set nowrap. Điều này sẽ bao gồm các dòng quá dài đối với cửa sổ.

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


33
+1 cho lệnh phím gq từ chế độ trực quan, điều đó thật sự hữu ích
Fire Crow,

3
FYI điều này ngắt trên khoảng trắng và gqgq không thực hiện bất kỳ điều gì đối với một dòng như được hiển thị trong câu hỏi ngay cả khi tw = 5.
dlamblin

2
@Dlamblin: Đúng. Nếu bạn muốn gấp ở chính xác chiều rộng đã cho mà không cần tôn trọng khoảng trắng, thì hãy sử dụng foldlệnh như trong câu trả lời của fgm.
sleske

Tùy chọn của bạn để không hoạt động xa như tôi thấy. wrapsẽ quấn ở ranh giới cửa sổ, không phải ở textwidth.
DerWeh

@DerWeh: Có, bọc sẽ quấn ở ranh giới cửa sổ. Tôi đã chỉnh sửa để làm rõ.
sleske

60

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

Một số mẹo hữu ích:

gqq (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 gq khi đang ở vim, đã dành nửa giờ qua để thử xem tôi đã đánh gì. Điều này rất hữu ích.
user176121

gqqcũng bao quanh dòng hiện tại (thay vì gqgqhoặc gq$).
Ash

21

Sử dụng gấp (1) là một khả năng:

:%!fold -w5 

Kết quả:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

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

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

14
:set textwidth=30

Làm thế nào để văn bản xử lý nó khi không có khoảng trắng, như trong ví dụ của áp phích gốc? Tôi đã có một lần chơi và nó dường như chỉ định dạng dựa trên chiều rộng văn bản nếu có khoảng trắng (hoặc giả sử, nếu biến ngắt được đặt thành thứ khác).
Andy

3
@Andy textwidthsẽ không xử lý tình huống không có khoảng trắng. Bạn có thể viết formatexprhàm của riêng bạn để làm điều đó.
Swaroop CH

8

Nếu bạn có văn bản không có khoảng trắng mà bạn muốn ngắt ở một độ dài nhất định, bạn không cần phải sử dụng bên ngoài foldhoặc viết của riêng bạn formatexpr.

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

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


2
Điều này đã lưu ngày của tôi trong khi phục hồi chứng chỉ OpenSSL. Cảm ơn bạn
Cengiz Can
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.