yuichiro.__blog__

日本語版のmanページをMacで開く(groffアップデート)

Qiitaで読む

12/31/2014 GitHubで開く

groff Fatal error

先日「vimをアップデートすると同時にHomebrew管理に移行する」という投稿をしたんですが、その後vimのmanページを開こうとすると、

Terminal
$ man vim
/usr/bin/groff: can't find `DESC' file
/usr/bin/groff:fatal error: invalid device `nippon'

何やら出てきて怒られてしまいました。
突然manが見られなくなったと思ったらgroffとか言う謎のコマンドがエラーを吐く。

原因

参考: jmanを使わずにMacのmanを日本語化する方法

どうやらvimをインストールした時、ありがたいことに日本語版のmanをインストールしていただいたようで、賢いman君は$LANGから最適な言語を探し、man vimを実行すると自動的に日本語版を見つけてくれるようになりました。

ただし、ここで問題が。manが最適なページを探し、それを整形して表示するために、groffを使うのですが、標準にインストールされているものは日本語に対応していません。

その証拠に、env LANG=C man vimを実行すれば英語版が普通に表示されました。
なのでmanを実行するとき強制的に英語版を表示するようにすれば一応表示問題は解決です。

日本語版manとかダサい。英語の勉強も兼ねてるんで。翻訳は信用出来ない。っていう方々は、お使いのshellのrcファイルに
alias man='env LANG=C man'
の一行を足せば万事解決です。

日本語版manをMacで読めるようにする

でも、せっかく日本語manをインストールしていただけたのですし、ないことにするのは少しもったいない気がします。
そこで新しいgroffをインストールし、日本語版のmanを読めるようにします。

brew install groff

Homebrewのdupesリポジトリには標準でインストールされているコマンドの"dupes"、同じもののHomebrew版が用意されています。
その中に目的のgroffも含まれているので、brew tap homebrew/dupesを実行し、リポジトリを追加します。

追記:いつしかのHomebrewメジャーアップデートでHomebrew公式が運営しているtapは基本的にhomebrew-coreに吸収されたらしいです。幸いgroffは吸収も生き残ってそのままインストールできました。

そして、brew install groff
インストールが終わった後、where groffをして/usr/local/bin/groffが表示されていることを確認しましょう。

man.conf

あとはmanに新しい方のgroffを使うように設定すればOKです!
manの設定は/etc/man.confにあるので、
$ sudo vim /etc/man.conf
で編集します。

95行目付近にJNROFFから始まる行があるので、

/etc/man.conf
- JNROFF /usr/bin/groff -Tnippon -mandocj -c
+ JNROFF /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E

上のものから下のものに置き換えましょう。

次に105~106行目付近のPAGERBROWSERそれぞれを

/etc/man.conf
- PAGER           /usr/bin/less -is
+ PAGER           /usr/bin/less -isr
- BROWSER         /usr/bin/less -is
+ BROWSER         /usr/bin/less -isr

このように末尾にrを付け足し完了です!

追記:

コメントでいただきましたが、
アップデートの度に/etc/man.confが上書きされるらしく?毎回これをすることになるらしいので簡単なpatchを、、

patch.zsh
PROFILE=~/.zprofile  # 自分が使うシェルのprofileに変更

cp /etc/man.conf ~/.man.conf
sed -i -e 's/^JNROFF\(.*\)\/.*$/JNROFF\1\/usr\/local\/bin\/groff -Dutf8 -Tutf8 -mandoc -mja -E/' ~/.man.conf
sed -i -e 's/^\(PAGER.*\)/\1r/' ~/.man.conf
sed -i -e 's/^\(BROWSER.*\)/\1r/' ~/.man.conf
echo 'alias man="man -C ~/.man.conf"' >> $PROFILE

確認

さて用意が出来たので、man vimなど、日本語版のmanが用意されているコマンドを見てみましょう。

Terminal
VIM(1)               General Commands Manual                VIM(1)

名前
       vim - Vi IMproved, プログラマのテキストエディタ

書式
       vim [options] [file ..]
       vim [options] -
       vim [options] -t tag
       vim [options] -q [errorfile]

       ex
       view
       gvim gview evim eview
       rvim rview rgvim rgview

バッチリですね!

あとがき

特定のmanファイルだけ見れないことが今までもあったのですが、深く考えてなかったです。。

追記(2020/02/02)

こんな古い記事でもいまだに需要があるようで、、ありがたいです。
古い情報になっている部分を変更しました。
いまだにmac標準インストールのman, groffではこの問題が解決されていないみたいですね、、

< MacのVPNサーバー機能vimをアップデートすると同時にHomebrew管理に移行する >

関連記事

vimをアップデートすると同時にHomebrew管理に移行する

12/28/2014

あらすじ viとvi-improved Linuxに触りたての頃、cdでディレクトリ移動、lsでフォルダ内を表示、rmで削除、っていう流れで、ファイル編集はviコマンド!と間違えてるような間違えてないような、適当な感じで覚え、.bashrc一つ編集するのに四苦八苦しながら:wq…

続きを読む

プリインストールのzshからHomebrewのzshに移行した

7/17/2014

Why? なんかよさげだったから(コナミカン バージョンが上だし アップデートもしやすそうだし みんなそれでやってるっぽいから(結論) 実際にやってみる とりあえずbrew info zshしてみる なるほど。デフォルトのzshが5.0.2だったから5.0.…

続きを読む

tmux使っている時だけ一部のANSIカラーが表示されていなかったたった1文字のミス

1/15/2021

powerline/zshから脱却できていないせいでエラーメッセージがだんだん増えてきているのでそろそろなんの設定もカスタマイズもしない環境でトレーニングするべきかなと思い始めています。 本日の事件 通常のターミナル(Mac/iTerm2/TERM=xterm-256color…

続きを読む

ShellScriptでフラグ

1/20/2015

Shellでフラグを使いたい!という場合、今まではTest文のANDチェーンで動かしていましたが、trueコマンドとfalseコマンドを見つけたのでメモります。 スマートだけど危なそう。ちゃんとtrueかfalse代入しとけばいいと思うけど。

続きを読む

zshの設定ファイルを分割して整理しやすくする

7/16/2014

.zshrc before... 初期の設定をし終わったあとでも、zshの設定には追加できるものが多いです。 新しい設定を付け足すたびにごちゃごちゃしがちな設定ファイル群ですがまとめればスマートに出来ると思います .(source) .(source…

続きを読む