'iskeyword' に含まれる文字一覧

'iskeyword' や 'isfname' に含まれる文字一覧を見たいと思った。
これらのオプションの書式は、基本は簡単だけど、厳密に解釈しようとするとけっこう複雑なので、vim からソースを抜き出してコマンドを作ってみた。
http://www.k3.dion.ne.jp/~jod/src/dump-iskeyword.c
'iskeyword' のデフォルト値だとこんな感じ。

$ ./a.out '@,48-57,_,192-255'
                                                
                                                
                                                
 0  1  2  3  4  5  6  7  8  9                   
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O 
 P  Q  R  S  T  U  V  W  X  Y  Z              _ 
    a  b  c  d  e  f  g  h  i  j  k  l  m  n  o 
 p  q  r  s  t  u  v  w  x  y  z                

いたって普通ですな。

checktime ハック

vim はバッファを切り替えたときなどのタイミングで、ファイルが外部で変更されていないかを判定している。
mtime を見るのだと予想していたが、わざわざパーミッションも比較しているようだ。

--- ../src.orig/fileio.c	Mon May  1 00:28:57 2006
+++ fileio.c	Sun Dec 24 01:00:29 2006
@@ -6225,7 +6225,7 @@
 	    && ((stat_res = mch_stat((char *)buf->b_ffname, &st)) < 0
 		|| time_differs((long)st.st_mtime, buf->b_mtime)
 #ifdef HAVE_ST_MODE
-		|| (int)st.st_mode != buf->b_orig_mode
+		//|| (int)st.st_mode != buf->b_orig_mode
 #else
 		|| mch_getperm(buf->b_ffname) != buf->b_orig_mode
 #endif

私はこんな感じ

au BufWritePost * if getline(1) =~ "^#!" | exe "silent !chmod +x % 2>/dev/null" | if &ft == "" | filetype detect | endif | endif

スクリプトを保存したとき自動的に chmod +x していて、いちいち

W16: Warning: Mode of file "out" has changed since editing started

ときかれるのがうざかったので st_mode の比較をやめた。
この部分は :ta ex_checktime から追っていたらすぐ見つかった。