| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim script to work like "less" | 
					
						
							|  |  |  | " Maintainer:	Bram Moolenaar <Bram@vim.org> | 
					
						
							| 
									
										
										
										
											2020-12-23 13:56:35 +01:00
										 |  |  | " Last Change:	2020 Dec 17 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Avoid loading this file twice, allow the user to define his own script. | 
					
						
							|  |  |  | if exists("loaded_less") | 
					
						
							|  |  |  |   finish | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | let 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 | 
					
						
							|  |  |  |   endwhile | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-23 13:56:35 +01:00
										 |  |  | " we don't want 'compatible' here | 
					
						
							|  |  |  | if &cp | 
					
						
							|  |  |  |   set nocp | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " enable syntax highlighting if not done already | 
					
						
							|  |  |  | if !get(g:, 'syntax_on', 0) | 
					
						
							|  |  |  |   syntax enable | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | set so=0 | 
					
						
							|  |  |  | set hlsearch | 
					
						
							|  |  |  | set incsearch | 
					
						
							|  |  |  | nohlsearch | 
					
						
							|  |  |  | " Don't remember file names and positions | 
					
						
							|  |  |  | set viminfo= | 
					
						
							|  |  |  | set nows | 
					
						
							|  |  |  | " Inhibit screen updates while searching | 
					
						
							|  |  |  | let s:lz = &lz | 
					
						
							|  |  |  | set lz | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-19 20:38:09 +01:00
										 |  |  | " Allow the user to define a function, which can set options specifically for | 
					
						
							|  |  |  | " this script. | 
					
						
							|  |  |  | if exists('*LessInitFunc') | 
					
						
							|  |  |  |   call LessInitFunc() | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Used after each command: put cursor at end and display position | 
					
						
							|  |  |  | if &wrap | 
					
						
							|  |  |  |   noremap <SID>L L0:redraw<CR>:file<CR> | 
					
						
							|  |  |  |   au VimEnter * normal! L0 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   noremap <SID>L Lg0:redraw<CR>:file<CR> | 
					
						
							|  |  |  |   au VimEnter * normal! Lg0 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " When reading from stdin don't consider the file modified. | 
					
						
							|  |  |  | au VimEnter * set nomod | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-26 21:20:45 +02:00
										 |  |  | " Can't modify the text or write the file. | 
					
						
							|  |  |  | set nomodifiable readonly | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Give help | 
					
						
							|  |  |  | noremap h :call <SID>Help()<CR> | 
					
						
							|  |  |  | map H h | 
					
						
							|  |  |  | fun! 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" | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  |   if &foldmethod != "manual" | 
					
						
							|  |  |  |   echo "\n" | 
					
						
							|  |  |  |     echo "zR        open all folds            zm        increase fold level" | 
					
						
							|  |  |  |   endif | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |   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 forward | 
					
						
							|  |  |  | noremap <script> <Space> :call <SID>NextPage()<CR><SID>L | 
					
						
							|  |  |  | map <C-V> <Space> | 
					
						
							|  |  |  | map f <Space> | 
					
						
							|  |  |  | map <C-F> <Space> | 
					
						
							| 
									
										
										
										
											2014-05-13 20:23:24 +02:00
										 |  |  | map <PageDown> <Space> | 
					
						
							|  |  |  | map <kPageDown> <Space> | 
					
						
							|  |  |  | map <S-Down> <Space> | 
					
						
							| 
									
										
										
										
											2017-04-09 20:11:58 +02:00
										 |  |  | " If 'foldmethod' was changed keep the "z" commands, e.g. "zR" to open all | 
					
						
							|  |  |  | " folds. | 
					
						
							|  |  |  | if &foldmethod == "manual" | 
					
						
							|  |  |  |   map z <Space> | 
					
						
							|  |  |  | endif | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | map <Esc><Space> <Space> | 
					
						
							|  |  |  | fun! s:NextPage() | 
					
						
							|  |  |  |   if line(".") == line("$") | 
					
						
							|  |  |  |     if argidx() + 1 >= argc() | 
					
						
							| 
									
										
										
										
											2012-05-18 13:46:39 +02:00
										 |  |  |       " Don't quit at the end of the last file | 
					
						
							|  |  |  |       return | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |     endif | 
					
						
							|  |  |  |     next | 
					
						
							|  |  |  |     1 | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     exe "normal! \<C-F>" | 
					
						
							|  |  |  |   endif | 
					
						
							|  |  |  | endfun | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Re-read file and page forward "tail -f" | 
					
						
							|  |  |  | map F :e<CR>G<SID>L:sleep 1<CR>F | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Scroll half a page forward | 
					
						
							|  |  |  | noremap <script> d <C-D><SID>L | 
					
						
							|  |  |  | map <C-D> d | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Scroll one line forward | 
					
						
							|  |  |  | noremap <script> <CR> <C-E><SID>L | 
					
						
							|  |  |  | map <C-N> <CR> | 
					
						
							|  |  |  | map e <CR> | 
					
						
							|  |  |  | map <C-E> <CR> | 
					
						
							|  |  |  | map j <CR> | 
					
						
							|  |  |  | map <C-J> <CR> | 
					
						
							| 
									
										
										
										
											2014-05-13 20:23:24 +02:00
										 |  |  | map <Down> <CR> | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Scroll one page backward | 
					
						
							|  |  |  | noremap <script> b <C-B><SID>L | 
					
						
							|  |  |  | map <C-B> b | 
					
						
							| 
									
										
										
										
											2014-05-13 20:23:24 +02:00
										 |  |  | map <PageUp> b | 
					
						
							|  |  |  | map <kPageUp> b | 
					
						
							|  |  |  | map <S-Up> b | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | map w b | 
					
						
							|  |  |  | map <Esc>v b | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Scroll half a page backward | 
					
						
							|  |  |  | noremap <script> u <C-U><SID>L | 
					
						
							|  |  |  | noremap <script> <C-U> <C-U><SID>L | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Scroll one line backward | 
					
						
							|  |  |  | noremap <script> k <C-Y><SID>L | 
					
						
							|  |  |  | map y k | 
					
						
							|  |  |  | map <C-Y> k | 
					
						
							|  |  |  | map <C-P> k | 
					
						
							|  |  |  | map <C-K> k | 
					
						
							| 
									
										
										
										
											2014-05-13 20:23:24 +02:00
										 |  |  | map <Up> k | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Redraw | 
					
						
							|  |  |  | noremap <script> r <C-L><SID>L | 
					
						
							|  |  |  | noremap <script> <C-R> <C-L><SID>L | 
					
						
							|  |  |  | noremap <script> R <C-L><SID>L | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Start of file | 
					
						
							|  |  |  | noremap <script> g gg<SID>L | 
					
						
							|  |  |  | map < g | 
					
						
							|  |  |  | map <Esc>< g | 
					
						
							| 
									
										
										
										
											2014-05-13 20:23:24 +02:00
										 |  |  | map <Home> g | 
					
						
							|  |  |  | map <kHome> g | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " End of file | 
					
						
							|  |  |  | noremap <script> G G<SID>L | 
					
						
							|  |  |  | map > G | 
					
						
							|  |  |  | map <Esc>> G | 
					
						
							| 
									
										
										
										
											2014-05-13 20:23:24 +02:00
										 |  |  | map <End> G | 
					
						
							|  |  |  | map <kEnd> G | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Go to percentage | 
					
						
							|  |  |  | noremap <script> % %<SID>L | 
					
						
							|  |  |  | map p % | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Search | 
					
						
							|  |  |  | noremap <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 | 
					
						
							| 
									
										
										
										
											2007-05-05 18:24:42 +00:00
										 |  |  |   cnoremap <silent> <script> <CR> <CR>:cunmap <lt>CR><CR>zt<SID>L | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endfun | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2007-05-05 18:24:42 +00:00
										 |  |  |   cnoremap <silent> <script> <CR> <CR>:cunmap <lt>CR><CR>zt<SID>L | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endfun | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | call s:Forward() | 
					
						
							| 
									
										
										
										
											2014-05-13 20:23:24 +02:00
										 |  |  | cunmap <CR> | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Quitting | 
					
						
							|  |  |  | noremap q :q<CR> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Switch to editing (switch off less mode) | 
					
						
							|  |  |  | map v :silent call <SID>End()<CR> | 
					
						
							|  |  |  | fun! s:End() | 
					
						
							|  |  |  |   set ma | 
					
						
							| 
									
										
										
										
											2006-05-07 15:16:06 +00:00
										 |  |  |   if exists('s:lz') | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |     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 ? | 
					
						
							| 
									
										
										
										
											2014-05-13 20:23:24 +02:00
										 |  |  |   unmap <Up> | 
					
						
							|  |  |  |   unmap <Down> | 
					
						
							|  |  |  |   unmap <PageDown> | 
					
						
							|  |  |  |   unmap <kPageDown> | 
					
						
							|  |  |  |   unmap <PageUp> | 
					
						
							|  |  |  |   unmap <kPageUp> | 
					
						
							|  |  |  |   unmap <S-Down> | 
					
						
							|  |  |  |   unmap <S-Up> | 
					
						
							|  |  |  |   unmap <Home> | 
					
						
							|  |  |  |   unmap <kHome> | 
					
						
							|  |  |  |   unmap <End> | 
					
						
							|  |  |  |   unmap <kEnd> | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endfun | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " vim: sw=2 |