वर्तमान फ़ाइल की वर्ण गणना प्रदर्शित करने के लिए मुझे (g) विम कैसे मिल सकता है?


85

मुझे एक प्रोग्रामिंग फ़ोरम मैं अक्सर के लिए ट्यूटोरियल और लेख लिखना पसंद है। इस मंच में प्रति पोस्ट की एक चरित्र सीमा है। मैंने पोस्ट लिखने के लिए Notepad ++ का उपयोग किया है और यह स्टेटस बार में लाइव कैरेक्टर काउंट रखता है। मैं gVim का अधिक उपयोग करना शुरू कर रहा हूं और मैं वास्तव में इस बिंदु पर नोटपैड ++ पर वापस नहीं जाना चाहता हूं, लेकिन इस चरित्र की गणना करना बहुत उपयोगी है। यदि मैं गिनती पर जाता हूं, तो मैं आमतौर पर पोस्ट को नोटपैड ++ में पेस्ट करता हूं, इसलिए मैं देख सकता हूं कि जब मैंने सीमा से प्राप्त करने के लिए पर्याप्त छंटनी की है।

मैंने ऐसे सुझाव देखे हैं जो :set rulerमदद करेंगे, लेकिन यह केवल वर्तमान लाइन पर वर्तमान कॉलम इंडेक्स के माध्यम से वर्ण गणना देता है। यह बहुत अच्छा होगा यदि मैं पैराग्राफ ब्रेक का उपयोग नहीं करता हूं, लेकिन मुझे यकीन है कि आप सहमत होंगे कि एक पैराग्राफ में कई हजार वर्ण पढ़ना आरामदायक नहीं है।

मैंने मदद पढ़ी और सोचा कि rulerformatयह काम करेगा, लेकिन इस statuslineप्रारूप का उपयोग करने के बाद मैंने कुछ भी नहीं देखा जो वर्तमान बफर के लिए एक चरित्र गणना देता है।

मैंने देखा है कि इसमें प्लगइन्स हैं जो इसे जोड़ते हैं, लेकिन मैं अभी भी अपने पैर की उंगलियों को जीवीएम में डुबो रहा हूं और मुझे यकीन नहीं है कि मैं यादृच्छिक प्लगइन्स लोड करना चाहता हूं इससे पहले कि मैं समझता हूं कि वे क्या करते हैं। मैं विम में निर्मित कुछ का उपयोग करना पसंद करूंगा, लेकिन अगर यह मौजूद नहीं है तो इसका अस्तित्व नहीं है।

मुझे अपना लक्ष्य पूरा करने के लिए क्या करना चाहिए? यदि इसमें एक प्लगइन शामिल है, तो क्या आप इसका उपयोग करते हैं और यह कितनी अच्छी तरह काम करता है?

जवाबों:


140

g CTRL-Gकर्सर और फ़ाइल पर कुछ आंकड़े प्रदर्शित करने के लिए सामान्य मोड में दबाएँ ।

यदि आप लिनक्स में हैं, तो आप wc -mवर्तमान फ़ाइल में वर्ण गणना प्राप्त करने के लिए उपयोग कर सकते हैं

:!wc -m %

चूंकि यह वास्तविक समय में अपडेट नहीं किया गया है, शायद आप इस कमांड को कुछ इस तरह से मैप करना चाहते हैं:

map <F4> :!wc -m %<CR>

19
g CTRL-Gमुझे नहीं पता था कि यह अस्तित्व में है। अच्छा!
जेसन डाउन

अच्छा मैं उपयोग करने के लिए भूल जाते हैं! धमाके में आदेशों का पालन करें
एडी बी

3
g <cg> क्रॉस-प्लेटफॉर्म पर काम करता है जो अच्छा है।
एंड्रयूपीके

मुझे इसके उपयोग के बारे में और जानकारी कहां मिल सकती है ! [...] %?
वोक

सहायता यहाँ है: vimdoc.sourceforge.net/htmldoc/various.html# : -cmd । यदि आप शेल कमांड का भारी उपयोग करते हैं, तो इस प्लगइन की भी जाँच करें: stevelosh.com/projects/clam
mrucci

24
:help count-items

सुझाव देता है, कि आप या तो एक बदले हुए अला के ड्राई-रन कर सकते हैं

:%s/./&/gn

