একসাথে একাধিক ভিআইএম ভাঁজ পদ্ধতি ব্যবহার করার কোনও উপায় আছে কি?


14

আমি foldmethod=indentআমার মধ্যে সেট করেছি ~/.vimrcএবং সাধারণভাবে এটি আমার পক্ষে কাজ করে এবং আমি এটি রাখতে চাই।

তবে, আমার কয়েকটি ফাইল রয়েছে যা আমি নিয়মিত সম্পাদনা করি (এবং যা আমার একচেটিয়া নিয়ন্ত্রণের অধীনে থাকে), যেখানে আমি একটি চিহ্নিতকারী-ভিত্তিক সিস্টেমে যুক্ত করতে চাই, বিশেষত যাতে আমি যখন ফাইলটি একটি বড় বিভাগ খুলি তখন I খুব কমই দেখুন (যা ইতিমধ্যে ইন্ডেন্ট দ্বারা 'সীমিত') প্রাক-ভাঁজযুক্ত। দেখে মনে হচ্ছে foldmethod=marker(আমি ফাইল এই 'প্রাক ভাঁজ' ইঙ্গিত প্রয়োজনে অদ্ভুত মন্তব্য কিছু মনে না করেন) আমার যে কি সম্ভব হবে, কিন্তু আমি এখনও চান foldmethod=indentতাই সেট যে আমি ব্যবহার করতে পারেন zc, zoএবং অতএব উপর ভাঁজ বা খোলার বিভাগগুলি ইনডেন্ট দ্বারা ফোল্ড করুন। যতদূর আমি বলতে পারি আমি একাধিক মানগুলিতে ফোল্ডমেড সেট করতে পারি না।

আমি এটি অর্জন করার অন্য কোনও উপায় আছে (আদর্শভাবে ফাইলটিতে এমবেড করা কিছু ব্যবহার করে)?


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

1
@ জেপি_ না, 'ফ্রেড না।
অ্যান্ড্রু ফেরিয়ার

উত্তর:


10

প্রতিটি উইন্ডোর নিজস্ব স্থানীয় মান থাকতে পারে 'foldmethod'; আপনি যা সেট করেছেন ~/.vimrcতা কেবল গ্লোবাল ডিফল্ট। নির্দিষ্ট বাফারের জন্য আলাদা স্থানীয় মান নির্ধারণের একাধিক উপায় রয়েছে :

  1. ম্যানুয়ালি সাথে :setlocal foldmethod=marker
  2. একটি নির্দিষ্ট ফাইল টাইপের জন্য (যেমন জাভা ফাইল): :autocmd FileType java setlocal foldmethod=marker(বা মধ্যে ~/.vim/after/ftplugin/java.vim)
  3. নির্দিষ্ট ফাইল (গুলি) এর জন্য: :autocmd BufRead /path/to/file setlocal foldmethod=marker
  4. একটি মডেলিনের মাধ্যমে ফাইলের ভিতরেই (যেহেতু আপনাকে যেভাবেই মার্কার যুক্ত করতে হবে, আমি এটি পছন্দ করব):

/* vim: set fdm=manual : */

একটি উইন্ডোর ভিতরে এখনও কেবল একটি ভাঁজ পদ্ধতি থাকতে পারে । আপনি যদি বিভিন্ন কৌশল নিয়োগ করতে চান তবে আপনাকে আরও নমনীয় পদ্ধতি বেছে নিতে হবে (উদাহরণস্বরূপ expr), এবং সেখানে "অন্যান্য" পদ্ধতি (গুলি) পুনরায় প্রয়োগ করতে হবে (উদাহরণস্বরূপ আপনার 'foldexpr'ইনডেন্টটি বিবেচনা করে)। অথবা আপনি একই বাফারের জন্য দুটি উইন্ডো বিভক্ত ব্যবহার করেন এবং প্রতিটি বিভক্তির জন্য আলাদা আলাদা ফোল্ডোমেডস সেট করেন।

যেহেতু সম্ভবত আপনি যা শুনতে চান তা নয়, আপনি :autocmd CursorMovedবর্তমান লাইনের উপর ভিত্তি করে ফোল্ডমেডুচকে স্যুইচ করে এমন কিছু দিয়ে একসাথে হ্যাক করতে পারেন :

" Use markers when in the first 100 lines, else use indent.
:autocmd CursorMoved,CursorMovedI <buffer> let &l:foldmethod = (line('.') <= 100 ? 'manual' : 'indent')

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

আপনার প্রশ্নটি সেই দিকটিতে পরিষ্কার ছিল না, স্পষ্টতার জন্য ধন্যবাদ। আমি আমার উত্তর সংশোধন করেছি।
ইনগো কারকাত

হ্যাঁ, আমি স্পষ্ট না হলে ক্ষমা চাই। ফোল্ডেক্সপ্রাইপটি সেরা পদ্ধতির মতো মনে হলেও জটিল। আমি যদিও চেষ্টা করে দেখতে দেব। পয়েন্টারটির জন্য +1।
অ্যান্ড্রু ফেরিয়ার

আবার ধন্যবাদ. আমি ফোল্ডেক্সপ্রাইপ লেখার চেষ্টা করছি এবং এখানে একটি সম্পর্কিত কিউ খুললাম যা আগ্রহী হতে পারে: superuser.com/questions/560167/…
অ্যান্ড্রু ফেরিয়ার

@ ইঙ্গোকারকাট: লাইনের নীচে প্রথম অনুচ্ছেদে আপনি লিখেছেন যে বাফার প্রতি মাত্র একটি ভাঁজ পদ্ধতি থাকতে পারে । আমি বিশ্বাস করি যে উইন্ডো প্রতি হওয়া উচিত ।
গ্যারিজোহান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.