আপনি যা জিজ্ঞাসা করছেন তা অর্জনের জন্য তিনটি প্রধান পদক্ষেপ রয়েছে:
- বিকল্প ফাইলের নাম পাচ্ছেন
- পছন্দসই ফাইলটি বর্তমান উইন্ডোতে বা অন্য উইন্ডোতে খোলা হচ্ছে
- যে ফাইলের মধ্যে কার্সার অবস্থান পুনরুদ্ধার
বিকল্প ফাইলের নাম সন্ধান করতে আপনি বর্তমান ফাইলের নামটি "রুট" এবং "এক্সটেনশান" এ ভাঙ্গতে চান। এটি করার একটি সহজ উপায় হ'ল:
let parts = split(expand("%:p"), "[.]");
let root = parts[0]
let extension = parts[1]
আপনি যদি জানেন যে আপনি কেবল কখনও ফাইল .h
এবং .cpp
ফাইলের মধ্যে স্যুইচ করছেন তবে আপনি এক্সটেনশনটি এক থেকে অন্যটিতে সহজেই পরিবর্তন করতে পারবেন:
if extension == "h"
let extension = "cpp"
else
let extension = "h"
endif
বিকল্পভাবে, সম্ভাব্য বৈধ বিকল্প এক্সটেনশনগুলিতে পরিচিত এক্সটেনশানগুলির ম্যাপিংয়ের একটি অভিধান তৈরি করুন । বা বর্তমান ফাইলের জন্য সমস্ত সম্ভাব্য বিকল্প globpath()
পেতে ব্যবহার করুন:
let alternates = globpath(expand("%:h"), root . ".*")
এবং প্রথমটি বা যা কিছু বেছে নিন। আমি globpath
পদ্ধতির পছন্দ করি , কিছু অতিরিক্ত স্মার্ট সহ আমি পরে বর্ণনা করব। একবার আপনি লক্ষ্য এক্সটেনশানটি বেছে নেওয়ার পরে, পূর্ণ টার্গেটের পথটি তৈরি করুন:
let target = root . "." . alternates[whicheverAlternateExtensionYouWant]
এখন আপনি বর্তমান উইন্ডোতে বিকল্প ফাইল খুলতে পারেন:
execute "edit " . target
অথবা winnr()
"অন্যান্য উইন্ডো" নম্বর পেতে ব্যবহার করুন ( winnr("#")
এটি উইন্ডোটি <C-W>p
লাফিয়ে উঠবে, অথবা আপনি যদি জানেন যে এটি আপনার সেটআপের জন্য সর্বদা একই থাকে) এবং এর মতো কিছু করুন:
let window = winnr("#")
execute window . "wincmd w"
execute "edit " . target
এটি আপনাকে বিকল্প ফাইল খোলার জন্য একটি সত্যিকারের প্রাথমিক সমাধান দেয় । উপরোক্ত পদ্ধতির সাথে কয়েকটি ঘাটতি রয়েছে, যেহেতু আমি এটিকে সোজা বলে লিখেছি এবং এটি কিছুটা বন্ধ-কাফ। আমি এমন একটি প্লাগইন লিখেছি যা "আমার পছন্দ মতো" বিকল্প ফাইল স্যুইচ করে (সমস্ত উপলব্ধ globpath()
ফলাফলের মধ্য দিয়ে সাইক্লিং করে )। এটি উপরের সরলতার সাথে কিছু সমস্যার সমাধান করে, আপনি যদি আরও অনুসন্ধানে আগ্রহী হন তবে আপনি এর বাস্তবায়নটি পরীক্ষা করতে পারেন।
অবশেষে, "কার্সার অবস্থান পুনরুদ্ধার করুন" পয়েন্ট। আমি এটি শেষের দিকে সংরক্ষণ করেছি কারণ এটি বিকল্প পরিবর্তনকারী জিনিসটির কাছে অর্থগোনাল (আমার প্লাগইন এটি উদাহরণস্বরূপ পরিচালনা করে না), তবে আপনি যদি নিজের নিজস্ব রোল করতে চলেছেন তবে আপনি এটি আপনার ফাংশনে রেখে দিতে পারেন। :help line()
একটি অটোকমন্ড রয়েছে যা কার্সার অবস্থানটি ফাইলটি সর্বশেষ খোলার সময় যেখানে ছিল সেখানে পুনরুদ্ধারের জন্য কার্যকর:
:au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
আমি কেবল এটি বা খুব অনুরূপ কিছু রেখেছি .vimrc
যেহেতু আমি সব সময় আচরণকেই পছন্দ করি। আপনি সহজেই কোডটি অন্য কোথাও রেখে দিতে পারেন।
:h line()
(জেনেরিক সমাধান) শেষ দেখুন : "এই অটোকমন্ড কোনও ফাইল খোলার পরে শেষ পরিচিত অবস্থানে চলে যায়, যদি" "চিহ্ন সেট করা থাকে: অউ বুফআরেডপোস্ট * যদি লাইন (" ' \ "")> 1 && লাইন ("'\" ") <= লাইন (" $ ") | উদাহরণ "স্বাভাবিক! g` \" "|