【vim】80桁教信者の憂鬱 | blog.delphinus.dev
https://blog.delphinus.dev/2013/06/source-in-80-columns.html
前回の記事は結構反響がありました。やっぱりみんな気にしてたことだったんですね。Twitter でいろいろ有益な情報も得られたので追記したいと思います。
colorcolumn
を使わない解決法
私は 「highlight turn gui=standout cterm=standout」「call matchadd('turn', '^.\{80\}\zs.\+\ze')」こんな感じ。 / “【vim】80桁教信者の憂鬱…” http://t.co/I0C82Fnl5a
— けい (@enkinho) June 20, 2013
highlight turn gui=standout cterm=standout call matchadd('turn', '^.\{80\}\zs.\+\ze')
早速試してみました。これは 'colorcolumn'
を使わずに、80 桁超えた行だけ色を付けてくれるわけですね。
ただ、スクリーンショットを見るとわかりますが、80 桁ではなく、80 文字より大きい部分に色が付いてしまいます。通常のソースコードは全て半角文字なので問題ありませんが、全角文字が入るとずれてしまいますね……。惜しいです。
スマートな解決法をいただきました! コメントを見てください。
ホットキーでトグルする
let &colorcolumn = で書くほうがスッキリと書けるな。わしはこれをトグルできるようにしておるぞ。 / 【vim】80桁教信者の憂鬱 http://t.co/S0rgtXnnYt @delphinus35
— ɐʇnɥsɐpoʇ (@todashuta) June 21, 2013
いいですね、これ! 早速試してみました。
noremap <Plug>(ToggleColorColumn) \ :<c-u>let &colorcolumn = len(&colorcolumn) > 0 ? '' : \ join(range(81, 9999), ',')<CR> " ノーマルモードの 'cc' に割り当てる nmap cc <Plug>(ToggleColorColumn)
このように設定すると、ノーマルモードで cc
とタイプするたびに切り替えられますね。
qfixhowm オヌヌメ
【vim】80桁教信者の憂鬱 http://t.co/uWBJHnndMz @delphinus35さんから VT100 かと思ってたけどCOBOL の方が古いからこっち由来なのか。指定文字数で自動改行して、削除や追加したらまた自動的に、って機能はないのかな~。
— ゆくとさん@ここではないどこか (@Yukto8492) June 22, 2013
指定文字数での自動改行は 'textwidth'
を使うと可能です。でも、これだと、
指定文字数で自動改行して、削除や追加したらまた自動的に、って機能はないのかな~。
これは無理ですよね。こういうときは、qfixhowm プラグインがこれに近いことをやってくれます。
このプラグインは非常に高機能なものなので、別項を設けて解説しましょう。
80 桁教の教祖は誰?
確かに初出はどこなんでしょうね?
COBOL を例に出した理由は、そもそも 80 桁しかソースコードが書けないという、今となっては訳のわからない縛りがあったのでそれかなあ、と。他にも RPG(ゲームじゃありませんよ)とかも 80 桁制限があった記憶があります。
これらの言語はそもそも端末ではなく、パンチカードによって入力されていましたから、80 桁というのは理念ではなく、物理的な制約だったはずです。
(俺の若い頃は 80 桁しか書けなかったんだから)ソースは 80 桁以内に収めろよ!
と古株 PG に教えられた先輩 A が当時の事情を知らないまま、
(80 桁に収めれば読みやすくなるんだから)ソースは 80 桁以内に収めろよ!
と、後輩 B に教えてしまった、というのが事の発端だったのではないでしょうか。
実際はどうなんでしょうね? 先達の声を聞いてみたいです。
最初の「colorcolumn を使わない解決法」についてですが、
call matchadd("turn", '.\%>81v')
で全角文字が入っていても問題なく動くように思うのですがどうでしょう。この%>を使ったパターンはvimのヘルプに例として載っています。
http://vim-jp.org/vimdoc-ja/pattern.html#:match
すばらしい情報をありがとうございます! こんな方法もあったんですね。本文にも追記しておきました。