2012-10-30 25 views
7

Tôi có một bảng mà trông giống như sau:Sorting trên hai cột trong vim

 
FirstName SurName;Length;Weight; 

tôi cần phải sắp xếp trên chiều dài, và nếu độ dài tương đương cho một hoặc nhiều tên, tôi cần phải sắp xếp những về trọng lượng. sort ni chỉ sắp xếp theo chiều dài, tôi đã thử sort /.\{-}\ze\dd/ điều đó, nhưng điều đó cũng không hoạt động.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

Trả lời

6

Điều này có thể được thực hiện bằng một bên ngoài (GNU) loại khá thẳng thắn:

!sort -t ';' -k 2,2n -k 3,3n 

này nói: lĩnh vực phân chia bởi dấu chấm phẩy, sắp xếp theo lĩnh vực thứ 2 về số, sau đó bởi lĩnh vực thứ 3 về số lượng. Có lẽ dễ đọc hơn và dễ nhớ hơn bất kỳ lệnh vim-internal nào mà bạn có thể nấu ăn. Thông tin

nhiều thêm về GNU loại ở đây: http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

1

Thử cờ r.

Sắp xếp trên Length:

:%sort rni /.*;\ze\d/ 

Sắp xếp trên Trọng lượng:

:%sort rni /\d+\ze;$/ 

Nếu không có lá cờ này, việc phân loại được thực hiện trên những gì đến sau trận đấu, có thể là một cồng kềnh chút.

Với cờ r, việc sắp xếp được thực hiện trên chính kết hợp có thể dễ xác định hơn. Ở đây, mẫu khớp với một chuỗi gồm 1 hoặc nhiều chữ số ngay trước dấu chấm phẩy ở cuối dòng.

+0

': sort' có cùng tác dụng của':% sort' với một ít tổ hợp phím :) - và câu hỏi là làm thế nào để sắp xếp về chiều dài, và regex của bạn phù hợp với trọng lượng. – mMontu

+0

Bạn đúng về ':% sort' so với': sort', tất nhiên. Nhưng tôi đề nghị hai lệnh: một cho trọng lượng và một cho chiều dài. – romainl