Hello,

  I have summarized my posts today titled "Balloons", "File ->
  register" and "Backslash in maps" as a vimtip
  (www.vim.org/tips/tip.php?tip_id=1218) titled "Quick peak at
  files";  the tip is also attached below.

  --Suresh

Quick peak at files

  In an operating system's command-line terminal, one can get a
  quick peak at a file using commands such as more, cat, head etc.
  In vim, one way to peak at a file would be to open it in a new
  buffer -- but there is a way to peak at a file from vim without
  having to open it in a buffer, browse it and close the buffer --
  one can just view it in vim's command line!  This mode of viewing
  is facilitated in vim version 7 by version 7's support for
  scrolling (see :help scroll-back). 

  So to peak at a file, we just echo its contents (:help echo; info
  on other commands mentioned here can be found likewise via :help).

  Simple implementation:
  ---------------------
  One way to implement the idea would be:  

      :new|r <file_name>|1d|exec 'normal "ayG'|q!|echo @a

  One could also do :echo system('cat foo.bat'), but we are trying
  to avoid explicit system calls.  In version 7, vim supports
  readfile().  But the results of readfile() is an array of lines --
  and these lines would need to be joined to enable viewing; so we
  have:

      :echo join(readfile('foo.bat'), "\n")

  Applications:
  ------------
  Here are two applications that build on the idea presented here.

  A) Yasuhiro Matsumoto's calendar utility
     (www.vim.org/scripts/script.php?script_id=52) is written to
     display the calendar in a buffer. For a quick peak at the
     calendar, one can modify the plugin to support echoing the
     calendar in vim's command line, and make a simple map (such as
     of a RightMouse click) to trigger the display on the command
     line!

  B) I have the following in my vimfiles\after\ftplugin\index.vim
     to speed up previewing emails using my mail user agent utility
     (www.vim.org/scripts/script.php?script_id=1052)

     if(v:version < 700)
     
         nnoremap <buffer> <space> :exec "let @a='r 
'.expand('%:p:h').'/'.substitute(
                                      \getline('.'),
                                      \'\\(^.*\|\\s*\\)\\\|\\(\\s\\s*$\\)',
                                      \'',
                                      \'g')
                                      \\\|new\\|@a\\|1d\\|
                                      \silent exec 'normal\ 
d}\"ayG'\\|q!\\|echo\ @a"<cr>
     else
     
         nnoremap <buffer> <space> :exec "let 
alist=readfile(expand('%:p:h').'/'.
                                      \substitute(getline('.'),
                                                 
\'\\(^.*\|\\s*\\)\\\|\\(\\s\\s*$\\)',
                                                 \'',
                                                 \'g')
                                      \)\\|
                                      \while(remove(alist, 0) != '')
                                      \\\|endwhile
                                      \\\|echo\ 
                                      \substitute(getline('.'),
                                                 
\'\\(^.*\|\\s*\\)\\\|\\(\\s\\s*$\\)',
                                                 \'',
                                                 \'g').\"\n\n\"
                                      \\\|echo join(alist,\"\n\")"<cr>
     
     endif

  Acknowledgment: 
  --------------
  While the idea presented here is mine, people on the vim@vim.org
  mailing list suggested alternate ways of implementing it and
  helped with some implementation details (such as escaping |).

  Happy vimming!
  
  --Suresh

Reply via email to