কীভাবে zsh করবেন "সঠিক" কার্যকারিতা আমার বানান-সংশোধন সিদ্ধান্তগুলি মনে রাখে


24

আমি সংশোধন সক্ষম করেছেন (আমি একে ডাকতে না স্বয়ং সংশোধন zsh মধ্যে সক্ষম করে বিশেষভাবে এই সমস্যা হওয়ার কারণে) setopt correctআমার মধ্যে .zshrc

এখন, আমি যখন dtaeটার্মিনালটিতে টাইপ করি তখন আমি পাই:

dtae        
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015

এই মুহুর্তে আমি zsh আমার সিদ্ধান্ত মনে রাখতে চাই। সুতরাং পরের বার আমি টাইপ করার পরে dtaeএটি স্বয়ংক্রিয়ভাবে date[1] এ সংশোধন করা উচিত । যাইহোক, এটি ঘটে না, এবং zsh আবার আমাকে জিজ্ঞাসা করছে কী করণীয়:

dtae
zsh: correct 'dtae' to 'date' [nyae]?

[1] অবধি যদি না থাকে তবে অবশ্যই যদি সেই সময়টিতে একটি আসল dtaeকমান্ড বা ওরফে উপস্থিত থাকে ।

হালনাগাদ:

Zsh এর "সঠিক" কার্যকারিতাটির অনুরোধের সাথে স্বয়ংক্রিয়ভাবে তৈরি করা এলিয়াসগুলি যুক্ত একটি কাস্টম ফাইল তৈরি করতে আমি zsh উত্স কোড (ফাইল utils.c, ফাংশন spckword) সংশোধন করতে পেরেছি :

মূল:

if (x == 'y' || x == ' ' || x == '\t') 
{
    *s = dupstring(best);
    if (hist)
    hwrep(best);
}

সংশোধিত:

if (x == 'y' || x == ' ' || x == '\t')
{
    char *aliaspath = getenv("HOME");
    strcat(aliaspath, "/.zsh_correct_aliases");
    FILE *out = fopen(aliaspath, "ab+");
    fprintf(out, "alias %s=\'", *s);
    *s = dupstring(best);
    fprintf(out, "%s\'\n", *s);
    fclose(out);
    if (hist)
    hwrep(best);
}

সম্পাদন করার পরে dtae, নিম্নলিখিত লাইনটি ফাইলটিতে যুক্ত করা হয় ~/.zsh_correct_aliases:

alias dtae='date'

যাইহোক, আমি জানি না কীভাবে ~/.zsh_correct_aliasesজায়গায় নতুন পরিবর্তিত ফাইল উত্স করা যায় ।


1
আপনি কি এটি কেবল শেল প্রক্রিয়াকালীন বা ফাইলগুলিতে সঞ্চিত তথ্য স্মরণ করতে চান। সেই স্মরণ করা সংশোধনটি বর্তমানে চলমান সমস্ত শেল দৃষ্টান্তের জন্য অবিলম্বে উপলব্ধ হওয়া উচিত? আপনি কি স্মরণে থাকা সংশোধনটি মুছে ফেলতে চান যখন dtaeঅস্তিত্বের মধ্যে উপস্থিত হয় বা কেবল সাময়িকভাবে অক্ষম থাকে?
স্টাফেন চেজেলাস

1
@ স্টাফেনচেজেলাস ১) একটি একক ফাইলে সঞ্চিত সেরা হবে। 2) এটি একটি প্লাস হবে, তবে কঠোরভাবে প্রয়োজনীয় নয়। 3) dtaeউপস্থিত থাকা অবধি অপসারণ করা হয়েছে , তারপরে / কখন dtaeসংজ্ঞায়িত না হলে পুনরায় ইনস্টল করা হবে।
shx

3
সেখানে কোনও উত্সর্গীকৃত zsh হুক ফাংশনটি কল করা (সম্ভবত command_not_found_handlerরানটাইমের পরিবর্তে সময় পার্সিংয়ের সময়) কল করা আরও জোর দেবে এবং তারপরে zsh কোডে যুক্তিটি বাস্তবায়ন করুন।
স্টাফেন চেজেলাস

7
আমি মনে করি না এটি এটিকে ভাল অনুশীলন বলে মনে করা হয় ... সঠিকভাবে কীভাবে টাইপ করতে হয় তা শিখতে আরও বেশি দক্ষ বলে আমি মনে করি।
পেছকে

2
আমি কেবল কৌতূহলী, কমপক্ষে এই নির্দিষ্ট ব্যবহারের জন্য, কেন কোডটি .zshrc এর শেষের দিকে এলিয়াস যুক্ত করা উচিত নয় বা কোনওভাবে .zsh_correct_aliases কে .zshrc- এ বিহিত করে। সুরক্ষার জন্য প্রয়োজনীয় কিছু হ্যাশিং, অস্পষ্টতা / ভেরিয়েবল বা আরও
উন্নততার সাথে আবদ্ধ করা

উত্তর:


2

আপনি এখানে সংজ্ঞায়িত বিল্ট-ইন ওরফে আপনার কোডটি বেস করতে পারেন

HashTable ht = aliastab;
ht->addnode(ht, ztrdup(wrong_value),
            createaliasnode(ztrdup(right_value), 0));

(পরীক্ষিত না)

এবং source ~/.zsh_correct_aliasesআপনাকে জুড়ে দিন .zshrc


সম্পাদনা : উত্স দিয়ে পরীক্ষিত:

char *aliaspath = getenv("HOME");
strcat(aliaspath, "/.zsh_correct_aliases");

FILE *out = fopen(aliaspath, "ab+");
fprintf(out, "alias %s=\'", *s);

HashTable ht = aliastab;
ht->addnode(ht, ztrdup(*s),
    createaliasnode(ztrdup(best), 0));

*s = dupstring(best);
fprintf(out, "%s\'\n", *s);
fclose(out);
if (hist)
    hwrep(best);

এটি দেয়:

$ setopt correct 
$ dtea    
zsh: correct 'dtea' to 'date' [nyae]? y
lun. janv.  8 01:03:55 CET 2018  
$ alias  
dtea=date
$ dtea    
lun. janv.  8 01:07:42 CET 2018  

0

আপনি একটি পূর্বনির্ধারিত ফাংশন সংজ্ঞায়িত করতে পারেন যা উত্স। / .Zsh_cor درست_aliases।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.