Fish-shell: دعم توسيع التاريخ (على سبيل المثال ، bash's !! ، bang bang ، و! $ ، bang dollar ، الرموز)

تم إنشاؤها على ٢٠ أغسطس ٢٠١٢  ·  98تعليقات  ·  مصدر: fish-shell/fish-shell

يبدو أن الدوي المزدوج لا يعمل ويتم تفسيره بطريقة ما على أنه برنامج يحاول sudo تحديد موقعه دون جدوى. يحدث هذا على Ubuntu 12.04 LTS مع قشرة سمكية مجمعة من المصدر.

خطوات إعادة العرض:

  1. نفّذ أي أمر:

    ليرة سورية

  2. نفّذ الأمر السابق كجذر:

    sudo $ !!
    sudo: !!: الأمر غير موجود

    سلوك متوقع:

يقوم الأمر sudo !! بتنفيذ الأمر الذي تم تنفيذه مسبقًا ( ls ) كجذر.

لقد تحققت أيضًا من أن المشكلة ليست بسبب sudo باتباع خطوات repro في bash ، والتي تصرفت كما هو متوقع.

لاحظ أيضًا أن إصدارًا سابقًا من fish-shell على نظام التشغيل Mac OS X 10.7 لم يكن به هذه المشكلة وأن sudo !! يعمل كما هو متوقع.

duplicate

التعليق الأكثر فائدة

function sudo
    if test "$argv" = !!
        eval command sudo $history[1]
    else
        command sudo $argv
    end
end

sudo !! للأشخاص الذين ما زالوا يستخدمون !! لسبب ما.

ال 98 كومينتر

تمت مناقشته في الأسئلة الشائعة الخاصة بالوثائق: http://fishshell.com/docs/current/faq.html#faq -history

شكرا على التوضيح.

أنا أفهم الأساس المنطقي لإزالة شخصيات التاريخ. ومع ذلك ، بينما أفهم الأساس المنطقي لهذا وأنه من الممكن استخدام Ce و Ca بدلاً من End and Home ، للعديد من المستخدمين ، وخاصة أولئك الذين اعتادوا على ذلك !! وأولئك الذين يستخدمون جهاز كمبيوتر محمول ليس لديهم مفتاح Home and End ، لا يزال من الأسهل بكثير كتابة sudo !! من Up + C-a + sudo.

هل ما زلت تفكر في استعادة وظائف الرموز المميزة لاستبدال المحفوظات؟

بما أنها حالة نادرة أين !! أكثر راحة في الاستخدام ، جرب الوظيفة التالية:

function sudo!!
    eval sudo $history[1]
end

وهو ما يسمى فقط بـ "sudo !!".

أو الاحتمال الآخر الذي أستخدمه:

function .runsudo --description 'Run current command line as root'
    commandline -C 0
    commandline -i 'sudo '
    commandline -f execute
end
bind \es .runsudo

ثم بالضغط على MS ، أقوم بتشغيل سطر الأوامر الحالي مع وضع sudo أمامه مباشرة.
أو عن طريق تعديل هذا المثال ، يمكنك إنشاء وظيفة تضع سطر الأوامر السابق في سطر الأوامر الحالي وربطها على سبيل المثال بـ "\ e!". هذا النهج أفضل من الاستخدام البسيط لـ "!!" لأنه يمنحك الفرصة لرؤية سطر الأوامر وتحديثه قبل التنفيذ.

لقد قمت بتغيير طفيف في الأمر الأخير:

  function .runsudo --description 'Run current command line as root'
    set cursor_pos (echo (commandline -C) + 5 | bc)
    commandline -C 0
    commandline -i 'sudo '
    commandline -C "$cursor_pos"
  end
  bind \es ".runsudo"

يحفظ موضع المؤشر بدلاً من تنفيذه تمامًا.

! $ سيكون أيضًا رائعًا أن يكون لديك

function sudo
    if test "$argv" = !!
        eval command sudo $history[1]
    else
        command sudo $argv
    end
end

sudo !! للأشخاص الذين ما زالوا يستخدمون !! لسبب ما.

شكرا. هناك شريحة كبيرة جدًا من الأشخاص الذين يستخدمون sudo !! إعطاء أن بناء الجملة هذا مدعوم عبر العديد من القذائف الأخرى بما في ذلك bash و zsh. sudo !! أسهل في الكتابة من استخدام مفتاحي المنزل والنهاية لأن هذين المفتاحين بعيدان.

أود أن أقترح تضمين الوظيفة المذكورة أعلاه مع قشرة السمك افتراضيًا.

!! هو مرشح جيد لاختصار (# 731)

التعبير عن دعم !! والاختصارات ذات الصلة. لا يضر إضافته ويشعر أن الأسماك تقوم فقط بدفع الفلسفة الشخصية لمستخدميها.

إن تفكيري الحالي في الحل المثالي هو ذلك !! يجب أن يكون اختصارًا (# 731) ، ونقوم بتنفيذ تواقيع الوظيفة (# 478) لدعم الأوامر الفرعية (أمر يأخذ أمرًا ، مثل sudo). ثم تتوسع الاختصارات في مواقع الأوامر الفرعية ، بحيث يكون 'sudo !!' سوف تتوسع.

مضيفا نفسي

على الرغم من كونها قديمة ، إلا أنها ميزة يجب أن تأتي كإعداد افتراضي في Fish. لا يوجد سبب لعدم امتلاكه - إذا كنت لا ترغب في استخدامه شخصيًا ، فلا بأس بذلك ، لكن وجود أمر إضافي لا يؤذي أي شخص حقًا - فالناس يحبون فعل الأشياء بطرق مختلفة.

الطريقة !! يتم تنفيذه في معظم القذائف لا يؤذي الناس. على سبيل المثال ، ضع في اعتبارك هذا الأمر:

echo fish is great!!

في bash / zsh / tcsh ، هذا سيفعل شيئًا غير متوقع ورهيب ، لأن !! هو تركيب سحري. هذا هو نوع التفاعلات الغريبة التي تحاول الأسماك بشدة تجنبها.

كان اقتراحي هو التنفيذ !! ليس كإسم سحري ، ولكن كاسم مستعار. هذا يعني أنه لن يفعل شيئًا خاصًا إلا في "موقع القيادة" - لن يتوسع في الوسائط. كما أنه يحافظ على مجموعة ميزات الأسماك ، وهو أمر مرغوب فيه.

لجعل ذلك مفيدًا ، سنحتاج إلى تعليم الأسماك عن الأوامر الفرعية ، حيث يكون المثال الأكثر شيوعًا هو sudo ، ولكن أيضًا time ، strace ، إلخ. في "موضع الأمر الفرعي" ، وهي ميزة رائعة ومفيدة بحد ذاتها.

ينهار الحل المقترح عندما تفكر في sudo echo fish is great!! . يمكن عمل نفس الوسيطة من جميع الصيغ: أليس echo I really like fish (the shell)! محيرًا أيضًا؟ كما أنني أشعر بالقلق من أن قائمة "الأوامر الفرعية" سيكون من المستحيل الاحتفاظ بها وقد تقلل من المرونة.

باستخدام الأسماء المستعارة ، يتم توسيع الأوامر فقط ، وستعرف الأسماك الوسيطات التي تكون أوامر (فرعية) وأيها ليست كذلك. لذلك لن يؤدي sudo echo fish is great!! توسيع الأمر الأخير ، ولكن بدلاً من ذلك يمر بـ "عظيم !!" إلى sudo (وبالتالي صدى صوتي). أنا أدعي أن هذا ما توقعه المستخدم. راجع المناقشة حول الاختصارات (# 731) وتوقيعات الوظيفة (# 478) للتصميم والأساس المنطقي.

يعد SirCmpwn محقًا في أن طلب تواقيع دالة شاملة هو عيب في نهج الاسم المستعار ، وأيضًا أن العناصر النحوية الأخرى مربكة. تتضمن أمثلة الحياة الواقعية الانزعاج من توسيع الدعامة باستخدام git (# 434) أو wildcards (# 967 ، من بين أمور أخرى). تأتي البنية بتكلفة عالية ، ونحاول التخلص من البنية عندما تكون زائدة عن الحاجة مع ميزات أخرى (على سبيل المثال # 354).

على أي حال هذه حجتي لماذا دعم !! كعنصر نحوي أولي هو محظور. ومع ذلك فأنا منفتح على تقديمه بطرق لا تتطلب تعديل تركيب الأسماك.

أعتقد أن المقارنة مع {} هي المقارنة الضعيفة. في الأسماك ، تعمل الأقواس بشكل مختلف عن الأصداف الأخرى. الناس يتعثرون فقط عندما يتوقعون أن يعمل مثل باش والأصدقاء. ال !! يجب أن يعمل بناء الجملة مثل الأصداف الشائعة الأخرى. ايضا، !! ليس شيئًا أتوقع رؤيته في الأوامر غالبًا بما يكفي لإحداث مشكلة. في الحقيقة ، كنت أتوقع عدد المرات التي حاول فيها الناس وفشلوا في استخدامها !! مع الأسماك بكثير يفوق عدد المرات التي استخدم فيها شخص ما حرفيًا !! في الأمر.

أدعي أن ! مربك في الأصداف الأخرى ، وسيكون من الأفضل لو لم يتم تطبيقه بهذه الطريقة. على سبيل المثال ، في http://codegolf.stackexchange.com/a/17776/3103 أضع كلمة "Hello، world!" برنامج مكتوب في UNIX shell والذي فشل بسبب ! (في سؤال أخطاء وقت التشغيل السخيفة). حتى أنها حصلت على سبعة أصوات مؤيدة ، لذلك يمكنني أن أتخيل أن هذه الميزة يمكن أن تكون مفاجئة عندما لا ترغب في استخدامها.

ومع ذلك ، يجب أن يكون !! بحد ذاته جيدًا ، لأنه كم مرة يكتب المستخدم !! كرمز؟ ثم مرة أخرى ، فإن إضافة !! سيشجع على إضافة أنماط بديلة للسجل ، والتي قد يكون بعضها مزعجًا.

مضيفًا نفسي - ركضت للتو في عطلة نهاية الأسبوع الأولى مع الأسماك. ينبغي بالتأكيد دعمه.

مضيفا نفسي - أحتاج هذا.

بالنسبة لأولئك الذين يرغبون في ذلك ، أعطتني الوظيفة والارتباطات المذكورة سابقًا في المناقشة سير عمل أسهل للإعداد المسبق sudo أو sudoing الأمر الأخير من الأمر النموذجي sudo !! واحد.

يجب عليك منحهم فرصة اخرى. لقد جعلني أعيد زيارة تكوينات readline و zsh الخاصة بي للحصول على ارتباطات مماثلة.

إنه يحول سبع ضغطات على المفاتيح (اثنان منها) إلى رابط واحد.

بغض النظر عما تحب - هل هناك أي سبب حقيقي لذلك !! لا يتم دعمه؟ كل شخص لديه أشياء مختلفة تناسبه ، وعلى الرغم من أن بعض الأشخاص قد يستمتعون باستخدام السهم لأعلى ، إلا أن الكثير من الأشخاص يستمتعون باستخدامه !! ، وبصراحة ، لماذا قد يكون هذا أمرًا سيئًا؟ أولئك الذين لا يريدون ذلك لا يتعين عليهم استخدامه.

بالتأكيد ليس من الصعب تنفيذها؟ ...

نعم ، أعلم أنه يمكنك اختراقها مع البرمجة النصية للأسماك ، ولكنها لا تعمل بنفس الطريقة كما في bash أو الأصداف المماثلة ، والتي كانت مريحة للغاية في كثير من الأحيان.

انظر تعليقي أعلاه لمنطق بلدي لماذا لا أريد أن أعرض هذا على الطريقة التي باش و zsh تفعل ذلك (كعنصر النحوي جديد)، و اقتراحي عن وسيلة يمكن أن يتم ذلك الذي يبقي مع فلسفة الأسماك.

حجة "صدى السمك عظيم !!" أن تكون أفضل من استخدام "!!" لأن التاريخ ضعيف بعض الشيء ، لكني أفهم المغزى. يبدو وكأنه "مجموعة shell_history متطورة" أو شيء ما يمكن أن يسمح للأشخاص الراغبين في المخاطرة بـ "صدى الأسماك رائع !!" تلقي رسالة خطأ.

ومع ذلك ، فإن حالة استخدامي لـ "!!" مشابه ولكن يمكن تجنبه مع بعض تحسينات الميزات ربما.

على سبيل المثال على جهاز Mac الخاص بي مع bash:
تحديث الشراب $
المشروب $ عفا عليه الزمن
$ المشروب جلب !!

لذلك أستخدم إخراج الأمر السابق بانتظام إلى حد ما لأمر جديد.
مع الأسماك يمكنني القيام بذلك:
$ brew fetch (المشروب قديمًا)
الآن في مرحلة ما ربما يكون هذا اقتراحًا يمكنني استخدامه ، لكن ما أحتاجه حقًا هو أن أكون قادرًا على البحث في السجل داخل الكتلة ().
على سبيل المثال:
جلب المشروب $ (bre)

لسوء الحظ ، على الرغم من أن fish يفتخر إلى حد ما باستخدام () للأوامر الفرعية بدلاً من backticks "المربكة" وهكذا ، فإنه لا يتعامل معها على هذا النحو حتى تضغط على enter. على الأقل هذا ما أراه.

إذا سمحت الأسماك بالبحث في التاريخ بعد '(' (المعروف أيضًا باسم أمر فرعي) ، فأعتقد أنه سيكون من الأسهل التعامل مع عدم وجود! التلاعب في التاريخ.

إذا فهمت الاقتراح ، فهو أنه عند الضغط على السهم لأعلى ، يجب أن يقوم باستبدال السجل فقط داخل الأمر الفرعي الأعمق بدلاً من سطر الأوامر بالكامل.

: -1:

ما زلت أؤيد ببساطة تنفيذ أسلوب bash !! .

أنا أفضل: up_arrow: و Ctrl + p والبحث في محفوظات الأوامر يعملان في مواقع الأوامر الفرعية على التقديم !!

واجهة برمجة التطبيقات للتاريخ الكامل للقذائف الأخرى محيرة بدرجة كافية لدرجة أن الناس عادة ما يتذكرونها فقط !! منه.

صيح. سيكون ذلك مناسبًا وسيحل محل "!!" بسهولة. أو! استخدام الكلمات الرئيسية.

أحب فكرة أن يكون !! اختصارًا.

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

هذه الميزة مبالغ فيها ، فقط استخدم sudo cmd أو eval sudo $cmd .

bucaran أنا لا أتابع بالضبط. !! للسرعة ، كيف يمكنني مطابقة سرعة !! مع cmd ؟

هل تقصد عمل متغير يسمى $cmd وهذا هو الأمر الأخير؟ إنه ليس متغيرًا أصليًا.

شكرا

mdsib نعم ، أعتقد أنني أتذكر أنه كان هناك نقاش في قضية أخرى حول عدم السماح بالاختصارات في موقف النقاش. في ذلك الوقت كان من المفضل عدم تنفيذ ذلك. هذا من شأنه أن يغير ذلك بالتأكيد.

أعتقد أن الوجبات الجاهزة من هذا الموضوع هي أنه لن يحدث في أي وقت قريب ، ويجب أن ألغي الاشتراك في مشكلة Github هذه والتبديل إلى zsh. وداعا!

ليس لأن !! ليس موجودًا هنا ، ولكن لأن إصدار Github لميزة بسيطة إلى حد ما كان مفتوحًا لمدة 3 سنوات دون أن يتم تنفيذه بسبب درجة البكالوريوس الفلسفية.

إنه لأمر مضحك أن ترى أشخاصًا يحاولون إقناع الآخرين بأن الميزة ليست مشكلة كبيرة. بالتأكيد ، أنت لا تريد ذلك ، لذا فأنت لا تهتم .. يبدو الأمر كما لو كنت تحاول إقناع الناس بعدم حب اللون الأخضر لأنك تعتقد أن اللون الأزرق أفضل.
ومع ذلك ، بما أن الميزة "البسيطة" لا يمكن أن تظهر ، فربما يجب على شخص ما أن يشرب السمك إذا كان يحب الميزات الموجودة ولكنه يرغب في إضافة المزيد. يبدو أن هذا سيصل إلى مكان ما بشكل أسرع.

لقد صنعت ~ / بن / !! التي تبدو كالتالي:

#!/bin/fish
eval $history[1]

على المدى القصير ، يساعدني في حل الميزة المفقودة وميلي للكتابة !!.
لقد صنعت أيضًا ~ / bin /! vi:

#!/bin/fish
for f in $history
    echo $f | grep '^vi'
    if test "$status" = "0"
        eval $f
        exit $status
    end
end

ليست مثالية ، لكنها كافية لدرجة أن قوقعتي تميل إلى فعل ما أتوقعه كثيرًا الآن.

SirCmpwn أليس من الواضح بالنسبة لي أن !! ميزة بسيطة. على سبيل المثال ، يدعم bash هذا:

ls some_long_file.txt
!!:s/ls -l/cat/

هل يجب استخدام هذا !! تكون مدعومة أم لا؟ المستخدمون الذين يقولون "يجب أن تدعم الأسماك !!" قد يكون لديهم أفكار مختلفة عما يعنيه ذلك.

أنت تشعر بقوة حيال هذا ، لذا أشجعك (أو أي شخص) على تأليف اقتراح لكيفية ذلك !! ستعمل في الأسماك (الدلالات ، وليس التنفيذ). ما هي البنية التي سيتم دعمها بالضبط؟ كيف يرتبط هذا التوسع بأنواع أخرى من التوسع ، مثل التوسع المتغير أو عملية التوسع؟ كيف يحدث تقسيم الوسيطة في السلسلة الموسعة؟ هل يمكنك استخدام الهروب لمنعه؟

هذا طلب صادق. لم يتم تعريف الميزة بحالة استخدام واحدة ؛ نحن بحاجة إلى اقتراح ملموس للمناقشة.

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

على المدى القريب ، هناك خطة واحدة ملموسة تتمثل في تنفيذ أسماء مستعارة عالمية ومن ثم صنع !! إلى واحد. البديل هو دمج عمل docopt ، وإعطاء توقيع دالة لـ sudo ، ثم جعل !! إلى اسم مستعار عادي. أي اتجاه نتجه يتوقف على ما إذا كنا نفكر !! يجب أن تتوسع في كل مكان ، أو في موقع القيادة فقط.

ridiculousfish أنت محق تمامًا في أن "!!" يحتاج طلب الميزة إلى أن يكون مفصلاً إلى حد ما. لم أستخدم أبدًا المثال المحدد الذي قدمته لأنني دائمًا أفعل شيئًا كهذا:
ls -l some_long_file.txt $
$ ^ ls-l ^ cat

من الواضح أن هذا لا يعمل أيضًا. سيكون هذا طلب ميزة منفصلة بالنسبة لي ، ولم أزعجني منذ أن بدأت فقط في اختبار الأسماك مؤخرًا.

"fish: تمت مصادفة إعادة توجيه عند توقع اسم أمر. لا يسمح Fish بإجراء عملية إعادة توجيه قبل الأمر."

يبدو أنه سيكون من السهل التعامل مع "^" في موضع الأمر كبديل لأنه لا يتعارض مع الوظيفة الحالية. لكن هذه قضية منفصلة ، فقط أذكرها لأنك على حق في أنه يجب أن يكون هناك تعريف واضح لماهية "!!" (أو مجرد استبدال التاريخ بشكل عام) يعني.

فيما يلي بعض الأمثلة التي أستخدمها:

$ !!
$ some command `!!`
$ !keyword 
$ !123

شكرًا لك gillham ، مثل هذه المعلومات مفيدة جدًا عند تصميم ميزة.

ألاحظ أيضًا أن nyarly لديه حل ذكي مقابل !! و !$ هنا: https://github.com/fish-shell/fish-shell/wiki/Bash-Refugees

الإصلاح الأفضل رقم 5:
إن الأسماك مدفوعة بالتاريخ ، بحيث عندما تنسى sudo أو تلوث سجلك بطريقة أخرى بأمر لا يعمل ، فقد يكون من المفيد حقًا وقتك (على المدى الطويل) لمسحها يدويًا من التاريخ. نعم ، هذا يفتح Terminal جديد ، exec bash وتعديل ~ / .config / fish / fish_history. قادني فيش إلى الأمر الخطأ مرارًا وتكرارًا ، عندما كنت أبطل هذا الأمر.

بالنسبة إلى عادةnyarly mkdir …; cd !$ ، فأنا أفعل mkcd … :

function mkcd --description 'mkdir and cd'
        mkdir $argv[1]
        and cd $argv[1]
end

لاحظ أن المسح من التاريخ لا يتطلب خدع باش:

history --delete --prefix some_command

يتيح لك fish_config history القيام بذلك عن طريق النقر فوق الزر.

يمكن تكرار هذه الوظيفة بشكل جيد داخل Fish باستخدام https://github.com/fish-shell/fish-shell/wiki/Bash-Style-History-Substitution- (!! - و -! $) - ربما المشكلة يجب أن تكون مغلقة؟

: -1:: -1: ما لم يتم تنفيذ وضع توافق bash كامل.

أعتقد أن هذا منحدر زلق. إذا تم تنفيذ ذلك في الأسماك ، فماذا عن الفردي! وماذا عن ميزات سجل ksh؟ ماذا عن $ ()؟ السمك هو قذيفة على غرار csh. إذا لم يستطع الناس التكيف ، فهناك zsh ...

ما لم أقم به من هذه المناقشة باعتباره TL ؛ دكتور للأشخاص الذين يجدون هذا. (أكثر من 3 سنوات في)

  1. لا يرغب الفريق في تطوير الميزة ، لأنهم لا يستخدمونها.
  2. هناك الكثير من الأشخاص الذين يريدون هذه الميزة لأنهم يستخدمونها.
  3. يبدو أن الفريق غير راغب في تنفيذ الميزة كما هي ولكن على استعداد لعمل شيء ما
    يعمل بشكل مشابه إذا قدمنا ​​لهم بيانات كافية.
  4. يقبل الأشخاص إما عدم امتلاك الميزة ، أو تنفيذ حل بديل يعمل في الغالب ، أو التحرك
    إلى مشروع آخر.

أنا واحد من هؤلاء ، بينما آمل أن يتم حل هذه المشكلة ، لا يمكنني استخدام الأسماك بشكل معقول وإضافة هذا الحل البديل مع عدد الأجهزة التي أستخدمها دون بذل جهد كبير (أحتاج إلى إعدادات تكوين مختلفة في أجهزة مختلفة) ، وأنا أستخدمها! ! بما يكفي حيث هو مطلب بالنسبة لي. لذلك سوف أتابع هذه المناقشة على أمل أن تفي الأسماك ذات يوم بحالة الاستخدام الخاصة بي.

@ tetra-archos لم يتقدم أحد باقتراح ملموس حتى الآن ، لذلك ليس لدينا فهم قوي لماهية "الميزة". نظرًا لأنه من الواضح أنك تشعر بقوة تجاه هذا ، إذا كنت تميل إلى هذا الحد ، فسيكون من المفيد جدًا أن تقترح ما يجب أن يكون عليه السلوك ، كنقطة انطلاق. إذا تعذر ذلك ، فسيكون من المفيد على الأقل سرد نماذج استبدال المحفوظات التي تستخدمها.

لاحظ أن سلوك استبدال محفوظات bash الكامل معقد جدًا وقابل للتكوين أيضًا ، لذا فإن "افعل ما تفعله bash" ليس بداية.

لم يطرح أحد اقتراحًا ملموسًا حتى الآن ، لذلك ليس لدينا فهم قوي لماهية "الميزة".

@ tetra-archos: هذا أمر بالغ الأهمية. حتى الآن ، كان معظم هذا "نريد" !! "!! وربما "! $" (وهي "أدخل الوسيطة الأخيرة للأمر الأخير"). ولكن هناك الكثير من التفاصيل التي يجب أن يتم تفصيلها إذا كان سيتم تنفيذ ذلك (أو بديل).

فمثلا:

  • أي جزء من بدائل التاريخ تريده - هل هو مجرد "أدخل الأمر الأخير هنا" ("!!") و "أدخل آخر وسيطة للأمر الأخير هنا" ("! $") ، أم كل الأشياء الأخرى مثل " !!: s / string1 / string2 "(أفضل إضافة وضع" استبدال "عام مثل" استبدل الاستعلام "أو": s / "الخاص بـ emacs حتى تتمكن من القيام بذلك _ قبل تنفيذ الأمر الخطأ)؟ ماذا عن "أدخل الأمر الخامس في تاريخي" ("! 5") - الذي لم أحصل عليه مطلقًا - أو "أدخل الأمر الخامس-الأخير" ("! -5")؟ ماذا عن " محددات الكلمات " و " المعدلات
  • هل تريد تنفيذ الأمر على الفور (على سبيل المثال ، أدخل sudo !! ، واضغط على Enter وسيتم تنفيذ الأمر بالكامل على الفور) أم أنه من المقبول إدراجه أولاً حتى تتمكن من التحقق مرة أخرى - هذا مثل باش مع خيار "التحقُّق" (كنت أميل إلى الخيار الأخير)؟
  • هل تحتاج إلى أن تكون "!!" و "! $" أم يمكن استخدامها بشكل مختلف ، أي هل مشكلة الذاكرة العضلية هي مشكلتك؟ إذا كان الأمر كذلك ، فلن نكون 100٪ أبدًا ، واستبدال المحفوظات _ هو جزء صغير من bash

إذا كانت مجرد ذاكرة عضلية ، فيمكنك أيضًا وضع ما يلي في fish_user_key_bindings:

bind '!!' 'commandline -i "$history[1]"'
bind '!$' 'history-token-search-backward'

(المشكلة في هذا ، لماذا ربما لا يجب أن نأخذها في الارتباطات الافتراضية ، هي أنها تنتظر بعد ذلك بعد إدخال "!" للتحقق من وجود حرف ثانٍ)

أعتقد أن !! ممارسة سيئة

الأمر sudo !! لا يخبر أي شخص بما ستنفذه الصدفة بالفعل.
إذا أردت تنفيذ الأمر p revious باستخدام sudo في النوع ' a nfang'

^p ^a sudo

أقترح إضافة رسالة لإخبار الأشخاص باستخدام أمري تحرير السطر ^ p و ^ a بدلاً من استخدام وظيفة المحفوظات.

!!: command not found, try 'Ctrl-p Ctrl-a' to prefix the previous command with 'sudo' or any other  prefix

أنا أكره !! أيضًا. طريقة أسهل لـ fish_vi_mode كبديل لـ ^p ^a :

^v k I

لأنك لا تحب طريقة عمل شيء ما ، فهذا لا يجعلها أقل صحة.
في 10 تشرين الثاني (نوفمبر) 2015 ، الساعة 8:14 صباحًا ، كتب "Ivan Tham" [email protected] :

انا اكره !! جدا. طريقة أسهل لـ fish_vi_mode كبديل لـ ^ p
^ أ:

^ vk أنا

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -155416048
.

والعكس صحيح أيضًا.

كلا الجانبين في هذه القضية لهما احتياجات ومخاوف مشروعة. أعتقد أن العائق الرئيسي هو إيجاد الطريقة الصحيحة للقيام بذلك بدلاً من الطريقة السريعة والقذرة

أوافق وليس لدي أي شيء ضد الطرق الأخرى للقيام بذلك ، فهم لا يفعلون ذلك
تناسب احتياجاتي (واحتياجات الآخرين بوضوح).
في 10 تشرين الثاني (نوفمبر) 2015 ، الساعة 12:19 ظهرًا ، كتب "إريك مراك" [email protected] :

والعكس صحيح أيضًا.

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

-
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -155494929
.

لتكرار النهج المذكورة في المناقشة المبكرة والتوسع فيها قليلاً: لقد وجدت ارتباطات رئيسية تعمل بشكل أفضل بالنسبة لي من "!!".

لقد كتبت هذه الوظيفة التي يمكن ربطها ببعض المفاتيح (^ S بالنسبة لي ، bind \cs 'prepend_command sudo' ). إذا كان سطر الأوامر يحتوي على محتوى ، فإنه يسبق sudo. إذا لم يكن هناك محتوى ، فإنه يسبق sudo إلى العنصر الأخير في السجل. لذا أصبح sudo !!<Enter> الآن ^S<Enter> .

function prepend_command
  set -l prepend $argv[1]
  if test -z "$prepend"
    echo "prepend_command needs one argument."
    return 1
  end

  set -l cmd (commandline)
  if test -z "$cmd"
    commandline -r $history[1]
  end

  set -l old_cursor (commandline -C)
  commandline -C 0
  commandline -i "$prepend "
  commandline -C (math $old_cursor + (echo $prepend | wc -c))
end

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

بالطبع ، هذا لا يجيب على طلبات أخرى مثل some_command --with-subshell-param (!!) .

Ahti هذا هو في الواقع بدس ، لقد

نعم ، حتى الآن هذا يتفوق على sudo !! . يحدث لي كثيرًا أن أكون في منتصف الأمر وأدرك أنه يجب أن يكون sudo . ^s ، بادئة فورية sudo !

أنا شخصياً لم أستخدم أبدًا !! في أي سياق بخلاف sudo !! حتى لا يزعجني ذلك.

من قبيل الصدفة لقد جربت للتو fish_vi_mode وأحبها حقًا. ومع ذلك ، في الوضع Vi ، يبدو أن ^s غير ملزم بعد الآن. اقتراحات؟

حسنًا ، كان لدي مفتاح الربط في config.fish. لقد وجدت # 2254 ثم عثرت على https://github.com/faho/fish-shell/commit/f7e8ad632a388d5f1c5eb4cfc33f3cdb1f7fd831 ثم وجدت http://stackoverflow.com/a/16675092/292408 والذي أكد أنه يجب أن أضع ارتباطاتي في fish_user_key_b وظيفة لم تكن موجودة بعد.

لقد نجح ذلك والآن عندما أكون في وضع الأمر Vi [N] تعمل البادئة كما هو متوقع.

لدينا بالفعل Alt-P لتشغيل خط الأنابيب الحالي في جهاز النداء ؛ أتساءل عما إذا كان يجب علينا إضافة Alt-S أيضًا؟

أعتقد أن Ahti 's هو حل أنيق للغاية لما كان يبحث عنه الجميع. مباشرة إلى رابط المفاتيح دون القلق بشأن التوسيع العشوائي أو حالات الحواف الغريبة. إنه ببساطة يضع نصًا لتستخدمه أو تلغيه كما يحلو لك.

أنا مثل كل منnyarly الصورة الإحلال وAhti الصورة حل ملزم الرئيسيين.
أنا شخصياً أستخدم !! فقط في سياق sudo !!

أوي! هذا الخيط يبلغ من العمر أربع سنوات تقريبًا الآن. لقد اشتريت مؤخرًا ǃǃ.com و ǃǃ.net (والذي لن يسمح لي Github بربطه تشعبيًا ، على ما يبدو ، لذا قم بنسخه ولصقه) إذا أراد أي شخص ذلك.

مهلا! هذا بارد! @ geoff-code كيف فعلت ذلك؟)

لقد بدأوا مؤخرًا في السماح بأسماء النطاقات .com و .net "الدولية".
screen shot 2016-05-11 at 4 53 48 am

الدعم لها لا يزال عربات التي تجرها الدواب جميلة في هذا الوقت ، على الرغم من. على سبيل المثال ، سمحوا لي بالتسجيل في ⵌⵑ. com لكن ليس ⵌ ǃ.com.

لم أكن أعرف أنه يمكنك التسجيل !!. com ، هذا جنون.

الدرس المستفاد من هذه المشكلة: إذا قمت بكتابة غلاف Unix ، فإن الميزة الوحيدة التي يجب أن تتأكد من تنفيذها هي sudo !! ، لأنه يبدو أن الناس لا يمكنهم العيش بدونها.

على محمل الجد ، لقد تلقيت كلمة من أشخاص يقولون إن هذا يعمل بشكل رائع:

bucaran نعم ، في الواقع ، يبدو أن هذا هو الحال 😆.

أسماء النطاقات الدولية - IDNs:

https://en.wikipedia.org/wiki/Internationalized_domain_name

تحرير: بطيء جدًا مع هذا المنشور ، وكذلك التسجيلات مثل تلك الرموز @ geoff! يجب أن يكون هذا استثمارًا حكيمًا. حرفين (Sorta) .com!

على الرغم من أن #!.com كان سيأخذ الكعكة. هل هناك قاعدة تحظر ذلك بالنسبة لـ com TLD ، أو أي شيء يجب حله؟

في عرض bash for Windows ، كتب الرجل شيئًا ما
مثله:

$> صدى مرحبا ويندوز !!

وآمل أن تتمكنوا جميعًا من تخمين ما حدث.
بتاريخ 11 مايو 2016 الساعة 1:57 مساءً ، كتب "آرون جيس" [email protected] :

أسماء النطاقات الدولية - IDNs

في 11 مايو 2016 الساعة 4:44:58 صباحًا ، كتب Timophey ([email protected]):

مهلا! هذا بارد! @ geoff-codes https://github.com/geoff-codes كيف فعلت
أنت
إفعل ذلك؟)

-
أنت تتلقى هذا لأنك مشترك في هذا الموضوع.
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
<
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -218435761

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة أو قم بعرضه على GitHub
https://github.com/fish-shell/fish-shell/issues/288#issuecomment -218438118

لذا ، يجب أن أتحول إلى باش؟

@ base698 - انتهيت من وضع مكون إضافي للصياد لدعم حالتي الاستخدام الأكثر شيوعًا لاستبدال التاريخ: !! لكامل الأمر الأخير و! $ لآخر وسيطة. بصراحة ، لقد كسرت في الغالب عاداتي لأن تحرير سطر أوامر الأسماك جيد جدًا. ما زلت أحب حقًا أن أكون قادرًا على ذلك

> which tool
> cat (!!)

لفحص البرنامج النصي على سبيل المثال

يمكنك تثبيت المكون الإضافي بـ fisher install nyarly/fish-bang-bang بمجرد تثبيت الصياد.

من أجل الاكتمال (وإعطاء المثال الصحيح)
هذه لقطة شاشة لفيديو youtube الذي ذكرته ، هذه إحدى الميزات الرائعة لـ "!!" النمط الذي يتوفر الآن على Windows أيضًا.
bangpatternbash

https://www.youtube.com/watch؟v=2dB0igTfhfg&feature=youtu.be&t=760

يريد تنفيذ git commit -a -m "Rawr!!"

النتائج في git commit -a -m "Rawrclear"

بقدر ما أحب السمك !! هو فقط مفيد جدا. لست متأكدًا من sudo !! ولكن أيضًا كطريقة لتمرير المعلومات السابقة إلى الأوامر الجديدة. فمثلا:

find . -name something | grep "pattern" ثم ألعب بالنمط حتى أحصل على ما أريد.
ثم سأقوم بتمريرها إلى شيء من هذا القبيل (someCommand !! ). حاليًا ، في الأسماك ، هذا يتطلب خطوات كثيرة جدًا. الحلول لا تعمل بشكل جيد بالنسبة لي.

يتوسع zsh !! حتى تتمكن من تحريره. لذا سيتعين علينا العودة إلى zsh.

إذا كنت تستخدم الصياد (وهو ما يجب أن تكون عليه كثيرًا) ، فيمكنك تثبيت nyarly/fish-bang-bang والحصول على توسيع في أي مكان في الأمر !! و !$

nyarly نعم ، لقد حاولت ذلك. لكنني لا أحب كيف يتم توسيعه مباشرة بعد كتابة ! . شعرت بالحرج. يشعر zsh بشكل أفضل لأنه يتوسع بعد إدخال مسافة أو الضغط على مفتاح الإدخال.

تحرير: لا تهتم ، لم أستطع فعل ذلك. لقد نسيت كيف كان إعداد ZSH مزعجًا ليكون ما أريده أن يكون. سيتعين على المكون الإضافي لـ nyarly القيام به.

أنا سعيد جدًا لأن هذا لم يتم تنفيذه! إنه ينتهك قانون فيش !! و !$ وربما s^ . لهذا السبب يستخدمها الناس فقط. يعتبر حل Fish أكثر تفاعلية ، مما يسمح باستبدال الحجج بشكل أكثر عمومية. إنه فعال بدرجة كافية من حيث عدد السكتات الدماغية ، وكفاءة بنفس القدر مع !! .

يفقد بعض المستخدمين !! و !$ ولا يريدون التعلم بطريقة مختلفة. هل يجب على الأسماك تنفيذ هذه الميزات فقط كحالات حافة (انظر قانون التعامد)؟ أو كل استبدال تاريخ Bash؟ أو كل الميزات من قذائف أخرى؟ كل الميزات التي يمكن للمستخدمين التفكير فيها؟

إليك إصلاحًا لمن يريد شيئًا ما لنسخه ولصقه:

ضع هذا في ~ / .config / fish / function / fish_user_key_bindings.fish

function bind_bang
  switch (commandline -t)
  case "!"
    commandline -t $history[1]; commandline -f repaint
  case "*"
    commandline -i !
  end
end

function bind_dollar
  switch (commandline -t)
  case "!"
    commandline -t ""
    commandline -f history-token-search-backward
  case "*"
    commandline -i '$'
  end
end

function fish_user_key_bindings
  bind ! bind_bang
  bind '$' bind_dollar
end

siteshwar URL المرتبط بـ https://github.com/fish-shell/fish-shell/issues/288#issuecomment -7869918 معطل. هل يمكنك تعديل تعليقك لإصلاحه للأشخاص الذين يقرؤون هذه المشكلة التي ما زالت مفتوحة؟

لقد قمت بتحرير تعليقه للإشارة إلى المكان الذي نستضيف فيه الأسئلة الشائعة الآن.

الآن هذه السمكة لديها && و || (https://github.com/fish-shell/fish-shell/issues/4620) إنه قريب جدًا من أن يكون بديلاً كاملاً لـ bash!

انا حقا مرتبك --

لذا فإن الغلاف الذي يعلن هدفه التصميمي رقم 1 هو:

1. Everything that can be done in other shell languages should be possible to do in fish

... لا يسمح لي بالقيام بواحد من أكثر الإجراءات شيوعًا في كل صدفة أخرى؟

الأسئلة المتداولة حول الأسماك تقول أنه يجب على المستخدمين بدلاً من ذلك

First press Up, then Home, then type "sudo ".

يا له من امتداد. كم عدد المستخدمين الذين ضغطوا على زر "الصفحة الرئيسية" في الأشهر الستة الماضية لأي سبب من الأسباب؟ بهذا الطول ، يمكنني القول أن التحليل التلقائي للأوامر من صفحة الرجل ليس متعامدًا بما يكفي من مجرد فتح ملف الرجل اللعين والعثور عليه بنفسك.

تضمين التغريدة
الإجراء الذي تريد القيام به هو تنفيذ الأمر السابق باستخدام sudo مسبقًا
وتوفر الأسماك هذه الوظيفة
على الرغم من أنه بدلا من الدخول
First type "sudo ", then press shift+1, then press shift+1
أفعل
ctrl+p, ctrl+a, type "sudo "
هذا يعمل بنفس الطريقة في باش
الآن بعد أن ذكرت الأسئلة الشائعة التي قمت بفحصها مرة أخرى وأزال شخص ما الجزء الخاص بهذا الاختصار مفقود الآن. (لقد أنشأت https://github.com/fish-shell/fish-shell/pull/3879 لإصلاح هذا)
يعود سبب نجاح هذا الاختصار إلى أنه يتبع مكتبة readline التي يتم تنفيذها على نطاق واسع أو تقليدها لتحرير السطر.
إذا وجدت الوقت الذي سأقوم فيه بإنشاء طلب سحب لإضافة هذا إلى الأسئلة الشائعة
يمكنني أن أفهم إحباطك ، استخدام المفتاح Home ليس خيارًا حقًا ، لأن هذا المفتاح موجود في مكان مختلف في العديد من لوحات المفاتيح (على سبيل المثال ، كل لوحات المفاتيح الثلاثة الخاصة بي).

شكرا لطرح هذا مرة أخرى. أعتقد أنه من المهم أن يكون لديك وسيلة سهلة (مفتاح التعديل والحروف فقط ، بدون مفتاح رئيسي ، بدون مفاتيح أسهم) ، سريع (ليس الكثير من ضغطات المفاتيح) وطريقة _ موثقة_ للقيام بذلك.

رائع ، لم يكن لدي أي فكرة عن ctrl + p! أنا أحب هذا حتى أفضل من !!.

تعديل:
هل هناك أي طريقة أخرى لإعادة تقييم الأمر الذي تم تشغيله مؤخرًا؟ أجد نفسي أفعل شيئًا كهذا كثيرًا في باش:

> man -w fish  # prints location of man file for fish
/usr/share/fish/man/man1/fish.1

> less $(!!)

إنها ليست موجزة ، ولكن يمكنك القيام بذلك باستخدام EVAL ومتغير history:

> man -w fish
/usr/share/fish/man/man1/fish.1

> less (eval $history[1])

لكن أفضل طريقة للقيام بذلك هي استخدام alt-p. ستقوم Fish بتوجيه مخرجات الأمر إلى أقل إذا ضغطت على alt-p بعد كتابة الأمر:

> man fish alt-p > man fish ^&1 |less;

أنا لا أفهم جميع الأشخاص المناهضين للانفجار .. هناك العديد من الحالات التي تكون فيها الأشياء المثيرة للضحك أسرع وأكثر ملاءمة من "الحل البديل" مثل:
First press Up, then Home, then type "sudo ".

أوامر بانج هي سحر سخيف بمجرد أن تعتاد عليها .. آمل حقًا أن يغير رجال الأسماك رأيهم ويضيفوهم مرة أخرى. على الأقل ، هناك عدد قليل من الأشياء الجيدة ، مثل:

!!
!WORD
!WORD:p
!:n
!$
!^
!n:n
!:gs/MISTAKE/FIX
!#
!#^

السمك جميل جدًا ، استمر في العمل الجيد

هل هناك طريقة مدعومة لتنفيذ آخر أمر في التاريخ؟ لا أمانع في الاضطرار إلى كتابته ، لأنني أستخدم ماكرو فقط لاستدعاء الأمر في نافذة tmux الأخرى. لكن حالة استخدامي هي أنني أريد فقط أن أكون قادرًا على فعل شيء مثل هذا:

$ echo "hi"
hi
$ x
hi
$ x
hi

حاولت eval $history[1] ، لكن المكالمة الثانية انفجرت. هذا هو الشيء المفيد في الأمر !! . الشيء الوحيد غير المقبول حقًا هو استخدام مفاتيح الأسهم. هل يوجد أي أمر في الأسماك يدعم حالة الاستخدام هذه؟

أفضل ما يمكنني التفكير فيه الآن هو استخدام مساحة رائدة تمنع إضافتها إلى السجل:

$ function x ; eval $history[1] ; end
$ echo "hi"
hi
$  x    # note leading space
hi
$  x
hi

إنه بالتأكيد ليس رائعًا كما أعلم. ولكن في هذه الحالة البسيطة ، يبدو أن الربط history-search-backward يجب أن يكون كافيًا؟ هذه مفاتيح الأسهم بشكل افتراضي ولكن يمكنك إضافتها أو تغييرها.

أوه! هذه فكرة جيدة ، لم أفكر في استخدام المساحة الرائدة. سآخذ لمحاولة ذلك.

التحديث :
عملت بشكل مثالي لحالة الاستخدام الخاصة بي. $ eval $history[1] #note extra leading space

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

البند الأول. أريد أن أكرر الأمر السابق مع sudo:

sudo !!

1) اضغط على الزر لأعلى
مشكلة ، لا بد لي من الوصول إلى الزر لأعلى على لوحات المفاتيح مايو. حوالي ربع الوقت الذي أفتقده ، ثم يجب أن أنظر إلى أسفل على لوحة المفاتيح لمعرفة مكانها بالضبط وربما أصلح كل ما أفسدته. ثم...
2) اضغط على Home أو Ctrl-A
المنزل هو امتداد آخر ويقع في العديد من المواقع المتنوعة على لوحات مفاتيح مختلفة سأضطر للبحث عنها. يأتي Ctrl-A بشكل طبيعي بشكل أكبر ، لذا أعتقد أن هذا يعمل.
3) اكتب sudo واضغط على رجوع.
حسنًا ، هذه سبع ضغطات فقط على المفاتيح ، لكن إحداها عرضة للخطأ وتتسبب في مقاطعة سير العمل بنسبة كبيرة من الوقت.

العنصر التالي ، أريد أن أعرض الحجة الأخيرة السابقة:

ls -l /etc/network/iptables
cat !$

او بالسمك:
1) اكتب "قطة"
2) Alt-Up
حسنًا ، مرة أخرى ، هذا ليس طبيعيًا جدًا. نادرًا ما أضغط على مفتاح Alt وأضرب في كثير من الأحيان مفتاح Super (Cmd / Windows / أيًا كان) بجواره مما يغير السياق الذي أكون فيه تمامًا.

