修正機能を有効にしました(電話をかけません)自動修正特にこの問題のため)setopt correct
私の.zshrc
。
端末に入力するとdtae
、次の結果が表示されます。
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
この時点でzshが私の決定を覚えていることを願っています。したがって、次の入力時に自動的に[1]dtae
に変更する必要があります。date
しかし、これは起こらず、zshは私に何をすべきかを尋ねました。
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] もちろん、dtae
当時実際のコマンドやエイリアスが存在しない限り。
修正する:
zshの「正しい」機能を呼び出して、自動的に生成されたエイリアスを含むカスタムファイルを生成するようにzshソースコード(file utils.c
、function)を修正しました。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
定義された組み込みエイリアスに基づいてコードを記述できます。ここ
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
答え2
~/.zsh_ Correct_aliasesでprecmd関数を定義できます。