سؤال كيفية توسيع الأسماء المستعارة مضمنة في باش؟


هل هناك طريقة لتوسيع الأسماء المستعارة مضمنة في bash؟

$bash>alias ll='ls -l '
$bash>ll<tab>
$bash>ls -l 

75
2018-02-19 09:43


الأصل




الأجوبة:


يمكنك الضغط السيطرة-البديل-البريد لأداء وظيفة القراءة shell-expand-line والتي سوف تفعل الاسم المستعار والتاريخ وتوسيع كلمة. لاحظ أنه في بعض لوحات المفاتيح ميتا ليس البديل. قد تحتاج للضغط زر Esc فى الكيبورد ثم السيطرة-البريد

وظائف alias-expand-line و history-and-alias-expand-line غير ملزمة افتراضيا ، ولكن يمكنك ربطها عن طريق إضافة خطوط مماثلة لما يلي ~/.inputrc ملف.

"\e\C-l": alias-expand-line

التي من شأنها أن تجعل السيطرة-البديل-ل (أقل حالة "ell") أداء فقط الاسم المستعار التوسع.


93
2018-02-19 10:52



هل يمكننا تعيين توسيع الاسم المستعار لـ <tab> دون التأثير على عمليات الإكمال الأخرى في bash ؟. - asdfg
asdfg: إذا قمت بذلك ، فسوف تكسر عمليات الإكمال الأخرى. هذا ربما العمل (لم يتم اختباره) لإنشاء الخريطة كما هو موضح أعلاه ، ثم إضافة هذه الخريطة الإضافية لاستبدال الخريطة الحالية بعلامة التبويب: "\C-i": "\e\C-l\e\e" مما يؤدي إلى إنشاء ماكرو يقوم بتنفيذ كليهما alias-expand-line و complete. يعتمد ذلك على الربط من جوابي أعلاه ، وأن الربط الافتراضي لـ Esc-Esc يبقى في مكانه. ستظل قادرًا على القيام بـ Esc Esc إذا كنت ترغب في إكمال الإكمال الافتراضي. - Dennis Williamson
ESC ثم CTRL + E يعمل على OS X ، وذلك بفضل! - Chris Wagner
في الواقع، ESC C-e يعمل لباش ، ولكن C-x a يعمل ل Zsh. اختبار أيضا على OS X. - Blaz
إذا كنت تبحث ببساطة عن Ctrl + شيء ، حيث يمكن أن يكون هناك مفتاح "x" ، فيمكنك إجراء ذلك كما يلي في بعض الأنظمة: Control-x: history-and-alias-expand-line. - igordcard


قد يكون هذا بالفعل طريقة أبسط بكثير للقيام بما تحاول (bashالإصدار> = 4.2.29):

shopt -s direxpand
shopt -s expand_aliases

shoptالصورة man الصفحة: https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html


3
2018-06-14 13:35



هذا خطأ. لا تساعد خيارات Shell "direxpand" و "expand_aliases" في توسيع الأسماء المستعارة الموضعية مثل السؤال المحدد. أنا لا أعرف من أي قبعة "direxpand" اتخذت ...؟ بشكل افتراضي ، تم بالفعل تعيين "expand_aliases". إذا قمت بإلغاء تعيينها ، فستكون النتيجة هي تعطيل الأسماء المستعارة من العمل (لا يتم توسيعها قبل تفسير سطر الأوامر). مثلا أعطى اسم مستعار alias ll='ls -lسوف تفسر الصدفة 'll' كأمر / وظيفة 'll' الذي من المحتمل عدم وجوده. - FooF


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

_ll()
{
     COMPREPLY=(ls -l)
     #The next line does not work. I just hope there were a way to replace that word
     COMP_WORDS[COMP_CWORD-1]="ls -l"
}
complete -F _ll ll

الآن المصدر الكامل ملف bash_completion (http://caliban.org/bash) ووضع النص المذكور أعلاه في ملف داخل bash_completion.d directory أن البرنامج النصي الذي تحصل عليه من مراجع عنوان url. اسمحوا لي أن أعرف ما إذا كان لا يعمل.

شكر.


0
2018-02-19 10:09





للأشخاص الذين لديهم تثبيت zsh يبحثون عن حل بسيط ، globalias قد يكون صديقك

يوسع جميع تعبيرات العالم ، والأوامر الفرعية والأسماء المستعارة (بما في ذلك العالمية).

# .zsrc:
alias S="sudo systemctl"

$ S<space>
# expands to:
$ sudo systemctl

لتثبيت فقط إضافة "globalias" لك قائمة .zshrc البرنامج المساعد

plugins=(... globalias)

ثم اضغط فقط SPACE لتحريك توسع الأمر الذي كتبته.

إذا كنت تريد فقط إدراج مسافة بدون توسيع سطر الأوامر ، فاضغط على CTRL+SPACE


0
2017-08-31 18:10