আমার যদি নিম্নোক্ত পাঠ্য থাকে:
foo
bar
আমি দৃশ্যত এটি নির্বাচন করুন এবং এটি অনুলিপি।
পাঠ্যটি এখন নামবিহীন নিবন্ধে সংরক্ষণ করা "
হয়েছে এবং এখানে এর লিখিত সামগ্রী (আউটপুট :reg "
) রয়েছে:
"" foo^Jbar^J
এই চার্ট অনুসারে , এটি ^J
একটি লাইন ফিডের ক্যারেট স্বরলিপি বলে মনে হচ্ছে।
যদি আমি a
টাইপ করে রেজিস্টারে নামবিহীন নিবন্ধটিকে নকল করতে চাই : :let @a = @"
এখানে এর বিষয়বস্তু (আউটপুট :reg a
):
"a foo^Jbar^J
এটি পরিবর্তন হয়নি।
আমি যদি এখন এটি লিখে সার্চ রেজিস্টারে নকল করি তবে :let @/ = @"
এখানে এর লিখিত সামগ্রী (আউটপুট :reg /
) এখানে রয়েছে:
"/ foo^@bar^@
পূর্ববর্তী চার্ট অনুসারে, এটি ^@
নুল চরিত্রের ক্যারেট স্বরলিপি বলে মনে হচ্ছে।
লাইন ফিড কেন অনুসন্ধান রেজিস্টারের অভ্যন্তরে স্বয়ংক্রিয়ভাবে নাল চরিত্রে রূপান্তরিত হয় (তবে a
নিবন্ধক নয়)?
যদি আমি /
টাইপ করে কমান্ড লাইনে (বা পরে কোনও অনুসন্ধানের অভ্যন্তরে ) নামবিহীন নিবন্ধটি সন্নিবেশ করি :<C-R>"
তবে যা এখানে প্রবেশ করানো হয়েছে তা এখানে:
:foo^Mbar^M
আবার, শেষ চার্ট অনুসারে, ^M
ক্যারিজ রিটার্নের ক্যারেট স্বরলিপি বলে মনে হচ্ছে।
কেন একটি লাইন ফিড কমান্ড লাইনে স্বয়ংক্রিয়ভাবে ক্যারেজ রিটার্নে রূপান্তরিত হয়?
সম্পাদনা করুন :
সাধারণত আপনি টাইপ করে একটি আক্ষরিক নিয়ন্ত্রণ অক্ষর সন্নিবেশ করতে পারেন:
<C-V><C-{character in caret notation}>
উদাহরণস্বরূপ, আপনি <C-R>
টাইপ করে আক্ষরিক সন্নিবেশ করতে পারেন <C-V><C-R>
।
আপাতদৃষ্টিতে যে কোনও নিয়ন্ত্রণ চরিত্রের জন্য আপনি এটি করতে পারেন।
তবে আমি লক্ষ করেছি যে আমি কোনও বাফারের ভিতরে বা কমান্ড লাইনে একটি আক্ষরিক এলএফ inোকাতে অক্ষম, কারণ যদি আমি টাইপ করি: <C-V><C-J>
এটি সন্নিবেশ করানো হয় ^@
, পরিবর্তে একটি নাল অক্ষর ^J
।
এটি কি একই কারণে অনুসন্ধানের নিবন্ধের অভ্যন্তরে কোনও এলএফকে NUL এ রূপান্তরিত করা হয়?
সম্পাদনা 2 :
ইন :h key-notation
, আমরা এটি পড়তে পারি:
<Nul> zero CTRL-@ 0 (stored as 10) <Nul>
<NL> linefeed CTRL-J 10 (used for <Nul>)
stored as 10
প্রথম লাইনে এবং অংশ used for <Nul>
দ্বিতীয় লাইনে ইঙ্গিত করতে পারে সেখানে একটি এলএফ এবং NUL মধ্যে ওভারল্যাপ কিছু বাছাই যে, এবং তারা একই জিনিস হিসেবে ব্যাখ্যা করা যেতে পারে। তবে সেগুলি একই জিনিস হতে পারে না, কারণ পূর্ববর্তী কমান্ডটি কার্যকর করার পরে :let @/ = @"
, আমি যদি n
2 লাইনের পরবর্তী উপস্থিতিটি পেতে স্বাভাবিক মোডে টাইপ করি foo
এবং bar
, ইতিবাচক মিল পাওয়ার পরিবর্তে আমার নীচের ত্রুটি বার্তাটি থাকে:
E486: Pattern not found: foo^@bar^@
এই লিঙ্কটি ছাড়াও বোঝা যাচ্ছে যে একটি এনএলই একটি স্ট্রিংয়ের সমাপ্তি বোঝায়, অন্যদিকে এলএফ একটি পাঠ্য ফাইলে একটি রেখার প্রান্তকে বোঝায়।
এবং যদি কোনও NUL stored as 10
সহায়তা হিসাবে বলে থাকে, যা কোনও এলএফ হিসাবে একই কোড, তবে ভিম কীভাবে 2 এর মধ্যে পার্থক্য করতে সক্ষম?
সম্পাদনা 3 :
সম্ভবত একটি এলএফ এবং একটি এনএইউএল একই দশমিক কোড সহ কোডড রয়েছে 10
, যেমন সাহায্য বলেছে। এবং ভিম প্রসঙ্গে 2 টি ধন্যবাদের মধ্যে পার্থক্য তৈরি করে। এটি যদি এমন কোনও চরিত্রের সাথে দেখা যায় যার দশমিক কোডটি 10
বাফারে বা কোনও রেজিস্টারে থাকে, সন্ধান এবং কমান্ডের রেজিস্ট্রেশন বাদে, এটি এলএফ হিসাবে ব্যাখ্যা করে।
তবে অনুসন্ধান রেজিস্টারে ( :reg /
) এটি এটিকে NUL হিসাবে ব্যাখ্যা করে কারণ একটি অনুসন্ধানের প্রসঙ্গে ভিম কেবল একটি স্ট্রিং অনুসন্ধান করে যেখানে end of line in a file
স্ট্রিং কোনও ফাইল নয় বলে ধারণাটি বোধগম্য হয় না (যা আপনি পারছেন বলে অদ্ভুত এখনও \n
অনুসন্ধান করা প্যাটার্নে পরমাণুটি ব্যবহার করুন , তবে এটি কেবল রেজেক্স ইঞ্জিনের একটি বৈশিষ্ট্য?)। সুতরাং এটি স্বয়ংক্রিয়ভাবে 10
NUL হিসাবে ব্যাখ্যা করে কারণ এটি নিকটতম ধারণা ( end of string
≈ end of line
)।
এবং একইভাবে, কমান্ড লাইন / কমান্ড রেজিস্টারে ( :reg :
) এটি 10
কোডটিকে সিআর হিসাবে ব্যাখ্যা করে , কারণ এখানে ধারণার end of line in a file
কোনও ধারণা নেই। নিকটতম ধারণা end of command
তাই তেজ ব্যাখ্যা করে 10
, একটি সি আর যেমন কারণ আঘাত Enter
শেষ উপায় / কমান্ড চালানো এবং সি আর আঘাত হিসাবে একই Enter
, যখন আপনার সাথে একটি আক্ষরিক এক সন্নিবেশ যেহেতু <C-V><Enter>
, ^M
প্রদর্শিত হয়।
যার চরিত্রের কোডটি 10
প্রসঙ্গ অনুসারে পরিবর্তিত হয় তার ব্যাখ্যা হতে পারে :
- একটি বাফারে লাইনের শেষ (
^J
) - অনুসন্ধানে স্ট্রিংয়ের শেষ (
^@
) - কমান্ড লাইনে কমান্ডের সমাপ্তি (
^M
)
someFunction(arg1, "")
যেখানে আরগ 2 ছিল ""
"উদ্ধৃতিগুলির মধ্যে থাকা আইটেমটি, যা আক্ষরিক অর্থে কিছুই নয় - একটি" খালি "a আপনি কিভাবে এই জন্য চেক করবে - কিন্তু এটি একটি সম্ভাব্য কারণ হিসাবে মনে আসে।
\r
এবং \n
পার্থক্য:substitute
দেখুন ।
NULL
স্ট্রিংগুলি পরিচালনা করে এমন অন্তর্নিহিত সি ফাংশনের কারণে অপ্রত্যাশিত অক্ষরের ঘটনা ঘটে থাকে । সি আপনি যে সংযুক্ত স্ট্রিংকে প্রক্রিয়াজাত করেন তার এই ব্যাখ্যাটি ব্যাখ্যা করে যে অভ্যন্তরীণ সি এর সাথে স্ট্রিংগুলি সীমিত করেNULL
।NULL
এর পাঠ্যে খুব কমই দেখা যায় যে এটিকে এ উদ্দেশ্যে এটি একটি ভাল চরিত্র হিসাবে তৈরি করে। এর পরিণতি হ'ল যদি সি প্রোগ্রাম (ভিআইএম) কোনও "খালি" স্ট্রিংটি অভ্যন্তরীণ সি ফাংশনে স্থান দেওয়ার চেষ্টা করে