2012-12-15 27 views
13

Tôi có tệp văn bản và tôi muốn xóa mọi từ ngoại trừ từ đầu tiên trên mỗi dòng và tôi không biết cách thực hiện điều này.Xóa mọi thứ trừ cột đầu tiên trong VIM

Vì vậy, nếu tôi có:

one two three 
four five 
six 

Tôi muốn ở lại với:

one 
four 
six 

Got bất kỳ ý tưởng?

Trả lời

13

Nếu dòng không bắt đầu với khoảng trắng, bạn có thể thay thế ' .*' (mà phù hợp với tất cả mọi thứ sau từ đầu tiên) với một chuỗi rỗng:

:%s/ .*//g 
+1

Cảm ơn bạn. Nó hoạt động. :) – Casteurr

2

Ngoài ra, bạn có thể làm điều đó bằng cách sử dụng vĩ mô. Nhập qa ở chế độ thông thường để bắt đầu ghi macro trong đăng ký a. Sau đó nhập 0elDj để xóa mọi thứ trên dòng hiện tại nhưng từ đầu tiên và chuyển sang dòng tiếp theo. Nhập q lần nữa để kết thúc ghi macro.

Bây giờ bạn có thể kích hoạt macro trên bất kỳ dòng nào bằng @a. Chạy :%norm! @a để áp dụng macro cho mọi dòng trong bộ đệm.

Bằng cách này bạn có thể lặp lại bất kỳ thao tác phức tạp nào mà bạn muốn, không chỉ thay thế. Tôi yêu macro :)

EDIT: Lưu ý rằng nó không hoạt động khi một dòng có ít hơn 2 ký tự. Vì lý do này, đây thường không phải là cách tiếp cận tốt nhất cho vấn đề này.

6

Một giải pháp mạnh mẽ hơn là lọc thông qua một chương trình thực sự tốt ở các loại thao tác sau: awk.

Giả sử bạn đã có nội dung này:

one two three 

    four five 
      six 

Run :%!awk '{print $1}' và bạn sẽ nhận được:

ký tự phân cách lĩnh vực mặc định
one 

four 
six 

awk 's là một không gian, mặc dù bạn có thể thay đổi nó để bất cứ điều gì bạn muốn, tùy thuộc vào những gì bạn cần.

+0

Chắc chắn là công cụ thích hợp. làm việc tốt cho tôi. – yantaq