Scribble at 2026-04-30 10:04:11 Last modified: 2026-05-02 06:40:55
いよいよバージョン 1.0 になった Zed を使い始めている。テーマはこれから作るとして、ひとまずエディタとしての挙動をカスタマイズしている。実に軽快なエディタだ。VSCode は旧マシンだと相当に重いのだが、Zed は軽快に起動してくれるのがいい。
ただ、使っていて気になることは二つあった。まず第一に、僕は "auto-close" を好まないので、"(" を入力したときに勝手に ")" を出されるのは困るから、これを抑制した。理由は簡単だ。既に何か記述している文字列の左から文字列を囲もうとすることも多いので、"abcd" に "(abcd" としたいところを "()abcd" なんてされるのは嫌だからだ。
次に、テキスト・エディタの中にはファイルを保存すると勝手に末尾に空行を入れようとするものがある。これは、正確に言うと空行を入れようとするのではなく、テキスト・ファイルの行は全て改行コードで終わるべきであるという POSIX の規約に従って、最終行に改行を入れているのだ。もちろん、POSIX はシステム開発の規格団体でもなければ標準化の団体でもないわけで、プログラマやテキスト・エディタの開発者が POSIX に準拠する義務は全くない。
ところが困ったことに、「POSIX のルールによって、テキスト・ファイルの末尾は空行でなければならない」などという都市伝説をバラまいている連中がいる。そういう人々は、たいてい POSIX の原文を読む英語力がないのに加えて、そもそも POSIX が何であるかすら知らないコーダとかが note や Qiita などに出鱈目を書いて勉強の記録だの社会貢献だのと語っていたりするから厄介だ。こういう、無自覚で未熟な善意マンほど手に負えないものはない。教養なり知性のある人々は説明すれば分かるが、無教養で知性のない人々は説明して分かる連中ではなく、「せっかく『善いこと』をしているのに文句を言うやつら」などと、指摘したり諭している相手に逆ギレすることも多い。
だが、悪貨は良貨をなんとやら。そういう人々の方が気軽に(根拠や議論の妥当性をチェックするなんて手間をかけずに書き流すか、WELQ 学生のようにコピペするか、いまでは生成 AI に無数の原稿を吐き出してもらうだけなので)大量の文章を公開するため、それをモグモグと食って成長した Gemini なども「『ファイルの末尾は改行(newline)で終わるべき』という POSIX の伝統的な作法に従おうとするテキストエディタが多いから、Zed も空行を入れようとする」などという嘘を平気で吐くわけで、それを鵜吞みにする人々が再び同じことを note や Qiita Zen なんとかに書くわけである。
僕は、こういう悪循環を止める方法は原則としてないと考えている。僕自身は違うようにふるまうし、それが最高学府にまで進んだ人間の習慣であり思考のパターンであって、別にこれは僕が偉いからでもなければ学歴があるからでもなく、殆ど性癖や癖のようなものだ。それに、いまや無数のデタラメを自動で吐き出す生成 AI と馬鹿の強力タッグにわれわれ見識ある大人が物量で打ち勝つ手段はないし、個人としてそんなのに「勝つ」必要はないのだ。僕は自分が正しいと思うことをやればいいだけであって、彼らのやっていることを是正しようがしまいが、僕らのように教養や知性ある者には関係がない。もちろん、馬鹿が書いたものを読んだ誰かのせいで、僕ら自身に何らかの被害が生じる可能性はあるけれど、そういうリスクは個別に対処すればいいわけであって、原則あるいは一般論として馬鹿の集団に対抗することは、概して(こちらの一般論の方が正しい)徒労である。
ということで、まず POSIX に規定されている "3.206 Line - A sequence of zero or more non- <newline> characters plus a terminating <newline> character." という記述は単なる定義であって、テキスト・ファイルに関する規約でも規制でもないことを確かめておこう。それから、これは POSIX が原則として正しいと思うのだが、そもそも「テキスト・ファイル」なんてものは唯一の定義や仕様として存在しているわけではなく("POSIX.1-2017 does not distinguish between text files and binary files")、ファイル・システム上のデータは全て「バイナリ・ファイル」と言ってもいいのであって、その中で特殊な扱いをするものとして「テキスト・ファイル」と呼ばれる種類があるにすぎない。そして、POSIX では、規制されたサイズを超えない範囲で、改行文字を含めた文字によるゼロ以上の行があるファイルをテキスト・ファイルと定義しているだけである。最後に改行を残せだの、すべての行は改行文字で終えろだのと定義したり規定しているわけではないのだ。そもそも0行でもテキスト・ファイルの定義を満たすのであるから、改行文字が全くない0行のファイルでもテキスト・ファイルである以上、POSIX がテキスト・ファイルに1行以上の行がそもそもあり、そして全ての行が改行文字で終わるべきあるなどとも言っていないのは明らかだ。
ということで、慣用としてあらゆる行に改行文字を入れようとするプログラムがあるのは、そうした方が「全ての行は改行コードで終わっている」という単純なルールで扱えるからという利便性を理由にしていることがあり、POSIX に準拠すべきといった(それが間違いであることは既にお分かりであろう)妄想を理由にしているとは限らないのである。それゆえ、POSIX に従う必要などない大半のエンジニアにおいては、テキスト・エディタが仕様として無理やりに改行文字を追加しようとする挙動には抵抗したり不平を述べてもよいわけである。
それに、ファイルの末尾を空行で終えたくないという欲求は、他の処理において支障が起きるという理由もあってのことだ。僕の場合は、Forge Neo という diffusion 系の拡散モデルで画像を生成するフロント・エンドを使っていて、"dynamic prompt" という拡張機能でワイルド・カードなどを使ってランダムに選ばれたキーワードを配置したプロンプトで画像を生成することがある。このワイルド・カードの定義ファイルは、ファイルに記述された全ての行をランダムに選択する候補として分割して扱うため、空行を一つの候補として扱われては困るのだ。
ということで、調べてみると Zed には "insert_final_newline" というフラグがある。設定画面では、左上の検索ボックスで "newline" などと入れたら "Ensure Final Newlinw On Save" という設定項目が出てくる。
[追記:2026-04-30] ただ、暫く Zed を使ってみて酷い目にあった。Zed を使う方は、勝手にコードをフォーマットされないよう、Zed を入れたら真っ先に設定画面であらゆるフォーマット機能やオート・インデントや wrap の機能を点検した方がいいだろう。そのまま使うと、ソース・コードを保存したときに Zed が色々なフォーマットを実行して、たとえばクラス定義の中にあるメソッドの引数を全て1行ごとに改行してばら撒いてしまったり、最後の引数の後にも勝手にカンマを追加するといった滅茶苦茶なことをやってくれる。これはコードのフォーマットなどではなく「改竄」である。軽快な挙動なので好印象を持っていたが、ちょっとこれには参った。
[追記:2026-05-02] 他にも幾つか気になることがある。まず、テーマの色設定は項目だけ定義されているのに、実際は効果がないものが幾つかある。その中でも重要なのが改行文字だ。そもそも色の設定どころか表示すらされない。Reddit ではフォントの問題であるかのように書いている人もいるが、僕はフォントを "Consolas" にしているから Zed の標準ではないので問題ない。タブ文字などは表示されているから、これは Zed 側の問題であろう。そして次に、タブを "hard tab" に設定しても、インデントがタブ文字(→)で表示されない。これも、僕はタブ文字でインデントする習慣があるので困る。