लाइनों की सीमा के बराबर दूरी


84

मैं एक C # डेवलपर हूं जिसने अभी हाल ही में मेरे लिए उपलब्ध उपकरणों के अपने ज्ञान का विस्तार करने का निर्णय लिया है। पहला उपकरण जो मैंने सीखने का फैसला किया है वह है Vi / Vim। अब तक सब कुछ ठीक चल रहा है, लेकिन कुछ सवाल हैं जिनका जवाब मुझे नहीं मिल रहा है:

  1. चलो कहते हैं कि मैं लाइनों की एक श्रृंखला के लिए करना चाहता था। मुझे पता है कि ऐसा करने के कई तरीके हैं, लेकिन मैं इसे पंक्ति संख्या द्वारा करना चाहूंगा। मुझे लगा कि यह उसी तरह होगा जैसे विकल्प कमांड काम करते हैं, कुछ इस तरह 81,91y। क्या इसे करने का कोई तरीका है?

  2. मैं gसामान्य मोड में कमांड के बारे में थोड़ा भ्रमित हूं । यह चीजों का असंख्य काम करता है और मैं वास्तव में यह निर्धारित नहीं कर सकता कि जी कमांड इसके मूल में क्या करता है। मैं इस बात पर असमंजस में हूँ कि क्या यह एक सामान्य कमांड के माध्यम से चलाए गए अन्य कमांड के लिए एक गति कमांड या एक प्रकार का "कैच ऑल" है। क्या कोई कृपया इसे समझा सकता है या मुझे ऐसे संदर्भ की ओर संकेत कर सकता है जो gकमांड की अच्छी व्याख्या देता है ?


1
क्या आप vim (1) में कमांड ": हेल्प" के बारे में जानते हैं?
स्टीव एममरसन

हां, लेकिन मैं सभी संदर्भों में इसे खोजने में असमर्थ था। यह पता चला है कि मैं सोच रहा था कि मैं इसे सामान्य मोड से करूंगा, लेकिन होमटॉस्ट ने दिखाया कि इसे कमांड मोड से कैसे करना था। जी कमांड के लिए, मुझे बस इतना लगता है कि मदद सब कुछ एक साथ बाँध नहीं सकती है जैसा कि मैं अन्य कमांड से उम्मीद कर रहा हूँ।
jnadro52

3
एक तरफ के रूप में, मैं आपको प्रति प्रश्न एक पोस्ट करना चाहूंगा।
दाना

1
मैं भविष्य में ऐसा करूंगा। मैं पहले प्रश्न से अधिक चिंतित था, मैंने दूसरे के बारे में सोचा जैसे मैं पहले टाइप कर रहा था।
jnadro52

जवाबों:


140

याँक लाइनें 81-91

:81,91y<enter>

यदि आपकी उंगलियां पसंद :और ,चाबी ढूंढना पसंद नहीं करती हैं , तो यह भी काम करेगा (पंक्ति 81 पर जाएं, 11 पंक्तियों को छोड़ें)

81gg11yy 

मेरा एकमात्र उपयोग gहै 5gg। 5 वीं पंक्ति में जाने के लिए। 22gg: 22 वीं पंक्ति। जैसा कि जिम्बो ने कहा, यह वास्तव में केवल कुछ अन्य कमांड के लिए एक संशोधक है।

