新しいバージョンを使いたいが管理者権限が無いのでソースからインストールすることにした.
Official Vim homepage
+
welcome home : vim online
Vim repository on GitHub
+
vim/vim: The official Vim repository
Error: "no terminal library found"
しかし次のようなエラーメッセージが出て上手くいかなかった.
ncurses
NCURSESのパッケージは次のページから入手可能:
+
Announcing ncurses 6.2
Error: "no curses header-files found"
どうやって直したか忘れたが,たしかこうだったと思う.
$ export LD_LIBRARY_PATH=/home/akira/usr/ncurses/lib:$LD_LIBRARY_PATH
ともかくこれで
/home/akira/usr/vim8.2/binに
vimが作成された.
実行してみたところ動作に問題はなさそう.
PaperColorというカラースキームを使っていていくつか気に入らない点があったので調整した.
具体的には
Fortranの変数の属性の色が統一されていなかったのと,
Pythonの組み込み手続きがハイライトされていなかったこと.
設定ファイルを作成する
次のようにディレクトリを作成し,設定ファイルを作成・編集する.詳細は
+
syntax - Vim日本語ドキュメント
特定の単語をハイライトする
keywordだと単語として区切られているもの(前後が空白だったり括弧やカンマ等の記号で区切られていて独立した単語となっていもの)のみが対象となる.例えば
syntax keyword fortranVariableAttribute in
とした場合,
integer, intent(in) :: n
は括弧内の
"in"だけがハイライトされ,
"integer"や
"intent"に含まれる
"in"はハイライトされない.
matchでは正規表現が使えて色々柔軟に定義できる.
+
vim正規表現リファレンス #Vim - Qiita
構文グループの色を設定する
色を指定する場合:
指定できる色名は
vim中で
を実行すれば確認できる.
+
vimで設定可能な色の種類を一覧で確認する方法 - Qiita
色番号と色の一覧
+
VimLで色指定する数値の一覧 | Inhale n' Exhale
+
256 Colors - Cheat Sheet - Xterm, HEX, RGB, HSL | DITig
構文グループをリンクする場合:
リンク先の構文グループは自分で決めたグループ名.例えば自分の場合は
Fortranの変数の属性のハイライトを調整したかったので
fortranVariableAttributeとした.これに
fortranTypeの配色を設定したい場合は
highlight link fortranVariableAttribute fortranType
とする.
Vimで定義されているハイライト名は,
Vim上で
:highlightと入力すると確認できる.
+
Vim – シンタックスハイライトの設定を自作して追加する方法 | Howpon[ハウポン]
例: Fortranの配色調整
PaperColorは
Fortranの色の設定が色々おかしいので調整する.ただサーバーによってきちんとハイライト出来ている場合もあるので,他の設定ファイルが影響していたりする可能性もある.よく分からん.
直したいのは
(1)
fortranVariableAttributeというグループが
PaperColorで定義されていない
ハイライトの色を指定
highlight fortranVariableAttribute ctermfg=169
または定義されているグループにリンク
highlight link fortranVariableAttribute fortranStructure
今回は
PaperColor.vimで用意されているものにしっくり来るものが無かったのでハイライトの色を指定した.
数字は
8ビットカラーと呼ばれる
256の色に割り振られているもの.
(2) "real"単体だとちゃんと型として認識されてピンク色になるが,"real(8)"などとすると関数として認識されて青色になってしまう
syntax match fortranType /^\s*real/
keywordで具体的に
"real"の色を指定すると関数としての
"real"も対象になってしまうので,ここでは
matchを使う.
両者は行頭にあるかどうかで簡単に区別できる.空白があることも考慮して
^: 行頭にあることを意味する
\s: 改行以外の空白文字
*: 直前の
1文字または文字クラスの
0回以上の繰り返し
という形で型指定子としての
"real"を指定する.
(3)
8バイト整数は
1_8などと書くが,こうすると定数ではなく通常の文字列として認識されてしまう
syntax match fortranConstant /\d\+_\d\+/
syntax match Normal /\%(\\(\a\|_\)\)\@1<=\d\+_\d\+/
整数
n個 + アンダーバー + 整数
m個 の文字列を定数の色にしたい.
(例) 1_8
ただしその直前にアルファベットやアンダーバーがあるものは変数や手続きの名前になりうるのでデフォルトの色にしたい.
(例) a_2_3 (この
"2_3"を定数の色にならないようにしたい)
否定後読み,つまり「直前に
xxがない
yyにマッチする」という判定を使うのが良さそうだが,これは高コストらしいので,通常のマッチングと肯定後読みを組み合わせることにする.
まず整数
n個 + アンダーバー + 整数
m個 の文字列は
/\d\+_\d\+/
\d: [0-9] (
0~
9の数字)
\+: 直前の
1文字または文字クラスの
1回以上の繰り返し
次に,これの直前にアルファベットまたはアンダーバーがあるもの
/\%(\\(\a\|_\)\)\@1<=\d\+_\d\+/
\%(hoge\)\@<=fuga: 直前に
hogeがある
fugaにマッチする
ここでは
hogeが
\\(\a\|_\)\に,
fugaが先の
\d\+_\d\+に相当する.
\\(xx\|yy\):
xxまたは
yy
\a: [A-Za-z] (アルファベット)
アンダーバーは単に文字列としてのアンダーバー
(4) "parameter"など一部の属性情報が濃い青色になってしまう.属性の色である明るい青色にしたい
(5) 授受属性
(intent)の
"in", "out"が関数と同じ濃い青色になってしまう.変数の属性の色である明るい青色にしたい
(6) "allocate"などがピンク色になる.位置づけとしては
"call"や
"read"と同じだと思うのでそれらと同じ色にしたい
(7) "interface"は関数と同じ濃い青色,"module procedure"はピンク色になる.色のギャップがすごいので調整したい
(8) 同じく
pure functionで用いる
"pure"がピンク色で
"function"の色とのギャップがすごい
これらは
keywordでそれぞれ色グループを指定してやれば良い.
"end interface"は
keywordで指定すると別々の単語と認識されるので
matchを使う.
syntax keyword fortranVariableAttribute parameter
syntax keyword fortranVariableAttribute in
syntax keyword fortranVariableAttribute out
syntax keyword fortranCall allocate
syntax keyword fortranType interface
syntax match fortranType /end interface/
syntax keyword fortranUnitHeader pure
(9) オーバーロードした演算子に色を付けたい
syntax match fortranOperator /\.\a\+\./
新たに定義した演算子は通常の文字列として扱われ,パッと見たときの見やすさが落ちるので,元々定義されている演算子と同じ色を付ける.
新たに定義する演算子は,
.mul.のように,
.eq.等と同じ形でピリオドでアルファベットの文字列を挟む形を取る.
ピリオドは正規表現において改行以外の全ての文字とマッチする特殊文字なのでエスケープする.
\.: 普通の文字としてのピリオド
あとは先ほども出てきた表現
\a: [A-Za-z]
\+:
1回以上の繰り返し
欲を言えば組み込み関数と同じ名前の変数が通常の変数と同じ色になるようにしたいが,流石に面倒くさいのでやめておく.
以上をまとめると
fortran.vimは以下のようになる.ついでに他の属性指定用ワードも入れておいた.
ちなみに
.vimファイルのコメントアウトはダブルクォート(
")でする.
修正前。少しごちゃついている
修正後。スッキリした
例: Pythonの配色調整
組み込み関数の色が普通の文字と同じ色になっていたので
darkcyanにした.