จัดเรียงคอลัมน์โดยไม่เปลี่ยนคอลัมน์อื่น


10

ฉันเพิ่งทราบ!เทคนิคการกรองและฉันรักมัน น่าเสียดายที่ฉันไม่สามารถใช้งานได้ในโหมดบล็อกภาพ หวังว่าผู้เชี่ยวชาญบางคนที่นี่จะช่วยฉันออก

โดยทั่วไปฉันต้องการเรียงลำดับคอลัมน์เช่นที่สามด้านล่าง (เพียง MWE) และฉันไม่ต้องการรบกวนคอลัมน์อื่น ๆ เมื่อฉันจัดเรียง

ฉันพยายามกรอง ( !) คอลัมน์ที่สามที่มองเห็น (บล็อกโหมด) เลือกคอลัมน์ผ่านsortยูทิลิตี้ แต่การเรียงลำดับค่อนข้างขยายเกินกว่าการเลือกนั่นคือทุกแถวจะถูกสลับสับเปลี่ยนไม่ใช่แค่ส่วนที่เลือกซึ่งเรียงลำดับเกินไปตามคอลัมน์แรก !

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

ฉันเลือกคอลัมน์สุดท้ายโดยใช้ visual-block และพูดว่าอะไร!sort --reverseจะปรากฏ

'<,'>!sort --reverse

และผลลัพธ์ก็แปลกที่ตรงข้ามกับที่ฉันคาดไว้ ผลลัพธ์มีทั้งแถวที่เรียงลำดับ / สลับไม่ใช่แค่หนึ่งคอลัมน์และนั่นก็ขึ้นอยู่กับคอลัมน์แรกโดยไม่คำนึงถึงการเลือกคอลัมน์ที่สามของฉัน!

 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   

ยกเว้นกรณีที่เป็นไปไม่ได้อย่างอื่นผมอยากจะเป็นทางออกที่เป็นกลุ่ม + การจัดเรียงบริสุทธิ์มากกว่าเครื่องมือค่อนข้างขั้นสูงเช่น/sed awkสิ่งสำคัญคือต้องรู้จักตัวเองว่าโหมดบล็อกภาพนั้น จำกัด เมื่อเทียบกับโหมดภาพอย่างไร


สิ่งนี้ไม่ได้แก้ปัญหาของคุณ แต่โปรดทราบว่ามีsortคำสั่งภายในเป็นกลุ่มดังนั้นคุณไม่จำเป็นต้องเรียกใช้ภายนอก!sortเพื่อทำการเรียงลำดับปกติ
Dalker

2
ตัวกรองทำงานบนบรรทัดเท่านั้น
romainl

@Dalker ใช่ขอบคุณ แต่ฉันลองแล้วซึ่งให้ผลคล้ายกัน
รักความน่าจะเป็น

@ มันเป็นเรื่องจริงเหรอ? ไม่มีรังสีแห่งความหวัง? ฉันไม่ค่อยพบว่าเกิดขึ้นกับกลุ่ม !! แต่ถึงกระนั้นมันก็ไม่แปลกที่จะพูดว่า "ตัวกรองทำงานได้เฉพาะบนบรรทัด " หลังจากที่คุณเลือกอย่างอื่นและไม่มีสัญญาณของปัญหาจนกว่าจะมีเอาต์พุต ถ้ามันไม่ปรากฏคำเตือน / ข้อผิดพลาดฉันก็จะเถียงว่ามันเป็นข้อผิดพลาด
รักความน่าจะเป็น

แมลง? ฮ่า ๆ ๆ พฤติกรรมนี้ไม่เพียง แต่ทำเป็นเอกสาร ( :help filter) แต่ยังเป็นมาตรฐาน (ขออภัยฉันไม่ทราบวิธีการเชื่อมโยง POS ลึก ๆ ) คุณไม่สามารถบ่นถ้าคุณไม่ RFTM
romainl

คำตอบ:


9

ฉันคิดว่าความหวังที่ดีที่สุดของคุณคือปลั๊กอินvis.vim ปลั๊กอินนี้ให้คำสั่งBที่อนุญาตให้ใช้คำสั่งกับบล็อก

ที่นี่หลังจากติดตั้งปลั๊กอินคุณจะต้องเลือกบล็อกของคุณแล้วใช้:

:'<,'>B !sort

โปรดทราบว่าคำสั่งสามารถเป็นอะไรก็ได้ดังนั้นแทนที่จะเป็นเช่นนั้น!sortคุณสามารถทำการประมวลผลอื่น ๆ บนบล็อกได้เช่นบันทึกไปยังไฟล์อื่น ( :'<,'>B w foo.txt) หรือใช้การแทนที่ ( :'<,'>B s/foo/bar/g)


1
@LoveProbability หากคุณพยายามจัดเรียงคอลัมน์ที่สามโดยไม่เปลี่ยนสองคอลัมน์แรกเธรดนี้อาจมีประโยชน์
Jair López

@ JairLópezไม่มีความผิดมันเป็นเรื่องตลกจริงๆที่คนอื่นคัดลอกคำถามของฉันไปยังที่อื่นที่ซึ่งเขาถูกขอให้กลับไปที่แหล่งต้นฉบับ (เช่นหน้านี้ที่ด้านข้างของสำเนาของคำตอบนี้ rephrased) และในที่สุด คุณขอให้ฉันไปหาคำตอบที่นั่น
รักความน่าจะเป็น

ขอบคุณสำหรับความคิดเห็นของคุณฉันทำเพราะ (1) ทั้งคำถามของคุณและคำตอบนี้น่าสนใจ (2) บางทีคุณอาจไม่ได้อยู่คนเดียวและอาจมีคนสนใจมากขึ้น (3) นี่เป็นโอกาสที่ดีในการช่วยให้ใครบางคนเข้าใจวิธีการ$ใช้งานในโหมดภาพบล็อก
Jair López
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.