6月 252013
 
シェアする

さて、viの代わりにvimを使っているワタシ。その方法は、/etc/profileに以下の一行を追加している。

alias vi=vim

これによって、viコマンドを実行しようと vi を実行すると代わりにvimが実行される。これはエイリアスの機能。現在設定されているエイリアスは alias コマンドで確認出来る。

# alias
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias vi='vim'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

今回は ruby の勉強がてらCentOS環境にrubyを入れて、早速 vi test.rb として新しいrubyファイルをつくろうと思った時に遭遇した問題。vi test.rb して、まずは一行目に「#!/usr/bin/ruby」って書いて、それから・・・って続けて作業をしようと思ったら、

勝手にコメントアウトが行頭に挿入されてしまう!!(;゚Д゚)!

 

↓こんなかんじ

vim で [ESC]+[o] した場合

#!/usr/bin/ruby←1)ここまで書いてから[ESC]+[o]で次の行に行くと
#←2)コメントアウトがある状態で1行挿入された。

ほかにも事象が確認できた。

[ESC]+[Shift+o]した場合

#←2)コメントアウトがある状態で1行挿入された
#!/usr/bin/ruby←1)ここまで書いてからESC+(Shift+O)で次の行に行くと

[ESC]+[i]した場合

#!/usr/bin/ruby←1)ここまで書いて(挿入モード(ESC+i))から[Enter]を押すと
#←2)コメントアウトがある状態で新しい行が始まった。

どうやらこれは、「formatoptions」による仕業とのこと。こちら(英語)のページを手がかりに判明した。

vimで現在利用されているformatoptionsを確認するには以下のコマンドで確認出来る。

:set formatoptions?

上記を短縮して、「:set fo?」でも確認が出来る。

vim test.rb をやってから、[ESC]+[:set formatoptions?]を実行すると以下を確認できた。

  formatoptions=croql

上記のうち「r」と「o」が、自動でコメントアウトを挿入するオプションとなっている。こちら(日本語)のサイトを参考に理解しました。

r: 挿入モードで文字列を入力している際に、現在の行の先頭がコメントアウトされている場合、Enterで次の行に移動した時にコメントアウトが引き継がれる。

o: 挿入モードで文字列を入力している際に、現在の行の先頭がコメントアウトされている場合、[ESC]+[o]または[ESC]+Oにて現在の行の前後どちらかに新しい行を追加した時にコメントアウトが引き継がれる。

では、[ESC]+[:set formatoptions-=ro]をすれば、自動コメントアウト引継ぎは解除できるのか?

はい、解除できますヽ(*´∀`)ノ! てか出来ました!ヾ(@⌒ー⌒@)ノわーい

ちなみに、このformatoptionsを設定しているのが、「/usr/share/vim/vim72/ftplugin/ruby.vim」。このファイルを退避(名前変更)してもう一度.rb拡張子のファイルを編集してもformatoptionsは設定されない。このファイルは「vim-common」パッケージで提供されている。

# rpm -qf /usr/share/vim/vim72/ftplugin/ruby.vim
vim-common-7.2.411-1.8.el6.x86_64
#

以上

 

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

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