पूर्णता के लिए, ( http://vim.wikia.com/wiki/Power_of_g ) gकमांड मोड में काम करने के तरीके के बारे में बहुत कुछ बताता है।


2
बड़े अक्षरों का उपयोग करने से भिन्नताएं भी मिलती हैं: ggपहली पंक्ति में Gजाएंगे , जबकि अंतिम पर जाएंगे। इसके अलावा, 5Gलाइन 5 पर जाता है। मार्क्स का इस्तेमाल लाइन नंबरों के बदले भी किया जा सकता है (मैक्रों के लिए अच्छा), यानी: :'a,52y
NVRAM

1
यदि आप Shift कुंजी से डरते नहीं हैं, 81G11Yतो यह "छोटा" भी है।
Jens

1
सामान्य मोड विधि का नकारात्मक पक्ष यह है कि आप अपना "स्थान" खो देते हैं; आप mxपहले और 'xबाद में परिकल्पना कर सकते हैं लेकिन फिर कमांड मोड संस्करण बहुत अधिक सफल हो जाता है। हम्म ... नहीं जल्दी ही मैंने यह लिखा था कि मैंने @Asta से जवाब देखा।
एरिक स्मिथ

1
@WilliamRoss यह वास्तव में अपने सिस्टम क्लिपबोर्ड में जरूरी नहीं कि आपके सिस्टम क्लिपबोर्ड में एक बफर में उपयोग के लिए लाइनें डालता है, जहां आप CTRL + V के साथ नोटपैड को कह सकते हैं। संबंधित प्रश्न देखें: vi से विभिन्न अनुप्रयोगों के लिए पाठ की प्रतिलिपि / पेस्ट कैसे करें
hometoast

1
यह मुझे उत्साहित करता है क्योंकि पहला कारण जो मैंने पहले समाधान के लिए खोजा था वह था कि लाइनों को गिनने से बचें या मेरे सिर में एक घटाव करें।
पॉल पार्कर

22

आप 't' का उपयोग करके वर्तमान लाइनों को अपने वर्तमान कर्सर स्थान पर भी कॉपी कर सकते हैं।

:81,91t.<enter>

यह कर्सर जिस लाइन पर है, उसके नीचे 81-91 की लाइनें चिपकाएगा।

मैंने इसे http://vimcasts.org से सीखा जो कि VIM का एक उत्कृष्ट संसाधन है।


यहाँ क्या t.मतलब है?
CivFan

2
मेरी समझ से बीमार या ओ tके रूप में सोचा जा सकता है और वर्तमान लाइन का पता है। tt.
अस्त

1
@CivFan इसका एक पर्याय है:copy
डी। बेन नोबल

11

मुझे विम के रिश्तेदार लाइन नंबर विकल्प का उपयोग करना पसंद है, जिसका अर्थ है कि मैं अभी प्रवेश कर सकता हूं:

:-10,-7ya a

नाम बफर में पाठ yank करने के लिए एक।

एनबी स्पेसिफिकेशंस आपको बताएगा कि आप बफर ए की वर्तमान सामग्री के लिए क्या कर रहे हैं।

मत भूलो कि आप पाठ के ब्लॉक को कॉपी कर सकते हैं और समान आदेशों के साथ पाठ के ब्लॉक भी ले जा सकते हैं:

:-10,-7co .

इसका मतलब है कि वर्तमान लाइन के नीचे पाठ 10 लाइनों की चार पंक्तियों को कॉपी करें, और

:-10,-7mo .

का मतलब है कि मौजूदा लाइन के नीचे पाठ 10 लाइनों की चार पंक्तियों को ऊपर ले जाएं।


8

Gअगर यह एक गिनती मूल्य के साथ है आदेश, एक निश्चित लाइन नंबर करने के लिए चला जाता है। 81Gआपको लाइन 81 पर रखता है।

yआदेश, की तरह एक आंदोलन के साथ जोड़ा जा सकता है G। तो सब कुछ करने के लिए लाइन 91 तक आप उपयोग कर सकते हैं y91G

साथ में आपको मिलता है:

81Gy91G

लाइन 81 पर जाएं, फिर लाइन 91 पर जाते हुए यांक करें।


1
मैं चाह रहा हूं कि मैं इसे एक से अधिक बार बढ़ा सकूं। कुछ ऐसा है जिसने मुझे एक रजिस्टर (मेरे मामले में, रजिस्टर + यानी, क्लिपबोर्ड) में यैंक के लिए इसका उपयोग करने में मदद की:81G"+y91G
mgarey

1
@mgare लाइन रेंज सिंटैक्स का उपयोग करके सीधे रजिस्टर में जाने का कोई तरीका नहीं है? 81,91yऔर किसी तरह रजिस्टर को लक्षित करें?
19os में डिप्लोमा

1
@diplosaurus शायद, लेकिन मुझे नहीं पता। ऐसा लगता है कि एक सवाल आप vi.stackexchange.com पर पूछ सकते हैं, अगर यह एसओ पर पहले से ही या यहाँ नहीं है। मुझे दिलचस्पी होगी। मैं कोई विशेषज्ञ नहीं हूँ।
mgarey

2
@mgarey को Google खोज के साथ रचनात्मक प्राप्त करना था, लेकिन मैंने इसे यहां पाया: stackoverflow.com/questions/16225366/…:81,91y +
डिप्लोसॉरस

@diplosaurus :81,91y + काम नहीं करता है। यह :81,91y aउदाहरण के लिए अन्य रजिस्टरों के लिए काम करता है लेकिन +रजिस्टर को पसंद नहीं करता है । क्या यह निश्चित रूप से अन्य लोगों के लिए काम करता है?
ojunk

4

gअपने आप से कुछ नहीं करता है। यह एक युगल मेटा-कमांड में से एक है जो कि क्रमबद्ध-असंबद्ध कमांड का एक गुच्छा रखता है।

z अभी तक उस तरह का एक और आदेश है।


धन्यवाद। मैं अब यह समझता हूं कि इसका उपयोग विभिन्न उद्देश्यों के लिए किया जाता है। जब मैं इन साधनों को सीखने की कोशिश करता हूं, तो मैं आज्ञाओं को किसी ऐसी चीज के साथ जोड़ने की कोशिश करता हूं जिसे मैं अमूर्त कर सकूं ताकि मुझे याद रहे कि इसका सही इस्तेमाल कैसे किया जाए। ऐसा लगता है कि जी कमांड केवल उन चीजों में से एक है जिन्हें आपको ठीक से उपयोग करने के लिए याद रखने की आवश्यकता है।
jnadro52

2

विम का :help indexवर्णन इस gप्रकार है:

|g|             g{char}            extended commands, see |g| below

:help gसूची के लिए नीचे स्क्रॉल करें (या )।


1
मैं इससे परिचित था: मदद, लेकिन मैं इससे परिचित नहीं था: मदद (कमांड)। जो भविष्य में बहुत उपयोगी होगा। आपका शुक्रिया, सर।
jnadro52

2

सबसे अच्छा समाधान v दबाकर "दृश्य मोड" में प्रवेश करना होगा, और लाइनों का चयन करने के बाद बस उन्हें दबाकर y दबाएं। फिर p दबाकर कॉपी की गई लाइनों को पेस्ट करें।


असहमत हैं, लेकिन केवल बीसी दृश्य मोड कभी-कभी इतना धीमा होता है।
डी। बेन नोबल

1

:91,96y aजिसके अलावा yanks ( y) लाइनों 91 के माध्यम से रजिस्टर में a, (के साथ चिपकाया "ap), yanked लाइनों के साथ रजिस्टर करने के लिए जोड़ा जा सकता है :

:91,96y A

यानी Aरजिस्टर का कैपिटलाइजेशन aओवरराइट के बजाय रजिस्टर में एक अपेंडिंग ऑपरेशन का कारण बनता है । रजिस्टर का कैपिटलाइजेशन हमेशा इस तरह काम करता है, जैसे रजिस्टर करने के लिए :let @A=';'एपेंड करता ;हैa

वर्तमान कर्सर स्थिति के सापेक्ष प्लस (+) या माइनस (-) का उपयोग करना:

:-10,+10y b

यानी यह yवर्तमान कर्सर स्थिति के चारों ओर 21 लाइनें ( ) दर्ज करेगा और उन्हें रजिस्टर में डाल देगाb

इनपुट की अनुपस्थिति वास्तव में वर्तमान कर्सर स्थिति को भी दर्शाती है, जिसका अर्थ है कि यह:

:-5,y a

वर्तमान कर्सर स्थिति में 5 पंक्तियों से ऊपर पाठ को नामित बफर में भेज सकता है a, और:

:,+5y a

वर्तमान कर्सर स्थिति के बाद 5 पंक्तियों को बफ़र में ले जाएगा a

नोट: यदि आपके पास बफर में मैक्रो है a इसे पिछले यैंक द्वारा अधिलेखित किया गया था, क्योंकि यैंक रजिस्टर्स और मैक्रो रजिस्टर्स वास्तव में एक ही बात हैं। यही कारण है कि, संयोग से, आप एक मैक्रो पेस्ट कर सकते हैं, इसे संपादित कर सकते हैं, और फिर इसे वापस रजिस्टर में जमा कर सकते हैं। मैं व्यक्तिगत रूप से अपने बाएं हाथ द्वारा यंक्स के लिए पहुंचने वाले पत्रों का उपयोग करता हूं, और मैक्रों के लिए मेरे दाहिने हाथ से पत्र पहुंचते हैं।

चारों ओर पाठ के बढ़ते ब्लॉक, इस तरह दिखता है:

:+10,+13m.

जिसका मतलब है कि वर्तमान कर्सर के आगे 10 लाइनों को तैनात करने वाली चार लाइनों को चालू लाइन से नीचे ले जाना।

परिशिष्ट

मैं पहले भ्रम yaमें :91,95ya aथा कि किसी तरह इस बात का पर्याय बन जाऊं ya{motion}कि गति की आपूर्ति कहां से हुई 91,95। यह गलत था और "ए" yaपूरी तरह अनावश्यक है। अपने बचाव में, मैं help yankयह नहीं बताता कि yaइसका एक संभावित उपनाम है yank


1
:yaका संक्षिप्त नाम है :yank, इसलिए मुझे यकीन नहीं है कि मैं सभी लाइनों के बारे में कैसा महसूस करता हूं । लेकिन अच्छी नौकरी कुछ बिखरी हुई सूचनाओं को संघनित करती है
डी। बेन नोबल

मैंने भी ऐसा ही सोचा था, जब तक मैंने गौर नहीं किया :help yank। के लिए कोई अन्य नहीं yaहै yank। हालांकि आप सही हैं, a"सभी" के लिए खड़ा नहीं है, यह तकनीकी रूप से "ए" के लिए खड़ा है। मैं अभी भी "सभी" कहना पसंद करता हूं, क्योंकि यह मेरे लिए अधिक मायने रखता है।
पॉल पार्कर

2
:[range]y[ank] [x] Yank [range] lines [into register x]वर्ग कोष्ठक y[ank]इंगित करते [ank]हैं कि वैकल्पिक हैं। :y, :yaऔर :yanइसके लिए निहित रूप से उपनाम हैं:yank
डी बेन नोबल

मैं सही खड़ा हूं :) यह जरूरी नहीं है। प्रतिबिंबित करने के लिए उत्तर संपादित करेंगे।
पॉल पार्कर

1
आपका परिशिष्ट अच्छा है, लेकिन मैं आपकी पहली पंक्ति का उल्लेख कर रहा था, जहां आप पूर्व कमांड का उपयोग करते हैं :yaऔर सामान्य कमांड का उपयोग नहीं करते हैंy
डी बेन नोबल

0

एक लंबे समय के रूप में वीआई / विम उपयोगकर्ता मैं लाइन नंबर (या 'लाइन मार्कर') के बजाय 'निशान' का उपयोग करते हैं । यह इस तरह काम करता है: m'निशान' चरित्र है; फिर निशान की पहचान / नाम के लिए किसी भी पत्र का उपयोग करें। एक निशान पर वापस लौटने के लिए एक एकल उद्धरण ( 'a) के साथ नाम का चिह्न प्रस्तुत करें। इन चिह्नों का उपयोग सीमा के रूप में किया जा सकता है। उदाहरण:

File:
    <line 1>
    <line 2>
    <line 3>
    <line 4>
    <line 5>

कमांड मोड में कर्सर को लाइन 2 पर ले जाने पर टाइप करें ma। 4 पंक्ति पर स्क्रॉल करें, टाइप करें mb। निशान से झटका एक निशान के के प्रकार:

    :'a,'byank

मार्क से मार्क बी प्रकार को हटाने के लिए :

    :'a,'bdel

निशान से खोज करने के लिए एक निशान के और 'स्याही' के साथ 'ऑफ़लाइन' की जगह ले:

    :'a,'bs/ine/ink/g

मार्क कॉपी करने के लिए एक निशान के माध्यम से और पेस्ट वर्तमान स्थिति से नीचे ( 'डॉट' हमेशा लाइन जहां कर्सर वर्तमान स्थिति में है को संदर्भित):

    :'a,'bco . 

कोड की पाली लाइनों, निशान के बीच एक निशान के माध्यम से सही करने के लिए, एक टैब (उपयोग शेवरॉन विपरीत, <छोड़ दिया स्थानांतरित करने के लिए):

    :'a,'b> 

कमांड मोड में आप केवल 'aचिन्हित लाइन पर वापस जाने के लिए टाइप करके वापस चिह्नों पर जा सकते हैं a। टाइपिंग'' आपको पिछली स्थिति में ले जाता है (दुर्भाग्य से केवल पिछली स्थिति याद है, दो पीठ नहीं)।

आप बिना लाइन नंबर जानने की जरूरत के बिना नामित बफर्स, कॉपी, डिलीट लाइन्स, डिलीट एंड अपने कोड के कुछ हिस्सों आदि को बदल सकते हैं।


0

लाइन नंबर 81 से 91 तक लाइनों को yank करने के लिए:

दृष्टिकोण 1: 81gg11yy

बुरा नहीं है, लेकिन आपको यह पता लगाने के लिए गणित को थोड़ा कम करना होगा कि कितनी लाइनें हैं

: दृष्टिकोण 2 81ggतब shift+vतो 91ggफिरy

MY OPINION में सबसे अच्छा है क्योंकि यह सीधे आगे है, आपको केवल स्पष्ट बात पता करनी होगी अर्थात किस लाइन नंबर से किस लाइन नंबर पर आप yank करना चाहते हैं

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