(जो तब मिलान किए गए वर्णों की संख्या को वापस रिपोर्ट करता है) या आप strlen()नेत्रहीन चयनित पाठ पर एक कल्पना करते हैं :

:echo strlen(@")

("अनाम रजिस्टर है)

चूँकि आप अपनी स्थिति में एक अभिव्यक्ति कह सकते हैं जैसे %{myfunc()}कि यह एक अच्छा प्रारंभिक बिंदु हो सकता है। हर समय की गिनती करना थोड़ा समय लेने वाला हो सकता है क्योंकि आपको पूरे पाठ का चयन करना होगा और फिर इसे yank करना होगा, लेकिन हो सकता है कि "-register में बाइट्स की संख्या पहले से ही आपके लिए ठीक हो। यदि आप वास्तव में संख्या जानना चाहते हैं। बफर में चार्ट: बस नेत्रहीन बफर में सभी पाठ का चयन करें और इसे yank। इसलिए, समाधान होगा:

 :set statusline=%{strlen(@")}

जो आपको "-register में चार्ज़ की संख्या देता है (जो बफ़र्स की संख्या के समान है यदि आप वर्तमान बफ़र का चयन करते हैं और यैंक करते हैं)।


समाधान भी विंडोज पर काम करता है (जो बैश कमांड नहीं करेगा)।
dastrobu

मुझे पसंद है कि g<CTRL-g>स्वीकृत उत्तर में विधि की तरह एक सेकंड के बाद गिनती गायब नहीं होती है ।
चेस्टर

7

मुरूसी के उत्तर में वृद्धि:

आप निम्नानुसार कमांड आउटपुट को wcनिर्देशित करके पहले फ़ाइल को सहेजने के बिना लिनक्स पर उपयोग कर सकते हैं :w:

:w !wc -m

और आप इसे mrucci द्वारा बताई गई किसी चीज़ के लिए मैप कर सकते हैं।


6
:help statusline

आपको देता है

o N   Byte number in file of byte under cursor, first byte is 1.
      Mnemonic: Offset from start of file (with one added)

जो आपकी समस्या के लिए एक अच्छा समाधान है। बस के साथ बफ़र के अंत में जाएँ Gऔर बाइट संख्या आपके स्टेटसलाइन में दिखाए गए चार्ट की संख्या है (बिल्कुल मल्टी-बाइट के साथ सच नहीं है)। जहां से आप आए थे, वहां वापस जाएं ctrlo


1
यह बहु-बाइट पात्रों के साथ समस्याग्रस्त है। मैंने अपनी स्टेटसलाइन में% o डालने के बाद यह सवाल पाया :)
मैट

@ मैट: तो, क्या समाधान है?
अकीरा

1
सामान्य मोड में mrucci का समाधान "g ^ g" मेरे लिए पर्याप्त था। मुझे एक त्वरित डिबग के लिए इसकी आवश्यकता थी, इसलिए मैंने स्टेटसलाइन में कोशिश करने और उस जानकारी को प्राप्त करने के लिए समय नहीं लिया है।
मैट


1
चूंकि डॉक्स अस्पष्ट और भ्रामक हैं, इसलिए यह ध्यान देने योग्य है कि विशिष्ट कमांड को निष्पादित करने की आवश्यकता है set statusline+=\ %o\ %N (दिलचस्प है, यह उदाहरण के लिए "t S" आइटम के लिए काम नहीं करता है) । फिर यदि आप स्टेटसलाइन को अपरिवर्तित देखते हैं, तो यह इसलिए है क्योंकि आप निष्पादन करेंगे set laststatus=2। मेरे लिए इसने मौजूदा पारदर्शी स्टेटसलाइन को नए के साथ बदल दिया, ठोस काले होने के नाते, और केवल "बाइट काउंट" आइटम के साथ।
हाय-एंजेल

3

यदि आप उपयोग करने की आदत में हैं: फ़ाइल को सहेजने के लिए डब्ल्यू, हर बार जब आप ऐसा करते हैं तो स्थिति स्टेटस लिखे गए वर्णों की संख्या की रिपोर्ट करती है। उदाहरण के लिए, इस वाक्य के अंत में मैंने a: w किया (हाँ मैं इस नोट को लिखने के लिए gvim का उपयोग कर रहा हूँ) और इसने रिपोर्ट किया: २४५ end लिखा।


यह एक समय के उपयोग के लिए खूबसूरती से गोल्फ देता है।
सिरो सेंटिल्ली 新疆 iro i i 事件

3

आप बफ़र के बाइटकाउंट को स्टेटसलाइन में प्रदर्शित करने के लिए एक अभिव्यक्ति को जोड़ सकते हैं:

:set statusline+=\ %{\ line2byte(line(\"$\")+1)-1\ }B

या आप बच निकलने वाले सभी से बचने के लिए विकल्प चर को सीधे बदल सकते हैं:

:let &statusline .= ' %{ line2byte(line("$")+1)-1 }B'

जब मैं यह कोशिश करता हूं, तो जीवीएम एक अस्पष्ट अभिव्यक्ति अनुक्रम के बारे में शिकायत करता है। मैंने देखा कि आपको एक कोष्ठक याद आ रहा है, लेकिन इसे ठीक करने से भी मदद नहीं मिलती है। यहाँ मैंने इसे फिर से लिखा है: सेट स्टेटसलाइन =% {line2byte (लाइन ("$"))}
OwenP

@ ओवेन: अभी तय किया जाना चाहिए
अकीरा

1
संभवतः आप ...%{ line2byte(line(\"$\")+1))-1 }ऐसा चाहते हैं कि इसमें अंतिम पंक्ति के वर्ण गिनती में शामिल हों। यह दृष्टिकोण मल्टीबाइट वर्णों की सही गणना नहीं करेगा, हालाँकि।
intuited

1
इसके अलावा, मुझे लगता है कि आपको रिक्त स्थान से बचने की जरूरत है, या बस उनसे छुटकारा पाएं।
अंतर्वासित

@ अंतर्ग्रथित सुझावों को शामिल करने के लिए संपादित किया गया, इसे अधिलेखित करने के बजाय स्थिती में भी जोड़ा गया।
joeytwield

0

वर्कअराउंड मैं तब तक उपयोग कर रहा हूं जब तक कि मैंने मुरूसी के जवाब को स्वीकार नहीं किया:

मुझे पता चला कि जब मैं: w फ़ाइल को बचाने के लिए आदेश देता हूं, तो कमांड लिखे गए बाइट्स की संख्या को आउटपुट करता है। यह कमोबेश एक कैरेक्टर काउंट है, इसलिए अब तक काफी करीब आ चुका है। मुझे मुरूसी का जवाब पसंद है, संभवतः यह एक से अधिक है क्योंकि इसमें एक शब्द भी है।


0

यदि आप अपने पाठ की फाइल कॉपी रखते हैं, तो बस अपने पाठ को डिस्क पर लिखें - वर्ण गणना डिफ़ॉल्ट रूप से प्रदर्शित होती है।

आप किसी फ़ाइल को रखने के लिए नहीं करना चाहते हैं, बस अपने पाठ को बचाने /dev/null: :w!/dev/null

आप wcअपने पात्रों को भी गिन सकते हैं: :%!wc -c- लेकिन Uअपने पाठ को पुनर्स्थापित करने के लिए हिट करना न भूलें ।

यदि आपको अक्सर इसकी आवश्यकता होती है, तो इन कमांड को एक महत्वपूर्ण अनुक्रम में मैप करें: :map #wc :w!/dev/null^[- ध्यान दें कि + के ^[रूप में दर्ज किया जाना चाहिए ।CtrlV Esc

पाठ आकार के पहले संकेतक के रूप में, बस लाइन संख्याओं को चालू करें; स्वीकार किया: यह कुछ मानसिक अंकगणित ;-) की जरूरत है


0

इस प्रश्न के होने और उत्तर पढ़ने के बाद (धन्यवाद mrucci) मैंने इन पंक्तियों को अपनी .vimrc आरंभीकरण फ़ाइल में जोड़ा।

# get full statistics on the current buffer (not perfect, may redraw screen)
map ;gg           G$g<C-G>''
# get full statistics on the current position in the buffer
map ;gh           g<C-G>

मैं इसे विम पर छोड़ता हूं: उपयोगकर्ताओं को यह पता लगाने में मदद करें कि वे क्या करते हैं।

व्यक्तिगत रूप से मुझे विम मैपिंग शुरू करना उपयोगी लगता है; या, चूंकि मैं शायद ही कभी उन्हें एक कमांड के पहले चरित्र के रूप में उपयोग करता हूं।

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