Làm cách nào để xử lý các dòng rất dài trong văn bản (hơn 500 ký tự)?


19

Đối với một số định dạng văn bản, ngắt dòng vấn đề.

Ví dụ: tôi thường sử dụng Vim để viết tài liệu MediaWiki, nơi bạn không thể đặt ngắt dòng ở bất cứ đâu (không giống như Markdown). Vì vậy, tôi buộc phải viết những dòng có nhiều ký tự.

Điều này có thể dẫn đến các dòng dài (200+ ký tự) hoặc thậm chí rất dài (1000 ký tự). Tôi thấy điều này rất khó sử dụng trong Vim. Một ví dụ là nếu tôi muốn chỉnh sửa một cái gì đó ở giữa dòng 1000 ký tự, tôi cần di chuyển con trỏ của mình 500 lần.

Điều này có thể được thực hiện nhanh hơn một chút với whoặc /, nhưng nó vẫn còn lúng túng.

Có cách nào tốt hơn để đối phó với điều này? Phím di chuyển tốt hơn? Một số loại "gói giả" (văn bản hành xử như thể tw=80, nhưng không có \ntrong tập tin), hoặc cái gì khác?


1
Bạn cũng có thể muốn đặt display = lastline để tránh các dòng @ trống ở cuối màn hình.
Random832

Câu trả lời:


21

Bạn có thể sử dụng một gloạt các lệnh để di chuyển đến các ranh giới của khu vực màn hình hiển thị. Ví dụ: g$di chuyển đến cạnh phải của màn hình (không nhất thiết là cuối dòng). gjdi chuyển con trỏ xuống một dòng khi nó xuất hiện trên màn hình của bạn (không nhất thiết phải là một dòng logic xuống).

Có lẽ bạn có thể rebind các phím mũi tên:

nnoremap <Up> gk
nnoremap <Down> gj

Hoặc một số người cũng trực tiếp rebind kj:

nnoremap k gk
nnoremap j gj

Đối với chế độ chèn, bạn có thể sử dụng:

inoremap <C-k> <C-o>gk
inoremap <C-j> <C-o>gj

Hoặc là:

inoremap <Up> <C-o>gk
inoremap <Down> <C-o>gj

Ngoài ra, nếu bạn sử dụng :set wrap, Vim sẽ bọc các dòng, vì vậy bạn có thể thấy tất cả các dòng. Bạn cũng có thể sử dụng set showsbreak=+để hiển thị a +để chỉ ra rằng Vim đang thực hiện gói.


Để nhảy đến các vị trí cột cụ thể, bạn có thể sử dụng |lệnh. Ví dụ, 200|sẽ đi đến vị trí cột 200.


1
... Và g5jđể nhảy xuống 5, như thường lệ.
yo '

1
@yo 'Tôi nghĩ bạn có nghĩa là5gj
Martin Tournoij

1
@Carpetsmoker Lạ; với hầu hết các lệnh, việc bạn đưa ra các tiền tố và số theo thứ tự không quan trọng, miễn là chính lệnh đó là cuối cùng. Ở đây không có: - /
yo '

@yo ', tốt, trong g5j, g5được nhìn thấy đầu tiên, mà chỉ nhảy sang tiếp theo 5trước khi bạn áp dụng j. Đó là lý do tại sao nó không thể làm những gì 5gj.
Shahbaz

3

Vim có hỗ trợ cho gói mềm, chỉ set wrapđể kích hoạt nó và nó sẽ bọc các dòng dài vượt ra ngoài màn hình hiển thị. Bạn có thể sử dụng gj& gkđể di chuyển lên / xuống tương ứng trên các đường bao bọc như vậy.


2

Khi tôi xử lý các dòng rất dài, điểm đau lớn nhất phải làm với các độ dài dòng khác nhau. Đó là, di chuyển lên hoặc xuống gần cuối các dòng cuộn cửa sổ rất xa sang trái hoặc phải.

Điều này có thể tránh được bằng cách cài đặt virtualedit=all, cho phép bạn di chuyển con trỏ vào khoảng trống sau khi kết thúc dòng.


1

Như những người khác đã nói, bạn có thể sử dụng g+ một cái gì đó để di chuyển xung quanh. Tuy nhiên, khi bạn có các dòng cực dài, nhấn gjnhiều lần để di chuyển xuống không phải là công thái học. Tôi có những điều sau đây .vimrcđể làm cho điều đó dễ dàng hơn nhiều:

vmap <D-j> gj
vmap <D-k> gk
vmap <D-4> g$
vmap <D-6> g^
vmap <D-0> g^
nmap <D-j> gj
nmap <D-k> gk
nmap <D-4> g$
nmap <D-6> g^
nmap <D-0> g^

Trên máy Mac, điều này cho phép tôi sử dụng j, k, $, 0 và ^ trên các dòng hiển thị bằng cách giữ phím lệnh. Trên các hệ thống khác, thay vì Dbạn có thể thử Mhoặc Acho Alt hoặc Ccho Điều khiển.

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.