क्या संपूर्ण बफ़र के लिए कोई पाठ ऑब्जेक्ट है?


28

मैं अक्सर खुद को टाइपिंग कमांड्स पसंद करता हूं gg"+yGया ggdGदो बार कर्सर ले जाने के बिना ऐसा करने के लिए अधिक कुशल तरीका पसंद करूंगा। क्या कोई ऐसा आदेश है जिसका उपयोग मैं कर सकता हूँ उदाहरण के y[movement]लिए कर्सर को स्थानांतरित किए बिना पूरे बफर को कॉपी करने के लिए?

जवाबों:


36

चूंकि vim वर्तमान बफर को संदर्भित करने के लिए प्रतिशत चिह्न का उपयोग करता है, आप इसका उपयोग सब कुछ जल्दी से प्राप्त करने के लिए कर सकते हैं।

:%yपूरे बफर :%y+को +रजिस्टर में जमा कर देगा (और संभवत: क्लिपबोर्ड, बशर्ते कि उचित विकल्पों के साथ संकलित किया गया हो)।

:%dऔर :%d+विलोपन के लिए भी यही करेंगे।

इनमें से प्रत्येक मामले में, कर्सर जगह पर रहता है।


वाह, यह सब समय मैं उपयोग कर रहा था mmgg"+yG`mऔर इस बारे में कभी नहीं सोचा था। धन्यवाद, यह .vimrc में सही जा रहा है।
डोरकनॉब

@Doorknob की स्थापना और निशान का उपयोग करने के बजाय आप C-oदो बार वापस जाने के लिए उपयोग कर सकते हैं।
रुस्लान

10

एक अन्य उपाय है कि विम-टेक्स्टोबज-संपूर्ण नामक प्लगइन का उपयोग किया जाए । डिफ़ॉल्ट रूप से, यह प्लगइन aeसंपूर्ण बफ़र के लिए टेक्स्ट ऑब्जेक्ट प्रदान करता है , ieखाली लाइनों को छोड़कर और पीछे ले जाने वाले पूरे बफ़र के लिए।

यह प्लगइन उसी लेखक द्वारा vim-textobj- उपयोगकर्ता पर निर्भर करता है , जो उपयोगकर्ताओं को किसी भी टेक्स्ट ऑब्जेक्ट को आराम से परिभाषित करने देता है। ऐसे कई प्लगइन्स हैं जो इसका अच्छा उपयोग करते हैं।


8

डिफ़ॉल्ट रूप से पूरी फ़ाइल के लिए कोई पाठ ऑब्जेक्ट नहीं है, लेकिन उनका उपयोग करके बनाना संभव है omap। इस मामले में, यह कुछ इस तरह दिखेगा:

onoremap f :<c-u>normal! mzggVG<cr>`z

यहां बताया गया है कि यह कैसे काम करता है:

onoremap f " make 'f' the text object name
:<c-u> " use <c-u> to prevent vim from inserting visual selection marker at the beginning of the command automatically.
normal! " use normal to make key presses ignoring any user mappings
mzggVG<cr>`z " make a marker in register z, select the entire file in visual line mode and enter the normal command, and go back to the z marker

टिप्पणियाँ:

Ctrluकर्सर स्थिति के बाईं ओर सब कुछ हटाने के लिए कमांड लाइन मोड में उपयोग किया जा सकता है। ऐसा करने का कारण यह है क्योंकि यदि आप कमांड मोड को सीधे दृश्य मोड से दर्ज करते हैं, तो यह स्वचालित रूप '<,'>से कमांड लाइन पर सम्मिलित हो जाएगा , और यही वह नहीं है जो हम चाहते हैं। मैं यह भी सुझाव दूंगा कि आप इसके अलावा कुछ और का उपयोग करें f, क्योंकि fआम तौर पर लाइन पर अगले खोजे गए चरित्र पर जाने के लिए उपयोग किया जाता है। उदाहरण के लिए, वर्तमान लाइन पर fiअगले iपर जाएंगे ।

प्रासंगिक सहायता विषय:

:help omap-info
:help :normal
:help c_CTRL-U
:help v_:

क्या कर्सर को अकेला छोड़ते समय ऐसा करने का कोई तरीका है?
रैंडम 832

@ Random832 ``अंत में एक जोड़ने पर कर्सर पिछले स्थान पर वापस आ जाएगा।
SnoringFrog

मुझे इस बात की चिंता है कि यह चयन को yank कमांड पर लागू नहीं करेगा। मैं आज कुछ प्रयोग करूंगा।
रैंडम 832

1
मैंने मैपिंग में एक मार्कर कमांड जोड़ा, यह कर्सर को छोड़ना चाहिए जहां यह अब है।
एवरग्रीनट्री

2

यहां कार्य को पूरा करने के लिए कुछ त्वरित n 'गंदे मैपिंग हैं:

nnoremap yY :%yank <c-r>=v:register<cr><cr>
nnoremap dD :%delete <c-r>=v:register<cr><cr>

अब आप क्रमशः उपयोग कर सकते हैं yYऔर dDyank / delete कर सकते हैं। यह पूर्ण विकसित पाठ ऑब्जेक्ट का उपयोग करने के रूप में अच्छा नहीं है, लेकिन कभी-कभी सबसे सरल समाधान सर्वोत्तम होते हैं।

अधिक मदद के लिए देखें:

:h :y
:h :d
:h [range]
:h v:register
:h c_ctrl-r
:h @=
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.