Test for matchadd() and conceal feature STARTTEST :so small.vim :if !has("conceal") | e! test.ok | w! test.out | qa! | endif :set term=ansi :so mbyte.vim :if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif :10new|:vsp|:vert resize 20 :put =\"\#\ This\ is\ a\ Test\" :norm! mazt :fu! ScreenChar(width, lines) : let c='' : for j in range(1,a:lines) : for i in range(1,a:width) : let c.=nr2char(screenchar(j, i)) : endfor : let c.="\n" : endfor : return c :endfu :fu! ScreenAttr(line, pos, eval) : let g:attr=[] : for col in a:pos : call add(g:attr, screenattr(a:line,col)) : endfor : " In case all values are zero, probably the terminal : " isn't set correctly, so catch that case : let null = (eval(join(g:attr, '+')) == 0) : let str=substitute(a:eval, '\d\+', 'g:attr[&]', 'g') : if null || eval(str) : :let g:attr_test="OK: ". str : else : :let g:attr_test="FAILED: ".str : :let g:attr_test.="\n". join(g:attr, ' ') : :let g:attr_test.="\n TERM: ". &term : endif :endfu :fu! DoRecordScreen() : wincmd l : $put =printf(\"\n%s\", g:test) : $put =g:line : $put =g:attr_test : wincmd p :endfu :let g:test ="Test 1: simple addmatch()" :call matchadd('Conceal', '\%2l ') :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") :call DoRecordScreen() : :let g:test ="Test 2: simple addmatch() and conceal (should be: #XThisXisXaXTest)" :norm! 'azt :call clearmatches() :syntax on :set concealcursor=n conceallevel=1 :call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'}) :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") :call DoRecordScreen() : :let g:test ="Test 3: addmatch() and conceallevel=3 (should be: #ThisisaTest)" :norm! 'azt :set conceallevel=3 :call clearmatches() :call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'}) :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0==1 && 1==2 && 1==3 && 1==4 && 0!=5") :call DoRecordScreen() : :let g:test ="Test 4: more match() (should be: #Thisisa Test)" :norm! 'azt :call matchadd('ErrorMsg', '\%2l Test', 20, -1, {'conceal': 'X'}) :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0==1 && 1==2 && 0!=3 && 3==4 && 0!=5 && 3!=5") :call DoRecordScreen() : :let g:test ="Test 5/1: default conceal char (should be: # This is a Test)" :norm! 'azt :call clearmatches() :set conceallevel=1 :call matchadd('Conceal', '\%2l ', 10, -1, {}) :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") :call DoRecordScreen() :let g:test ="Test 5/2: default conceal char (should be: #+This+is+a+Test)" :norm! 'azt :set listchars=conceal:+ :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") :call DoRecordScreen() :set listchars&vim : :let g:test ="Test 6/1: syn and match conceal (should be: #ZThisZisZaZTest)" :norm! 'azt :call clearmatches() :set conceallevel=1 :call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'}) :syn match MyConceal /\%2l / conceal containedin=ALL cchar=* :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") :call DoRecordScreen() :let g:test ="Test 6/2: syn and match conceal (should be: #*This*is*a*Test)" :norm! 'azt :call clearmatches() :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") :call DoRecordScreen() : :let g:test ="Test 7/1: clear matches" :norm! 'azt :syn on :call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'}) :let a=getmatches() :call clearmatches() :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0==1 && 0==2 && 0==3 && 0==4 && 0==5") :call DoRecordScreen() :$put =a :call setmatches(a) :norm! 'azt :let g:test ="Test 7/2: reset match using setmatches()" :norm! 'azt :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") :call DoRecordScreen() : :let g:test ="Test 8: using matchaddpos() (should be #Pis a Test" :norm! 'azt :call clearmatches() :call matchaddpos('Conceal', [[2,2,6]], 10, -1, {'conceal': 'P'}) :let a=getmatches() :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1!=2 && 0==2 && 0==3 && 0!=4 && 0!=5 && 4==5") :call DoRecordScreen() :$put =a : :let g:test ="Test 9: match using multibyte conceal char (should be: #ˑThisˑisˑaˑTest)" :norm! 'azt :call clearmatches() :call matchadd('Conceal', '\%2l ', 20, -1, {'conceal': "\u02d1"}) :redraw! :let line=ScreenChar(winwidth(0),1) :call ScreenAttr(1,[1,2,7,10,12,16], "0!=1 && 1==2 && 1==3 && 1==4 && 0==5") :call DoRecordScreen() : :"sleep 10 :%w! test.out :qa! ENDTEST dummy text