जवाबों:
हाँ। हिट Ctrl- Rतो "। यदि आपके पास शाब्दिक नियंत्रण वर्ण हैं जो आपने yanked हैं, तो उपयोग करें Ctrl- R, Ctrl- O, - "।
यहाँ एक विवरण है कि आप रजिस्टरों के साथ क्या कर सकते हैं। आप रजिस्टर के साथ क्या कर सकते हैं असाधारण है, और एक बार जब आप जानते हैं कि उनका उपयोग कैसे करना है तो आप उनके बिना नहीं रह सकते।
रजिस्टरों मूल रूप से स्ट्रिंग्स के लिए भंडारण स्थान हैं। विम के कई रजिस्टर हैं जो विभिन्न तरीकों से काम करते हैं:
0
(yank रजिस्टर: जब आप y
सामान्य मोड में उपयोग करते हैं, तो एक रजिस्टर को निर्दिष्ट किए बिना, yanked पाठ वहां जाता है और डिफ़ॉल्ट रजिस्टर पर भी जाता है),1
करने के लिए 9
(स्थानांतरण हटाने रजिस्टर, जब आप इस तरह के रूप आदेशों का उपयोग c
या d
, क्या हटा दिया गया है 1 रजिस्टर करने के लिए चला जाता है, क्या रजिस्टर 1 में था 2 रजिस्टर करने के लिए, चला जाता है आदि ),"
(डिफ़ॉल्ट रजिस्टर, जिसे अनाम रजिस्टर के रूप में भी जाना जाता है। यह वह जगह है जहां "आता है Ctrl- R, "),a
करने के लिए z
अपने स्वयं के उपयोग के लिए (पूंजीकृत A
करने Z
के लिए इसी रजिस्टरों को जोड़कर कर रहे हैं)।_
(कृत्यों की तरह /dev/null
(यूनिक्स) या NUL
(विंडोज), आप इसे लिख सकते हैं लेकिन यह खारिज हो गया है और जब आप इसे पढ़ते हैं, तो यह हमेशा खाली होता है),-
(छोटा डिलीट रजिस्टर),/
(खोज पैटर्न रजिस्टर, अद्यतन है जब आप के साथ पाठ के लिए देखो /
, ?
, *
या #
उदाहरण के लिए, आप भी इसे करने के लिए लिख सकते हैं ऐसे खोज पैटर्न बदलने के लिए),:
(स्टोर अंतिम VimL टाइप कमांड के माध्यम से Q
या :
, आसानी से),+
और *
(सिस्टम क्लिपबोर्ड रजिस्टर, आप क्लिपबोर्ड सेट करने के लिए उन्हें लिख सकते हैं और उनसे क्लिपबोर्ड सामग्री पढ़ सकते हैं):help registers
पूरा संदर्भ देखें ।
आप किसी भी समय, :registers
सभी रजिस्टरों की सामग्री को प्रदर्शित करने के लिए उपयोग कर सकते हैं। इस आदेश के लिए पर्यायवाची और आशुलिपि हैं :display
, :reg
और :di
।
सम्मिलित या कमांड-लाइन मोड में, Ctrl- Rएक रजिस्टर नाम, इस रजिस्टर की सामग्री सम्मिलित करता है। यदि आप उन्हें शाब्दिक रूप से सम्मिलित करना चाहते हैं (कोई ऑटो-इंडेंटिंग, 0x08
बैकस्पेस, आदि जैसे नियंत्रण वर्णों का कोई रूपांतरण नहीं ), तो आप Ctrl- R, Ctrl- O, रजिस्टर नाम का उपयोग कर सकते हैं । :help i_CTRL-R
अधिक संदर्भ के लिए पैराग्राफ देखें और उनका पालन करें।
लेकिन आप निम्नलिखित भी कर सकते हैं (और मैं रजिस्टरों के लिए कई उपयोग भूल गया)।
सामान्य मोड में, हिट ":p। आपके द्वारा उपयोग किए गए अंतिम आदेश को आपके बफर में चिपकाया जाता है।
आइए विघटित करें: "
एक सामान्य मोड कमांड है जो आपको यह चुनने देता है कि अगले यैंक के दौरान क्या रजिस्टर का उपयोग किया जाना है, हटाएं या पेस्ट करें। इसलिए ":कोलन रजिस्टर (अंतिम कमांड को स्टोर करना) का चयन करता है। फिर pएक कमांड है जिसे आप पहले से जानते हैं, यह रजिस्टर की सामग्री को चिपका देता है।
सीएफ :help "
,:help quote_:
आप VimL फ़ाइल का संपादन कर रहे हैं (उदाहरण के लिए .vimrc
) और अभी कुछ लाइनों को निष्पादित करना चाहते हैं yj:@"Enter:।
यहाँ, yjyanks करंट और नेक्स्ट लाइन (ऐसा इसलिए है क्योंकि j एक linewise motion है लेकिन यह इस आंसर की के दायरे से बाहर है) डिफ़ॉल्ट रजिस्टर (अनाम रजिस्टर के रूप में भी जाना जाता है) में। तब :@
Ex कमांड तर्क के रूप में दिए गए रजिस्टर में Ex कमांड को प्ले करता है, और "
यह है कि आप अनाम रजिस्टर को कैसे देखें। इस उत्तर के शीर्ष को भी देखें, जो संबंधित है।
पिछले उदाहरण से, जो कि एक सामान्य-मोड कमांड था, "
यहां इस्तेमाल किए जाने वाले भ्रम (जो एक रजिस्टर नाम है) को भ्रमित न करें "
।
सीएफ :help :@
तथा:help quote_quote
अपनी फ़ाइल में अंतिम खोज पैटर्न सम्मिलित करें मोड में, या कमांड लाइन में, Ctrl- R, के साथ डालें /।
सीएफ :help quote_/
,help i_CTRL-R
परिणाम: आपकी खोज पैटर्न रखें लेकिन एक विकल्प जोड़ें: /
Ctrl- R, / \|alternative
।
आपने दृश्य मोड में एक पंक्ति के बीच में दो शब्दों का चयन किया है, उनके साथ yanked है y
, वे अनाम रजिस्टर में हैं। अब आप नीचे एक नई लाइन खोलना चाहते हैं जहाँ आप हैं, उन दो शब्दों के साथ :pu
:। इसके लिए आशुलिपि है :put "
। :put
आदेश, कई पूर्व आदेशों की तरह, सिर्फ linewise काम करता है।
सीएफ :help :put
तुम भी कर सकते थे: :call setreg('"', @", 'V')
तब p
। setreg
समारोह रजिस्टर जिनमें से नाम (स्ट्रिंग के रूप) पहले तर्क के रूप में दिया जाता है निर्धारित करता है, दूसरा तर्क की सामग्री के साथ यह initializes (और आप नाम के साथ चर के रूप में रजिस्टर का उपयोग कर सकते @x
हैं जहां x
VimL में रजिस्टर नाम है), और इसे तीसरे तर्क में निर्दिष्ट मोड में बदल दिया जाता है, V
लिनेविज़ के लिए, ब्लॉकवाइज़ के लिए चरित्रवान और शाब्दिक के ^V
लिए कुछ भी नहीं ।
सीएफ :help setreg()
। रिवर्स कार्य हैं getreg()
और getregtype()
।
यदि आपने मैक्रो को qa
... के साथ रिकॉर्ड किया है q
, तो :echo @a
आपको बताएगा कि आपने क्या टाइप किया है, और @a
मैक्रो को फिर से चलाएंगे (शायद आप जानते थे कि दोहराए जाने वाले कार्यों से बचने के लिए बहुत उपयोगी है)
सीएफ :help q
,help @
पिछले उदाहरण से कोरोलरी: यदि आपके पास 8go
क्लिपबोर्ड है, तो @+
क्लिपबोर्ड सामग्री को मैक्रो के रूप में चलाएगा, और इस तरह आपकी फ़ाइल के 8 वें बाइट पर जाएगा। दरअसल यह लगभग हर रजिस्टर के साथ काम करेगा। यदि आपकी अंतिम सम्मिलित स्ट्रिंग dd
सम्मिलित मोड में थी, तो @.
होगा (क्योंकि .
रजिस्टर में अंतिम सम्मिलित स्ट्रिंग है) एक पंक्ति हटाएं। (विम प्रलेखन, इस संबंध में गलत है, क्योंकि यह कहा गया है कि रजिस्टरों #
, %
, :
और .
होगा के साथ ही काम p
, P
, :put
और Ctrl- R)।
सीएफ :help @
भ्रमित न करें :@
(कमांड जो एक रजिस्टर से विम कमांड निभाता है) और @
(सामान्य-मोड कमांड जो रजिस्टर से सामान्य-मोड कमांड निभाता है)।
उल्लेखनीय अपवाद है @:
। कमांड रजिस्टर में प्रारंभिक बृहदान्त्र नहीं होता है और न ही इसमें अंतिम कैरिज रिटर्न होता है। हालाँकि, सामान्य मोड में, @:
वही करेंगे जो आप उम्मीद करते हैं, रजिस्टर को एक्स कमांड के रूप में व्याख्या करना, इसे सामान्य मोड में चलाने की कोशिश न करना। इसलिए यदि आपकी अंतिम कमांड थी :e
, तो रजिस्टर में फ़ाइल है, e
लेकिन @:
फाइल को फिर से लोड किया जाएगा, शब्द के अंत तक नहीं।
सीएफ :help @:
दिखाएं कि आपने क्या चलाने से पहले सामान्य मोड में कर रही होगी: @='dd'
Enter। जैसे ही आप =
कुंजी को मारते हैं , विम अभिव्यक्ति मूल्यांकन पर स्विच करता है: जैसे ही आप एक अभिव्यक्ति दर्ज करते हैं और हिट करते हैं Enter, विम इसकी गणना करता है, और परिणाम रजिस्टर सामग्री के रूप में कार्य करता है। बेशक रजिस्टर =
केवल-पढ़ने के लिए है, और एक-शॉट है। हर बार जब आप इसका उपयोग करना शुरू करते हैं, तो आपको एक नई अभिव्यक्ति दर्ज करनी होगी।
सीएफ :help quote_=
कोरोलरी: यदि आप एक कमांड का संपादन कर रहे हैं, और आपको पता है कि आपको अपने कमांड लाइन में अपने वर्तमान बफर से कुछ लाइन डालने की आवश्यकता नहीं है Esc! का प्रयोग करें Ctrl- R =getline(58)
Enter। उसके बाद आप कमांड लाइन एडिटिंग में वापस आ जाएंगे, लेकिन इसमें 58 वीं लाइन की सामग्री डाली गई है।
मैन्युअल रूप से खोज पैटर्न को परिभाषित करें: :let @/ = 'foo'
सीएफ :help :let
ध्यान दें कि ऐसा करने के लिए, आपको /
पैटर्न में भागने की आवश्यकता नहीं है । हालाँकि आपको पाठ्यक्रम के सभी एकल उद्धरणों को दोगुना करने की आवश्यकता है।
के साथ शुरुआत सभी पंक्तियों की प्रतिलिपि foo
, और बाद में सभी लाइनों युक्त bar
क्लिपबोर्ड, चेन के लिए इन कमांड: qaq
(फिर सेट करता है एक रजिस्टर इसके अंदर एक खाली मैक्रो भंडारण), :g/^foo/y A
, :g/bar/y A
, :let @+ = @a
।
कैपिटल रजिस्टर नाम का उपयोग करके रजिस्टर मोड में रजिस्टर का काम करता है
बेहतर है, यदि Q
इसके द्वारा रीमैप नहीं किया गया है mswin.vim
, तो एक्स मोड को Q
उन "कोलन कमांड" के साथ शुरू करें , जिन्हें वास्तव में "एक्सट कमांड" कहा जाता है, और टाइप करके सामान्य मोड में वापस जाएं visual
।
सीएफ :help :g
, :help :y
,:help Q
अपनी फ़ाइल को डबल-स्पेस करें :g/^/put _
:। यह /dev/null
प्रत्येक पंक्ति के बाद (क्योंकि हर पंक्ति में एक शुरुआत है!) , ब्लैक होल रजिस्टर की सामग्री को डालता है (पढ़ने के समय खाली, लेकिन व्यवहार करने योग्य )।
foo
प्रत्येक पंक्ति से पहले एक पंक्ति जोड़ें :g/^/-put ='foo'
:। यह अभिव्यक्ति रजिस्टर का एक चतुर उपयोग है। यहाँ, (cf. ) के -
लिए एक समानार्थी शब्द है । चूंकि पंक्ति के बाद पाठ डालता है, इसलिए आपको इसे पिछले एक पर कार्रवाई करने के लिए स्पष्ट रूप से बताना होगा।.-1
:help :range
:put
पूरे क्लिपर को सिस्टम क्लिपबोर्ड पर कॉपी करें :%y+
:।
सीएफ :help :range
( %
भाग के लिए) और :help :y
।
यदि आपने किसी मैक्रो को गलत तरीके से बनाया है, तो आप इसे टाइप कर सकते हैं :let @a='
Ctrl- R =replace(@a,"'","''",'g')
Enter '
और इसे संपादित कर सकते हैं । यह रजिस्टर में संग्रहीत मैक्रो की सामग्री को संशोधित करेगा a
, और यह यहां दिखाया गया है कि आप ऐसा करने के लिए अभिव्यक्ति रजिस्टर का उपयोग कैसे कर सकते हैं।
यदि आपने किया dddd
, तो आप uu
पूर्ववत करने के लिए कर सकते हैं। आपके साथ p
अंतिम हटाई गई पंक्ति प्राप्त कर सकते हैं लेकिन वास्तव में आप रजिस्टर के @1
माध्यम से 9 हटाए जाने तक भी पुनर्प्राप्त कर सकते हैं @9
।
इससे भी बेहतर, यदि आप करते हैं "1P
, तो .
सामान्य मोड में खेलेंगे "2P
, और इसी तरह।
सीएफ :help .
तथा:help quote_number
यदि आप इन्सर्ट मोड में करंट डेट डालना चाहते हैं: Ctrl- R=strftime('%y%m%d')
Enter।
सीएफ :help strftime()
एक बार फिर, क्या भ्रमित हो सकता है:
:@
एक कमांड-लाइन कमांड है जो एक रजिस्टर की सामग्री को विम्सस्क्रिप्ट के रूप में व्याख्या करता है और इसे स्रोत करता है@
सामान्य मोड कमांड में जो किसी रजिस्टर की सामग्री को सामान्य-मोड कीस्ट्रोक्स के रूप में व्याख्या करता है (जब आप :
रजिस्टर का उपयोग करते हैं, जिसमें प्रारंभिक कॉलोन के बिना अंतिम खेला गया कमांड शामिल होता है: इस मामले में यह कमांड को फिर से टाइप करता है जैसे कि आपने कोलन को फिर से टाइप किया है। अंतिम वापसी कुंजी)।
"
सामान्य मोड कमांड में, जो आपको यैंक, पेस्ट, डिलीट, सही, आदि के लिए रजिस्टर चुनने में मदद करता है।
"
एक वैध रजिस्टर नाम (डिफ़ॉल्ट, या अनाम, रजिस्टर) भी है और इसलिए उन कमांड के लिए एक तर्क के रूप में पारित किया जा सकता है जो नाम रजिस्टर करने की उम्मीद करते हैंकुछ ऐसा चिपकाने के लिए जो सिस्टम क्लिपबोर्ड है, जिसका आप उपयोग कर सकते हैं SHIFT- INS।
यह विंडोज में काम करता है, लेकिन मुझे लगता है कि यह लिनक्स में भी अच्छा काम करता है।
:!rm -rf /<cr>
, तो यह उस पर अमल करेगा। इसके बजाय रजिस्टर का उपयोग करें!
shift-ins
की तुलना में आसान है ctrl-R+*
? यह निश्चित रूप से है अगर आप gvim में हैं। यदि आप किसी अन्य मशीन से जुड़े टर्मिनल में हैं और आप अपने क्लिपबोर्ड से कुछ पेस्ट करना चाहते हैं तो क्या आप कुछ बेहतर जानते हैं shift-ins
? क्योंकि रजिस्टर उस स्थिति में काम नहीं करते हैं। कृपया टिप्पणी करने से पहले सोचें और अन्य काम करें (जैसे डाउनवोटिंग)।
"मैं yanked पाठ को Vim कमांड लाइन में पेस्ट करना चाहता हूं।"
जबकि शीर्ष मतदान का उत्तर बहुत ही पूर्ण है, मैं कमांड इतिहास का संपादन करना पसंद करता हूं।
सामान्य मोड में, टाइप करें q:
:। यह आपको सामान्य विम आदेशों के साथ हाल ही के आदेशों, संपादन योग्य और खोज योग्य की एक सूची देगा। आप नीचे एक रिक्त कमांड लाइन पर शुरू करेंगे।
उस सटीक चीज़ के लिए जिसे लेख पूछता है, एक कमांड लाइन में एक यैंक्ड लाइन (या कुछ भी) को चिपकाते हुए, अपना टेक्स्ट यैंक करें और फिर: q:p
(कमांड हिस्ट्री एडिट मोड में प्राप्त करें, और फिर (p) अपने यॉन्क्ड टेक्स्ट को एक नए कमांड में डालें। enterनिष्पादित करने के लिए , इच्छा पर संपादित करें ।
कमांड इतिहास मोड से बाहर निकलने के लिए, यह विपरीत है। कमांड इतिहास में सामान्य मोड में, टाइप करें: :q
+enter
सिस्टम क्लिपबोर्ड से Vim कमांड लाइन ("कमांड मोड") में कुछ चिपकाने के लिए, उसके बाद Ctrl+ का उपयोग करें । मेरे लिए, कम से कम उबंटू पर, + काम नहीं कर रहा है।R+ShiftIns
पुनश्च: मुझे यकीन नहीं है कि क्यों Ctrl+ Rउसके बाद *, जो सैद्धांतिक रूप से एक ही है Ctrl+ Rउसके बाद +हमेशा काम नहीं करता है। मैंने +संस्करण खोजा और खोजा और यह हमेशा काम करने लगता है, कम से कम मेरे बॉक्स पर।
मुझे इसी तरह की समस्या हो रही थी। मैं चयनित पाठ को एक कमांड में समाप्त करना चाहता था, लेकिन इसे चिपकाने पर निर्भर नहीं था। यहां वह कमांड है जिसके लिए मैं एक मैपिंग लिखने की कोशिश कर रहा था:
:call VimuxRunCommand("python")
इस प्लगइन के लिए डॉक्स केवल स्ट्रिंग शाब्दिक का उपयोग करके दिखाते हैं। यदि आप उस पाठ का चयन करने का प्रयास करेंगे, जिसमें डबलक्वाट शामिल हैं:
vnoremap y:call VimuxRunCommand("<c-r>"")<cr>
इसके आस-पास जाने के लिए, आप केवल मैक्रो की सामग्री का उपयोग करके देखें @
:
vnoremap y:call VimuxRunCommand(@")<cr>
अनाम रजिस्टर की सामग्री को पास करता है और मेरे दोहरे उद्धरण और बहुस्तरीय edgecases के साथ काम करता है।
@
चरित्र को vimux कमांड को भेजता है। @
निम्नलिखित दोहरे उद्धरण से बचने के बारे में सोचें और इसे एक नियमित चरित्र के बजाय एक रजिस्टर के रूप में माना जा रहा है। vnoremap
मैं परिभाषित किया है दृश्य मोड में सक्रिय है, तो यह चयनित पाठ yanks, और फिर vimux आदेश में यह चिपकाता है, एक चल दुभाषिया के लिए यह एक बगल फलक में भेज दिया। एक स्क्रिप्ट पर काम करने और एक जोड़े कीस्ट्रोक्स के साथ इसके छोटे हिस्से का परीक्षण करने के लिए वास्तव में बहुत अच्छा है।
ओएस एक्स
यदि आप मैक ओएस एक्स में विम का उपयोग कर रहे हैं, तो दुर्भाग्य से यह पुराने संस्करण के साथ आता है, और क्लिपबोर्ड विकल्पों का अनुपालन नहीं किया जाता है। सौभाग्य से, Homebrew आसानी से इस समस्या को हल कर सकता है।
स्थापित करें विम:
brew install vim --with-lua --with-override-system-vi
विम का GUI संस्करण स्थापित करें:
brew install macvim --with-lua --with-override-system-vi
इसके प्रभावी होने के लिए टर्मिनल को फिर से शुरू करें।
निम्नलिखित लाइन को इसमें जोड़ें ~/.vimrc
set clipboard=unnamed
अब आप Vim में लाइन को कॉपी कर सकते हैं yy
और इसे सिस्टम-वाइड पेस्ट कर सकते हैं ।
संदर्भ के लिए, यह जानकारी आउट-ऑफ-द-बॉक्स, कोई प्लगइन्स, नहीं .vimrc Vim 7.4 व्यवहार के साथ लिनक्स टकसाल में डिफ़ॉल्ट विकल्पों के साथ आती है।
आप हमेशा माउस के साथ पाठ का चयन कर सकते हैं (या "* रजिस्टर में चयन का उपयोग Vकर या कर सकते हैं v), और इसे Shift+ Ctrl+ के साथ कमांड में पेस्ट करें ।v ।
कमांड लाइन में Ctrl+ टाइप करने से rएक रजिस्टर नाम के लिए संकेत होगा। इसलिए टाइपिंग :CTRL-r*सामग्री रजिस्टर को कमांड लाइन में रखेगा। यह किसी भी रजिस्टर को पेस्ट करेगा, न कि सिर्फ * * :help c_CTRL-R
।
इसके अलावा, मध्य माउस बटन कमांड लाइन में पेस्ट होगा।
देख :help->quote-plus
एक्स विंडो के चयन के साथ कैसे काम करता है, इसका विवरण । यहां तक कि एक सादे, आउट-ऑफ-द-बॉक्स विम (फिर से, लिनक्स मिंट में विम 7.4 में, वैसे भी), बाईं माउस बटन के साथ किए गए किसी भी चयन को मध्य माउस बटन के साथ कमांड लाइन में चिपकाया जा सकता है।
इसके अलावा, मध्य माउस बटन भी विम में चयनित पाठ को कई अन्य एक्स विंडो अनुप्रयोगों, यहां तक कि जीयूआई वाले (उदाहरण के लिए, फ़ायरफ़ॉक्स और थंडरबर्ड में पेस्ट करेगा) ) और कमांड लाइन में टेक्स्ट चिपकाना भी संभव है जहां टेक्स्ट अन्य ऐप से चुना गया था ।
देखें: मदद-> Add11 जानकारी के लिए x11- चयन।
tl; डॉ
कोशिश करें: CTRL-r दृष्टिकोण पहले, और फिर Shift+ Ctrl+ vया मध्य माउस बटन का उपयोग करें यदि आपको कुछ और चाहिए।
यह माना जाता है कि यह भ्रामक हो सकता है।
"[a-z]y
: [Az] रजिस्टर पर पाठ की प्रतिलिपि बनाएँ
:!
एडिट कमांड पर जाने के लिए उपयोग करें
Ctrl+ R: आप जो कॉपी करते हैं उसे पेस्ट करने के लिए रजिस्टर पहचान का पालन करें।
इसका इस्तेमाल CentOS 7 के लिए किया गया था।
यदि आपके पास दो मान दो अलग-अलग रजिस्टरों (उदाहरण के लिए रजिस्टर a
और रजिस्टर b
) में yanked हैं, तो आप बस एक चर सेट कर सकते हैं c
और उस पर ऑपरेशन कर सकते हैं।
उदाहरण के लिए, :set c = str2float(@a) + str2float(@b)
और तब आप c
कहीं भी सामग्री पेस्ट कर सकते हैं ।
INSERT मोड में उदाहरण के लिए, CTRL + R
फिर =
अभिव्यक्ति रजिस्टर में प्रवेश करने के लिए टाइप c
करें और बराबर साइन के बाद टाइप करें और ENTER दबाएं। हो गया अब आपके पास कुल a
और होना चाहिएb
रजिस्टर ।
इन सभी को एक मैक्रो में रिकॉर्ड किया जा सकता है और दोहराया जा सकता है!
str2float
समारोह यदि आप तैरता के साथ काम कर रहे हैं प्रयोग किया जाता है, यदि आप नहीं करते हैं, आप पूर्णांक के बजाय मिल जाएगा।
मुझे यकीन नहीं है कि यह मुहावरेदार है, लेकिन इसने मेरे मामले के लिए काम किया जहां मुझे एक पंक्ति में 2 नंबर जोड़ने और 500 और लाइनों के लिए इसे दोहराने की आवश्यकता थी।