Linux

CentOSのviでシンタックスハイライトを使えるようにする

新しい開発環境として、VirtualBoxにCentOS7をminimalインストールしたのですが、なぜかviで「:syntax on」を叩いてもシンタックスハイライトが機能しませんでした。

ということで原因と解決策も含めて備忘録です。

原因

原因としては、minimalでインストールされるviがシンタックスハイライトに非対応ということでした。

お使いのviでの機能のサポート/非サポートは、「:version」のコマンドで分かります。サポートする機能には「+」、そうでない機能には「-」が付与されて表示されます。

Small version without GUI.  Features included (+) or not (-):
+acl             -conceal         -farsi           -libcall         -mouse_sgr       -python3         -tag_old_static  -vreplace
-arabic          -cryptv          -file_in_path    -linebreak       -mouse_sysmouse  -quickfix        -tag_any_white   +wildignore
-autocmd         -cscope          -find_in_path    -lispindent      -mouse_urxvt     -reltime         -tcl             -wildmenu
-balloon_eval    -cursorbind      -float           -listcmds        -mouse_xterm     -rightleft       +terminfo        +windows
-browse          -cursorshape     -folding         -localmap        +multi_byte      -ruby            -termresponse    +writebackup
+builtin_terms   -dialog          -footer          -lua             -multi_lang      -scrollbind      -textobjects     -X11
-byte_offset     -diff            +fork()          -menu            -mzscheme        -signs           -title           -xfontset
-cindent         -digraphs        -gettext         -mksession       -netbeans_intg   -smartindent     -toolbar         -xim
-clientserver    -dnd             -hangul_input    -modify_fname    -path_extra      -sniff           -user_commands   -xsmp
-clipboard       -ebcdic          +iconv           -mouse           -perl            -startuptime     -vertsplit       -xterm_clipboard
-cmdline_compl   -emacs_tags      -insert_expand   -mouse_dec       -persistent_undo -statusline      -virtualedit     -xterm_save
+cmdline_hist    -eval            +jumplist        -mouse_gpm       -printer         -sun_workshop    +visual          -xpm
-cmdline_info    -ex_extra        -keymap          -mouse_jsbterm   -profile         -syntax          -visualextra
-comments        -extra_search    -langmap         -mouse_netterm   -python          -tag_binary      -viminfo

これを見ると、「-syntax」となっているので、シンタックスハイライト機能は非サポート…。「Small version without GUI」とあるので最小構成としてあるようです。

解決策

機能サポートの有無はコンパイル時のオプションによって決まってしまうので、後から付け足しはできません。

かといってイチからコンパイルし直すのも面倒なので、次の手順でシンタックスハイライトをサポートしている拡張版vimを入れます。

# 拡張版vimのインストール
yum install vim-enhanced

# 古いviをリネームして退避
mv /bin/vi /bin/vim-tiny

# 拡張版vimをviとして使えるようにリンク
ln -s /usr/bin/vim /bin/vi

あらためて、「:version」コマンドを見てみましょう。

Huge 版 without GUI.  機能の一覧 有効(+)/無効(-)
+acl             +conceal         +farsi           +libcall         +mouse_netterm   +profile         +syntax          +visualextra
+arabic          +cryptv          +file_in_path    +linebreak       +mouse_sgr       +python/dyn      +tag_binary      +viminfo
+autocmd         +cscope          +find_in_path    +lispindent      -mouse_sysmouse  -python3         +tag_old_static  +vreplace
-balloon_eval    +cursorbind      +float           +listcmds        +mouse_urxvt     +quickfix        -tag_any_white   +wildignore
-browse          +cursorshape     +folding         +localmap        +mouse_xterm     +reltime         -tcl             +wildmenu
++builtin_terms  +dialog_con      -footer          -lua             +multi_byte      +rightleft       +terminfo        +windows
+byte_offset     +diff            +fork()          +menu            +multi_lang      +ruby/dyn        +termresponse    +writebackup
+cindent         +digraphs        +gettext         +mksession       -mzscheme        +scrollbind      +textobjects     -X11
-clientserver    -dnd             -hangul_input    +modify_fname    +netbeans_intg   +signs           +title           -xfontset
-clipboard       -ebcdic          +iconv           +mouse           +path_extra      +smartindent     -toolbar         -xim
+cmdline_compl   +emacs_tags      +insert_expand   -mouseshape      +perl            -sniff           +user_commands   -xsmp
+cmdline_hist    +eval            +jumplist        +mouse_dec       +persistent_undo +startuptime     +vertsplit       -xterm_clipboard
+cmdline_info    +ex_extra        +keymap          +mouse_gpm       +postscript      +statusline      +virtualedit     -xterm_save
+comments        +extra_search    +langmap         -mouse_jsbterm   +printer         -sun_workshop    +visual          -xpm

