ফাইলের শেষে ভিআইএম স্বয়ংক্রিয় নিউলাইনটি অক্ষম করে


250

সুতরাং আমি একটি পিএইচপি শপে কাজ করি এবং আমরা সকলেই বিভিন্ন সম্পাদক ব্যবহার করি এবং আমাদের সকলকে উইন্ডোতে কাজ করতে হয়। আমি ভিএম ব্যবহার করি এবং দোকানের প্রত্যেকে অভিযোগ করতে থাকে যে আমি যখনই কোনও ফাইল সম্পাদনা করি তখন নীচে একটি নতুন লাইন থাকে। আমি চারপাশে অনুসন্ধান করে দেখেছি যে এটি vi & vim এর নথিভুক্ত আচরণ ... তবে আমি ভাবছিলাম যে এই বৈশিষ্ট্যটি অক্ষম করার কোনও উপায় আছে কিনা। (আমি যদি নির্দিষ্ট ফাইল এক্সটেনশনের জন্য এটি অক্ষম করতে পারি তবে সবচেয়ে ভাল হবে)।

কেউ যদি এ সম্পর্কে জানতে পারে তবে তা দুর্দান্ত হবে!


23
আপনি তাদের বলবেন যে তারা নির্বুদ্ধ হচ্ছে - আসলে ভিম এমনটি করার একটি ভাল কারণ রয়েছে: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 29২৯ 2 69২ /… । যদিও আপনি ইউনিক্স-এর মতো সার্ভারে স্থাপন করছেন তবে এটি কেবল প্রাসঙ্গিক dep
hdgarrood

5
অফিসিয়াল পিএইচপি প্রস্তাবিত অনুশীলনটি হ'ল শেষ ?>কারণটি বাদ দেওয়া , কেবল এই কারণে।
সেবাস্তিয়ান গ্রিগনোলি

এই প্রশ্নটি সম্ভবত সুপারউসারকে পূর্বাভাস দেয় ... তবে এটি হওয়া উচিত।
gcb

20
প্রশ্নটি আসলেই হওয়া উচিত: আমরা কীভাবে অন্য সম্পাদকদের বলব যে আপনার দোকানের লোকেরা ফাইলের শেষ লাইনটি একটি ইওল দিয়ে শেষ হবে তা নিশ্চিত করতে ব্যবহার করছে । ;-)
টিজে ক্রাউডার

উত্তর:


359

এবং vim.4.৪+ এর জন্য আপনি (আপনার .vimrc এ সর্বাধিক) ব্যবহার করতে পারেন (সংবাদটির শেষ বিটটির জন্য to ধন্যবাদ!):

:set nofixendofline

এখন পুরানো সংস্করণ সম্পর্কিত vim

এমনকি ফাইলটি ইতিমধ্যে নতুন লাইনের সাহায্যে সংরক্ষণ করা থাকলেও:

vim -b file এবং একবার ভিমে:

:set noeol
:wq

সম্পন্ন.

বিকল্পভাবে আপনি ভিএম এর সাথে ফাইলগুলি খুলতে পারেন :e ++bin file

তবুও অন্য বিকল্প:

:set binary
:set noeol
:wq

6
এছাড়াও আপনি যোগ করতে পারেন set binaryএবং set noeolআপনার .vimrc মধ্যে
dryobs

17
সাবধান : binaryওভাররাইডগুলি expandtab, যা আপনাকে আপনার উত্সে আক্ষরিক ট্যাব পেতে পরিচালিত করবে।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件

4
@ সিরোসন্তিলি আপনাকে ধন্যবাদ! আমি চিরকাল বাইনারি এর পার্শ্ব প্রতিক্রিয়া খুঁজছি এবং ভাবছি কেন এটি ডিফল্ট নয়! যেহেতু আমি আমার ট্যাবগুলিকে ভালবাসি, তাই আমি মনে করি আমি সেই অতিরিক্ত সুবিধাটি বিবেচনা করব :)
জিসিবি

11
এখন আপনি যোগ করতে পারিনি set nofixendoflineতেজ মধ্যে 7.4+ সমস্যা সমাধানের জন্য
罗泽轩

