【コラム】

漢のzsh

18 コマンド補完設定 - daemonコマンド編(2)

 

18/24

前回はdaemonコマンドに対する補完機能を設定する方法について述べた。今回はさらに補完機能を高める方法について解説しよう。

引数のコマンドに対してそれぞれ補完が効くようにする

daemonコマンドは引数にコマンドをとる。そのため、コマンドを補完対象とでるように設定したわけだが、これだけでは使いにくい。コマンドを補完表示したあとは、そのコマンドの補完設定が機能するようにしたいところだ。

そこで、コマンド補完の後に「'*::args:_normal'」を追加しよう。これは、引数のコマンドに対して補完が有効になる設定だ。指定する順番がそのままコマンド補完の補完場所に対応している。

リスト1.1 補完されて表示されるコマンドに対して補完設定が有効になるように設定を追加


#compdef daemon

_arguments \
  ':command:_command_names -e' \
  '*::args:_normal'

リスト1.1のように設定すれば、例えばプロンプト1.1のように補完されたコマンドに対してさらに補完機能が適用されるようになる。

プロンプト1.1 補完されたコマンドに対してコマンド補完機能が適用されるようになった


% daemon tar [ここでタブキーを押すとコマンドの補完が展開される]
A  -- append to an archive
c  -- create a new archive
f  -- specify archive file or device
t  -- list archive contents
u  -- update archive
v  -- verbose output
x  -- extract files from an archive

オプション補完を実現しよう

引数の補完設定ができたので、次はdaemonコマンドのオプション補完機能を実現するとしよう。FreeBSD 7-currentのdaemonコマンドには。-c、-f、-p、-uのコマンドオプションがある。その中で、まずは引数をとらない単体オプションの-cと-fを設定する。設定は、 '-c[change the current working directory to the root]'のようにオプションとその説明を追加すればよい。動作説明は、マニュアルから引用しよう。

リスト2.1 オプションを設定


#compdef daemon

_arguments \
  '-c[change the current working directory to the root]' \
  '-f[redirect standard input, standard output and standard error to /dev/null]' \
  ':command:_command_names -e' \
  '*::args:_normal'

リスト2.1のように設定すると、プロンプト2.1のように「-タブキー」でオプションが補完表示されるようになる。さらにオプション補完を実行しようとすれば、プロンプト2.2のように残りのオプションが補完表示されるようになる。これだけの設定でここまで動くようになるのだから、なかなか便利だ。

プロンプト2.1 「-タブキー」でオプションが補完表示されるようになった


% daemon -[ここでタブキーを押すとオプションの候補が表示される]
-c  -- change the current working directory to the root
-f  -- redirect standard input, standard output and standard error to /dev/null

プロンプト2.3 残りのオプションが補完候補として表示される


% daemon -c -[ここでタブキーを押すと残りの候補が補完表示される]
-f  -- redirect standard input, standard output and standard error to /dev/null

値をとるオプション補完も実現しよう

FreeBSD daemonコマンドでは-pでプロセスIDを出力するファイルを、-uで実行するユーザを指定できる。ファイルを補完するなら:file:_filesを、ユーザ名を補完するなら:user:_users'をオプション補完設定に追加すればよい。つまり-uなら'-u[run the program with the rights of user specified]:user:_users'のようになるわけだ。

リスト3.1 オプションに対して補完設定が効くように設定を追加


#compdef daemon

_arguments \
  '-c[change the current working directory to the root]' \
  '-f[redirect standard input, standard output and standard error to /dev/null]' \
  '-p[write the ID of the created process into the file]:file:_files' \
  '-u[run the program with the rights of user specified]:user:_users' \
  ':command:_command_names -e' \
  '*::args:_normal'

リスト3.1のように設定すれば、プロンプト3.1やプロンプト3.2のようにオプション後に補完が効くようになる。

プロンプト3.1 -pオプションに対してファイル名が補完されている


% daemon -p [ここでタブキーを押すとファイルが補完表示される]
COPYRIGHT.txt  dir02/         file01         file03         file05       
dir01/         dir03/         file02         file04       

プロンプト3.2 -uオプションに対してユーザ名が補完されている


