Câu trả lời:
Bạn chỉ có thể thay thế bất kỳ khoảng trắng liên tiếp nào trên dòng bằng một dòng mới bằng cách sử dụng lệnh :s/\s\+/\r/g
. \s\+
có nghĩa là một hoặc nhiều ký tự khoảng trắng và \r
là một dòng mới, xem :help :substitute
và :help regexp
để biết chi tiết. Nếu bạn chạy lệnh trên một dòng như:
foo bar baz
Bạn lấy:
foo
bar
baz
Nếu bạn đã hlsearch
bật và bạn không muốn làm lộn xộn màn hình của mình với các khoảng trắng được tô sáng ở mọi nơi, bạn có thể viết một chức năng nhỏ như sau để tránh điều đó:
function! SplitLineNicely()
" Save previous value of last search register
let saved_last_search_pattern = @/
" :substitute replaces the content of the search register with the `\s\+`
" pattern highlighting all whitespaces in the file
substitute /\s\+/\r/g
" Restore previous search register
let @/ = saved_last_search_pattern
endfunction
\r
, xem :help s/\r
. Nó có thể được thay thế bằng một cách gõ dòng chữ mới <c-v><cr>
. Trong bối cảnh \n
này là một nhân vật null, xem :help s/\n
.
replaces the content of the register
- đăng ký nào?
Sử dụng vim
thay thế có lẽ là một trong những cách tốt hơn để hoàn thành nhiệm vụ của bạn, nhưng bạn cũng có thể sử dụng macro. Giả sử chúng ta có dữ liệu sau, với con trỏ ở đâu đó trên dòng 1:
1 a b c d e f
~
Bắt đầu ở chế độ bình thường, nhấn qqsẽ bắt đầu ghi macro có thể gọi qua @q. Bất cứ điều gì gõ sau qqsẽ được lặp lại thông qua cuộc gọi nói trên. Mục tiêu của chúng tôi là ghi lại các lệnh thông thường sẽ đủ chung để cho phép lặp lại liền mạch.
Do đó, chúng ta có thể gõ 0để đưa con trỏ đến đầu dòng, sau đó fspacedi chuyển con trỏ đến khoảng trắng đầu tiên. Điều này cho phép chúng ta sau đó gõ renter, dẫn đến:
1 a
2 b c d e f
~
Đánh qngay bây giờ là một ý tưởng tốt vì macro có thể tái sử dụng của chúng tôi đã sẵn sàng để lặp lại. Một cách tùy tiện, chúng tôi lưu ý rằng có 4 khoảng trống còn lại để thay thế bằng dòng mới. Do đó, bằng cách nhấn, 4@qchúng tôi lặp lại q
macro 4 lần dẫn đến:
1 a
2 b
3 c
4 d
5 e
6 f
~
Lưu ý rằng do cách chúng tôi thiết lập macro, nên sẽ lặp lại lệnh trên 9000 lần một cách an toàn, vì nó sẽ chỉ ảnh hưởng đến dòng hiện tại và vì không có khoảng trắng ở bên phải của mục nhập dữ liệu cuối cùng, fspacesẽ 'độc đáo' thất bại, ngăn dữ liệu được thay thế bằng dòng mới.
Vì vậy, để lặp lại từ đầu:
qq0fspacerenterq9001@q
cung cấp kết quả của chúng tôi.
9001
phím trên bàn phím để nhập tên người dùng nhanh.
Cách dễ nhất mà tôi đã tìm thấy để phân chia các dòng trong Vim là lệnh chế độ bình thường gq
(nhập cả hai chữ cái liên tiếp trong chế độ bình thường hoặc trực quan).
Trong chế độ trực quan, nó sẽ phân chia bất cứ thứ gì được chọn, ở chế độ bình thường, bạn làm theo gq
chuyển động.
Ví dụ: gql
sẽ chia một dòng thành chiều rộng hiện được đặt. Để đặt độ rộng của các dòng chia khác với cài đặt hiện tại của bạn, bạn có thể sử dụng :set textwidth=n
, n
số lượng ký tự bạn muốn trong một dòng, ví dụ, 10
và thay đổi trở lại chiều rộng thông thường của bạn khi bạn hoàn thành.
Nhận thông tin này từ một video Youtube của Kholidfu cho thấy cách nối và chia dòng ở chế độ bình thường bằng chuyển động.