मैं विम रजिस्टरों का उपयोग कैसे करूं?


925

मुझे केवल रजिस्टरों का उपयोग करने वाले एक उदाहरण के बारे में पता है, CtrlR*जिससे मैं क्लिपबोर्ड से टेक्स्ट पेस्ट करता हूं।

रजिस्टरों के अन्य उपयोग क्या हैं? उनका उपयोग कैसे करें?

VI रजिस्टरों के बारे में सब कुछ आप जानते हैं (आइए vi 7.2 पर ध्यान केंद्रित करें) - हमारे साथ साझा करें।


22
मैंने रजिस्टरों के उपयोग पर वहां एक लंबा जवाब दिया
बेनोइट

जवाबों:


1185

विम में रजिस्टर आप उनके भीतर संग्रहीत पाठ पर कार्रवाई या आदेश चलाते हैं। रजिस्टर तक पहुंचने के लिए, आप "aएक कमांड से पहले टाइप करते हैं , जहां aएक रजिस्टर का नाम है। यदि आप वर्तमान लाइन को रजिस्टर में कॉपी करना चाहते हैं k, तो आप टाइप कर सकते हैं

"kyy

या आप एक बड़े अक्षर का उपयोग करके एक रजिस्टर में संलग्न कर सकते हैं

"Kyy

फिर आप दस्तावेज़ के माध्यम से आगे बढ़ सकते हैं और इसका उपयोग करके कहीं और पेस्ट कर सकते हैं

"kp

लिनक्स पर सिस्टम क्लिपबोर्ड से चिपकाने के लिए

"+p

विंडोज पर सिस्टम क्लिपबोर्ड से पेस्ट करना (या लिनक्स पर "माउस हाइलाइट" क्लिपबोर्ड से)

"*p

वर्तमान में सभी पंजीकृत रजिस्टरों के प्रकार तक पहुँचने के लिए

:reg

165
और "+एक विशेष रजिस्टर है जो सिस्टम क्लिपबोर्ड को संदर्भित करता है।
एरोन मैकडैड

17
विंडोज में, क्लिपबोर्ड के साथ पहुँचा जा सकता है "*; इसलिए फाइल के अंत तक कॉपी करने की कमांड है "*yG
आदित्य एमपी

44
एक्स (लिनक्स, संभवतः ओएस-एक्स) में *भी, "माउस हाइलाइट" क्लिपबोर्ड है, और +Ctrl-XCV क्लिपबोर्ड है।
डॉटनकोहेन

20
क्या क्लिपबोर्ड रजिस्टर में जोड़ने का कोई तरीका है (क्योंकि कोई पूंजी नहीं है +)?
15

8
@dotancohen तकनीकी रूप से इसे प्राथमिक चयन कहा जाता है, लेकिन मुझे लगता है कि "माउस हिगलाइट" लोगों के लिए आसान है :)
kyrias

783

जब मैंने 0रजिस्टर की खोज की तो मुझे खुशी हुई । यदि आप किसी विशेष रजिस्टर में असाइन किए बिना टेक्स्ट को यैंक करते हैं, तो इसे 0रजिस्टर को सौंपा जाएगा , साथ ही साथ डिफ़ॉल्ट "रजिस्टर में सहेजा जाएगा । 0और के बीच का अंतर" रजिस्टर के है कि 0केवल yanked पाठ के साथ आबादी है, जबकि डिफ़ॉल्ट रजिस्टर भी d/ D/ x/ X/ c/ C/ s/ Sआदेशों का उपयोग कर हटाए गए पाठ के साथ आबादी है ।

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

  • जिस पाठ को आप कॉपी करना चाहते हैं, उसे Yank करें y[motion]- यह पाठ अंदर "और 0रजिस्टर में सहेजा गया है
  • उस पाठ को हटाएं जिसे आप बदलना चाहते हैं d[motion]- यह पाठ "रजिस्टर में सहेजा गया है
  • के साथ yanked पाठ चिपकाएँ "0p

"अगले कमांड के लिए रजिस्टर का उपयोग करने की आज्ञा कहां है।

अंतिम चरण पर, यदि आप डिफ़ॉल्ट रजिस्टर (साथ p) से पेस्ट करना चाहते थे, तो यह उस पाठ का उपयोग करेगा जिसे आपने अभी हटा दिया था (शायद आपका इरादा नहीं था)।

