zsh 完了コマンドを使用する場合umount
:
umount /mnt/t<TAB>
ファイルシステムのインストールが完了します/mnt/tmp
。
しかし、誤ってTabを押しすぎると、あまりにも多くの助けをしようとし、別のマウントポイントを提案して、次のような意味のない完了を引き起こします。
umount /mnt/tmp /
別のタブで追加のパラメータを追加しないように、削除の完了を1つのマウントポイントに制限するにはどうすればよいですか?
以下で関連部分を見つけたようです/usr/share/zsh/functions/Completion/Unix/_mount
。
# Completion for umount.
local excl='-V --version -h --help'
args=(
'(- *)'{-h,--help}'[show help]'
'(- *)'{-V,--version}'[show version]'
"($excl -v --verbose)"{-v,--verbose}'[verbose mode]'
"($excl -n --no-mtab)"{-n,--no-mtab}"[don't write /etc/mtab]"
"($excl)-r[remount read-only on failure]"
"($excl)-d[for loopback mount, free loop device]"
"($excl)-i[don't call /sbin/umount.<fs> helper]"
"($excl *)-a[unmount all file systems from /etc/mtab]"
"($excl)-t[specify file system type]:file system type:_file_systems"
"($excl *)-O[with -a, restrict filesystems by options]:file system option:->fsopt"
"($excl)-f[force unmount]"
"($excl)-l[lazy unmount]"
'*:dev or dir:->udevordir'
)
_arguments -C -s "$args[@]" && ret=0
何を修正する必要がありますか?
答え1
_arguments
複雑な獣です...オプションではなく、引数を処理する部分は
'*:dev or dir:->udevordir'
*:message:action
これはマニュアルのインスタンスです。*
つまり、オプションではなくすべての引数に適用されます。オプションではなく、最初の引数(のインスタンス)にのみ適用されるように*
置き換えられました。1
n:message:action
'1:dev or dir:->udevordir'
umount
私はzshの実装がいくつかのプラットフォームで複数のファイルシステムを許可するという点でより自由になると思います。
ファイルシステムの後に完了オプションを停止するには、に-A "-*"
渡します_arguments
。つまり、その呼び出しを次に変更します。
_arguments -C -A "-*" -s "$args[@]" && ret=0