vi कमांडलाइन, गोटो लाइन और कॉलम


17

मैं लंबे समय से ( emacsऔर ) के मिश्रण का उपयोग कर रहा हूं । उनमें से प्रत्येक का लाभ है। मैं प्रक्रिया जैसे संकलन से त्रुटि आउटपुट पार्स करता हूं और एक लाइन और कॉलम नंबर प्राप्त करता हूं, लेकिन मैं केवल एक लाइन और कॉलम पर सीधे जाने के लिए उपयोग कर सकता हूं :vivimemacs

emacs +15:25 myfile.xml

साथ viमैं केवल लाइन नंबर है (आदमी पेज के अनुसार)

vi +15 myfile.xml

एक पैटर्न ( vi +/pattern myfile.xml) पर स्थिति कर्सर जाने का विकल्प है जो मुझे कभी काम नहीं मिला। लेकिन इससे मुझे मदद नहीं मिलेगी क्योंकि पैटर्न हमेशा फ़ाइल में पहली घटना नहीं है।

मैं कैसे शुरू कर सकता हूं, viयह मेरी फाइल की लाइन 15 पर कॉलम 25 पर जाता है? क्या मैं -cविकल्प के साथ कुछ कर सकता हूं ?


3
आप vim में चिह्नित के बाद से, आप माना जाता है quickfixप्रणाली है, जो त्रुटियों (साथ नेविगेट की एक सूची vim के भीतर से संकलक चलाता है, त्रुटि उत्पादन को पार्स करता है, भरता है :cp, :cn, :clआदेशों), और पहले एक पर अपने कर्सर की स्थिति?
रैंडम 832

यदि आप vi में एक फ़ाइल खोलते हैं, और टाइप करें तो :15यह लाइन 15 पर जाएगी। आशा है कि यह आपकी मदद करेगा
कोड निंजा

जवाबों:


17

आप उपयोग कर सकते हैं:

vi '+normal 15G25|'  myfile.xml

2
स्पष्टीकरण: vi में अधिकांश कमांड (यानी, अधिकांश अक्षर) को एक नंबर (या रेंज) से पहले उसके डिफ़ॉल्ट व्यवहार को बदलने के लिए या इसे दोहराने के लिए (या इसे एक विशिष्ट सीमा पर लागू करने के लिए) किया जा सकता है। Vi के अंदर, कमांड मोड में, आप 15G15 लाइन 25|पर जाने के लिए और कॉल 25 पर जाने के लिए कर सकते हैं । और क्रिस्टा यह दिखाता है कि कमांड-लाइन से समान कैसे करें।
ओलिवियर दुलक

7

साथ फ़ाइल लाइन प्लगइन , तो आप बस फ़ाइल नाम के पंक्ति और स्तंभ जोड़ सकते हैं, दोनों तरह आदेशों के साथ विम और अंदर लागू जब :edit:

vim myfile.xml:15:25

यह जानने के लिए अच्छा है, लेकिन मुझे लगता है कि मैं एक उत्तर का उपयोग करूंगा जिसमें अतिरिक्त प्लगइन की आवश्यकता नहीं है
डोमिनिकन

@ मुख्य आप vim myfile.xml +15एक प्लगइन के बिना पंक्ति के लिए भी कर सकते हैं , लेकिन कॉलम नहीं, जहां तक ​​मुझे पता है
इज़ाकटा

5

सिर्फ मनोरंजन के लिए -c 'normal 14j24l'जो आपको १५ अक्षर २५ पंक्ति में रखेगा


4

मैं -cविकल्प के बारे में नहीं जानता , लेकिन आपको ऐसा करने में सक्षम होना चाहिए:

vi '+cal cursor(15,25)' myfile.xml

(सुनिश्चित करें कि आप कोष्ठक के कारण उद्धृत करें ())


cursor()कॉलम के लिए बाइट इंडेक्स का उपयोग करता है, लेकिन यह आमतौर पर एक चरित्र गणना है।
इंगो करकट

@IngoKarkat क्या वास्तव में ऐसा होता है? टेक्स्ट UTF-8 है।
डोमिनिक

2
यह गैर-एएससीआईआई पात्रों के लिए मायने रखता है, जिन्हें एक से अधिक बाइट द्वारा दर्शाया जाता है। इसके अलावा, एक टैब और नियंत्रण वर्ण आमतौर पर एक से अधिक डिस्प्ले कॉलम पर कब्जा कर लेते हैं।
इंगो करकट

2

ध्यान देने योग्य:

-c command 

स्टार्टअप पर दिए गए पूर्व कमांड को चलाएं। Vi के लिए केवल एक -c विकल्प की अनुमति है ; विम 10 तक स्वीकार करता है। इस विकल्प का एक पुराना रूप +command, अभी भी समर्थित है।

+commandएक ही एकल है ex commandका उपयोग करते समय सीमा vi

यह +/patternभी एक कमांड के साथ सीमित है vi

( विम और पूर्व संपादक से लिया गया )


1

आप अपने vimrc में निम्न कोड जोड़ सकते हैं, जब आप अपनी फ़ाइल पर वापस आते हैं, तो पुरानी स्थिति में स्वचालित रूप से वापस जाएँ:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.