1
@ ট্র্যাভারবয়েডস্মিথ হ্যাঁ, কারণ historতিহাসিকভাবে পসিক্স (আমি প্রকৃত মানটিতে ভুল হতে পারি) কোনও পাঠ্য ফাইলে একটি লাইনের শেষে নতুন লাইন আশা করে। এজন্য বেশিরভাগ সমাধানগুলিকে বাইনারি হিসাবে বিবেচনা করা প্রয়োজন। এটি সম্ভবত তখন খুব সুবিধাজনক ছিল এবং এটি আজ পিছিয়ে রয়েছে, এজন্য এখন সুবিধাজনক সেটিংস রয়েছে। এটি কেবল আপনার ভিআরসিআর-এ যুক্ত করুন। অন্য সম্পাদকদের আরও খারাপ সমস্যা আছে যাইহোক :)
gcb

23

শেষ-অফ-লাইন বিকল্পটি চালু করতে আপনার .vimrc এ নিম্নলিখিত কমান্ডটি যুক্ত করুন:

autocmd FileType php setlocal noeol binary fileformat=dos

তবে , পিএইচপি নিজেই সেই শেষ প্রান্তটি উপেক্ষা করবে - এটি কোনও সমস্যা হওয়া উচিত নয়। আমি প্রায় নিশ্চিত অন্য কিছু যা গত newline অক্ষর যোগ করা হয় যে আপনার ক্ষেত্রে আছি বা সম্ভবত উইন্ডোজ সঙ্গে একটি mixup হয় / ইউনিক্স লাইন শেষ প্রকার ( \nবা \r\n, ইত্যাদি)।

হালনাগাদ:

বিকল্প সমাধান হতে পারে কেবল আপনার .vimrc এ এই লাইনটি যুক্ত করা:

set fileformats+=dos

আমি জানি যে পিএইচপি এটিকে ভুলভাবে বিভক্ত করছে না ... আমি আমার সহকর্মীদের কাছে এটি দেখিয়েছি, তবে নিমজ্জন তাদেরকে আলাদা বলে দেখছে ... আমি এটি চেষ্টা করব এবং এটি আপনাকে কীভাবে পরিণত হয় তা আপনাকে জানাতে দেব।
বোশলে

এটি করার ফলে কোনও চূড়ান্ত লাইনের কাঙ্ক্ষিত প্রভাব নেই, তবে এটি ফাইলটিকে ইউনিক্স লাইনের শেষ রূপে রূপান্তরিত করে ... (এমনকি একটি উইন্ডোজ বাক্সেও) ... তাই আমি বাইনারি মোডে স্যুইচ করে আগে এটি করেছি ... তবে তারপরে লাইন শেষটি নোটপ্যাডে লেখা দেখায় না ... সবকিছু কেবল একটি লাইন।
বোশলে

দুর্ভাগ্যক্রমে এই পরামর্শগুলির কোনওটিই কাজ করে না। অটোকিমিডিতে ফাইলফর্ম্যাট = ডস যুক্ত করার কোনও প্রভাব নেই এবং ফাইল টাইপ + = ডস সেট করলেও পিছনে যোগ হয় \ n
বোসলে

দুঃখিত, আমি ভুল পেয়েছি, 'সেট ফাইল টাইপ + = ডস' ব্যবহার করুন, 'ফাইল ফর্ম্যাট সেট না করে ...'
খুব বেশি পিএইচপি

17

আপনি যদি সোর্স নিয়ন্ত্রণের জন্য গিট ব্যবহার করেন তবে এর কাছে যাওয়ার আরও একটি উপায় আছে। এখানে একটি উত্তরের দ্বারা অনুপ্রাণিত হয়ে , আমি গিটাট্রিবিউটস ফাইলটিতে ব্যবহারের জন্য আমার নিজের ফিল্টারটি লিখেছি ।

এই ফিল্টারটি ইনস্টল করতে, এটি noeol_filterআপনার কোথাও হিসাবে সংরক্ষণ করুন $PATH, এটি কার্যকর করতে সক্ষম করুন এবং নিম্নলিখিত কমান্ডগুলি চালনা করুন:

git config --global filter.noeol.clean noeol_filter
git config --global filter.noeol.smudge cat

কেবল নিজের জন্যই ফিল্টারটি ব্যবহার শুরু করতে, নিম্নলিখিত লাইনটি আপনারটিতে রাখুন $GIT_DIR/info/attributes:

*.php filter=noeol

এটি নিশ্চিত করবে যে আপনি কোনও .phpফাইলে কোনও নতুন লাইন প্রতিশ্রুতিবদ্ধ করবেন না , ভিম যা করুক না কেন।

এবং এখন, লিপি নিজেই:

#!/usr/bin/python

# a filter that strips newline from last line of its stdin
# if the last line is empty, leave it as-is, to make the operation idempotent
# inspired by: /programming/1654021/how-can-i-delete-a-newline-if-it-is-the-last-character-in-a-file/1663283#1663283

import sys

if __name__ == '__main__':
    try:
        pline = sys.stdin.next()
    except StopIteration:
        # no input, nothing to do
        sys.exit(0)

    # spit out all but the last line
    for line in sys.stdin:
        sys.stdout.write(pline)
        pline = line

    # strip newline from last line before spitting it out
    if len(pline) > 2 and pline.endswith("\r\n"):
        sys.stdout.write(pline[:-2])
    elif len(pline) > 1 and pline.endswith("\n"):
        sys.stdout.write(pline[:-1])
    else:
        sys.stdout.write(pline)

এটি একটি দুর্দান্ত সমাধান ... যদিও দুর্ভাগ্যক্রমে আমি গিট ব্যবহার করছিলাম না। আমি এসএনএন ব্যবহার করছিলাম, যদিও আমি সন্দেহ করি যে একই ধরণের পদ্ধতি গ্রহণ করা যেতে পারে। যাইহোক, আমি সেই অবস্থান থেকে সরে এসেছি এবং সে সম্পর্কে আর
কোনও

12

আমি এই বিকল্পটি ব্যবহার করে দেখিনি, তবে নিম্নলিখিত তথ্যটি ভিএম সহায়তা সিস্টেমে দেওয়া হয়েছে (অর্থাত্ সহায়তা ইওল):

'endofline' 'eol'   boolean (default on)
            local to buffer
            {not in Vi}

When writing a file and this option is off and the 'binary' option
is on, no <EOL> will be written for the last line in the file.  This
option is automatically set when starting to edit a new file, unless
the file does not have an <EOL> for the last line in the file, in
which case it is reset.  

সাধারণত আপনাকে এই বিকল্পটি সেট বা পুনরায় সেট করতে হবে না। যখন 'বাইনারি' বন্ধ থাকে তখন ফাইলটি লেখার সময় মান ব্যবহার করা হয় না। যখন 'বাইনারি' চালু থাকে তখন ফাইলটির শেষ লাইনের জন্য উপস্থিতির কথা মনে রাখা হয়, যাতে আপনি ফাইলটি লেখার সময় মূল ফাইল থেকে পরিস্থিতি রাখা যায়। আপনি চাইলে এটি পরিবর্তন করতে পারেন।

আপনি আগের প্রশ্নের উত্তরে আগ্রহীও হতে পারেন: " নতুন লাইনের মাধ্যমে ফাইলগুলি কেন শেষ করা উচিত "।


আমিও ইওল সেটিংস জুড়ে এসেছি ... তবে এটি এই কাজটি সম্পাদন করে না। এটি আরও একটি ভেরিয়েবল যা নির্ধারণ করে যে একটি ইতিমধ্যে ফাইলের শেষে স্থাপন করা হয়েছে কিনা। এছাড়াও, পাঠ্য ফাইলগুলিতে এর কোনও প্রভাব নেই, তবে কেবল বাইনারি ফাইলগুলিতে।
বোশলে

3
ভিআইএম সহায়তা আরও বলেছে "যখন 'বাইনারি' বন্ধ থাকে তখন ফাইলটি লেখার সময় মান ব্যবহার করা হয় না।" ইওল সম্পর্কে
বোশলে

1
প্রশ্নটিতে ভনসির উত্তরের জন্য +1, যা হ'ল "নিউলাইন" এবং ইওলকে সংঘাতের মধ্যে ফেলেছে। নিম্নমানের সম্পাদকরা ভুলভাবে একটি ইওএল কারণে একটি অতিরিক্ত নিউলাইন প্রদর্শন করে , ভিম একটি "নিউলাইন" যুক্ত করছে না!
দাবা

9

