Linuxゲリラ戦記

「設定ファイルをいじっちゃダメnano?」

37.nanoエディタの設定ファイル、nanorcをいじる

ナックス「こんにちは。最近は段々と春の暖かさを感じられるようになってきました。もうすぐ春ですね。花粉症の皆さんは早めに対策を」

デビー君「なんか、いつになく爽やかな始まり方だな……」

ナックス「私事で恐縮ではございますが、5年ほど前に祖父が、今年の初めに祖母が亡くなりました」

ナックス「そして、今週から祖父母の位牌が私の家に鎮座して居ります」

ナックス「祖父母の霊がここにいると思うと悪いことはできないな、と背筋を伸ばす。そんな今日この頃です」

ナックス「さて、シェルスクリプトでデスクトップ画像を集めたい、という純粋な気持ちから始まったこの企画。今日は第二回目です」

デビー君「あれ?なんかもっと欲望にまみれた企画だった様な──」

ナックス「前回はfindコマンドやlocateコマンドでファイルを検索する方法を学びました。manコマンドは基本的には信頼すべきものですが、ディストリビューションによっては柔軟な対応が求められる、ということを解説致しました」

デビー君「あれ?確かナックス、前回はmanコマンドが教える情報などというものはクソ喰らえとか言って──」

ナックス「さて。今回はnanoエディタの設定ファイル、nanorcを設定して行きたいと思います」

ナックス「前回、manコマンドでnanorcの情報を見たときに、nanorcの設定ファイルの置き場所が書かれていたのを覚えていますでしょうか?」

FILES
       SYSCONFDIR/nanorc
              System-wide configuration file

       ~/.nanorc
              Per-user configuration file

SEE ALSO
       nano(1)
       /usr/share/doc/nano/examples/nanorc.sample (or equivalent on your system)

ナックス「今回は~/.nanorc、つまり、自分のホームディレクトリに.nanorcという名前で設定ファイルを作りたいと思います」

ナックス「設定ファイルの置き場所はディストリビューションごとに異なりますが、ほとんどが/etc/ディレクトリの下に置かれています」

ナックス「/etc/ディレクトリに置いてある設定ファイルをいじることで、そのLinuxを使用している全てのユーザーに対してその変更が反映されます」

ナックス「逆に、自分のホームディレクトリに設定ファイルを置く方法は、そのホームディレクトリのユーザーにしか変更が反映されません」

ナックス「etcディレクトリ以下の設定ファイルをいじるか、それともホームディレクトリに置いて設定ファイルをいじるかは、状況によって柔軟に対処するべきです」

ナックス「ただしLinuxの設定ファイルの基本として『何かの設定を変える場合は、影響が必要最小限になるように抑えるべきだ』というのは良く聞く話です」

ナックス「勝手にetc以下のディレクトリの設定ファイルを書き換えると、他のユーザーに予期せぬ影響が出る可能性があります」

ナックス「もちろん『いや、でもLinuxを使ってるユーザーは僕一人だけだし』という方もおられるでしょう。ですが、etc以下の設定ファイルをもしバックアップするのを忘れて設定を変更してしまい、更に設定方法が間違えてそのソフトが起動しなくなってしまった場合はどうでしょう?」

ナックス「逆に、自分のホームディレクトリに設定ファイルを置いて編集するよう常日頃から心掛けていれば、もし編集に失敗して起動しなくなってしまっても、その設定ファイルを消して、etc以下にある設定ファイルをもう一度cpコマンドで自分のホームディレクトリにコピーすれば、全て元通りに使うことが出来ます」

ナックス「なので、『私しかLinux使ってないよー』っていう場合でも、ホームディレクトリで設定ファイルをいじることをお勧めします」

ナックス「さて、早速CUI環境を立ち上げてください」

デビー君「はーい。立ち上げました」

cui環境を立ち上げる

ナックス「まずは自分のホームディレクトリでls -aをしてみましょう」

$ ls -a

ナックス「もし.nanorcというファイルがあれば、そいつをそのまま使いましょう。無い人は──」

