আমি একটি অদ্ভুত আচরণ বুঝতে কষ্ট: (: এলএফ যেমন একটি ইউনিক্স (হয় হওয়া ASCII ষষ্ঠ একটি newline যোগ করার জন্য মনে হয় , AIX ) সিস্টেম) ফাইলের শেষে যখন আমি বিশেষভাবে তা না টাইপ হয়নি করেন।
আমি vi তে ফাইলটি সম্পাদনা করি (শেষের দিকে একটি নতুন লাইন ইনপুট না দেওয়ার বিষয়ে যত্ন নিচ্ছি):
# vi foo ## Which I will finish on the char "9" and not input a last newline, then `:wq`
123456789
123456789
123456789
123456789
~
~
## When I save, the cursor is just above the last "9", and no newline was added.
আমি vi আশা করি এটি "যেমন আছে" সংরক্ষণ করুন, সুতরাং 39 বাইট থাকবে: প্রথম তিনটি লাইনের প্রত্যেকটিতে 10 টি ASCII অক্ষর (1 থেকে 9 নম্বর, পরে একটি নতুন লাইন (আমার সিস্টেমে এলএফ)) থাকবে এবং শেষটিতে কেবল 9 লাইন (1 থেকে 9 টি অক্ষর, কোনও নতুন লাইন / এলএফ শেষ হবে না)।
তবে এটি সংরক্ষণ করা হয় যখন আমি এটি সংরক্ষণ করি এটি 40 বাইট (39 এর পরিবর্তে), এবং ওড একটি সমাপ্ত এলএফ দেখায় :
# wc foo
4 4 40 foo ## I expected 39 here! as I didn't add the last newline
# od -a toto
0000000 1 2 3 4 5 6 7 8 9 lf 1 2 3 4 5 6
0000020 7 8 9 lf 1 2 3 4 5 6 7 8 9 lf 1 2
0000040 3 4 5 6 7 8 9 lf
0000050
## An "lf" terminates the file?? Did vi add it silently?
আমি যদি ভিআই এর ভিতরে যা করেছি ঠিক তেমন কাজ করে যদি ফাইলটি তৈরি করি তবে এটি প্রত্যাশার মতো কাজ করে:
# ## I create a file with NO newline at the end:
# printf "123456789\n123456789\n123456789\n123456789" > foo2
# wc foo2 ## This one is as expected: 39 bytes, exactly as I was trying to do above with vi.
3 4 39 foo ## As expected, as I didn't add the last newline
## Note that for wc, there are only three lines!
## (So wc -l doesn't count lines; it counts the [newline] chars... Which is rather odd.)
# root@SPU0WMY1:~ ## od -a foo2
0000000 1 2 3 4 5 6 7 8 9 lf 1 2 3 4 5 6
0000020 7 8 9 lf 1 2 3 4 5 6 7 8 9 lf 1 2
0000040 3 4 5 6 7 8 9
0000047 ## As expected, no added LF.
আমি যদি vi দিয়ে আবার খুলি তবে উভয় ফাইল (foo (40 অক্ষর) এবং foo2 (39 টি অক্ষর) হুবহু একই প্রদর্শিত হবে ...
এবং আমি যদি vi এর মধ্যে foo2 (39 টি অক্ষর, কোনও নতুন লাইনের অবসান নেই) ও এটি সম্পাদনা না :wq
করেই করি তবে এটি 40 অক্ষর লিখেছে এবং লাইনফিডটি উপস্থিত হবে!
আমার কাছে আরও সাম্প্রতিক vi (অ্যাক্সেস অ্যাক্সেস) থাকতে পারে না (আমি এটি এআইএক্স, vi ( ভিম নয় ) সংস্করণে 3.10 মনে করি? (কোনও "রূপান্তর" বা এটি জানার অন্যান্য উপায় নেই))।
# strings /usr/bin/vi | grep -i 'version.*[0-9]'
@(#) Version 3.10
ভিআই (এবং সম্ভবত সাম্প্রতিক সংস্করণে নেই? বা ভিম?) এর জন্য ফাইলের শেষে নিঃশব্দে একটি নতুন লাইন যুক্ত করা কি স্বাভাবিক? (আমি ভেবেছিলাম ~ ইঙ্গিত করেছে যে আগের লাইনটি কোনও নতুন লাইনের সাথে শেষ হয়নি NOT)
-
সম্পাদনা করুন: নীচের উত্তরের জন্য একটি বৃহত ধন্যবাদ সহ কিছু অতিরিক্ত আপডেট এবং কিছু সংক্ষিপ্তসার:
vi নিঃশব্দে এই মুহুর্তে এটি একটি ফাইল লেখায় যা এর অভাবের সাথে একটি লেখনী নিউলাইন যুক্ত করে (ফাইলটি খালি না থাকলে)।
এটি কেবল লেখার সময় করে! (যেমন, আপনি: ডাব্লু পর্যন্ত, আপনি ব্যবহার করতে পারেন: e ফাইলটি খোলার সাথে সাথে এখনও রয়েছে কিনা তা যাচাই করতে ... (যেমন: এটি এখনও "ফাইলের নাম" দেখায় [শেষ লাইনটি সম্পূর্ণ নয়] এন লাইন, এম অক্ষর)। আপনি যখন সংরক্ষণ করেন, সুনির্দিষ্ট সতর্কতা ছাড়াই একটি নতুন লাইন চুপচাপ যুক্ত করা হয় (এটি কতটা বাইট সংরক্ষণ করে তা বলে না, তবে এটি বেশিরভাগ ক্ষেত্রেই একটি নতুন লাইন যুক্ত হয়েছিল তা জানা যথেষ্ট নয়) (জিলিয়াগ্র্রে আমার সাথে কথা বলার জন্য ধন্যবাদ vi বার্তা খোলার ফলে, পরিবর্তনটি আসলে কখন ঘটে তা জানার উপায় খুঁজতে আমাকে সহায়তা করেছিল)
এটি (নীরব সংশোধন) হ'ল পসিক্স আচরণ! (রেফারেন্সের জন্য @ খালি পায়ে-আইও উত্তর দেখুন)
vi
চালিয়ে আপনি সংস্করণ বা কমপক্ষে তার উত্স সম্পর্কে কোনও ধারণা পেতে সক্ষম হবেন :ve
।
ex
ম্যানুয়াল পৃষ্ঠাটি সরিয়ে ফেলল যেখানে :ver
কমান্ডটি সাধারণত নথিভুক্ত থাকে।