Tôi sẽ sử dụng sức mạnh của macro Vim.
Giả sử bạn không có bất kỳ nhân viên nào khác trong tệp của bạn ngoại trừ hồ sơ và hồ sơ đầu tiên bắt đầu trên dòng đầu tiên. Và rằng bạn không có bắt đầu cấp 1 và kết thúc trên cùng một dòng. Và tất cả {} của bạn đều phù hợp.
Chuyển đến mục đầu tiên và ghi lại một macro để đăng ký một (qa
- bắt đầu ghi q
- stop)
/{^MV%k:s/\n/EEEEEE/^Mj^
mỏ Sao chép hoặc tốt hơn kỷ lục đó cho mình: (^ M - viết tắt của literal nhập)
- /{^ M tìm tới {
- V% k chọn dòng vise đến hết cấp 1 nhưng không phải là dòng kết thúc với}}}
- : s/\ n/EEEEEE/^ M thay đổi ký hiệu 'cuối dòng' thành một số chuỗi duy nhất bên trong lựa chọn
- j^chuyển một dòng xuống và để xin dòng trong trường hợp bản ghi trước có không gian hàng đầu.
Chạy macro bắt đầu từ dòng thứ hai (giả sử rằng lần đầu tiên được xử lý khi bạn đã ghi macro.) Ở chế độ bình thường 100000 @ a - sử dụng số bất kỳ lớn hơn số lượng hồ sơ của bạn. Macro sẽ tự dừng khi tất cả các dòng được xử lý nếu bản ghi đầu tiên nằm trong dòng đầu tiên của tệp. Như một tác dụng phụ, nó sẽ trực quan chọn dòng đầu tiên - bỏ chọn nó.
Sắp xếp các tập tin
:sort
Restore cuối dòng: :% s/EEEEEE/^ M/g
Note^M nên đen nhập. Để nhập, hãy sử dụng Ctrl-V Nhập
Tính năng này hoạt động với các cấp lồng nhau vì% chuyển đến kết thúc phù hợp}. Đó là lý do tại sao điều quan trọng là bạn có tất cả {} phù hợp tốt.
Macro sẽ dừng khi không thể đi lên với k
đó là lý do tại sao bạn phải có bản ghi đầu tiên trên dòng đầu tiên. Dòng trống hoặc bất kỳ thứ gì không phải là bản ghi giữa các bản ghi sẽ bị macro bỏ qua.
Phương thức trên sẽ hoạt động tốt cho tệp của bạn. Nếu bạn muốn có một cách tiếp cận tổng quát hơn với nếp gấp sau đó sử dụng các lệnh sau trong vĩ mô thay vì/{và%
Thứ nhất mở tất cả các nếp gấp
zj - đi đến sự bắt đầu của lần mở tiếp theo
] z - chuyển đến cuối màn hình hiện tại.
Phần còn lại của macro giống nhau. Phương pháp này tổng quát hơn nhưng tôi thấy nó kém đáng tin cậy hơn vì nó phụ thuộc vào tất cả các nếp gấp, gấp cho phép và vân vân.