আমি যখন "vi" টাইপ করলাম তবে "সিডি" বলতে চাইলে স্বয়ংক্রিয়ভাবে সনাক্ত করুন?


21

দিনে প্রায় 5 বার, আমি "vi" টাইপ করি যখন "সিডি" বোঝানো হয়, এবং vi এর মধ্যে ডিরেক্টরি খোলার চেষ্টা করি। এটি আমাকে নিটস করছে। দেখে মনে হচ্ছে যে আমি "vi + ডিরেক্টরি" টাইপ করার সময় সনাক্ত করার কোনও উপায় থাকা উচিত এবং স্বয়ংক্রিয়ভাবে এটিকে "সিডি + ডিরেক্টরি" তে পরিবর্তন করা উচিত। থটস?


1
আমি একটি বিকল্প দিয়েছি যাতে আপনিও হতাশাগুলি খুঁজে পেতে পারেন ^^ (এমন একটি সমস্যা যা আপনাকে সমস্যার উত্সটি সংশোধন করতে দেয়,
ততক্ষণে


1
এটি আমাকে অনেকটা হতাশ করেছিল, যতক্ষণ না আমি আবিষ্কার করেছি যে আপনি ফোল্ডারের অভ্যন্তরে থাকা ফাইলটিতে নেভিগেট করতে এন্টার এবং তীরগুলি ব্যবহার করতে পারেন। আপনি এন্টার এ থাকা অবস্থায় এটি ক্লিক করলে এটি খোলে।
নুরিতোভেরি

1
কেবল সামান্য পরিমাণে চেহারার সাথে: zsh এ পরিবর্তন করুন। এটি সেট আপ করুন যাতে আপনি যখন কোনও ডিরেক্টরি নাম টাইপ করেন তখন সেই ডিরেক্টরিতে পরিবর্তিত হয়। প্রত্যয় এলিয়াস ব্যবহার করুন যাতে আপনি * .sh, * .c, * .config টাইপ করুন যা তা vi এ প্রাসঙ্গিক ফাইলটি খুলবে। এখানকার ক্যাভিয়েটটি অবশ্যই আপনি অপরিচিত শেলের মধ্যে নিজেকে "vi" বা "সিডি" বাদ দিচ্ছেন।
মকিংস্টন

3
এটা কিভাবে হয়?
জেএফএ

উত্তর:


38

এই ধারণার viসাথে আপনি ডিরেক্টরিটিকে শেষ যুক্তি হিসাবে কল করেছেন:

vi() {
    if [[ -d ${!#} ]]; then
        cd "$@"
    else 
        command vi "$@"
    fi
}

2
@ অ্যালেক্স আমি অনুমান করি যে এটি "সিডি" এর পরিবর্তে আপনি "ভিআই" ভুলভাবে টাইপ করেছেন এমন ক্ষেত্রে দু'টিই উপযুক্ত, একই সময়ে আপনাকে এখনই "ভিআই" টাইপ করতে শেখায়;) [অর্থাত্, আশা করি আপনি প্রায়শই এটি করেন না অন্য সার্ভার / মেশিনটি ব্যবহার করতে হবে যেখানে ফাংশনটি আপনাকে স্ট্রেস বাঁচানোর জন্য সেখানে থাকবে না ...] [+1 এর উত্তরের জন্য, যদিও আমি উত্তর দিতে চেয়েছিলাম, কেবলমাত্র "$ for" 1} "[এবং তারপরে সিডি" $ {1} "] এর পরিবর্তে" $ {! #} "...]
অলিভিয়ার দুলাক

5
@OlivierDulac একমত - একভাবে বিপজ্জনক aliasing করা হয় rmথেকে rm -i, যা অনেক ডিস্ট্রিবিউশন মধ্যে পূর্বনির্ধারিত। আমি সাধারণত মনে করি যে সমস্যাগুলি সমাধান করার সর্বোত্তম উপায় হ'ল ব্যবহারকারীকে ঘিরে কাজ করার পরিবর্তে সমাধান করা।
ক্রিস ডাউন

3
@ অলিভিয়ারডুলাক আলিয়াসিং এর rmজন্য rm -iআপনাকে অতীতে কিছুটা সমস্যা বাঁচাতে পারে তবে ভবিষ্যতে (এবং সম্ভবত) আপনাকে আরও বেশি সমস্যায় ফেলতে পারে ...
জেলিগ্রে

1
@ অ্যালেক্স ওয়েল, আপনি viপ্রশ্নে বলেছেন ...
ক্রিস ডাউন

2
@ ক্রিস্রন: ${!#}অপ্রত্যক্ষভাবে চূড়ান্ত যুক্তিটি উল্লেখ করে এবং commandকেবলমাত্র এই পরিস্থিতিতে ফাংশন পুনরাবৃত্তি এড়াতে প্রয়োজনীয়।
ক্রিস ডাউন

4

@ ক্রিসডাউন উত্তর ছাড়াও, এখানে আরও একটি পদ্ধতি রয়েছে: বাইপাস ডিরেক্টরিগুলি

এই পদ্ধতির সাথে, আপনি করতে পারেন:

vi ./*

এবং এটি বর্তমান ডিরেক্টরিতে থাকা সমস্ত ফাইলের উপরে ভিআই শুরু করবে এমনকি এতে সাবডিয়ার রয়েছে এমনকি সেই সাবডিয়ারগুলি বাইপাস করে

vi() {
  for arg do
    [ -d "$arg" ] || set -- "$@" "$arg"
    shift
  done
  [ "$#" -gt 0 ] && command vi "$@"
}

এটি কেবলমাত্র ভিআই করুন, যে কোনও যুক্তি যা ডিরেক্টরি নয় ... সুতরাং এটি আপনাকে "সিডি" এর জন্য "vi" ব্যবহার করতে শেখায় না;)

এবং আপনি যদি কেবলমাত্র এটি করেন তবে এটি vi বলবে না: vi সাম্প্রদায়িক (যেমন, সিডির পরিবর্তে ভুল টাইপ করা vi)। তবে এটি সেখানে স্বয়ংক্রিয়ভাবে সিডি হবে না, সুতরাং আপনি এখনও মনে রাখবেন আপনাকে সিডি ^^ টাইপ করতে হবে ^^

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


1
দ্রষ্টব্য:: command something"কিছু" নামক কোনও নাম বা নামকরণের পরিবর্তে "কিছু" কমান্ড শুরু করে (অর্থাত্ "কিছু" $ PATH ব্যবহার করে পাওয়া গেছে) এর নাম পরিবর্তিত হয়। \somethingকেবলমাত্র উপনামটিকে বাইপাস করবে, তবে এটি উপস্থিত থাকলে ফাংশনটি এখনও চলবে (এবং এখানে, এর অর্থ "vi" ফাংশনটি নিজেকে কল করবে এবং লুপ)।
অলিভিয়ার ডুলাক

@ ক্রিসডাউন: আমরা একজন ব্যবহারকারীর জন্য একটি সহায়তার কথা বলছি, যা আমি আশা করি যে নিজেকে হ্যাক করার চেষ্টা করবে না ^^ এবং এভালটি আর্গুমেন্টের একটি নতুন সেট সেট করা (সেট - ...), সুতরাং এটি নিজের মধ্যে কম বিপজ্জনক
অলিভিয়ার ডুলাক

@ স্টাফেনচাজেলাস: সম্পাদনার জন্য ধন্যবাদ! আমি সেভাবে এটি লেখার চেষ্টা করেছি, তবে আমি অসীমভাবে লুপিং নিয়ে উদ্বিগ্ন ছিলাম [আমি আপনাকে বিশ্বাস করি এটি লুপ হবে না, যদিও!) অভ্যন্তরীণ চিকিত্সা শুরু হওয়ার আগেই 'আরগের জন্য' মূল্যায়ন করা হচ্ছে, এবং তাই এর "$ @" তালিকাটি 'সংরক্ষণ করা' এবং পুনরাবৃত্তি করা হয়েছে, এবং অভ্যন্তরীণ চিকিত্সা "$ @" পরিবর্তন করা সত্ত্বেও পরিবর্তিত হয়নি?]
অলিভিয়ার ডুলাক ১

1

একটি সমাধান হ'ল cdসম্পূর্ণরূপে ব্যবহার বন্ধ করা। রাখুন shopt -s autocdআপনার .bashrcবা setopt autocdআপনার .zshrc। তারপরে ভিন্ন ডিরেক্টরিতে পরিবর্তন করতে কোনও নির্দেশ ছাড়াই ডিরেক্টরিটির নাম টাইপ করুন।

আপনি viযদি কোনও ফাইল সম্পাদনা করতে চান তবে টাইপ করতে ভুলবেন না ।

আপনি যদি ডিরেক্টরীতে পরিবর্তন করতে বা কোনও ফাইল সম্পাদনা করতে চান তবে আপনি যদি একটি কমান্ড চান তবে আপনি এটিকে একটি ফাংশন করতে পারেন:

vi () {
  if [ $# -eq 1 ] && [ -d "$1" ]; then
    cd -- "$1"
  else
    command vi "$@"
  fi
}

-6

ইউনিক্সে উপন্যাস বৈশিষ্ট্যটি ব্যবহার করুন। আপনি একবার উলেস সিডি ভিতে গেলে সমস্যাটি সমাধান হয়ে যাবে।


5
... এর অর্থ viহ'ল অন্যটি ম্যানুয়ালি ওরফে ওভাররাইড না করে ব্যবহার করতে পারবেন না , যা অত্যন্ত অযাচিত মনে হয় seems
ক্রিস ডাউন

3
এই উত্তরটি সামান্য ট্রোলিশ হিসাবে আসে। এটা তোলে করেন যেমন ওপি তারা কখনও একটি ফাইল-এ ষষ্ঠ প্রয়োজন উল্লেখ করা হয়নি মূল প্রশ্নের উত্তর। উত্তরটি কিছুটা মজাদার হলেও অবশ্যই কার্যকর নয়।
অঙ্কিত

1
@ ক্রিসডাউন বা এটি আপনাকে vimপরিবর্তে যথাযথ ব্যবহার করতে শেখাবে ।
কেভিন

@ কেভিন ভিম ভি এর চেয়ে "যথাযথ" নয় - অনেক সিস্টেমে, ভিআই সব কিছুই পাওয়া যায়।
ক্রিস ডাউন

1
@ ক্রিসডাউন আমি যুক্তি দিয়েছি যে কি প্রত্যাশা করা উচিত তা আরও ভাল। আপনি যদি ভিএম বৈশিষ্ট্যগুলি ব্যবহার করার প্রত্যাশা করেন তবে ব্যবহার করুন vim। এটি উপলভ্য viনা হলে আরও সীমিত বৈশিষ্ট্য সেটটি ব্যবহার করুন এবং আশা করুন expect
কেভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.