ध्यान दें कि pया Pडिफ़ॉल्ट रजिस्टर से चिपकाता है। लंबे समय के बराबर होगा ""p(या""P ) और "0अंतिम"1 रखता है, अंतिम हटाता है या बदलता है।

अधिक जानकारी के लिए देखें :help registers


17
pया Pडिफ़ॉल्ट रजिस्टर से चिपकाता है। लॉन्गहैंड समतुल्य ""p(या ""P) होगा।
नेलस्ट्रॉम

186
वैसे, "0 अंतिम यैंक रखता है," 1 अंतिम डिलिट या परिवर्तन रखता है।
फायरअफिस

6
"अगले आदेश के लिए एक रजिस्टर का उपयोग करने के लिए आदेश है। तो ""pप्रयोग करेंगे "पेस्ट आदेश के लिए रजिस्टर और "0pप्रयोग करेंगे 0रजिस्टर।
रेमन मार्को एल नवारो

5
0pइसका मतलब होगा कि वर्तमान लाइन के पहले चरित्र पर जाएं और डिफ़ॉल्ट रजिस्टर ( ") की सामग्री से पेस्ट करें । "pएक अधूरी कमांड होगी क्योंकि आपको यह निर्दिष्ट करने की आवश्यकता है कि रजिस्टर के pलिए किस कमांड का उपयोग करना है।
रेमन मार्को एल नवारो

15
उसी तरह "1 अंतिम डिलीट रखता है," 2 दूसरा आखिरी डिलीट रखता है, "3 तीसरा आखिरी हिस्सा रखता है, आदि" 9 तक
जेम्स

330

रजिस्टरों के बारे में मेरे पसंदीदा भागों में से एक उन्हें मैक्रोज़ के रूप में उपयोग कर रहा है!

मान लें कि आप टैब-सीमांकित मान फ़ाइल के साथ काम कर रहे हैं:

ID  Df  %Dev    Lambda
1   0   0.000000    0.313682
2   1   0.023113    0.304332
3   1   0.044869    0.295261
4   1   0.065347    0.286460
5   1   0.084623    0.277922
6   1   0.102767    0.269638
7   1   0.119845    0.261601

अब आप तय करते हैं कि आपको% देव क्षेत्र के अंत में एक प्रतिशत चिन्ह जोड़ने की आवश्यकता है (दूसरी पंक्ति से शुरू)। हम एक साधारण मैक्रो बनाते हैं (मनमाने ढंग से चयनित) mरजिस्टर निम्नानुसार है:

  1. प्रेस:: रजिस्टर के qmतहत मैक्रो रिकॉर्ड करना शुरू करने के लिए m

  2. EE: तीसरे कॉलम के अंत में जाएं।

  3. a: इस कॉलम के अंत में जोड़ने के लिए मोड डालें।

  4. %: वह प्रतिशत चिह्न लिखें जिसे हम जोड़ना चाहते हैं।

  5. <ESC>: कमांड मोड में वापस जाएं।

  6. j0: अगली पंक्ति की शुरुआत में जाएं।

  7. q: रिकॉर्डिंग मैक्रो बंद करो

अब हम @mइस मैक्रो को चालू लाइन पर चलाने के लिए टाइप कर सकते हैं । इसके अलावा, हम @@दोहरा सकते हैं , या100@m 100 बार ऐसा ! जीवन बहुत अच्छा लग रहा है।

इस बिंदु पर आपको यह कहना चाहिए, " लेकिन, यह क्या है, जो इस तरह से काम करता है ?"

बहुत बढ़िया बिंदु। mटाइप करके रजिस्टर की सामग्री में क्या है, इसकी जांच करते हैं "mp। फिर हमें निम्नलिखित मिलते हैं:

EEa%<ESC>j0

पहले ऐसा लगता है कि आपने गलती से नोटपैड में एक बाइनरी फ़ाइल खोली है, लेकिन दूसरी नज़र में, यह हमारे मैक्रो में पात्रों का सटीक अनुक्रम है!

आप एक जिज्ञासु व्यक्ति हैं, तो चलिए कुछ दिलचस्प करते हैं और !बोरिंग पुराने के बजाय सम्मिलित करने के लिए पाठ की इस पंक्ति को संपादित करते हैं %

EEa!<ESC>j0

फिर इसे nटाइप करके रजिस्टर में जमा करें B"nyE। फिर, केवल किक के लिए, आइए nमैक्रो को अपने डेटा की एक लाइन पर चलाएं @n

ओएमजी, आईटी एडेड ए !

अनिवार्य रूप से, मैक्रो को चलाना उस मैक्रो के रजिस्टर में कुंजियों के सटीक अनुक्रम को दबाने जैसा है। यदि यह एक शांत रजिस्टर चाल नहीं है, तो मैं अपनी टोपी खाऊंगा।


65
यह पूरी तरह से महत्वपूर्ण है। मैंने अब तक ध्यान नहीं दिया है कि रजिस्टर मैक्रो बफ़र्स के समान हैं। इसका मतलब है कि आप अपने सभी मैक्रोज़ को टेक्स्ट में स्टोर कर सकते हैं, उन्हें यैंक कर सकते हैं और उन्हें चला सकते हैं। बहुत अच्छा, और थोड़ा अजीब। बहुत विम।
n

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

1
आप अगली पंक्ति में पहले गैर रिक्त वर्ण पर जाने के +बजाय उपयोग कर सकते हैं j0
गोकुल

100

अन्य उपयोगी रजिस्टर:

"*या "+- सिस्टम क्लिपबोर्ड की सामग्री

"/ - अंतिम खोज आदेश

": - अंतिम आदेश।

विम मैक्रोज़ के साथ ध्यान दें, आप उन्हें संपादित कर सकते हैं, क्योंकि वे मैक्रो रिकॉर्ड करते समय उपयोग किए गए कीस्ट्रोक्स की एक सूची हैं। तो अगर आप किसी पाठ फ़ाइल में मैक्रो लिख सकते हैं (का उपयोग कर "apमैक्रो लिखने के लिए एक और संपादित उन्हें, और उनके साथ एक रजिस्टर में लोड) "ay$। उपयोगी मैक्रोज़ के भंडारण का अच्छा तरीका है।


6
OSX पर डिफ़ॉल्ट विम में "* एकीकरण शामिल नहीं है। आप homebrew-alt से एक संस्करण स्थापित कर सकते हैं जो करता है। साथ की जाँच करें vim --version- -clipboardइसका मतलब है कि आपके पास यह नहीं है, +clipboardइसका मतलब है कि आप करें।
जेवियर शाय

15
X11 में, "*और "+यहां तक ​​कि कूलर हैं: "+पिछले पाठ को कॉपी ctrl+c(कॉपी बफर), या कभी भी आपके द्वारा उपयोग किए जाने वाले शॉर्टकट (या right-click>copy) से चिपकाते हैं । "*माउस (चयन बफर) के साथ हाइलाइट किए गए अंतिम पाठ को चिपकाता है। इसलिए यदि आप कुछ कॉपी करते हैं ctrl+c, और फिर माउस के साथ कुछ और हाइलाइट करते हैं, तो आप चुन सकते हैं कि किसे पेस्ट करना है। यह विंडोज में काम नहीं करता है, जहां ये दो रजिस्टर पर्यायवाची हैं।
n

1
तुम्हें आशीर्वाद दे, मैं तलाश रहे हैं "*और "+साल के लिए! मुझे लगा कि सिस्टम क्लिपबोर्ड पर केवल gvim की पहुंच थी, लेकिन जाहिर है कि नियमित vim भी करता है!
टार्च ऑश

@ टार्च यदि आप gvim के बजाय कंसोल vim का उपयोग करते हैं, तो आप अधिक चीजों की खोज करेंगे। मुझे लगता है। # fimode पर भी जाएँ!
त्रिकुट्र

1
कैसे अगर एक गुण को सक्षम करने -xterm_clipboardपर vim --version। कोई सरल पैकेज स्थापित करने के लिए? (Debian / apt-get)। धन्यवाद।
डॉ। बीको

77

ब्लैक होल रजिस्टर _ है/dev/null रजिस्टरों की।

मैं डिफ़ॉल्ट रजिस्टर को अपडेट किए बिना एकल वर्णों को हटाने की अनुमति देने के लिए अपने vimrc में इसका उपयोग करता हूं:

noremap x "_x

और डिफ़ॉल्ट रजिस्टर अपडेट किए बिना विजुअल मोड में पेस्ट करने के लिए:

vnoremap p "_dP

दूसरी मैपिंग भी बहुत उपयोगी है। एक स्पष्टीकरण के लिए यहाँ देखें: marcorucci.com/blog/#visualModePaste
mrucci

21
के लिए मानचित्रण xआकर्षण को स्थानांतरित करने के लिए कम सुविधाजनक हो जाता है।
स्कीप

दबाने वाली x आपके द्वारा छोड़ी गई अंतिम चीज़ को मिटा नहीं पाती है, जिसे आप रजिस्टर में पाएंगे। कुछ बार xa दबाएं, फिर "0p को आपके द्वारा
फेंके

2
ऊपर स्कीप की टिप्पणी पर विस्तार करने के लिए: इस xमैपिंग के साथ आप xpवर्तमान को अगले वर्ण के साथ स्विच करने के लिए "कमांड" नहीं कर सकते । टाइपो फिक्स के लिए काफी उपयोगी। हमें Xpपिछले चरित्र के साथ वर्तमान को भी स्विच करना होगा।
डैनियल एंडरसन

56

यदि आप कभी भी एक पूर्व-मोड कमांड में रजिस्टर की सामग्री को पेस्ट करना चाहते हैं, तो हिट करें <C-r><registerletter>

आप इसका उपयोग क्यों करेंगे? मैं एक खोज करना चाहता था और एक लंबी स्ट्रिंग के लिए प्रतिस्थापित करना चाहता था, इसलिए मैंने इसे दृश्य मोड में चुना, खोज / प्रतिस्थापन अभिव्यक्ति टाइप करना शुरू कर दिया :%s/[PASTE YANKED PHRASE]//gऔर मेरे दिन चल गए।

यदि आप केवल एक शब्द को पूर्व मोड में चिपकाना चाहते हैं, तो यह सुनिश्चित कर सकते हैं कि पूर्व मोड में प्रवेश करने से पहले कर्सर उस पर है, और फिर <C-r><C-w>जब शब्द को पेस्ट करने के लिए पूर्व मोड में मारा जाए।


6
:कमांड लाइन में टेक्स्ट को चिपकाना सबसे अच्छी बात है जो मैंने आज सीखी है
शहबाज

1
आप इंसर्ट मोड में <CR> <
रेजिस्ट्रेशन

1
मुझे लिखना पसंद है / पहले रीजैक्स /[write out your regex]<cr>को बदलना और फिर सिर्फ बदलना s/<C-R>//replacement/। इस तरह आपको रिप्लेसमेंट चलाने से पहले अपने रेगेक्स पर लाइव फीडबैक का लाभ मिलता है।
गाबेइसमैन

44

मुझे लगता है कि गुप्त गुरु रजिस्टर अभिव्यक्ति = रजिस्टर है। इसका उपयोग रचनात्मक मैपिंग के लिए किया जा सकता है।

:inoremap  \d The current date <c-r>=system("date")<cr>

आप इसे अपने सिस्टम के साथ संयोजन के रूप में उपयोग कर सकते हैं या कस्टम विम कार्यों आदि से प्रतिक्रिया प्राप्त कर सकते हैं।

या सिर्फ तदर्थ सामान की तरह

<c-r>=35+7<cr>

3
([अभिव्यक्ति रजिस्टर का उपयोग करने पर वीडियो] डेरेक व्याट की जाँच करें derekwyatt.org/vim/vim-tutorial-videos/... )
Jeromy Anglim

1
@JeromyAnglim का लिंक अब यहाँ है: derekwyatt.org/vim/tutorials/advanced/#expression-register
Djizeus

39

"1pअंतिम डिलीट / चेंज को पेस्ट करने के लिए एक कूल ट्रिक का उपयोग किया जाता है (और फिर बाद के डिलीट .को पेस्ट करने के लिए बार-बार उपयोग किया जाता है। दूसरे शब्दों में, "1p...मूल रूप से इसके बराबर है "1p"2p"3p"4p

आप इसे मुट्ठी भर लाइनों को रिवर्स-ऑर्डर करने के लिए उपयोग कर सकते हैं: dddddddddd"1p....


अहा यह शानदार है। हालांकि मैं वास्तव में चाहता हूं कि
येंक्स के

18

विम के सहायता पृष्ठ से:

CTRL-R {0-9a-z"%#:-=.}                  *c_CTRL-R* *c_<C-R>*
        Insert the contents of a numbered or named register.  Between
        typing CTRL-R and the second character '"' will be displayed
        <...snip...>
        Special registers:
            '"' the unnamed register, containing the text of
                the last delete or yank
            '%' the current file name
            '#' the alternate file name
            '*' the clipboard contents (X11: primary selection)
            '+' the clipboard contents
            '/' the last search pattern
            ':' the last command-line
            '-' the last small (less than a line) delete
            '.' the last inserted text
                            *c_CTRL-R_=*
            '=' the expression register: you are prompted to
                enter an expression (see |expression|)
                (doesn't work at the expression prompt; some
                things such as changing the buffer or current
                window are not allowed to avoid side effects)
                When the result is a |List| the items are used
                as lines.  They can have line breaks inside
                too.
                When the result is a Float it's automatically
                converted to a String.
        See |registers| about registers.  {not in Vi}
        <...snip...>

17
  • q5 रिकॉर्ड 5 में संपादित होता है (अगली q रिकॉर्डिंग बंद हो जाती है)
  • : reg सभी रजिस्टर और उनमें कोई भी सामग्री दिखाते हैं
  • @ 5 निष्पादित रजिस्टर 5 मैक्रो (रिकॉर्ड किए गए संपादन)

15
मुझे मैक्रोज़ (तीन कीस्ट्रोक) लॉन्च करने की @ कुंजी पसंद नहीं है। इसलिए मैंने रजिस्टर q में संग्रहीत मैक्रो को लॉन्च करने के लिए F2 को मैप किया है: nmap <F2> @q मैं रजिस्टर q का उपयोग करता हूं, क्योंकि तब F2 के लिए मैक्रो को प्लेबैक के लिए सहेजने के लिए, मैं सिर्फ हिट करता हूं qq। शीघ्र मैक्रो सहेजें और फिर से खेलना।
लेडी पंजकोव

16

मैं माउस के लिए पहुंचने के बिना अपनी विम विंडो में पाठ के लिए grep करने के लिए डिफ़ॉल्ट रजिस्टर का उपयोग करता हूं।

  1. यान पाठ
  2. :!grep "<CTRL-R>0"<CR>

12

के साथ आदेशों में रजिस्टरों का उपयोग करें@ । उदाहरण के लिए:

echo @a
echo @0
echo @+

उन्हें कमांड में सेट करें:

let @a = 'abc'

अब "apपेस्ट करेंगे abc


8

भ्रम का एक बड़ा स्रोत डिफ़ॉल्ट रजिस्टर है "। इसके काम करने के तरीके को जानना जरूरी है। डिफ़ॉल्ट रजिस्टर को ज्यादातर बार टाला जाए तो ज्यादा बेहतर है। विम प्रलेखन से स्पष्टीकरण:

Vim fills this register with text deleted with the "d", "c", "s", "x" commands
or copied with the yank "y" command, regardless of whether or not a specific
register was used (e.g.  "xdd).  This is like the unnamed register is pointing
to the last used register.

तो डिफ़ॉल्ट रजिस्टर वास्तव में पिछले इस्तेमाल किए गए रजिस्टर का एक संकेतक है। जब आप हटाते हैं, या कुछ करते हैं तो यह रजिस्टर अन्य रजिस्टरों की ओर इशारा करता है। आप रजिस्टर की जाँच करके देख सकते हैं। हमेशा एक और रजिस्टर होता है जो बिल्कुल डिफ़ॉल्ट रजिस्टर के समान होता है: यैंक रजिस्टर ( "0), पहला डिलीट रजिस्टर ( "1), छोटा डिलीट रजिस्टर ( "-) या कोई अन्य रजिस्टर जो डिलीट करने या यांक करने के लिए इस्तेमाल किया जाता था।

एकमात्र अपवाद ब्लैक होल रजिस्टर है। विम डॉक्टर कहते हैं:

An exception is the '_' register: "_dd does not store the deleted text in any
register.

: आमतौर पर आप ज्यादा बेहतर बंद सीधे का उपयोग करके कर रहे हैं "0, "-और "1-"9डिफ़ॉल्ट रजिस्टर या नामित रजिस्टरों।


8

एक अनदेखी रजिस्टर 'है।' डॉट रजिस्टर जिसमें अंतिम सम्मिलित पाठ होता है, चाहे वह कैसे भी सम्मिलित किया गया हो उदाहरणार्थ ct] (तब तक परिवर्तन)। तब आपको पता चलता है कि आपको इसे कहीं और सम्मिलित करने की आवश्यकता है लेकिन डॉट रिपीट विधि का उपयोग नहीं कर सकते।

 :reg .
 :%s/fred/<C-R>./

7

मेरा पसंदीदा रजिस्टर ':'रजिस्टर है। @:नॉर्मल मोड में चलने से मुझे पहले से चले आ रहे पूर्व कमांड को दोहराने की अनुमति मिलती है।


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