244 lines · 4.6 KB · Text
RawDownload
" Vim script to work like "less"" Maintainer:	Bram Moolenaar <Bram@vim.org>" Last Change:	2006 Dec 05 " Avoid loading this file twice, allow the user to define his own script.if exists("loaded_less")  finishendiflet loaded_less = 1 " If not reading from stdin, skip files that can't be read." Exit if there is no file at all.if argc() > 0  let s:i = 0  while 1    if filereadable(argv(s:i))      if s:i != 0	sleep 3      endif      break    endif    if isdirectory(argv(s:i))      echomsg "Skipping directory " . argv(s:i)    elseif getftime(argv(s:i)) < 0      echomsg "Skipping non-existing file " . argv(s:i)    else      echomsg "Skipping unreadable file " . argv(s:i)    endif    echo "\n"    let s:i = s:i + 1    if s:i == argc()      quit    endif    next  endwhileendif set nocpsyntax onset so=0set hlsearchset incsearchnohlsearch" Don't remember file names and positionsset viminfo=set nows" Inhibit screen updates while searchinglet s:lz = &lzset lz " Used after each command: put cursor at end and display positionif &wrap  noremap <SID>L L0:redraw<CR>:file<CR>  au VimEnter * normal! L0else  noremap <SID>L Lg0:redraw<CR>:file<CR>  au VimEnter * normal! Lg0endif " When reading from stdin don't consider the file modified.au VimEnter * set nomod " Can't modify the textset noma " Give helpnoremap h :call <SID>Help()<CR>map H hfun! s:Help()  echo "<Space>   One page forward          b         One page backward"  echo "d         Half a page forward       u         Half a page backward"  echo "<Enter>   One line forward          k         One line backward"  echo "G         End of file               g         Start of file"  echo "N%        percentage in file"  echo "\n"  echo "/pattern  Search for pattern        ?pattern  Search backward for pattern"  echo "n         next pattern match        N         Previous pattern match"  echo "\n"  echo ":n<Enter> Next file                 :p<Enter> Previous file"  echo "\n"  echo "q         Quit                      v         Edit file"  let i = input("Hit Enter to continue")endfun " Scroll one page forwardnoremap <script> <Space> :call <SID>NextPage()<CR><SID>Lmap <C-V> <Space>map f <Space>map <C-F> <Space>map z <Space>map <Esc><Space> <Space>fun! s:NextPage()  if line(".") == line("$")    if argidx() + 1 >= argc()      quit    endif    next    1  else    exe "normal! \<C-F>"  endifendfun " Re-read file and page forward "tail -f"map F :e<CR>G<SID>L:sleep 1<CR>F " Scroll half a page forwardnoremap <script> d <C-D><SID>Lmap <C-D> d " Scroll one line forwardnoremap <script> <CR> <C-E><SID>Lmap <C-N> <CR>map e <CR>map <C-E> <CR>map j <CR>map <C-J> <CR> " Scroll one page backwardnoremap <script> b <C-B><SID>Lmap <C-B> bmap w bmap <Esc>v b " Scroll half a page backwardnoremap <script> u <C-U><SID>Lnoremap <script> <C-U> <C-U><SID>L " Scroll one line backwardnoremap <script> k <C-Y><SID>Lmap y kmap <C-Y> kmap <C-P> kmap <C-K> k " Redrawnoremap <script> r <C-L><SID>Lnoremap <script> <C-R> <C-L><SID>Lnoremap <script> R <C-L><SID>L " Start of filenoremap <script> g gg<SID>Lmap < gmap <Esc>< g " End of filenoremap <script> G G<SID>Lmap > Gmap <Esc>> G " Go to percentagenoremap <script> % %<SID>Lmap p % " Searchnoremap <script> / H$:call <SID>Forward()<CR>/if &wrap  noremap <script> ? H0:call <SID>Backward()<CR>?else  noremap <script> ? Hg0:call <SID>Backward()<CR>?endif fun! s:Forward()  " Searching forward  noremap <script> n H$nzt<SID>L  if &wrap    noremap <script> N H0Nzt<SID>L  else    noremap <script> N Hg0Nzt<SID>L  endif  cnoremap <silent> <script> <CR> <CR>:cunmap <lt>CR><CR>zt<SID>Lendfun fun! s:Backward()  " Searching backward  if &wrap    noremap <script> n H0nzt<SID>L  else    noremap <script> n Hg0nzt<SID>L  endif  noremap <script> N H$Nzt<SID>L  cnoremap <silent> <script> <CR> <CR>:cunmap <lt>CR><CR>zt<SID>Lendfun call s:Forward() " Quittingnoremap q :q<CR> " Switch to editing (switch off less mode)map v :silent call <SID>End()<CR>fun! s:End()  set ma  if exists('s:lz')    let &lz = s:lz  endif  unmap h  unmap H  unmap <Space>  unmap <C-V>  unmap f  unmap <C-F>  unmap z  unmap <Esc><Space>  unmap F  unmap d  unmap <C-D>  unmap <CR>  unmap <C-N>  unmap e  unmap <C-E>  unmap j  unmap <C-J>  unmap b  unmap <C-B>  unmap w  unmap <Esc>v  unmap u  unmap <C-U>  unmap k  unmap y  unmap <C-Y>  unmap <C-P>  unmap <C-K>  unmap r  unmap <C-R>  unmap R  unmap g  unmap <  unmap <Esc><  unmap G  unmap >  unmap <Esc>>  unmap %  unmap p  unmap n  unmap N  unmap q  unmap v  unmap /  unmap ?endfun " vim: sw=2