VIM में हाइलाइट की गई स्ट्रिंग लंबाई की गणना करें


24

मुझे आश्चर्य है कि vim(सफेद रिक्त स्थान सहित) में हाइलाइट किए गए प्रतीकों को गिनने का एक तरीका है ?

अद्यतन करें

वीआईएम विजुअल मोड

यदि मेरा चयन कई पंक्तियों पर है तो यह पंक्तियों की गिनती दिखाता है। मुझे सिंबल काउंट चाहिए।

जवाबों:


28

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

- दृश्य - १२

जहां दाईं ओर संख्या हाइलाइट किए गए वर्णों की संख्या है। यह केवल तभी काम करता है जब चयन एकल पंक्ति पर हो, अन्यथा यह पंक्ति गणना दिखाता है।

आप नेत्रहीन रूप से पाठ और प्रकार के कुछ क्षेत्र का चयन कर सकते हैं g Ctrl-Gजो चयनित लाइनों, शब्दों और बाइट्स की संख्या को दिखाएगा।


4
(दंग रह) कैसे हो मैं विम इतने लंबे समय के लिए उपयोग किया था और नोटिस कभी नहीं है कि ? लेकिन अपने बचाव में, मैं क्रमिक रूप से संख्या प्राप्त करने के बारे में सोच रहा था।
njd

अच्छा जवाब है, लेकिन अद्यतन प्रश्न पर एक नज़र डालें। साथ ही @njd के रूप में मुझे वह नज़र नहीं आया।
नेमोडेन

1
@Nemoden: garyjohn के सुझाव (g Ctrl-G) के दूसरे भाग को आज़माएँ। इसे "लाइक # ऑफ # लाइन्स, # ऑफ # वर्ड्स; # ऑफ # बाइट्स" जैसी लाइन दिखानी चाहिए।
पेठ

ओह। मेरी गलती। मुझे नहीं पता कि मैंने दूसरा समाधान क्यों छोड़ दिया है। यह काम करता हैं। धन्यवाद!
नेमोडेन

12
यह कुछ सिस्टम पर डिफ़ॉल्ट रूप से सक्षम नहीं है। इसे सक्षम करने के लिए बस set showcmdअपने vimrcको जोड़ें ।
टायलर होलियन

8

दृश्यमान पाठ के लिए वर्ण गणना और लाइन काउंट प्रदर्शित करने के बीच विम फ्लिप्स करता है कि आप क्या और कैसे कल्पना करते हैं (वीएपी 7.4 सेप्ट 2015 को पैच के आधार पर)

V will display line count
v$ will display character count

यदि आप एक से अधिक लाइन की कल्पना करते हैं तो यह केवल लाइन काउंट प्रदर्शित करता है

g-CTRL-G displays 'byte count' which seems to be 'char count' +1 per line

जैसा कि सवाल कहता है, यहां तक ​​कि vअगर चरित्र चयन से कई लाइनों तक फैला है, तो चरित्र-गिनती से लाइन-गणना तक सामान्य स्विच। हालांकि g CTRL-Gकाम अच्छी तरह से करता है।
joeytwiddle

2
:function VisualLength()
:  exe 'normal "xy'
:  echo "Visual: " . strlen(@x) . "\n"
:  exe 'normal gv'
:endfunction

:map ,q "xy:call VisualLength()<CR>
  1. सबसे पहले आप वर्तमान चयन (बफ़र x में) जमा करते हैं

  2. फिर आप उस बफ़र की लंबाई प्रदर्शित करते हैं: strlen(@x)
    ( - विज़ुअल - स्टेटस लाइन में प्रदर्शित यह अस्पष्ट करता है, इसलिए हमें एक नई पंक्ति जोड़ना होगा)

  3. पिछली दृश्य श्रेणी को हाइलाइट करें: gv

यह इस बात पर ध्यान नहीं देता है कि दृश्य मोड लाइन-, वर्ण- या ब्लॉक-मोड है, लेकिन यह अधिकांश मामलों के लिए पर्याप्त है।


2

मैं आपके स्क्रीनशॉट से देख रहा हूं कि आप विंडोज में चल रहे हैं, इसलिए यह उत्तर आपकी उतनी मदद नहीं कर सकता है। लेकिन दूसरों के लिए ...

Vim का एक अंडर-यूज्ड (IMO) फीचर बाहरी कमांड्स को हेवी लिफ्टिंग करने देता है।

इस स्थिति के लिए, यदि आप UNIX जैसी प्रणाली पर हैं, तो आप ऐसा करने के लिए wcकमांड का उपयोग कर सकते हैं ।

सबसे आसान तरीका यह है कि चयनित पाठ को कमांड के आउटपुट के साथ टाइप करके प्रतिस्थापित किया जाए (पाठ चयनित के साथ):

:!wc

(उसके बाद एन्टर प्रेस करें)।

यह आपकी कमांड लाइन में दिखाई देगा:

'<,'>!wc

आपके द्वारा जानकारी पढ़ने के बाद, आप उस स्थान पर वापस जाने के uलिए पूर्ववत कर सकते हैं जहाँ आपने शुरू किया था।

नोट: यह प्रसंस्करण पूरी लाइनों पर ही किया जाता है । यदि आप आंशिक रेखाएँ चाहते हैं, तो मुझे लगता है कि @ garyjohn की g_CTRL-Gआपकी सबसे अच्छी शर्त है।

आप चलने के बजाय पूर्ववत करने की आवश्यकता से बच सकते हैं:

:w !wc

यह कमांड के मानक इनपुट के लिए चयनित लाइनों को "लिखता है", और कमांड का आउटपुट मूल अछूता छोड़कर एक नए अस्थायी बफर में प्रदर्शित किया जाएगा। :help :write_cअधिक जानकारी के लिए देखें ।

नोट: मुझे इसकी :write_cजानकारी मिली: /programming/1237780/vim-execute-shell-command-without-filtering

अब, आम तौर पर:

यह उदाहरण wcबहुत सरल है, लेकिन आप सोच सकते हैं कि यह एक शक्तिशाली दृष्टिकोण कैसे है। UNIX में पहले से ही बहुत सारे टेक्स्ट प्रोसेसिंग कमांड उपलब्ध हैं, और आप Vimcript (yech) को छूने की आवश्यकता के बिना उन्हें Vim के अंदर काफी आसानी से उपयोग कर सकते हैं।

इसके अलावा, कोई भी कमांडलाइन प्रोग्राम जो आप लिखते हैं कि स्टडिन / स्टडआउट से संबंधित डील अब न केवल आपके टर्मिनल पर, बल्कि विम के अंदर भी आपको फायदा पहुंचा सकती है।

मैं अपने आप को, उदाहरण के लिए, चल रहा हूँ tidyऔर json-formatअंदर से मैं फ़ाइलों को और अधिक पठनीय देख रहा हूँ बनाने के लिए।

आप विंडोज पर भी ऐसा ही कर सकते हैं, लेकिन विंडोज में अंतर्निहित कमांड का इतना समृद्ध सेट नहीं है। आप उन लाभों को प्राप्त करने के लिए हमेशा GNUWin32 या इससे मिलते-जुलते स्थापित कर सकते हैं ।


1

विम्सस्क्रिप्ट के भीतर प्रोग्रामेटिक तरीके के लिए, यह मेरे लिए काम करता है जब चयन एक पंक्ति के भीतर सीमित होता है:

let amount = virtcol("'>") - virtcol("'<")

( virtcol(..)इसके बजाय col(..), जैसे कि यह :set ve=allसक्रिय होने पर अपेक्षित रूप से काम करता है।)

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