আমি অনুরূপ (যদিও ভিন্ন) সমস্যার জন্য ভিম উইকিতে একটি টিপ যুক্ত করেছি:

http://vim.wikia.com/wiki/Do_not_auto-add_a_newline_at_EOF


5
“ভিম .4.৪.8585৫ fixeolফাইলটির শেষে যে কোনও অনুপস্থিত ইওএল স্বয়ংক্রিয়ভাবে সংরক্ষণ করতে অক্ষম করা যায় সে বিকল্পটি যুক্ত করে । এই স্ক্রিপ্টটি ভিম .4.৪.8585৫ এবং তারপরের জন্য অদৃশ্য হয়ে যায় ”" (উত্স: একই উইকি পৃষ্ঠা)) ধন্যবাদ, আমি নতুন বিকল্পটি সম্পর্কে অবগত ছিলাম না।
আমির

1
আমি উভয় সেট করতে ছিল noeolএবং nofixeolকাঙ্ক্ষিত ফলাফল অর্জন করতে।
সেলুরવેদু

8

ঠিক আছে, আপনি উইন্ডোতে থাকা জিনিসগুলিকে জটিল করে তোলে;)

'বাইনারি' বিকল্পটি 'ফাইল ফর্ম্যাট' বিকল্পটি পুনরায় সেট করার সাথে (এবং 'বাইনারি' সেট দিয়ে লেখার ক্ষেত্রে সর্বদা ইউনিক্স লাইন সমাপ্তি দিয়ে লিখেছে), আসুন বড় হাতুড়িটি বের করে বাহ্যিকভাবে করা যাক!

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

সুতরাং এটি দেখতে এর মতো কিছু হবে এবং আপনার .vimrc ফাইলে যাবে:

autocmd!   "Remove all autocmds (for current group), see below"
autocmd BufWritePost *.php !your-script <afile>

এটি যদি আপনার প্রথমবার স্বতঃসম্পর্কিত ব্যবসায়ের সাথে সম্পর্কিত হয় তবে অটোমন্ডমগুলি সম্পর্কে পুরো ভিআইএম ডকুমেন্টেশন পড়তে ভুলবেন না। কিছু সাবধানতা রয়েছে, যেমন আপনার .vimrc একাধিকবার উত্সাহিত হতে পারে যদি আপনার .vimrc এর সমস্ত অটোক্যাম্ডস সরিয়ে ফেলা বাঞ্ছনীয়।


ঠিক আছে ... আমি আশা করছিলাম যে এর থেকে আরও ভাল সমাধান পাওয়া যাবে ... তবে এটি অবশ্যই কার্যকর!
বোশলে

3
এটি দুর্দান্ত কাজ করে! হ্যাঁ! তবে আমার একটি প্রশ্ন আছে ... এটি তৈরি করার কোনও উপায় আছে যাতে প্রতিটি সেভের পরে আমাকে দুবার প্রবেশ করতে হবে না। আমাকে সেমিড উইন্ডোতে প্রবেশ করতে হবে যা পপ আপ হয়েছে এবং তারপরে আবার কারণ ভিম আমাকে স্ক্রিপ্টটি সফল বলেছে ... কেবলমাত্র সেগুলি সরিয়ে দেওয়ার কোনও উপায়?
বুশলে 21

2
<এন্টার টিপুন> এড়ানোর জন্য কমান্ডটি কেবল উপসর্গের সাথে অনুরোধ জানানো হয় silent। যেমন silent !your-script <afile>
ড্যাশ-টম-ব্যাং

6

আমি পার্ল এবং পাইথন পোস্ট-প্রসেসিংয়ের সাথে ব্লিক্স্টরের পরামর্শগুলি বাস্তবায়িত করেছি, হয় ভিমের অভ্যন্তরে চলছে (যদি এটি এরূপ ভাষার সহায়তার সাথে সংকলিত হয়), অথবা বাহ্যিক পার্ল স্ক্রিপ্টের মাধ্যমে। এটি vim.org- এ PreservNoEOL প্লাগইন হিসাবে উপলব্ধ ।


আমি এটি পুরোপুরি পরীক্ষা করে দেখিনি, তবে এটি আরও ভাল সমাধান বলে মনে হচ্ছে।
বোশলে

