ফাইলের আকার এবং ধরণের উপর নির্ভর করে সিনট্যাক্স হাইলাইটিং অক্ষম করুন


16

আমাকে প্রায়শই ভিএম সহ বিভিন্ন এক্সএমএল ফাইলগুলি সম্পাদনা করতে হয়, যা আকারে বন্যভাবে পরিবর্তিত হয় - কনফিগারেশন ফাইলগুলি থেকে কয়েকটি হুন্ডেড লাইনযুক্ত 2GB অবধি আকারের প্রোডাকশন ডেটা ফাইল পর্যন্ত। সিনট্যাক্স হাইলাইটিং সক্ষম থাকা অবশ্যই বিশাল ফাইলগুলির সাথে ডিল করার সময় একটি খুব খারাপ ধারণা, সুতরাং ফাইলটি একটি প্রান্তিকের চেয়ে বড় হলে আমি এটি অক্ষম করতে চাই।

autocommandসিনট্যাক্স হাইলাইটিং নিষ্ক্রিয় করতে সরাসরি এটি ব্যবহার করে আমি এটি কাজ করতে পারি না , যেমন শেল থেকে ভিএম শুরু করার সময় সিনট্যাক্স সক্ষম হওয়ার আগে স্পষ্টতই কমান্ডটি কার্যকর করা হয় :

" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif

আমি এমন একটি কাজের সন্ধান পেয়েছি যে আমি বিশ্বব্যাপী সিনট্যাক্স হাইলাইটিং অক্ষম করতে পারি, তারপরে এটি এক্সএমএল ব্যতীত অন্য সমস্ত ফাইল টাইপের জন্য আবার চালু করুন এবং ফাইল প্রান্তিকের চেয়ে বড় না হলে ফাইল টাইপ এক্সএমএল জন্য এটি চালু করুন:

syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif

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



যদিও এই প্রশ্নটি বেশ ভাল লেখা আছে তবে মনে হচ্ছে এটির মূলত একই জমিটি
অ্যান্ড্রু ফেরিয়ার

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

l4mpi, এটি একটি সুস্পষ্ট পয়েন্ট, আমি ফাইল টাইপের জিনিসটিও খুব ভালভাবে খুঁজে পাইনি। আংশিকভাবে এখানে নতুন বিটার জলের পরীক্ষা করা হচ্ছে! পয়েন্ট নেওয়া হয়েছে। আমি আমার সদৃশ ভোট প্রত্যাহার করব।
অ্যান্ড্রু ফেরিয়ার 5'15

উত্তর:


11

এই মন্তব্যটি দ্বারা derobert আমাকে সমাধান নেতৃত্বে:

autocmd Filetype xml if getfsize(@%) > 1000000 | setlocal syntax=OFF | endif

এটি কেবলমাত্র একটি বাফারে সিনট্যাক্স হাইলাইটযোগ্যভাবে নির্ভরযোগ্যভাবে অক্ষম করেছে।

autocmd BufReadPreএকটি লাল হেরিং একটি বিট ছিল। প্রসঙ্গে syntax off কাজ করে তবে BufReadPreপ্রসঙ্গে নয় Filetype(এবং অবশ্যই বিশ্বব্যাপী সিনট্যাক্স অক্ষম করে); যখন প্রসঙ্গে কাজ setlocal syntax=OFFকরে না তবে BufReadPreপ্রসঙ্গে কাজ Filetypeকরে।


1

এই autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endifআপনার প্রয়োজন।


2
হুঁ, এটি সিনট্যাক্স হাইলাইটিং অক্ষম করে, তবে সমস্ত বাফারগুলিতে কেবল বড় ফাইলের সাথে এটি নয়। এছাড়াও &ftএই প্রসঙ্গে সেট করা হবে না বলে মনে হয় সুতরাং এটি কীভাবে কেবল এক্সএমএল ফাইলগুলিতে সীমাবদ্ধ রাখতে হয় তা আমি জানি না। কোন ধারনা?
l4mpi

আমি মনে করি আপনি set syntax=OFFপরিবর্তে চান । (বা এটি সেটলোকাল হওয়া উচিত?)
ডার্বার্ট

আপনি সম্ভবত চেষ্টা করতে চান হতে পারে syntax clear?
ধ্রুভা সাগর

@ਡੇারবার্ট setlocal syntax=OFFকাজ করেন, যদিও এর সাথে না BufReadPre *- এর জন্য আমাকে স্বতঃসমান্তকে ফিরে যেতে Filetype xmlহয়েছিল। মনে হয় এটা যা কাজ যা প্রেক্ষিতে autocommand ... কমান্ড nontrivial এর
l4mpi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.