123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- " Vim script to work like "less"
- " Maintainer: Bram Moolenaar <Bram@vim.org>
- " Last Change: 2020 Dec 17
- " 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
- " 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
- 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
- " Allow the user to define a function, which can set options specifically for
- " this script.
- if exists('*LessInitFunc')
- call LessInitFunc()
- endif
- " 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
- " Can't modify the text or write the file.
- set nomodifiable readonly
- " 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"
- if &foldmethod != "manual"
- echo "\n"
- echo "zR open all folds zm increase fold level"
- endif
- 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>
- map <PageDown> <Space>
- map <kPageDown> <Space>
- map <S-Down> <Space>
- " If 'foldmethod' was changed keep the "z" commands, e.g. "zR" to open all
- " folds.
- if &foldmethod == "manual"
- map z <Space>
- endif
- map <Esc><Space> <Space>
- fun! s:NextPage()
- if line(".") == line("$")
- if argidx() + 1 >= argc()
- " Don't quit at the end of the last file
- return
- 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>
- map <Down> <CR>
- " Scroll one page backward
- noremap <script> b <C-B><SID>L
- map <C-B> b
- map <PageUp> b
- map <kPageUp> b
- map <S-Up> b
- 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
- map <Up> k
- " 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
- map <Home> g
- map <kHome> g
- " End of file
- noremap <script> G G<SID>L
- map > G
- map <Esc>> G
- map <End> G
- map <kEnd> G
- " 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
- cnoremap <silent> <script> <CR> <CR>:cunmap <lt>CR><CR>zt<SID>L
- 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
- cnoremap <silent> <script> <CR> <CR>:cunmap <lt>CR><CR>zt<SID>L
- endfun
- call s:Forward()
- cunmap <CR>
- " Quitting
- noremap 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 ?
- 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>
- endfun
- " vim: sw=2
|