基本構成強く打つ存在するUbuntu、インストールされていないソフトウェアの名前を入力すると、強く打つ実行可能ファイルがある場合はインストールする方法、ない場合は非常に似た名前の実行可能ファイルをインストールする方法について説明します。例えばEmacs(マイコンピュータにはインストールされていません):
$ emacx
No command 'emacx' found, did you mean:
Command 'emacs' from package 'emacs23-lucid' (universe)
Command 'emacs' from package 'e3' (universe)
Command 'emacs' from package 'emacs23-nox' (main)
Command 'emacs' from package 'emacs24' (main)
Command 'emacs' from package 'emacs24-nox' (main)
Command 'emacs' from package 'emacs23' (main)
Command 'emacs' from package 'jove' (universe)
Command 'emacs' from package 'emacs24-lucid' (universe)
emacx: command not found
$ emacs
The program 'emacs' can be found in the following packages:
* emacs23
* emacs23-nox
* emacs24
* emacs24-nox
* e3
* emacs23-lucid
* emacs24-lucid
* jove
Try: sudo apt-get install <selected package>
現在のzsh構成に基づいて、以下を取得します。
$ emacx
zsh: command not found: emacx
$ emacs
zsh: command not found: emacs
インストールされているソフトウェア名にエラーがある場合でも動作は異なります。始めたいと言う編集者変える編集者。そして強く打つ、私は得る:
$ kedit
No command 'kedit' found, did you mean:
Command 'xedit' from package 'x11-apps' (main)
Command 'edit' from package 'mime-support' (main)
Command 'nedit' from package 'nedit' (universe)
Command 'gedit' from package 'gedit' (main)
Command 'jedit' from package 'jedit' (universe)
Command 'medit' from package 'medit' (universe)
Command 'ledit' from package 'ledit' (main)
kedit: command not found
zshを使用すると、次のようになります。
$ kedit
zsh: correct 'kedit' to 'edit' [nyae]?
だから私の質問は次のとおりです。
- 同様の行動が可能でしょうか?嘚そして強く打つまだインストールされていない実行可能ファイルを実行しようとすると?それではどうですか?
- 誤字が発生したとき、間違っているかもしれない修正をする代わりに、すべての可能性を示すことは可能ではないだろうか?
答え1
command-not-found
Debian(およびおそらくUbuntu)のデフォルトのzsh設定には、基本パッケージのサポートは含まれていません。
同じ機能を使用するには、次の方法で/etc/zsh_command_not_found
デフォルト値を取得できます。~/.zshrc
[ -f /etc/zsh_command_not_found ] && . /etc/zsh_command_not_found
ロードしてcommand-not-found
有効にする必要がありますzsh
。
答え2
私が指摘したいのは
[[ -e /etc/zsh_command_not_found ]] && source /etc/zsh_command_not_found
ほぼ正解です。しかし、小さな問題があります。
一部のコマンドでは、結果はまったく返されません。たとえば、Bashで次のコマンドを試してみてください。
$ muxy
muxy: command not found
$ mury
mury: command not found
しかし、zshを使用すると何も得られません。エラーメッセージはありません。
$ muxy
$ murez
心配しないでください。解決策は/etc/zsh_command_not_found
ファイルにあります。
if [[ -x /usr/lib/command-not-found ]] ; then
if (( ! ${+functions[command_not_found_handler]} )) ; then
function command_not_found_handler {
[[ -x /usr/lib/command-not-found ]] || return 1
/usr/lib/command-not-found --no-failure-msg -- ${1+"$1"} && :
}
fi
fi
ここでの問題は--no-failure-msg
…削除すると問題が解決されるということです。
私がしたことは、[[ -e /etc/zsh_command_not_found ]] && source /etc/zsh_command_not_found
.zshrcを使用するのではなく、.zshrcファイルに次の行を置いたことです。
if [[ -x /usr/lib/command-not-found ]] ; then
if (( ! ${+functions[command_not_found_handler]} )) ; then
function command_not_found_handler {
[[ -x /usr/lib/command-not-found ]] || return 1
/usr/lib/command-not-found -- ${1+"$1"} && :
}
fi
fi