ナックス「前回のfindコマンド、およびlocateコマンドで、/etc/の直下にnanorcというファイルがあるのを確認しましたね。これを、自分のホームディレクトリにコピーします。更に、名前を.nanorcに変更します」

$ cp /etc/nanorc ~/.nanorc

もしくは

$ cp /etc/nanorc ~
$ mv ~/nanorc ~/.nanorc

nanorcファイルをホームディレクトリにコピーして.nanorcという名前に変える

ナックス「そうそう。そういえば前回の解説に誤りがありました。Debianになかったファイル、nanorc.sampleは、色の設定ファイルではなく、本当にnanorcの大元となる設定ファイルのようです(nano (CUIエディタ))。なので『/usr/share/doc/nano/examples/nanorc.sampleにファイルがあったよー』っていう人はこちらを使用しても構いません。その場合は以下の様になるかと思います」

$ cp /usr/share/doc/nano/examples/nanorc.sample ~/.nanorc

もしくは

$ cp /usr/share/doc/nano/examples/nanorc.sample ~
$ mv ~/nanorc.sample ~/.nanorc

ナックス「念のため ls -a コマンドで、きちんとホームディレクトリに .nanorc ファイルがコピーできているか確認しましょう」

$ ls -a

ホームディレクトリに.nanorcというファイルが出来ているか確認しよう

デビー君「設定ファイルの多くは名前の最初に.がついた隠しファイルになっていて、隠しファイルを見るためには lsコマンドに -a オプションをつけるんだったね」

ナックス「さて、早速nanoエディタで.nanorcを書き換えましょう」

$ nano .nanorc

.nanorcファイルをnanoで編集する

デビー君「え?nanoエディタの設定ファイルをnanoエディタ自身で書き換えられるの?」

ナックス「もちろんです。ちなみに、他のエディタの設定ファイルを書き換えるときも、そのエディタ自身で書き換えることが出来ます」

デフォルトのnanorc(Debian Lennyの場合)

ナックス「これがDebianの場合の初期状態のnanorcです」

デビー君「うわ。英語だらけだね。しかも、中身が僕が使っているディストリビューションのnanorcと微妙に違う」

ナックス「そうですね。こういう時こそ英語を読む力が必要になってくるのですが、英語が苦手な人がいることもまた事実。できるだけ要点を絞って解説して行きたいと思います」

ナックス「さて、ほとんど全ての行の行頭が#で始まっています。28..bashrcファイルのaliasで遊んでみるで.bashrcのファイルを編集したときのことを思い出してください。#は何だったでしょうか?」

デビー君「えーっと『行頭に#がつくのはコメントアウトと言って、その行に何が書かれていても、設定自体に何の影響も与えない』です」

ナックス「カンニングしながらの回答、ありがとう。つまり、この.nanorc。一見、いろいろな設定をしているようで、実はほとんど設定していないことが分かります」

デビー君「本当だ。設定が書かれているらしき行のほとんどに#が書かれてる」

ナックス「そうです。実際に設定したい時は、一番最初の#を消すだけで、それが設定される、ということですね。つまり、今回私たちが実際にやる作業は、設定したいものの最初の#を消すことだけです。もちろん、ある程度設定方法に詳しくなれば自分で設定を書いても構いません」

ナックス「さて#が書かれている行を見ると、英語で『この下の#を消すとこんな設定になるよ』と言う説明と、実際の設定箇所『set ○○』と書かれている箇所があります」

ナックス「早速目的の set ○○の部分の#を消して設定していきましょう」

ナックス「ちなみにディストリビューションによって設定ファイルの初期状態はまちまちでしょうが、設定の命令自体は全て同じ命令が使えます」

デビー君「え?どういうこと?ディストリビューションによって設定ファイルの名前や位置が違ったりするんでしょ?」

ナックス「そうです。ディストリビューションによって設定ファイルの名前や位置。またはディレクトリ構成などが微妙に違ったりします。しかし、設定の『直接の命令』(ここではset ○○」)は全てのディストリビューションで同じ命令が使えます。例えばLinuxのコマンドも全てのディストリビューションでほぼ同じコマンドが使えるように、です(このコマンドが最初から入っていないよーっていうのはあるかもれませんが、そのコマンドを後からインストールすることは出来るはずです)」