يحتاج السمك إلى توسع أفضل في التاريخ مثل جميع المنافسين الرئيسيين. نقصه هو انخفاض في الإنتاجية للمستخدمين النهائيين.

wrecklass لأنني لم أستطع الحصول على sudo !! من أصابعي ، كتبت https://github.com/nyarly/fish-bang-bang ، الذي سأقترحه عليك.

أيضًا ، IIRC ، يتم شحن الأسماك مع Alt-S لـ "sudo prepend" والتي ستعمل لإدخال السجل الأخير إذا كان الأمر فارغًا حاليًا ، بنفس الطريقة التي يقوم بها Alt-P بإلحاق | less .

ولأنها مستمرة في الظهور ، ("على سبيل المثال ، لماذا لا تعمل في الأسماك بالطريقة التي تعمل بها باش") أريد أن أتحدث: المعاملة الخاصة للشخصية ! كانت أحد الأشياء التي أخرجني من باش. باعتباري مستخدمًا للأسماك لفترة طويلة ، سأصاب بخيبة أمل كبيرة إذا تم تقديم هذا السلوك لإرضاء أقلية صوتية.

sudo !! شيء قياسي. أفهم أن الأسماك تحاول جاهدة الابتعاد عن بناء جملة باش القديم ، ولكن من خلال إبعاد الميزات المفيدة بشكل شرعي لصالح الفلسفة الشخصية ، أعتقد أننا نوقف التقدم.

