2008-12-24 33 views
49

Tôi muốn tham gia tất cả các dòng trong một tệp vào một dòng. Cách đơn giản nhất để làm điều này là gì? Tôi đã có may mắn cố gắng sử dụng thay thế (\r\n hoặc \n dường như không được chọn chính xác trong trường hợp s/\r\n// trên Windows). Sử dụng J trong một biểu thức phạm vi dường như không hoạt động (có thể do phạm vi không còn trong 'đồng bộ' sau khi lệnh đầu tiên được thực hiện).Trong Vim, cách đơn giản nhất để nối tất cả các dòng trong một tệp vào một dòng là gì?

Tôi đã thử :1,$norm! J nhưng điều này chỉ làm một nửa tệp - điều này có ý nghĩa bởi vì nó chỉ tham gia mỗi dòng một lần.

+0

Xem thêm "[Cách xóa '\ n' của mỗi dòng trong một tệp] (http://stackoverflow.com/q/6868335/254635)". –

Trả lời

55

Ah, tôi đã tìm thấy câu trả lời.

:1,$join 

Hoạt động như một sự quyến rũ.

EDIT: Như đã chỉ ra trong các bình luận:

:%join -or- :%j 

... loại bỏ phạm vi.

+0

Điều này cũng có thể được viết là: :% tham gia –

+5

Hoặc viết tắt là:% j –

+3

Bạn cũng có thể muốn sử dụng thao tác gJ thay vì j. Thao tác gJ tham gia vào các dòng mà không chèn hoặc xóa bất kỳ dấu cách nào. –

125

Một cách khác:

ggVGJ 

"ggVG" trực quan chọn tất cả các dòng, và "J" gia nhập họ.

+0

Ví dụ như thế này cho thấy lý do tại sao vim mạnh mẽ như vậy. "gg", "V", "G", "J", là tất cả các lệnh serparate. xuất sắc –

+0

Khi câu trả lời được chấp nhận chỉ ra, ':% j' hoạt động, nó ngắn và không yêu cầu chế độ trực quan. –

7

cách Cryptic:

[email protected]@q 

(người đầu tiên ba q 's xóa q đăng ký, các [email protected] ghi lại một macro để đăng ký q mà thực hiện một Join, sau đó gọi q, và @q chạy qua nó .

+0

Tất nhiên. :-p http://www.reddit.com/r/programming/comments/61no8/holy_shmoly_haskell_smokes_python_and_ruby_away/c02jz8x –

+0

Tại sao bạn muốn xóa sổ đăng ký q trước, khi bạn ghi đè lên nó. Điều đó giống như thực hiện một loạt các lệnh cấm để thực hiện lệnh của bạn lâu hơn. – Alf

+0

@Alf: Vì nếu bạn có thứ gì đó trong thanh ghi q, bạn sẽ thực thi macro đó trong khi ghi 'J @ q'. –

12

Bạn có thể làm điều đó trong ba tổ hợp phím ít:

:1,$j 

không phải là ed grand?

+6

:% j nhỏ hơn 5 ... –

8

Tôi ngạc nhiên không ai thậm chí đề cập theo cách khác:

:%s/\n//

tôi đều ngạc nhiên mà không ai chỉ ra rằng phạm vi 1,$ có một cách viết tắt đó là viết %.

(Điều này không giống như việc tham gia vào các dòng, nhưng tùy thuộc vào các trường hợp có thể thực tế phù hợp hơn.)

28

Bạn có thể làm điều đó với 3 tổ hợp phím khởi động từ chế độ bình thường:

:%j 
  • : vào chế độ lệnh
  • % đề cập đến tất cả các dòng trong file
  • j thực thi lệnh
  • tham gia

Bây giờ có vẻ như điều này cho biết thêm một spa ce giữa các dòng. Tôi không chắc chắn nếu bạn muốn điều này.

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