ナックス「ここら辺の感覚は初心者にはすこし理解しづらいかもしれませんが、とりあえず単純に『設定方法は同じやり方で出来る!』とだけ覚えておいてください」

ナックス「上から順番にみていくと──、そうですね。まず# set autoindentの一番最初の#を消してください。」

デビー君「set autoindent?単純に考えたら『autoindentをセットする』っていうことだよね。autoindentって何?」

ナックス「以前、シェルスクリプトを作ったとき(31.シェルスクリプトでプログラミング。Ctrl^Cで強制終了)に、見やすさのために左側にTabキーでスペースを空ける(32.初めてのプログラミング補足/diffコマンドとTabキー)という話をしました」

ナックス「見やすさのためにスペースを空けることを、専門用語で『インデントをつける』と言います。autoindent(オートインデント)は、ある程度予測して、勝手にインデントをつけてくれる機能です」

デビー君「勝手にインデントをつける?どうやって?」

ナックス「ちょっと説明が難しいのですが、設定後に今後私と一緒にシェルスクリプトを作っていく予定ですので、その過程でどんな風に勝手にインデントがつくか分かると思います。勝手にインデントがつくことに最初は戸惑うかもしれませんが、慣れると楽です」

ナックス「次は# set matchbrackets "(<[{)>]}"の#を消してください」

デビー君「これはどういう設定なの?」