প্লাগইন কাজ করে, তবে ইনস্টলেশনের পরে আমাকে let g:PreserveNoEOL = 1আমার .vimrcফাইলটি লিখতে হয়েছিল! প্লাগইন বিবরণ থেকে এটি বের করার জন্য ভিমস্ক্রিপ্ট শিখতে হয়েছিল! : ডি
ডার্থথ্যাঞ্জার

1
@ ডার্থভ্যাঞ্জার: আপনাকেও জানাত :help PreserveNoEOL-usage। আরটিএফএম :-)
ইনগো কারকাত

@ ইঙ্গোকারকাত ওহ, দুঃখিত এর অধীনে INSTALLATIONএবং এর সন্ধান করছিল CONFIGURATION। এমনকি USAGEবিভাগটি
বিবরণেও

3

তারা কেন অভিযোগ করছে তা আপনি হয়ত দেখতে পারেন। যদি কোনও পিএইচপি ফাইলের শেষের পরে একটি নতুন লাইন থাকে?>, পিএইচপি পৃষ্ঠার অংশ হিসাবে এটি আউটপুট দেয়। আপনি ফাইল অন্তর্ভুক্ত করার পরে শিরোনাম পাঠানোর চেষ্টা না করা পর্যন্ত এটি কোনও সমস্যা নয়।

তবে, পিএইচপি ফাইলের শেষে?> চ্ছিক। শেষ হচ্ছে না?> ফাইলের শেষে নতুন লাইনে কোনও সমস্যা নেই।


2
আপনি সঠিক, তবে আমরা একটি দোকান হিসাবে সিদ্ধান্ত নিয়েছিলাম যে এটি শেষ করা ভাল বলে মনে হচ্ছে?> আমি জানি আমরা এটি ব্যবহার বন্ধ করতে পারব ... তবে আমি আমার সম্পাদককে আমার কোডিং শৈলীর চারপাশের অন্যান্য উপায়ে ফিট করার জন্য সামঞ্জস্য করতে পছন্দ করব।
বোশলে

1
এছাড়াও, সুতরাং আপনি কীভাবে জানেন যে পিএইচপি স্বয়ংক্রিয়ভাবে আপনার শেষ ট্যাগটি?> বা হিসাবে?> \ N হিসাবে পার্স করবে (কারণ লিনাক্সে সমস্ত বৈধ ফাইলগুলি একটি \ n দিয়ে শেষ হওয়া উচিত) ... সুতরাং আমার কোড এই সমস্যাগুলির কারণ করে না ... তারা ঠিক চেহারা পছন্দ করে না।
বোশলে

2

আমি .vimrc এ যুক্ত করছি

set binary

এবং এটি সাহায্য করে, এটি চেষ্টা করে


2

আমি মনে করি গ্রহণযোগ্য উত্তরের চেয়ে ভাল সমাধান খুঁজে পেয়েছি। বিকল্প সমাধানগুলি আমার পক্ষে কাজ করে না এবং আমি বাইনারি মোডে সারাক্ষণ কাজ করতে চাই না। ভাগ্যক্রমে এটি কাজটি সেরে গেছে বলে মনে হচ্ছে এবং আমি এখনও কোনও খারাপ অভ্যাসের মুখোমুখি হই নি: পাঠ্য ফাইলের শেষে লাইনটি হারিয়ে যাওয়া-রক্ষা করে । আমি কেবল আমার। / .Vimrc এ পুরো জিনিসটি যুক্ত করেছি।


1

আপনার পক্ষে এই ফাইলগুলি সংরক্ষণের জন্য একটি বিশেষ কমান্ড ব্যবহার করা সম্ভব হবে?

আপনি যদি করেন: বাইনারি সেট করুন,: ডাব্লু এবং: সেট নোবাইনারি ফাইলটি নতুন লাইন ছাড়া লেখা হবে যদি সেখানে কোনও শুরু না করে থাকে।

কমান্ডের এই ক্রমটি অবশ্যই কোনও ব্যবহারকারী সংজ্ঞায়িত কমান্ড বা ম্যাপিংয়ে রাখা যেতে পারে।


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


0

আমি খুঁজে পেয়েছি যে এই উইমস্ক্রিপ্ট প্লাগইন এই পরিস্থিতির জন্য সহায়ক।

Plugin 'vim-scripts/PreserveNoEOL'

বা গিথুবে আরও পড়ুন

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