今度はちゃんと「+syntax」になっています。これでシンタックスハイライトが使えるようになりました。

ちなみに、シンタックスハイライトを常にONとしたい場合は、設定ファイル(~/.vimrc)に「syntax on」を追記すればOKです。

広告の表示がブロックされています。
広告の表示がブロックされています。

関連記事

Flutter プログラミング

2021/8/2

【Flutter】アプリ内の設定値を実装する方法

アプリ内で独自の設定を作る場合、そのデータを保持する方法を考える必要があります。 SQL、テキストファイルなど選択肢は多々ありますが、shared_preferencesというパッケージを使えば簡単に実装することができます。 Dart packages  1 User 29 Pocketsshared_preferences | Flutter PackageFlutter plugin for reading and writing simple key-value pairs. Wraps ...

この記事を読む

RaspberryPi Linux

2021/4/18

YoctoでRaspberryPi4のイメージをビルドしてみた

昨今、様々なデバイスでLinuxが動くようになっている中、組み込みLinuxのデファクトスタンダードとなりつつあるのが「Yocto」と呼ばれるビルドシステムです。 組み込みの現場ではその名前を聞くことが増えましたが、まだまだ日本ではドキュメントも乏しくイマイチ掴み所がありません。そこで、まずは使ってみようということでRaspberry Pi4のイメージをビルドしてみることにしました。 目次1 Yoctoとは?2 Raspberry Pi4のイメージを作ってみる2.1 下準備2.2 Yocto本体+ラズパイ ...

この記事を読む

C++ 自作物

2021/8/1

言語処理系をつくろう(第7回):比較演算子を実装する

自作の言語処理系開発日記の第7回です。前回までで変数の実装が終わったので、ここからはいよいよ制御構文を実装…と思ったのですが、制御のためには比較演算子を実装する必要がありました。 ということで、今回は比較演算子を実装していきます。基本的には四則演算と変わりないのであまり難しくはありません。 目次1 比較演算子の仕様2 実装してみる2.1 トークナイザ2.2 構文解析器2.3 コード生成器2.4 実行系(仮想マシン) 比較演算子の仕様 比較演算子を実装する前に、その仕様について少し考えておきます。 比較演算 ...

この記事を読む

C++ 自作物

2021/8/1

言語処理系をつくろう(第6回):変数を実装する

自作の言語処理系開発日記、第6回です。 これまでは四則演算など、電卓レベルの機能実装に取り組んでいましたが、いよいよ変数を扱えるようにしていきたいと思います。これでかなりプログラミング言語っぽくなるかも(・∀・) 今回は新しい仕組みを入れたりと、割と修正がごちゃごちゃしてしまったので、うまくまとめきれていません。ごめんなさい…。 目次1 変数の実装について2 実装してみる2.1 トークナイザ2.2 構文解析器2.3 コード生成器2.4 実行系(仮想マシン) 変数の実装について これまでは即値しか扱っていな ...

この記事を読む

C++ 自作物

2021/8/1

言語処理系をつくろう(第5回):連続した式の実行

自作の言語処理系開発日記の第5回です。 前回までで括弧を含んだ四則演算ができるようになりましたが、このままでは単なる電卓止まりです。ということで、今回は複数の式を連続して実行できる仕組みを実装していきたいと思います。 目次1 生成規則を考える2 実装してみる2.1 構文解析器2.2 コード生成 生成規則を考える これまでは入力全体を1つの式として解釈していましたが、今回は式の区切りを定義して複数の式として解釈できるようにします。 C言語だと「;」や「,」が区切り文字として使われますが、開発中の言語(roo ...

この記事を読む

  • このブログの中の人

Ryo Yoneyama

とある会社でソフトウェアエンジニアをしています。技術的な備忘録を中心にまとめてます。ネタがあれば日記も書きます。

-Linux

© 2021 Corgi Lab. ~備忘録のための技術ブログ~