ClickSentinel ، لهذا السبب بالذات تركت استخدام fish والتزمت بـ bash . : مبتسم:

خطتنا الحالية هي تنفيذ الاختصارات العالمية ، والتي يمكن أن تدعم أيضًا "!!" وآخرون. انظر # 5003 لذلك.

إنني أغلق هذه المسألة لصالح ذلك لأنها استكملت مجراها.

tukusejssirs و ClickSentinel ، هل حاولت إضافة الكود على https://github.com/fish-shell/fish-shell/issues/288#issuecomment -306212011 إلى التكوين الخاص بك؟

لقد كان لدي متغير من ذلك لعدة سنوات (تم تعديله من مشكلة (هذه المشكلة ، ربما؟) في التكوين الخاص بي ، وهو أحد أجزاء بيئة عمل الصدفة التي أعتمد عليها كثيرًا. (أيضًا ، خاصة مع الحالة الإضافية لدي في البديل الخاص بي لإجراء بحث عن رمز تصاعدي باستخدام السلسلة قبل !$ ، إنها واحدة من أكثر الأشياء التي أزعجني عدم امتلاكها عند العمل في bash.)

البديل الخاص بي (أو ربما سرقت الاختلاف ... لا أتذكر: man_shrugging:):

function bind_bang
    switch (commandline --current-token)[-1]
    case "!"
        # Without the `--`, the functionality can break when completing
        # flags used in the history (since, in certain edge cases
        # `commandline` will assume that *it* should try to interpret
        # the flag)
        commandline --current-token -- $history[1]
        commandline --function repaint
    case "*"
        commandline --insert !
    end
end

function bind_dollar
    switch (commandline --current-token)[-1]
    # This case lets us still type a literal `!$` if we need to (by
    # typing `!\$`). Probably overkill.
    case "*!\\"
        # Without the `--`, the functionality can break when completing
        # flags used in the history (since, in certain edge cases
        # `commandline` will assume that *it* should try to interpret
        # the flag)
        commandline --current-token -- (echo -ns (commandline --current-token)[-1] | head -c '-1')
        commandline --insert '$'
    case "!"
        commandline --current-token ""
        commandline --function history-token-search-backward


    # Main difference from referenced version is this `*!` case
    # =========================================================
    #
    # If the `!$` is preceded by any text, search backward for tokens
    # that contain that text as a substring. E.g., if we'd previously
    # run
    #
    #   git checkout -b a_feature_branch
    #   git checkout master
    #
    # then the `fea!$` in the following would be replaced with
    # `a_feature_branch`
    #
    #   git branch -d fea!$
    #
    # and our command line would look like
    #
    #   git branch -d a_feature_branch
    #
    case "*!"
        # Without the `--`, the functionality can break when completing
        # flags used in the history (since, in certain edge cases
        # `commandline` will assume that *it* should try to interpret
        # the flag)
        commandline --current-token -- (echo -ns (commandline --current-token)[-1] | head -c '-1')
        commandline --function history-token-search-backward
    case "*"
        commandline --insert '$'
    end
end

function fish_user_key_bindings
    bind ! bind_bang
    bind '$' bind_dollar
end

شكرًا @ scooter-duckle ، هذا يعمل بشكل أفضل من # 228

هناك حالات يقدم فيها Fish طريقة اصطلاحية أكثر للقيام ببعض الإجراءات:

LANG=C :
fish: Unsupported use of '='. To run ':' with a modified environment, please use 'env LANG=C :…'

ربما يمكن أيضًا أن يولد !! ، افتراضيًا ، مثل هذه الرسالة التي تقترح طريقة بديلة أكثر اصطلاحية للقيام بذلك؟

ومع ذلك يجب أن يكون الاقتراح بنفس الكفاءة. يقارن:

  • sudo !!<enter> ، كل ذلك من الموضع الأساسي للعقارب على لوحة المفاتيح
  • <up><home>sudo <enter> ، كما هو مقترح في الأسئلة الشائعة للأسماك والذي يبدو أنه يتطلب حركات أكثر أو أقل من الأيدي حسب المكانوعلى لوحة المفاتيح.
  • <C-p><Ca>sudo <enter> ، يمكن الوصول إليه بدون تحريك الأيدي ، والذي يعمل أيضًا مع الإعدادات الافتراضية لـ Bash و ZSH وربما أكثر ، حتى يتمكن المستخدمون من تبني عادة جديدة تكون محمولة عندما يتعين عليهم التعامل مع أصداف أخرى.

بالنسبة إلى !$ ، يبدو اقتراح <alt-.> جيدًا ، أليس كذلك؟

psychoslave من فضلك توقف عن التعليق على جميع القضايا القديمة ، وخاصة تلك المغلقة.

أيضا قفل هذا واحد. تم الرد عليه حوالي خمسين مرة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات