Skip to content

Instantly share code, notes, and snippets.

@ZyX-I
Created January 6, 2012 05:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ZyX-I/1569146 to your computer and use it in GitHub Desktop.
Save ZyX-I/1569146 to your computer and use it in GitHub Desktop.
Test of various ways to get buffer contents
#!/bin/sh
FILENAME="$1" \
vim -u NONE -N -S readfile-test.vim --cmd 'let AddFileName=$FILENAME'
let g:max=20
let g:fname=AddFileName
let g:reference=join(readfile(g:fname, 'b'), "\n")
function Diff(tmp, reference)
if &modified
tabnew
endif
let e1=1
if a:tmp[-1:] isnot# "\n"
let e1=0
endif
let e2=1
if a:reference[-1:] isnot# "\n"
let e2=0
endif
if e1 != e2
if a:tmp[:-1-e1] is# a:reference[:-1-e2]
echom "Only end of line differs"
return
else
echom "End of line differs"
endif
endif
call setline(1, split(a:tmp, "\n", 1))
diffthis
vertical new
call setline(1, split(a:reference, "\n", 1))
file `=expand("<sfile>")`
diffthis
endfunction
command -nargs=0 Fin if !i | if tmp isnot# g:reference | call Diff(tmp, g:reference) | endif | endif | unlet tmp | let i+=1
command -nargs=1 Test let start=reltime() | call <args>() | echohl MoreMsg | echom <q-args>.': '.reltimestr(reltime(start)) | echohl None
function Python3()
py3 import vim
let i=0
while i < g:max
py3 fd=open(vim.eval("g:fname"), "rb")
py3 vim.eval(str(b"extend(l:, {'tmp': '"+(fd.read().replace(b"'", b"''"))+b"'})", "utf-8"))
py3 fd.close()
Fin
endwhile
endfunction
function Python2()
python import vim
let i=0
while i < g:max
python fd=open(vim.eval("g:fname"), "rb")
python vim.eval("extend(l:, {'tmp': '"+(fd.read().replace("'", "''"))+"'})")
python fd.close()
Fin
endwhile
endfunction
function Python2_bindeval()
python import vim
let i=0
while i < g:max
python fd=open(vim.eval("g:fname"), "rb")
python vim.bindeval('l:')['tmp']=fd.read()
python fd.close()
Fin
endwhile
endfunction
function Python3_bindeval()
py3 import vim
let i=0
while i < g:max
py3 fd=open(vim.eval("g:fname"), "rb")
py3 vim.bindeval('l:')['tmp']=fd.read()
py3 fd.close()
Fin
endwhile
endfunction
function Pyeval()
let i=0
while i < g:max
let tmp=pyeval('open(vim.eval("g:fname"), "rb").read()')
Fin
endwhile
endfunction
function Py3eval()
let i=0
while i < g:max
let tmp=py3eval('open(vim.eval("g:fname"), "rb").read()')
Fin
endwhile
endfunction
function Vim_readfile()
let i=0
while i < g:max
let tmp=join(readfile(g:fname), "\n")
Fin
endwhile
endfunction
function Vim_readfile_binary()
let i=0
while i < g:max
let tmp=join(readfile(g:fname, "b"), "\n")
Fin
endwhile
endfunction
function Vim_buf_getline()
let i=0
while i < g:max
let savedei=&eventignore
set eventignore=all
execute "silent tab sview ".fnameescape(g:fname)
let tmp=join(getline(0, '$'), "\n")
bwipeout
let &eventignore=savedei
unlet savedei
Fin
endwhile
endfunction
function Vim_buf_normal_yank()
let i=0
while i < g:max
let savedei=&eventignore
set eventignore=all
execute "silent tab sview ".fnameescape(g:fname)
let savedreg=@a
silent normal! gg"ayG
let tmp=@a
let @a=savedreg
bwipeout
let &eventignore=savedei
unlet savedei
Fin
endwhile
endfunction
function Vim_read_normal_yank()
let i=0
while i < g:max
let savedei=&eventignore
set eventignore=all
execute "silent tabnew"
execute "silent read ".fnameescape(g:fname)
silent 1d _
let savedreg=@a
silent normal! gg"ayG
let tmp=@a
let @a=savedreg
bwipeout!
let &eventignore=savedei
unlet savedei
Fin
endwhile
endfunction
function Vim_buf_yank()
let i=0
while i < g:max
let savedei=&eventignore
set eventignore=all
execute "silent tab sview ".fnameescape(g:fname)
let savedreg=@a
silent %yank a
let tmp=@a
let @a=savedreg
bwipeout
let &eventignore=savedei
unlet savedei
Fin
endwhile
endfunction
function Vim_read_yank()
let i=0
while i < g:max
let savedei=&eventignore
set eventignore=all
execute "silent tabnew"
execute "silent read ".fnameescape(g:fname)
silent 1d _
let savedreg=@a
silent %yank a
let tmp=@a
let @a=savedreg
bwipeout!
let &eventignore=savedei
unlet savedei
Fin
endwhile
endfunction
function System_shelltemp()
let i=0
set shelltemp
while i<g:max
let tmp=system("cat ".shellescape(g:fname))
Fin
endwhile
endfunction
function System_noshelltemp()
let i=0
set noshelltemp
while i<g:max
let tmp=system("cat ".shellescape(g:fname))
Fin
endwhile
endfunction
profile start lprofile
profile func *
if has('python3')
Test Python3
Test Python3_bindeval
Test Py3eval
endif
if has('python')
Test Python2
Test Python2_bindeval
Test Pyeval
endif
Test Vim_readfile
Test Vim_readfile_binary
Test Vim_buf_getline
Test Vim_buf_normal_yank
Test Vim_read_normal_yank
Test Vim_buf_yank
Test Vim_read_yank
Test System_shelltemp
Test System_noshelltemp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment