Vim(Vi)の改行時自動コメントアウトを無効にする

おせっかい機能


久しぶりにRedHatLinuxをいじっていてテスト用のPerlのコードをメモ帳から一気にコピペしようとしたらなぜかすべて行頭に「#」ついてしまう。
なんじゃこりゃと思い調べてみたら今のViは「#」のある行で改行をすると自動でコメントアウトを付与してくれる仕様みたいですね。

ちなみに、環境は

  • OSは「Red Hat Enterprise Linux Server release 7.5 (Maipo)」
  • VIMは「VIM – Vi IMproved 7.4 (2013 Aug 10, compiled Sep 6 2017 07:41:47)」

でした。
なお、ファイルの場所とかは環境とかによると思いますんであしからず。

一時無効化する

解除方法は簡単で下記のコマンドをVi中に入力すると解除することが出来ます。

「setlocal formatoptions+=or」でも行けるよー的な書き込みも見かけますが、実際にやってみるとうまくいきません。
調べてみると、コンパイル時のオプションが複数設定されているとダメみたいです。
なので、1個ずつ外す必要があります。

これを打てる人はご存知かと思いますが、この設定は一時的なもので開き直すとまた元に戻ります。はい。

以降、四方山話

さて、一時的とはいえ解除が出来ました。あとは軽く調べたことを書いていきたいと思います。
要はメモ書き。

formatoptionsの意味

「formatoptions」は、整形の仕方を制御するオプション。
ちなみに、Perlの場合は「setlocal formatoptions+=crqol」と設定されていました。
各設定の意味はと言うと(お邪魔虫は「r」と「o」になります。(太文字))

c       ‘textwidth’ を使ってコメントを自動折返して、現在のコメント開始文字列
を自動挿入する。
r       挿入モードで <Enter> を打ち込んだ後に、現在のコメント開始文字列を
自動
挿入する。
q       “gq” でコメントを整形する。
NOTE 整形は空行やコメント開始文字列のみの行は変更しないことに注意。
新しい段落はそのような行の次、またはコメント開始文字列が変わった所
から始まる。
o      ノーマルモードで ‘o’, ‘O’ を打ち込んだ後に、現在のコメント開始文字列を
        自動的に挿入する。
l       挿入モードでは長い行は折り返されない: 挿入開始時に行が ‘textwidth’
より長い場合、Vimは自動で整形を行わない。

となっています。

設定されている種類

「+」がついているところがいろいろ設定されているようです。
設定ファイル自体は下記に書いてありました。
で、PerlとRubyの中身はと言うと
と設定されていました。

拡張子判定

設定ファイル自体は前項目と同じところになります。
Perlを例に挙げると

と書いてあるため

  • .pl
  • .pm
  • .pod

などが自動コメントアウト対象になるようです。

恒久的に無効化する

さて、一時的に無効化はしたものの「こんな機能はイラン!!」と思ったあなた。
そんなあなたにやり方を一応書いておきますね。

その1

各設定ファイルごと。

当然ながら、Perlにしか適用されません。
Rubyに適用したければ、「ruby.vim」を同様に作成します。

その2

すべて共通の設定方法。

これですべてのファイルに対しておせっかい自動コメントアウトが解除されます。
ただし、共通の設定なのですべての人に影響があります。

最後に

どうでもいいんですが、なんでPerlとかRubyに自動コメントアウト機能つけたんでしょうね?