কোনও ফাইল, অ-বিদ্যমান ফাইল, বা একটি ফাঁকা ফাইল (তবে কোনও বিদ্যমান ফাইল দিয়ে শুরু করার সময় নয়) দিয়ে ভিম শুরু করার সময় আমি কীভাবে একটি অটোকিমিড চালাতে পারি?


11

আমি যখন ভিম শুরু করি তখন আমি নিম্নলিখিত পরিস্থিতিতে একটি স্বতঃসিএমডি চালাতে চাই:

  • কোনও ফাইল নাম নির্দিষ্ট করে নেই।
  • ফাইলটি নতুন হলে।
  • ফাইল উপস্থিত থাকলেও সম্পূর্ণ ফাঁকা থাকে।

উপরোক্ত তিনটি ক্ষেত্রেই আমি একটি অটোকিমডি চালাতে চাই; বিশেষত, আমি কেবল উপরের পরিস্থিতিগুলির জন্য স্বয়ংক্রিয়ভাবে সন্নিবেশ মোডটি শুরু করতে চাই (এবং যখন আমি ইতিমধ্যে উপস্থিত কোনও ফাইল খুলি না এবং ফাঁকা নয়)।


হালনাগাদ:

আমি আমার মধ্যে নিম্নলিখিতগুলি রাখার চেষ্টা করেছি _vimrc, তবে ভাগ্য নেই (প্লাস আমি নিশ্চিত না যে ভিমে কোনও ফাংশন রয়েছে যা কোনও ফাইলের অক্ষরের সংখ্যা গণনা করে (এটি শূন্য কিনা তা দেখতে) এটি খোলার আগে:

if @% == "" || filereadable(@%)
  autocmd BufRead,BufNewFile * startinsert
endif

না, এটি কোনও সদৃশ নয়। আমি চাই আমি কেবল তিনটি স্কেনারিওর জন্য sertোকানো মোডটি চালু করতে পারি M
জন সন্ডারসন

3
ঠিক আছে, আমি দু: খিত কিন্তু সত্যই এটি দেখতে পেয়েছি একটি ডুপ্লিকেট। ;-) পার্থক্য আরও স্পষ্ট করতে আমি আপনার প্রশ্নটি কিছুটা সম্পাদনা করেছি।
মার্টিন টর্নোইজ


2
@ জনসন্ডারসন প্রথম লিঙ্কটি আপনাকে জানায় যে কোনও ফাইলের নাম দেওয়া না থাকলে কীভাবে খুঁজে পাওয়া যায়, দ্বিতীয়টি normalপরিবর্তে ব্যবহার করে মানিয়ে নেওয়া যায় exec
মুড়ু

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

উত্তর:


10

এটি আমার জন্য আপনার তিনটি মামলার জন্য কাজ করে:

function InsertIfEmpty()
    if @% == ""
        " No filename for current buffer
        startinsert
    elseif filereadable(@%) == 0
        " File doesn't exist yet
        startinsert
    elseif line('$') == 1 && col('$') == 1
        " File is empty
        startinsert
    endif
endfunction

au VimEnter * call InsertIfEmpty()

এগুলি সম্ভবত কোনও ফাইল খালি থাকার জন্য কেবল শেষ চেকের মধ্যে ঘনীভূত হতে পারে, যেহেতু কোনও ফাইলের নাম বা কোনও ফাইল নেই যা খালি বাফার হিসাবে সাধারণত শুরু হয় না। তবে সম্ভবত এটি সম্ভব যে অন্য কোনও প্লাগইন প্রথম দুটি ক্ষেত্রে কোনও একটি (কিছু টেমপ্লেট প্লাগইনগুলির মতো) প্রাক-পূরণ করে, তাই তিনটিই পরীক্ষা করা ভাল।

আপনি ইতিমধ্যে প্রথম পরীক্ষা ছিল।

দ্বিতীয় পরীক্ষায় filereadableনতুন (আপনার কাছে যা ছিল তার বিপরীতে) নতুন কিনা তা নির্ধারণের জন্য শূন্যের মান (বিদ্যমান নেই) এর বিপরীতে পরীক্ষা করা দরকার।

সর্বশেষ পরীক্ষাটি পরীক্ষা করে যে ফাইলটিতে সর্বশেষ লাইনের সংখ্যা 1 (যা প্রথম লাইনটিও রয়েছে যার অর্থ একটি মাত্র লাইন রয়েছে), এবং রেখার শেষের কলাম নম্বর (শেষ অক্ষরের পরে কলাম) লাইনটি 1, যার অর্থ 0 টি অক্ষর রয়েছে। যদি এর মধ্যে 0 টি অক্ষরের সাথে যদি কেবল 1 লাইন থাকে তবে অবশ্যই ফাইলটি খালি থাকতে হবে।

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

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

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