vim

2012-10-30 11 views
7

में दो कॉलम के वर्गीकरण में मैं एक मेज है कि कुछ इस तरह दिखता है:vim

 
FirstName SurName;Length;Weight; 

मैं लंबाई पर सॉर्ट करने के लिए की जरूरत है, और अगर लंबाई एक या अधिक नामों के लिए बराबर है, मैं उन सॉर्ट करने के लिए की जरूरत है वज़न। sort ni केवल लंबाई पर, मैंने sort /.\{-}\ze\dd/ भी कोशिश की, लेकिन यह भी काम नहीं किया।

किसी भी मदद की सराहना की जाएगी!

उत्तर

6

यह एक बाहरी (जीएनयू) का उपयोग कर तरह सुंदर सीधी किया जा सकता है:

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

यह कहते हैं। जो भी विम-आंतरिक कमांड आप पका सकते हैं, उससे शायद पढ़ने और याद रखना बहुत आसान है। जीएनयू पर

बहुत अधिक जानकारी तरह यहाँ: http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

1

r ध्वज के साथ प्रयास करें।

लंबाई पर

क्रमबद्ध करें:

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

भार पर क्रमबद्ध करें:

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

इस फ़्लैग के बिना, छंटाई क्या मैच है, जो एक छोटे से बोझिल हो सकता है के बाद आता है पर किया जाता है।

r ध्वज के साथ, सॉर्टिंग मैच पर ही किया जाता है जिसे परिभाषित करना आसान हो सकता है। यहां, पैटर्न लाइन के अंत में अर्धविराम से ठीक पहले 1 या अधिक अंकों की श्रृंखला से मेल खाता है। अर्धविराम द्वारा, संख्यानुसार 3 क्षेत्र से संख्यानुसार विभाजन क्षेत्रों प्रकार 2 क्षेत्र से है, तो:

+0

': sort'' का एक ही प्रभाव पड़ता है: एक कम कीस्ट्रोक के साथ :)% sort' - और सवाल यह है कि लंबाई पर सॉर्ट करने के लिए है, और अपने regex वजन से मेल खाता है। – mMontu

+0

आप निश्चित रूप से ':% sort' बनाम' क्रमबद्ध 'के बारे में सही हैं। लेकिन मैं दो आदेशों का प्रस्ताव करता हूं: एक वजन के लिए और दूसरा लंबाई के लिए। – romainl

 संबंधित मुद्दे