目次
おせっかい機能
久しぶりに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中に入力すると解除することが出来ます。
1 2 |
:setlocal formatoptions-=r :setlocal formatoptions-=o |
「setlocal formatoptions+=or」でも行けるよー的な書き込みも見かけますが、実際にやってみるとうまくいきません。
調べてみると、コンパイル時のオプションが複数設定されているとダメみたいです。
なので、1個ずつ外す必要があります。
これを打てる人はご存知かと思いますが、この設定は一時的なもので開き直すとまた元に戻ります。はい。
以降、四方山話
さて、一時的とはいえ解除が出来ました。あとは軽く調べたことを書いていきたいと思います。
要はメモ書き。
formatoptionsの意味
「formatoptions」は、整形の仕方を制御するオプション。
ちなみに、Perlの場合は「setlocal formatoptions+=crqol」と設定されていました。
各設定の意味はと言うと(お邪魔虫は「r」と「o」になります。(太文字))
を自動挿入する。
r 挿入モードで <Enter> を打ち込んだ後に、現在のコメント開始文字列を
自動挿入する。
q “gq” でコメントを整形する。
NOTE 整形は空行やコメント開始文字列のみの行は変更しないことに注意。
新しい段落はそのような行の次、またはコメント開始文字列が変わった所
から始まる。
o ノーマルモードで ‘o’, ‘O’ を打ち込んだ後に、現在のコメント開始文字列を
自動的に挿入する。
l 挿入モードでは長い行は折り返されない: 挿入開始時に行が ‘textwidth’
より長い場合、Vimは自動で整形を行わない。
となっています。
設定されている種類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
$ vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Sep 6 2017 07:41:47) 適用済パッチ: 1-160, 399, 402-403, 1099 Modified by <bugzilla@redhat.com> Compiled by <bugzilla@redhat.com> Huge 版 without GUI. 機能の一覧 有効(+)/無効(-) +acl +farsi +mouse_netterm +syntax +arabic +file_in_path +mouse_sgr +tag_binary +autocmd +find_in_path -mouse_sysmouse +tag_old_static -balloon_eval +float +mouse_urxvt -tag_any_white -browse +folding +mouse_xterm -tcl ++builtin_terms -footer +multi_byte +terminfo +byte_offset +fork() +multi_lang +termresponse +cindent +gettext -mzscheme +textobjects -clientserver -hangul_input +netbeans_intg +title -clipboard +iconv +path_extra -toolbar +cmdline_compl +insert_expand +perl +user_commands +cmdline_hist +jumplist +persistent_undo +vertsplit +cmdline_info +keymap +postscript +virtualedit +comments +langmap +printer +visual +conceal +libcall +profile +visualextra +cryptv +linebreak +python/dyn +viminfo +cscope +lispindent -python3 +vreplace +cursorbind +listcmds +quickfix +wildignore +cursorshape +localmap +reltime +wildmenu +dialog_con -lua +rightleft +windows +diff +menu +ruby/dyn +writebackup +digraphs +mksession +scrollbind -X11 -dnd +modify_fname +signs -xfontset -ebcdic +mouse +smartindent -xim +emacs_tags -mouseshape -sniff -xsmp +eval +mouse_dec +startuptime -xterm_clipboard +ex_extra +mouse_gpm +statusline -xterm_save +extra_search -mouse_jsbterm -sun_workshop -xpm システム vimrc: "/etc/vimrc" ユーザ vimrc: "$HOME/.vimrc" 第2ユーザ vimrc: "~/.vim/vimrc" ユーザ exrc: "$HOME/.exrc" 省略時の $VIM: "/etc" 省略時の $VIMRUNTIME: "/usr/share/vim/vim74" コンパイル: gcc -c -I. -Iproto -DHAVE_CONFIG_H -O2 -g -pipe -Wall -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 リンク: gcc -L. -Wl,-z,relro -fstack-protector -rdynamic -Wl,-export-dynamic -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE -Wl,-z,relro -L/usr/local/lib -Wl,--as-needed -o vim -lm -lnsl -lselinux -lncurses -lacl -lattr -lgpm -ldl -Wl,--enable-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE -fstack-protector -L/usr/lib64/perl5/CORE -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc $ |
設定ファイル自体は下記に書いてありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$ pwd /usr/share/vim/vim74/ftplugin $ ls README.txt config.vim erlang.vim hostsaccess.vim lua.vim pamconf.vim ruby.vim tex.vim a2ps.vim context.vim eruby.vim html.vim m4.vim pascal.vim sass.vim treetop.vim aap.vim cpp.vim eterm.vim htmldjango.vim mail.vim passwd.vim scheme.vim tt2html.vim abap.vim crm.vim falcon.vim indent.vim mailaliases.vim pdf.vim screen.vim udevconf.vim abaqus.vim cs.vim fetchmail.vim initex.vim mailcap.vim perl.vim scss.vim udevperm.vim ada.vim csc.vim flexwiki.vim ishd.vim make.vim perl6.vim sensors.vim udevrules.vim alsaconf.vim csh.vim fortran.vim java.vim man.vim php.vim services.vim updatedb.vim ant.vim css.vim framescript.vim javascript.vim manconf.vim pinfo.vim setserial.vim vb.vim arch.vim cucumber.vim fvwm.vim jsp.vim markdown.vim plaintex.vim sgml.vim verilog.vim art.vim cvsrc.vim git.vim kconfig.vim matlab.vim postscr.vim sh.vim vhdl.vim aspvbs.vim debchangelog.vim gitcommit.vim kwt.vim mf.vim procmail.vim sieve.vim vim.vim automake.vim debcontrol.vim gitconfig.vim ld.vim modconf.vim prolog.vim slpconf.vim xdefaults.vim bdf.vim denyhosts.vim gitrebase.vim lftp.vim mp.vim protocols.vim slpreg.vim xf86conf.vim bst.vim dictconf.vim gitsendemail.vim libao.vim mplayerconf.vim pyrex.vim slpspi.vim xhtml.vim btm.vim dictdconf.vim gpg.vim limits.vim mrxvtrc.vim python.vim spec.vim xinetd.vim c.vim diff.vim gprof.vim liquid.vim msmessages.vim qf.vim sql.vim xml.vim calendar.vim dircolors.vim group.vim lisp.vim muttrc.vim quake.vim sshconfig.vim xmodmap.vim cdrdaoconf.vim docbk.vim grub.vim logcheck.vim nanorc.vim racc.vim sudoers.vim xs.vim ch.vim dosbatch.vim haml.vim loginaccess.vim netrc.vim readline.vim svg.vim xsd.vim changelog.vim dosini.vim hamster.vim logindefs.vim nsis.vim reva.vim sysctl.vim xslt.vim clojure.vim dtd.vim haskell.vim logtalk.dict objc.vim rnc.vim tcl.vim yaml.vim cobol.vim dtrace.vim help.vim logtalk.vim ocaml.vim rpl.vim tcsh.vim zimbu.vim conf.vim elinks.vim hostconf.vim lprolog.vim occam.vim rst.vim terminfo.vim zsh.vim $ |
1 2 3 4 5 6 7 8 9 |
$ grep 'formatoptions' perl.vim setlocal formatoptions-=t setlocal formatoptions+=crqol $ grep 'formatoptions' perl6.vim setlocal formatoptions-=t setlocal formatoptions+=crqol $ grep 'formatoptions' ruby.vim setlocal formatoptions-=t formatoptions+=croql $ |
拡張子判定
設定ファイル自体は前項目と同じところになります。
Perlを例に挙げると
1 2 3 4 5 6 7 |
" Change the browse dialog on Win32 to show mainly Perl-related files if has("gui_win32") let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" . \ "Perl Modules (*.pm)\t*.pm\n" . \ "Perl Documentation Files (*.pod)\t*.pod\n" . \ "All Files (*.*)\t*.*\n" endif |
と書いてあるため
- .pl
- .pm
- .pod
などが自動コメントアウト対象になるようです。
恒久的に無効化する
さて、一時的に無効化はしたものの「こんな機能はイラン!!」と思ったあなた。
そんなあなたにやり方を一応書いておきますね。
その1
各設定ファイルごと。
1 2 3 4 5 6 |
$ pwd /usr/share/vim/vimfiles/after/ftplugin $vi perl.vim setlocal formatoptions-=r setlocal formatoptions-=o $ |
当然ながら、Perlにしか適用されません。
Rubyに適用したければ、「ruby.vim」を同様に作成します。
その2
すべて共通の設定方法。
1 2 3 4 5 6 7 |
$ pwd /usr/share/vim/vimfiles/after/plugin $touch common-settings.vim $vi common-settings.vim au FileType * setlocal formatoptions-=r au FileType * setlocal formatoptions-=o $ |
これですべてのファイルに対しておせっかい自動コメントアウトが解除されます。
ただし、共通の設定なのですべての人に影響があります。
最後に
どうでもいいんですが、なんでPerlとかRubyに自動コメントアウト機能つけたんでしょうね?
日々くだらないことを追い求め、黒歴史をまとめておくための自由なブログ。
あんまり役立つことは書きませんが主に日記・ゲームや買ったものについての記事を気まぐれで好き勝手書いています。