Sắp xếp một cột mà không thay đổi các cột khác


10

Gần đây tôi đã nhận thức được !kỹ thuật lọc và tôi thích nó. Thật không may, tôi không thể sử dụng nó trong chế độ khối hình ảnh. Hy vọng một số chuyên gia ở đây sẽ giúp tôi ra.

Về cơ bản, tôi muốn sắp xếp tại chỗ một cột như cột thứ ba bên dưới (chỉ là một MWE). Và tôi không muốn làm phiền các cột khác khi tôi sắp xếp.

Tôi đã cố gắng lọc ( !) cột thứ ba trực quan (chế độ khối) được chọn thông qua sorttiện ích. Nhưng sắp xếp khá vượt ra ngoài lựa chọn, tức là tất cả các hàng được hoán đổi, không chỉ là lựa chọn, mà quá sắp xếp dựa trên cột đầu tiên !

1.  LARGEST         40
2.  SECOND-LARGEST  168     
3.  MID             2.8     
4.  MID             540     
5.  MID             14.84   
6.  MID             40      
7.  SECOND-LEAST    64      
8.  LEAST           8

Tôi đã chọn cột cuối cùng bằng cách sử dụng khối trực quan và cho biết !sort --reversenó hiển thị dưới dạng

'<,'>!sort --reverse

Và kết quả thật kỳ lạ trái ngược với những gì tôi mong đợi. Kết quả có toàn bộ các hàng được sắp xếp / hoán đổi, không chỉ một cột, và điều đó cũng dựa trên cột đầu tiên bất kể lựa chọn cột thứ ba của tôi!

 8.  LEAST           8    
 7.  SECOND-LEAST    64      
 6.  MID             40      
 5.  MID             14.84   
 4.  MID             540     
 3.  MID             2.8     
 2.  SECOND-LARGEST  168     
 1.  LARGEST         40   

Trừ khi không thể, tôi muốn một giải pháp vim + sort thuần túy hơn là các công cụ tương đối tiên tiến như sed/ awk. Điều quan trọng hơn là tôi phải biết bản thân mình, chế độ khối hình ảnh bị giới hạn như thế nào, so với nói, chế độ hình ảnh.


Điều này không giải quyết được vấn đề của bạn, nhưng lưu ý rằng có sẵn một sortlệnh nội bộ vim , vì vậy bạn không cần phải gọi bên ngoài !sortđể thực hiện sắp xếp thông thường.
Dalker

2
Bộ lọc chỉ hoạt động trên các dòng .
romainl

@Dalker Vâng, cảm ơn. Nhưng tôi đã thử điều đó, cho kết quả tương tự.
Yêu xác suất

@romainl Có phải vậy không? Không có tia hy vọng? Tôi hiếm khi thấy điều đó xảy ra với Vim !! Tuy nhiên, không có gì lạ khi nói "Bộ lọc chỉ hoạt động trên các dòng " sau khi bạn chọn một thứ khác và không có dấu hiệu của sự cố cho đến khi đầu ra? Nếu nó không bật cảnh báo / lỗi, tôi thậm chí sẽ lập luận rằng đó là một BUG.
Yêu xác suất

Một lỗi? Haha không. Hành vi không chỉ được ghi lại ( :help filter) mà còn được chuẩn hóa (xin lỗi, tôi không biết cách liên kết sâu với POS đó). Bạn không thể phàn nàn nếu bạn không RFTM.
romainl

Câu trả lời:


9

Tôi nghĩ hy vọng tốt nhất của bạn là plugin vis.vim . Plugin này cung cấp một lệnh Bcho phép áp dụng một lệnh cho một khối.

Tại đây sau khi cài đặt plugin, bạn sẽ chọn khối của mình và sau đó sử dụng:

:'<,'>B !sort

Lưu ý rằng lệnh có thể là bất cứ điều gì, vì vậy thay vì !sortbạn có thể thực hiện nhiều thao tác xử lý khác trên khối như lưu nó vào tệp khác ( :'<,'>B w foo.txt) hoặc áp dụng thay thế ( :'<,'>B s/foo/bar/g)


1
@LoveProbability, Nếu bạn đang cố gắng sắp xếp cột thứ ba mà không thay đổi hai cột đầu tiên của họ, chuỗi này có thể hữu ích.
Jair López

@ JairLópez Không có ý xúc phạm, thật buồn cười khi câu hỏi của tôi được ai đó sao chép sang một nơi khác, nơi anh ta được yêu cầu quay lại nguồn ban đầu (ví dụ trang này cùng với một bản sao được trả lời lại của câu trả lời này), và cuối cùng bạn yêu cầu tôi đi tìm một câu trả lời ở đó.
Yêu xác suất

Cảm ơn bạn đã nhận xét của bạn, tôi đã làm điều đó bởi vì (1) cả câu hỏi của bạn và câu trả lời này đều thú vị; (2) có thể bạn không đơn độc và có thể có nhiều người quan tâm hơn; (3) đây là một cơ hội tuyệt vời để giúp ai đó hiểu cách $sử dụng trong chế độ hình ảnh khối.
Jair López
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.