% daemon -u [ここでタブキーを押すとユーザ名が補完表示される]
_dhcp    bind    daichi     kmem        news      polkit  sasaki    test   uucp
_pflogd  cups    games      mailnull    nobody    pop     smmsp     test2  www
avahi    cyrus   gdm        man         operator  proxy   sshd      toor     
bin      daemon  haldaemon  messagebus  ozawa     root    takasyou  tty

これだけの設定でオプション補完、オプションの引数補完、補完されたコマンドに対しての補完機能が有効になるわけだ。これらの設定は、ほかのコマンドにも適用できる典型的な設定パターンなので覚えておくと便利だ。

オプションのショートカットドキュメントとして補完設定を活用

重宝するコマンドであっても、使っていなければオプションは忘れるものだ。そういうときはマニュアルを見るわけだが、なかなか面倒くさい。そこでzshの補完機能を活用しよう。

よく使うオプションをあらかじめオプション補完設定として設定しておく。そうすれば「-タブキー」でそれらオプションが表示されるというわけだ。これはクセになるほど便利な機能である。

とはいっても、補完機能を使ってToDoリストを作成するとか、そういった意味があるのか無いのか不明なこともできるし、応用範囲は広い。とりあえず補完設定が用意されていないコマンドがあれば、どんどん設定しよう。

18/24

インデックス

連載目次
第24回 グッバイ野郎ども! コピペではじめるzshファイナル
第23回 コマンド補完設定 - アーキテクチャタイプ編
第22回 もってけ泥棒! コピペで始めるzsh - リターンズ
第21回 コマンド補完設定 - ファイルシステムタイプ編
第20回 コマンド補完設定 - cal/ncalコマンド編
第19回 コマンド補完設定 - trafshowコマンド編
第18回 コマンド補完設定 - daemonコマンド編(2)
第17回 コマンド補完設定 - daemonコマンド編(1)
第16回 拡張子ごとにコマンドを自動実行 - 「alias -s」
第15回 **で簡単ヒット!!! - 漢達への熱いお願い付き
第14回 zshとscreenで最強のターミナル環境
第13回 タブキーは最強だ - ファイルグロブもサクっと展開
第12回 一時ファイルはもういらない - プロセス置換
第11回 zshはエディタか? - 「zed」でお手軽編集
第10回 もってけ泥棒! コピペで始めるzsh
第9回 世界はモノクロからカラーへ
第8回 これは既にシェルを超えている…… zshの算術演算
第7回 ひと味違うzshのリダイレクト
第6回 漢はだまって先方予測 - あなたはこの機能使いこなせるか
第5回 「あーっ!」というそのときのために - 備えあれば憂いなしの設定集
第4回 コマンド履歴の検索~EmacsとVi、どっちも設定できるぜzsh
第3回 同じことを2度するなんて…… 自分の過去は利用しましょう
第2回 取りあえず、プロンプトを整えておく。カッコつけたいからね
第1回 最強のシェル、それは「zsh」

もっと見る



転職ノウハウ

あなたが本領発揮できる仕事を診断
あなたの仕事適性診断

シゴト性格・弱点が20の質問でサクッと分かる!

「仕事辞めたい……」その理由は?
「仕事辞めたい……」その理由は?

71%の人が仕事を辞めたいと思った経験あり。その理由と対処法は?

3年後の年収どうなる? 年収予報
3年後の年収どうなる? 年収予報

今の年収は適正? 3年後は? あなたの年収をデータに基づき予報します。

激務な職場を辞めたいが、美女が邪魔して辞められない
激務な職場を辞めたいが、美女が邪魔して辞められない

美人上司と可愛い過ぎる後輩に挟まれるエンジニアの悩み

人気記事

一覧

イチオシ記事

新着記事

新たな末柄里恵大好き声優その名は駒形友梨! 新ユニットも明かされた『ミリオンライブ!』in C3TOKYO
[00:43 8/29] ホビー
[NMB48矢倉楓子]「ヤンマガ」グラビアでビキニ披露 選抜ネクストガールズのセンターが大胆に
[00:00 8/29] エンタメ
[瑛茉ジャスミン]「天才てれびくん」出身の美女が「ヤンマガ」グラビアでセクシーに ビキニ姿を披露
[00:00 8/29] エンタメ
Googleお役立ちテクニック - GoogleドライブをPCにインストールする
[00:00 8/29] パソコン
小室哲哉とヒャダインが共同作曲“運動したくない歌”
[23:00 8/28] エンタメ

求人情報