मैं कमांड लाइन मोड में रिश्तेदार लाइन नंबर का उपयोग कैसे करूं?


16

हाल ही में मैंने प्रैक्टिकल विम से वर्तमान स्थिति से कर्सर को स्थानांतरित किए बिना लाइनों की ब्लॉक को कॉपी या स्थानांतरित करने का एक तरीका सीखा । यह कमांड लाइन मोड में किया जाता है। जैसे

:123,133m.  # moves lines from 123 to 133 below the cursor position.

जबकि मुझे यह पसंद है, यह लंबी लाइन नंबर टाइप करने के लिए एक दर्द है, खासकर जब फ़ाइल में बहुत सारी लाइनें हैं।

कभी-कभी, स्थानांतरित करने के लिए लाइनें कर्सर के पास अपेक्षाकृत होती हैं (लेकिन मैं अपने कर्सर को स्थानांतरित नहीं करना चाहता हूं, यांक, जहां था, वापस आ जाओ, पेस्ट!)। यह बहुत अच्छा होगा यदि मैं सापेक्ष संख्याओं का उपयोग कर सकता हूं, इसी तरह हम सामान्य मोड में कैसे करते हैं। यह कहने जैसा है

5 लाइनों को स्थानांतरित करें जो वर्तमान रेखा से 10 रेखाएं यहां हैं

संक्षेप में, कमांड लाइन मोड (सामान्य मोड के समान) में सापेक्ष संख्याओं का उपयोग कैसे करें?

जवाबों:


23

अपनी लाइनों को मौजूदा एक से 15 से 10 रेखाओं के ऊपर मानते हुए, आप सापेक्ष रेखा संख्याओं का उपयोग करके आपके द्वारा अनुरोधित चीज़ों को प्राप्त कर सकते हैं:

:-10,-15m.

दुर्भाग्य से जब एक पीछे की सीमा को निर्दिष्ट करते हुए, विम आपको पुष्टि करने के लिए कहता है कि क्या आप वास्तव में चाहते थे। पुष्टिकरण चरण से बचने के लिए, आप silentअपने आदेश से पहले टाइप कर सकते हैं , या बस आगे की सीमा निर्दिष्ट कर सकते हैं:

:-15,-10m.

जैसा कि आप उम्मीद +कर सकते हैं कि वर्तमान एक से नीचे की पंक्तियों को संदर्भित करने के लिए उपयोग किया जा सकता है।

इसके साथ विस्तृत मदद ली जा सकती है:

:help cmdline-ranges

1
लेकिन मैंने कभी इस सुविधा का उपयोग नहीं किया। मैं करता हूं 15k d5j 10j P
joeytwiddle

अंतर यह है कि 15k, 5j कमांड मोड में काम करता है, और उत्तर में बताया गया एक इन्सर्ट मोड में है। इसलिए मोड के आधार पर हम उपयुक्त को चुन सकते हैं। इन्सर्ट मोड में कमांड आमतौर पर अन्य कमांड चलाने के लिए चयन मानदंड होते हैं।
Soundararajan

12

आप अपनी सीमा में हार्ड नंबरों का उपयोग कर सकते हैं:

:200,300command

या रिश्तेदार संख्या:

:-27,+46command

या मैनुअल निशान:

:'a,'bcommand

या स्वचालित निशान:

:'[,'>command

या खोज:

:?foo?,/bar/command

या लाइन शॉर्टकट:

:.,$command

या ऊपर दिए गए ट्रिक का कोई संयोजन:

:?foo?,+46command
:'a,$command
...

3

आप .-10,.+3किसी भी पूर्व कमांड, सीपी के साथ रिश्तेदार पते (जैसे ) का उपयोग कर सकते हैं । :help :range

वैकल्पिक रूप से, मेरे लाइनजगलर प्लगइन पर एक नज़र डालें ; यह लाइनों को स्थानांतरित करने या उन्हें डुप्लिकेट करने के लिए कई छोटे मैपिंग प्रदान करता है, और उन सभी मैपिंग के रूप में एक रिश्तेदार लाइन ऑफसेट लेते हैं [count]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.