كم عدد الطرق التي يمكنني من خلالها إكمال الاسم المستعار لـ Bash على سلسلة فرعية جزئية؟

StackOverflow https://stackoverflow.com/questions/509427

سؤال

سؤال: عندي سؤال وهو يبدو أنه لم يتم الرد عليه من خلال سؤال إكمال Bash الذي تم طرحه بالفعل على تجاوز سعة المكدس.السؤال هو، كيفية الحصول على إكمال الاسم المستعار Bash (لأي اسم مستعار) على سلسلة فرعية جزئية.

مثال:على سبيل المثال، لنفترض أن لدي الأسماء المستعارة التالية:

open.alicehome="cd /usr/home/alice"
open.bakerhome="cd /usr/home/baker"
open.charliehome="cd /usr/home/charlie"
gohomenow="shutdown -now"

أود أن أكتب بتكاسل "baker{{TAB}}" لاستدعاء الاسم المستعار الثاني.

أود أن أكتب بتكاسل "home{{TAB}}" للحصول على قائمة بجميع الأسماء المستعارة المذكورة أعلاه والتي يمكنني بعد ذلك الاختيار من بينها باستخدام لوحة المفاتيح (الأمثل) أو الاختيار عن طريق كتابة سلسلة فرعية لا لبس فيها تميز بين الخيارات الثلاثة (أقل من الأمثل).

..أو ..

أود أن أكتب بتكاسل "الصفحة الرئيسية" ثم اضغط بشكل متكرر على {{TAB}} حتى يظهر الاسم المستعار المحدد الذي أريده، ثم اضغط على {{ENTER}} لتنفيذه.

كن حرا للابتكار:إذا كانت لديك طريقة للقيام بذلك، حتى لو كانت تتطلب اللجوء إلى قرصنة المعلم المتطرفة، فلا تتردد في مشاركتها ولا تتردد في شرح قرصنة المعلم الخاصة بك إلى مستوى طفل يبلغ من العمر خمس سنوات والذي سيتعين عليه محاولة التنفيذ فكرتك لنفسه.

نرحب بالارتباطات بصفحات الويب الحالية أو RTFMs.

هل كانت مفيدة؟

المحلول

يمكنك إنشاء المطابقات لسلسلة فرعية محددة باستخدام compgen -c -X'!*substring*'

لتضمين هذا في الإكمال التلقائي لـ bash، يمكنك إنشاء ملف .bash_completion في دليلك الرئيسي الذي يحتوي على شيء مثل هذا:

_comp() {
    local cur

    cur=${COMP_WORDS[$COMP_CWORD]}

    COMPREPLY=( $( compgen -c -X '!*'$cur'*' ) )

}
complete -F _comp $nospace eval

سيتم تشغيل وظيفة المطابقة هذه عند الضغط <TAB> على الحجج ل eval يأمر.لم أجد طريقة لتضمين وظيفة مطابقة جديدة للبحث عن الأمر الأول في bash، لقد وجدت فقط وثائق حول كيفية إضافة إكمالات مخصصة لأمر معين، مثل eval فوق.

لكنني متشكك قليلاً في مدى فائدة هذا ...لا توجد طريقة سهلة لتحديد المطابقة التي تريدها من القائمة.

نصائح أخرى

إذا كنت تريد التغيير حقاً bashسلوك علامة التبويب،

# ~/.inputrc
# The default binding for [Tab] is ``complete'', which is what we're used to.
# ``menu-complete'' gives you irssi-like behavior: cycle through completions.
"\t": menu-complete

وقد تم توثيق ذلك في مكتبة GNU Readline # السماح بكتابة خط القراءة نيابةً عنك.

ربما يمكنك تحقيق ما تريد باستخدام إعدادات bash_completion المخصصة، لكنني لن أقوم بهذه المهمة نيابةً عنك، حسنًا؟:-)

إذا كنت لا تعرف ما أتحدث عنه، انظر هنا و هنا للتفاصيل.بالمناسبة، سأجد هذا الأمر مزعجًا جدًا

أرغب في اكتب فقط "الصفحة الرئيسية" ، ثم اضغط مرارًا وتكرارًا على {tab}} حتى يظهر الاسم المستعار المحدد الذي أريده ، ثم اضغط {{enter}} لتنفيذه.

الذي أعتقد أنه نمط M$ لـ "الإكمال" (هل أنت قادم لبيئة DOS/windows؟)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top