বর্তমান ফাইলটির অক্ষর গণনা প্রদর্শনের জন্য আমি কীভাবে (ছ) ভিম পেতে পারি?


85

আমি প্রায়শই একটি প্রোগ্রামিং ফোরামের জন্য টিউটোরিয়াল এবং নিবন্ধগুলি লিখতে চাই। এই ফোরামে প্রতি পোস্টের চরিত্রের সীমা রয়েছে। পোস্ট লিখতে আমি অতীতে নোটপ্যাড ++ ব্যবহার করেছি এবং এটি স্ট্যাটাস বারে একটি লাইভ চরিত্রের গণনা রাখে। আমি gVim আরও ব্যবহার করতে শুরু করছি এবং আমি এই মুহুর্তে নোটপ্যাড ++ এ ফিরে যেতে চাই না, তবে এই চরিত্রের সংখ্যাটি পাওয়া খুব দরকারী। আমি যদি গণনাটি অতিক্রম করি তবে আমি সাধারণত নোটপ্যাড ++ এ পোস্টটি আটকানো শেষ করি যাতে আমি সীমাবদ্ধতাটি পাওয়ার জন্য যথেষ্ট ছাঁটাই করেছি when

আমি পরামর্শগুলি দেখেছি যা :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 / প্রকল্পগুলি / ক্ল্যাম
মুর্চি

24
:help count-items

পরামর্শ দেয়, আপনি হয় একটি প্রতিস্থাপন আলার একটি শুকনো রান করতে পারেন

:%s/./&/gn

(যা তারপরে মিলে যাওয়া চরগুলির সংখ্যা ফিরিয়ে দেয়) বা আপনি strlen()চাক্ষুষভাবে নির্বাচিত পাঠ্যে অভিনব কাজটি করেন :