ナックス「カッコの対応を分かりやすくしてくれる設定です。例えば(((()))))となったとき、実はカッコの対応が)が一つ余分に多いのですが、そういうのの判定を分かりやすく示してくれる機能です。シェルスクリプトに限らずプログラミングでは(や{などは良く使うので、ぜひとも活用したい設定です」

ナックス「さて、今回もっとも設定したかったのが色の設定です」

デビー君「色?」

ナックス「そうです。文字に勝手に色をつけて見やすくしてくれる機能です。初心者の多くが文字に色がつくことに違和感を感じて拒否反応を起こしますが、しばらく使っていると、もはや手放すことが考えられないくらいに重宝する、それが色機能。皆さんも最初は違和感を持つかもしれませんが、我慢して使ってみてください」

ナックス「さて、問題は色の設定をするためにどの#を外せばいいかです」

ナックス「どうやら着色はincludeで色付けの方法が書かれたファイルを読み込んで、色をつけるようです」

## Nanorc files
# include "/usr/share/nano/nanorc.nanorc"

## C/C++
# include "/usr/share/nano/c.nanorc"

## HTML
# include "/usr/share/nano/html.nanorc"

## TeX
# include "/usr/share/nano/tex.nanorc"

## Quoted emails (under e.g. mutt)
# include "/usr/share/nano/mutt.nanorc"

## Patch files
# include "/usr/share/nano/patch.nanorc"

## Manpages
# include "/usr/share/nano/man.nanorc"

## Groff
# include "/usr/share/nano/groff.nanorc"

## Perl
# include "/usr/share/nano/perl.nanorc"

## Python
# include "/usr/share/nano/python.nanorc"

## Ruby
# include "/usr/share/nano/ruby.nanorc"

## Java
# include "/usr/share/nano/java.nanorc"

## Assembler
# include "/usr/share/nano/asm.nanorc"

## Bourne shell scripts
# include "/usr/share/nano/sh.nanorc"

## POV-Ray
# include "/usr/share/nano/pov.nanorc"

ナックス「Debianでは上記の様に、対応するプログラムと、そのプログラムに特化した色付けを行うファイルの設定が書かれています。単純に、全ての設定を有効に。つまり、以下の様にします」

## Nanorc files
 include "/usr/share/nano/nanorc.nanorc"

## C/C++
 include "/usr/share/nano/c.nanorc"

## HTML
 include "/usr/share/nano/html.nanorc"

## TeX
 include "/usr/share/nano/tex.nanorc"

## Quoted emails (under e.g. mutt)
 include "/usr/share/nano/mutt.nanorc"

## Patch files
 include "/usr/share/nano/patch.nanorc"

## Manpages
 include "/usr/share/nano/man.nanorc"

## Groff
 include "/usr/share/nano/groff.nanorc"

## Perl
 include "/usr/share/nano/perl.nanorc"

## Python
 include "/usr/share/nano/python.nanorc"

## Ruby
 include "/usr/share/nano/ruby.nanorc"

## Java
 include "/usr/share/nano/java.nanorc"

## Assembler
 include "/usr/share/nano/asm.nanorc"

## Bourne shell scripts
 include "/usr/share/nano/sh.nanorc"

## POV-Ray
 include "/usr/share/nano/pov.nanorc"

ナックス「実際に私たちが使うのはシェルスクリプトのための色付け。上記で言えば」

## Bourne shell scripts
 include "/usr/share/nano/sh.nanorc"

ナックス「のシェルスクリプトのための色設定だけですが、将来的に他のプログラム言語にも手を伸ばすかもしれないので、だったら最初から全部色がつくようにしておいた方がいいよねーということです」

ナックス「ちなみに、どのファイルにどの色付けを行うか、というのは拡張子をみて判断するみたいです。上記の」

## Bourne shell scripts
 include "/usr/share/nano/sh.nanorc"

ナックス「を良く見ると、shという拡張子に対してこの色付けが行われるようですね」

ナックス「ちなみに、勉強すれば自分で『この拡張子のファイルはこんな場合にこんな色付けを!』というようにオリジナルの色の設定ファイルを作ることもできます。興味があればいつか挑戦してみてください」

ナックス「ディストリビューションによって、文字にどんな色がつくかの着色の色が異なるかもしれませんが、大事なのは『色付けによる見やすさ』であって『何色がついているか』ではありません。なので、今後の解説で私が使う解説画面の文字の色があなたが使っている文字の色と異なっていてもあまり気にしないでください」

デビー君「はーい」

ナックス「というわけで、私の場合最終的に設定ファイルはこの様になりました」

編集したnanorc(Debian Lennyの場合)

ナックス「もちろん、ある程度英語を読んで意味が分かるようでしたら、他の部分のコメントアウトを外してしまっても構いません。そこら辺はご自由にどうぞ」

ナックス「設定を書き換え終わりましたら、保存して終了してください。次回からnanoエディタを使うときは、今回の設定が反映されています」

ナックス「さて次回。『38.ウェブサイトはどんな風に作られているのか』です」

補足

~ってなんでしたっけ?
6.cdコマンドとlsコマンドで解説した通り、~はホームディレクトリのことです。「自分がホームディレクトリで作業している事が分かっている」っていう場合は ~ はいらないのですが、まぁ、今回はこっちの方が確実かな、と思って入れてみました。
/usr/share/nano/sh.nanorcというファイル名が、その拡張子の色付けと対応しているのですか?

誤解を招く書き方をして申し訳ございません。正確には、sh.nanorcというファイルの中に「shという拡張子の場合はこの色でね」という設定が書かれており、ファイル名は直接には拡張子との対応付けを設定しているわけではありません。

興味がある方は/usr/share/nano/sh.nanorcのファイルをテキストエディタで開いてみてください。一行目の syntax "sh" "\.sh$" が「拡張子shの場合は〜」という意味です。

『行頭に#がつくのはコメントアウトと言って、その行に何が書かれていても、設定自体に何の影響も与えない』の意味がいまいち理解できない

簡単に説明すると、例えば下記の設定ファイル

#私の理想の彼女

#年齢
set 年下
set 同年代
#set 年上

#髪型
set 黒髪
#set 赤髪
set 茶髪

#人種
#set 白人
#set 黒人
set 黄色人

と、下記の設定ファイル

set 年下
set 同年代
set 黒髪
set 茶髪
set 黄色人

は、全く同じ意味を持ちます。#が行頭につけられた文は、無視される──つまり、存在しないことと同義です。

このエントリーをはてなブックマークに追加