set nu
vimのnumberモードはファイルチェックなんかするときに結構便利。けど、たとえば仕事で長大なるテストパターンなんかをチェックするときなんかに
: : 1384 cmp_memdata32(32'h40800500 , 32'h78787878 ); 1385 cmp_memdata32(32'h40800504 , 32'h78787878 ); 1386 cmp_memdata32(32'h40800508 , 32'h78787878 ); 1387 cmp_memdata32(32'h4080050C , 32'h78787878 ); 1388 cmp_memdata32(32'h40800510 , 32'h78787878 ); 1389 cmp_memdata32(32'h40800514 , 32'h78787878 ); 1390 cmp_memdata32(32'h40800518 , 32'h78787878 ); 1391 cmp_memdata32(32'h4080051C , 32'h78787878 ); 1392 cmp_memdata32(32'h40800520 , 32'h78787878 ); 1393 cmp_memdata32(32'h40800524 , 32'h78787878 ); : :
脳がふやけてくると何ピクセル目か数える力が失われる。引き算力限りなく0.nuに数えてほしい=32h'40800500の行を 1として読み直したい。ggd1383Gしてもいいんだけど、流石にそれは、、、というときに一時的に変更する方法ないのかな、とか悩む。
直接変えちゃえ
脳がそもそもふやけているので強引なことをし始める。
diff -ca ../../vim71/src/option.c ./option.c *** ../../vim71/src/option.c 2007-05-01 20:26:10.000000000 +0900 --- ./option.c 2008-12-19 17:14:50.000000000 +0900 *************** *** 1718,1723 **** --- 1718,1726 ---- {"modelines", "mls", P_NUM|P_VI_DEF, (char_u *)&p_mls, PV_NONE, {(char_u *)5L, (char_u *)0L}}, + {"disptop", "dts", P_NUM|P_VI_DEF, + (char_u *)&p_dts, PV_NONE, + {(char_u *)1L, (char_u *)1L}}, {"modifiable", "ma", P_BOOL|P_VI_DEF|P_NOGLOB, (char_u *)&p_ma, PV_MA, {(char_u *)TRUE, (char_u *)0L}}, diff -ca ../../vim71/src/option.h ./option.h *** ../../vim71/src/option.h 2007-05-08 04:23:03.000000000 +0900 --- ./option.h 2008-12-19 16:16:17.000000000 +0900 *************** *** 607,612 **** --- 607,613 ---- EXTERN char_u *p_msm; /* 'mkspellmem' */ #endif EXTERN long p_mls; /* 'modelines' */ + EXTERN long p_dts; /* 'disptop' */ EXTERN char_u *p_mouse; /* 'mouse' */ #ifdef FEAT_GUI EXTERN int p_mousef; /* 'mousefocus' */ 共通の下位ディレクトリー: ../../vim71/src/protoと./proto diff -ca ../../vim71/src/screen.c ./screen.c *** ../../vim71/src/screen.c 2007-05-08 04:27:53.000000000 +0900 --- ./screen.c 2008-12-19 16:41:58.000000000 +0900 *************** *** 88,93 **** --- 88,95 ---- #include "vim.h" + extern long p_dts; + /* * The attributes that are actually active for writing to the screen. */ *************** *** 3263,3270 **** #endif ) { ! sprintf((char *)extra, "%*ld ", ! number_width(wp), (long)lnum); if (wp->w_skipcol > 0) for (p_extra = extra; *p_extra == ' '; ++p_extra) *p_extra = '-'; --- 3265,3275 ---- #endif ) { ! if (lnum - p_dts+1 >0) { ! sprintf((char *)extra, "%*ld ", number_width(wp), (long)lnum-p_dts+1); ! } else { ! sprintf((char *)extra, "%*s ", number_width(wp), ""); ! } if (wp->w_skipcol > 0) for (p_extra = extra; *p_extra == ' '; ++p_extra) *p_extra = '-';
おお、一発で動いた・・・
これを gtとかにマップしてみる。
command! SetDisptop :call <SID>Setdisptop() nnoremap gt :SetDisptop<CR> function! s:Setdisptop() let lnum= line('.') let com = 'set disptop='.lnum exe(com) redraw! endfunction
すごく
馬鹿なことしてる気がする。
きっともっと簡単な方法が・・・
追記:マイナスも表示したほうが便利だったりして。。。