:echo strlen(@")

("নামবিহীন নিবন্ধক হ'ল)

যেহেতু আপনি আপনার স্ট্যাটাসলাইনে একটি এক্সপ্রেশন কল করতে পারেন এটির মতো %{myfunc()}ভাল সূচনা পয়েন্ট হতে পারে। সমস্ত সময় গণনা করা কিছুটা সময় সাশ্রয়ী হতে পারে যেহেতু আপনাকে পুরো পাঠ্যটি নির্বাচন করতে হবে এবং তারপরে এটি ইয়ঙ্ক করতে হবে তবে "-নিবন্ধনে বাইটের সংখ্যাটি দেখানো আপনার জন্য ইতিমধ্যে ঠিক আছে if আপনি যদি সত্যিই নম্বরটি জানতে চান তবে বাফারে অক্ষরের তালিকা: বাফারের সমস্ত পাঠ্যটি কেবল দৃষ্টিভঙ্গি দিয়ে নির্বাচন করুন এবং এটি ইঙ্ক করুন। সুতরাং সমাধানটি হ'ল:

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

যা আপনাকে "রেজিস্টারে অক্ষরের সংখ্যা দেয় (যা আপনি বর্তমান বাফারটি নির্বাচন করে এবং ইয়াঙ্ক করলে বাইটের সংখ্যার সমান)।


উইন্ডোজেও সলিউশন কাজ করে (যা বাশ কমান্ড দেয় না)।
dastrobu

আমি পছন্দ করি যে g<CTRL-g>গৃহীত উত্তরের পদ্ধতির মতো একটি সেকেন্ডের পরে গণনা অদৃশ্য হবে না ।
চেস্টার

7

মুর্চির উত্তরের বর্ধন:

কমান্ড আউটপুটটি নিম্নরূপভাবে wcপরিচালনা করে আপনি ফাইলটি প্রথমে সংরক্ষণ না করেই লিনাক্স ব্যবহার করতে পারেন :w:

:w !wc -m

এবং আপনি মুরুচি দ্বারা উল্লিখিত কিছুতে এটি মানচিত্র করতে পারেন।


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
নরমাল মোডে মুর্চির সমাধান "g ^ g" আমার পক্ষে যথেষ্ট ভাল ছিল। দ্রুত ডিবাগের জন্য আমার এটির প্রয়োজন ছিল, তাই আমি স্ট্যাটাসলাইনে সেই তথ্যটি চেষ্টা করে দেখার জন্য সময় নিই নি।
ম্যাট


1
যেহেতু ডক্সটি অস্পষ্ট এবং বিভ্রান্তিকর, তাই এটি লক্ষণীয় যে সুনির্দিষ্ট কমান্ডটি কার্যকর করতে হবে যা হ'ল set statusline+=\ %o\ %N (মজার বিষয় হল এটি "টি এস" আইটেমটির জন্য কাজ করে না) । তারপরে আপনি যদি স্থিতিটি অপরিবর্তিত দেখতে পান তবে এটি কার্যকর করার কারণ set laststatus=2। আমার জন্য এটি বিদ্যমান স্বচ্ছ স্ট্যাটাসলাইনটিকে নতুনের সাথে প্রতিস্থাপিত করেছিল, এটি শক্ত কালো এবং শুধুমাত্র "বাইট কাউন্ট" আইটেম রয়েছে।
হাই-এঞ্জেল

3

যদি আপনি: অভ্যাসটি ফাইলটি সংরক্ষণ করার অভ্যাসে থাকেন তবে প্রতিবার আপনি যখন এই অবস্থাটি করেন তখন লিখিত অক্ষরের সংখ্যা ফিরিয়ে দেয়। উদাহরণস্বরূপ, এই বাক্যটির শেষে আমি একটি করেছি: ডাব্লু (হ্যাঁ আমি এই নোটটি লেখার জন্য জিভিএম ব্যবহার করছি) এবং এটি রিপোর্ট করেছে: 245 সি লিখিত।


এক সময় ব্যবহারের জন্য এই গল্ফগুলি সুন্দরভাবে দেখায়।
সিরো সান্তিলি :29 改造 中心 法轮功 六四 事件

3

আপনি স্ট্যাটাসলাইনে বাফারের বাইকোয়েন্টটি প্রদর্শন করতে একটি এক্সপ্রেশন যুক্ত করতে পারেন:

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

বা এড়ানো সমস্ত এড়াতে আপনি সরাসরি বিকল্পের পরিবর্তনশীলটি পরিবর্তন করতে পারেন:

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

যখন আমি এটি চেষ্টা করি, জিভিম একটি অনাবৃত এক্সপ্রেশন ক্রম সম্পর্কে অভিযোগ করে। আমি লক্ষ্য করেছি যে আপনি একটি প্রথম বন্ধনী অনুপস্থিত রয়েছেন, তবে এটি ঠিক করেও কোনও লাভ হয় না। আমি যা এটিকে আবার লিখেছি তা এখানে: স্থিতি নির্ধারণ =% {লাইন 2 বাইট (রেখা ("$"))}
OwenP

@OwenP: এখন সংশোধন করা উচিত
আকিরা

1
সম্ভবত আপনি এটি চান ...%{ line2byte(line(\"$\")+1))-1 }যাতে এটি গণনাতে শেষ লাইনের অক্ষর অন্তর্ভুক্ত করে। যদিও এই পদ্ধতিটি মাল্টিবাইট অক্ষরগুলি সঠিকভাবে গণনা করবে না।
intuited

1
এছাড়াও আমি মনে করি আপনার ফাঁকা স্থানগুলি পালাতে হবে, বা কেবল এগুলি থেকে মুক্তি পান।
intuited

@ অন্তর্নিহিত পরামর্শগুলি অন্তর্ভুক্ত করার জন্য সম্পাদিত, এটিকে ওভাররাইটের পরিবর্তে স্থিতরেখায় যুক্ত করা হয়েছে।
জোয়েটউইডল

0

আমি মুর্চির উত্তর গ্রহণ না করা পর্যন্ত আমি ব্যবহার করে যাচ্ছি:

আমি দুর্ঘটনাক্রমে জানতে পেরেছিলাম যে যখন আমি: w ফাইলটি সংরক্ষণ করতে পারি, কমান্ডটি লিখিত বাইটের সংখ্যা আউটপুট করে দেয়। এটি কমবেশি একটি চরিত্রের গণনা, সুতরাং এটি এখন পর্যন্ত যথেষ্ট কাছাকাছি ছিল। আমি মুর্চির উত্তরটিও পছন্দ করি, সম্ভবত এটির চেয়ে বেশি কারণ এটিতে একটি শব্দ গণনাও রয়েছে।


0

আপনি যদি নিজের পাঠ্যের একটি ফাইল অনুলিপি রাখেন, কেবল আপনার পাঠ্যটি ডিস্কে লিখুন - অক্ষর গণনাটি ডিফল্টরূপে প্রদর্শিত হয়।

আপনি একটি ফাইল রাখার না চান তাহলে শুধু আপনার পাঠ্য সংরক্ষণ করবেন /dev/null: :w!/dev/null

আপনি wcআপনার অক্ষরগুলিও গণনা করতে পারেন : :%!wc -c- তবে Uআপনার পাঠ্য পুনরুদ্ধার করতে আঘাত করতে ভুলবেন না ।

আপনার যদি এটির প্রায়শ প্রয়োজন হয় তবে কেবল এই আদেশগুলি একটি মূল অনুক্রমের জন্য ম্যাপ করুন: :map #wc :w!/dev/null^[- নোট করুন যে ^[অবশ্যই Ctrl+ হিসাবে প্রবেশ করাতে হবে V Esc

পাঠ্য আকারের প্রথম সূচক হিসাবে, কেবল লাইন সংখ্যাগুলি চালু করুন; স্বীকৃত: এর জন্য কিছু মানসিক গাণিতিক প্রয়োজন ;-)


0

এই প্রশ্নটি থাকার পরে এবং উত্তরগুলি পড়ার পরে (ধন্যবাদ মুরুচি) আমি এই লাইনগুলিকে আমার .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>

আমি এটি ভিমেতে রেখেছি: ব্যবহারকারীরা কী করেন তা নির্ধারণ করতে সহায়তা করুন help

ব্যক্তিগতভাবে আমি ভিম ম্যাপিংগুলি দিয়ে শুরু করা দরকারী বলে মনে করি; বা, যেহেতু আমি খুব কমই কমান্ডের প্রথম চরিত্র হিসাবে এগুলি ব্যবহার করি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.