ब्लैक होल रजिस्टर ("_) का उपयोग क्या है?"


15

मैंने हाल ही में ब्लैक होल रजिस्टर के बारे में पढ़ा "_जो कि केवल लिखने वाला रजिस्टर है।

विम प्रलेखन यह इस तरह वर्णन करता है:

  1. ब्लैक होल रजिस्टर "_

इस रजिस्टर को लिखते समय, कुछ भी नहीं होता है। यह सामान्य रजिस्टरों को प्रभावित किए बिना पाठ को हटाने के लिए उपयोग किया जा सकता है। इस रजिस्टर से पढ़ते समय, कुछ भी नहीं लौटाया जाता है।

सभी लेखों और पुस्तकों में, मैंने पढ़ा है कि लेखक हमेशा उसी उदाहरण का उपयोग करते हैं जो इस रजिस्टर का उपयोग करने के लिए होता है जब हमें कुछ पाठ को हटाने की आवश्यकता होती है बिना मिटाए हम पहले से जो करते थे।

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

  • क्या यह रजिस्टर कुछ अन्य उपयोग के मामलों में उपयोगी है ? यदि हाँ, तो कौन-कौन से?

  • यदि इस रजिस्टर का एकमात्र उद्देश्य पहले उपयोग किए गए मामले में उपयोग किया जाना है, तो विम के रचनाकारों ने इस समस्या को इस तरह के रजिस्टर के साथ हल करने का फैसला क्यों किया ? मेरा मतलब है कि यह उत्तर उस समस्या का समाधान दिखाता है जिसका उपयोग करने की तुलना में कम कीस्ट्रोक्स होता है "_। उपयोग "0करने से ब्लैक होल रजिस्टर के उपयोग से भी बचा जा सकता है तो उन्होंने इसे क्यों बनाया?

जवाबों:


18

ब्लैक होल रजिस्टर का उपयोग उन्हीं स्थितियों में किया जाता है जैसे /dev/null: जब आप एक ऐसी क्रिया करते हैं जो सामान्य रूप से किसी चीज का उत्पादन करती है लेकिन आपके पास उस आउटपुट का कोई उपयोग नहीं होता है।

विम का डिफ़ॉल्ट व्यवहार "कट" करना है, न कि "हटाना"। ज्यादातर मामलों में यह मायने नहीं रखता है, लेकिन कभी-कभी, उपयोगकर्ताओं को वास्तव में "हटाने" की आवश्यकता हो सकती है। यहीं ब्लैक होल रजिस्टर काम आता है।

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

ब्लैक होल रजिस्टर यह है कि हम बिना अनाम रजिस्टर और गिने हुए रजिस्टरों को खोले बिना सामान काट दें।

संभव उपयोग के मामले कई हैं, लेकिन सभी बहुत ही समान हैं:

  • एक वास्तविक "हटाएं" प्रदान करें,
  • रजिस्टर पर एक बेहतर नियंत्रण है, मुख्य रूप से अनाम एक,
  • क्रमबद्ध रजिस्टरों को स्थिर अवस्था में रखें,
  • अनाम रजिस्टर से डालने की क्षमता को बनाए रखते हुए कुछ काटें, हमें "दोहराए जाने योग्य पुट" देते हैं,
  • जिस चीज की आपको परवाह नहीं है, उस पर कुछ रखें।
  • लिपियों में दुष्प्रभाव को रोकने ...

एक "0p"दोहराया पुट" परिदृश्य (सबसे आम उपयोग का मामला है, इसलिए विम साहित्य में इसकी सर्वव्यापकता) के लिए उपयोग कर सकता है , लेकिन यह रजिस्टर "_अन्य परिदृश्यों के लिए उपयोगी होने से बहुत दूर है।


मैं इस रजिस्टर के व्यवहार के परिणामों के रूप में आपके उपयोग के मामलों को अधिक देखता हूं, लेकिन मुझे लगता है कि आपका उत्तर स्पष्ट रूप से इस रजिस्टर का वर्णन करता है `ब्लैक होल रजिस्टर यह है कि हम बिना अनाम रजिस्टर और गिने हुए रजिस्टरों को खोले बिना सामान काट दें।` मैं था अन्य उत्तरों की उम्मीद है लेकिन ऐसा लगता है कि यह इस रजिस्टर का एकमात्र उपयोग है। आपके उत्तर के लिए बहुत बहुत धन्यवाद!
statox

5

पाठ को हटाने के अलावा, आप अन्य रजिस्टरों को हटाने के लिए ब्लैक होल रजिस्टर का उपयोग कर सकते हैं। उदाहरण:

:let @a=@_

यह पंजीकरण समाशोधन का एक तरीका है "a


2
यदि कोई अन्य व्यक्ति इसे पढ़ता है, तो मुझे लगता है, "मुझे आश्चर्य है कि अगर यह एक छोटा, स्पष्ट प्रतिस्थापन है :call setreg('a', [])," जैसा कि मैंने किया था: अफसोस, इसका जवाब नहीं है। यह काम करता है :call setreg('a', '')( कमांड "aके आउटपुट में छोड़कर :registers
रिच

@Rin uninitiated "aके :registersलिए आउटपुट में छोड़ने का क्या महत्व है ?
अलेक्सज मगुरा

@AlexejMagura खैर, यदि आपका लक्ष्य आपके रजिस्टर सामग्री को देखते समय जो कुछ भी आप देखते हैं, उसे साफ करना है, तो खाली रजिस्टरों का एक गुच्छा छोड़ना आदर्श नहीं हो सकता है। मुझे यकीन नहीं है कि हटाए गए रजिस्टर और एक मौजूदा के बीच कोई अन्य व्यावहारिक अंतर है जो खाली होता है।
रिच

1

एक कार्य में एक व्यावहारिक उपयोग। बलो फ़ंक्शन में अजगर टिप्पणी #को जोड़ा जाता है और परिणाम के आधार पर हटा दिया जाता है getline('.')[0]। यदि लाइन में एक टिप्पणी है, तो चार्ट #हटा दिया गया है, लेकिन इस मामले में हम इसे अपने डिफ़ॉल्ट रजिस्टर के साथ गड़बड़ नहीं करना चाहते हैं।

function! ToggleComment()
    let l:win_view = winsaveview()
    if getline('.')[0] == "#"
        normal! 0"_x
    else
        normal! I#
    endif
    call winrestview(l:win_view)
endfunction
nnoremap <Leader>t :call ToggleComment()<CR>
vnoremap <Leader>t <C-o>:call ToggleComment()<CR>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.