VIM(1)                      General Commands Manual                     VIM(1)



NAME
       vim - Vi IMproved, a programmer's text editor

SYNOPSIS
       vim [options] [file ..]
       vim [options] -
       vim [options] -t tag
       vim [options] -q [errorfile]

       ex
       view
       gvim gview evim eview
       rvim rview rgvim rgview

DESCRIPTION
       Vim  is a text editor that is upwards compatible to Vi.  It can be used
       to edit all kinds of plain text.  It is especially useful  for  editing
       programs.

       There  are a lot of enhancements above Vi: multi level undo, multi win‐
       dows and buffers, syntax highlighting, command line  editing,  filename
       completion,   on-line   help,   visual  selection,  etc..   See  ":help
       vi_diff.txt" for a summary of the differences between Vim and Vi.

       While running Vim a lot of help can be obtained from the  on-line  help
       system, with the ":help" command.  See the ON-LINE HELP section below.

       Most often Vim is started to edit a single file with the command

            vim file

       More generally Vim is started with:

            vim [options] [filelist]

       If the filelist is missing, the editor will start with an empty buffer.
       Otherwise exactly one out of the following four may be used  to  choose
       one or more files to be edited.

       file ..     A  list  of  filenames.   The first one will be the current
                   file and read into the buffer.  The cursor  will  be  posi‐
                   tioned on the first line of the buffer.  You can get to the
                   other files with the ":next" command.  To edit a file  that
                   starts with a dash, precede the filelist with "--".

       -           The  file  to  edit  is read from stdin.  Commands are read
                   from stderr, which should be a tty.

       -t {tag}    The file to edit and the initial cursor position depends on
                   a  "tag",  a sort of goto label.  {tag} is looked up in the
                   tags file, the associated file becomes the current file and
                   the  associated  command  is executed.  Mostly this is used
                   for C programs, in which case {tag}  could  be  a  function
                   name.  The effect is that the file containing that function
                   becomes the current file and the cursor  is  positioned  on
                   the start of the function.  See ":help tag-commands".

       -q [errorfile]
                   Start  in  quickFix mode.  The file [errorfile] is read and
                   the first error is displayed.  If [errorfile]  is  omitted,
                   the  filename  is obtained from the 'errorfile' option (de‐
                   faults to "AztecC.Err" for the Amiga, "errors.err" on other
                   systems).   Further  errors can be jumped to with the ":cn"
                   command.  See ":help quickfix".

       Vim behaves differently, depending on the name of the command (the exe‐
       cutable may still be the same file).

       vim       The "normal" way, everything is default.

       ex        Start  in Ex mode.  Go to Normal mode with the ":vi" command.
                 Can also be done with the "-e" argument.

       view      Start in read-only mode.  You will be protected from  writing
                 the files.  Can also be done with the "-R" argument.

       gvim gview
                 The GUI version.  Starts a new window.  Can also be done with
                 the "-g" argument.

       evim eview
                 The GUI version in easy mode.  Starts a new window.  Can also
                 be done with the "-y" argument.

       rvim rview rgvim rgview
                 Like the above, but with restrictions.  It will not be possi‐
                 ble to start shell commands, or suspend  Vim.   Can  also  be
                 done with the "-Z" argument.

OPTIONS
       The  options may be given in any order, before or after filenames.  Op‐
       tions without an argument can be combined after a single dash.

       +[num]      For the first file the cursor will be  positioned  on  line
                   "num".   If "num" is missing, the cursor will be positioned
                   on the last line.

       +/{pat}     For the first file the cursor will  be  positioned  in  the
                   line  with  the  first  occurrence  of  {pat}.   See ":help
                   search-pattern" for the available search patterns.

       +{command}

       -c {command}
                   {command} will be executed after the first  file  has  been
                   read.   {command}  is interpreted as an Ex command.  If the
                   {command} contains spaces it must  be  enclosed  in  double
                   quotes  (this depends on the shell that is used).  Example:
                   vim "+set si" main.c
                   Note: You can use up to 10 "+" or "-c" commands.

       -S {file}   {file} will be sourced after the first file has been  read.
                   This  is  equivalent  to -c "source {file}".  {file} cannot
                   start with '-'.  If {file} is omitted "Session.vim" is used
                   (only works when -S is the last argument).

       --cmd {command}
                   Like  using  "-c",  but the command is executed just before
                   processing any vimrc file.  You can use up to 10  of  these
                   commands, independently from "-c" commands.

       -A          If  Vim  has  been compiled with ARABIC support for editing
                   right-to-left oriented files and Arabic  keyboard  mapping,
                   this  option  starts  Vim  in Arabic mode, i.e. 'arabic' is
                   set.  Otherwise an error message is given and Vim aborts.

       -b          Binary mode.  A few options will be set that makes it  pos‐
                   sible to edit a binary or executable file.

       -C          Compatible.   Set  the 'compatible' option.  This will make
                   Vim behave mostly like Vi, even though a  .vimrc  file  ex‐
                   ists.

       -d          Start in diff mode.  There should between two to eight file
                   name arguments.  Vim will open all the files and show  dif‐
                   ferences between them.  Works like vimdiff(1).

       -d {device}, -dev {device}
                   Open  {device}  for  use as a terminal.  Only on the Amiga.
                   Example: "-d con:20/30/600/150".

       -D          Debugging.  Go to debugging mode when executing  the  first
                   command from a script.

       -e          Start  Vim  in Ex mode, just like the executable was called
                   "ex".

       -E          Start Vim in improved Ex mode, just like the executable was
                   called "exim".

       -f          Foreground.  For the GUI version, Vim will not fork and de‐
                   tach from the shell it was started in.  On the  Amiga,  Vim
                   is  not restarted to open a new window.  This option should
                   be used when Vim is executed by a program  that  will  wait
                   for  the  edit session to finish (e.g. mail).  On the Amiga
                   the ":sh" and ":!" commands will not work.

       --nofork    Foreground.  For the GUI version, Vim will not fork and de‐
                   tach from the shell it was started in.

       -F          If  Vim  has  been  compiled with FKMAP support for editing
                   right-to-left oriented files and  Farsi  keyboard  mapping,
                   this  option  starts  Vim  in  Farsi mode, i.e. 'fkmap' and
                   'rightleft' are set.  Otherwise an error message  is  given
                   and Vim aborts.

       -g          If  Vim has been compiled with GUI support, this option en‐
                   ables the GUI.  If no GUI support was compiled in, an error
                   message is given and Vim aborts.

       --gui-dialog-file {name}
                   When  using the GUI, instead of showing a dialog, write the
                   title and message of the dialog to file {name}.   The  file
                   is  created  or  appended  to.  Only useful for testing, to
                   avoid that the test gets stuck on a dialog  that  can't  be
                   seen.  Without the GUI the argument is ignored.

       --help, -h, -?
                   Give a bit of help about the command line arguments and op‐
                   tions.  After this Vim exits.

       -H          If Vim has been compiled with RIGHTLEFT support for editing
                   right-to-left  oriented  files and Hebrew keyboard mapping,
                   this option starts Vim in Hebrew  mode,  i.e.  'hkmap'  and
                   'rightleft'  are  set.  Otherwise an error message is given
                   and Vim aborts.

       -i {viminfo}
                   Specifies the filename to use when reading or  writing  the
                   viminfo  file,  instead  of the default "~/.viminfo".  This
                   can also be used to skip the use of the .viminfo  file,  by
                   giving the name "NONE".

       -L          Same as -r.

       -l          Lisp mode.  Sets the 'lisp' and 'showmatch' options on.

       -m          Modifying  files  is  disabled.  Resets the 'write' option.
                   You can still modify the buffer, but writing a file is  not
                   possible.

       -M          Modifications  not  allowed.   The 'modifiable' and 'write'
                   options will be unset, so that changes are not allowed  and
                   files  can  not be written.  Note that these options can be
                   set to enable making modifications.

       -N          No-compatible mode.  Resets the 'compatible' option.   This
                   will  make Vim behave a bit better, but less Vi compatible,
                   even though a .vimrc file does not exist.

       -n          No swap file will be used.  Recovery after a crash will  be
                   impossible.   Handy  if  you  want to edit a file on a very
                   slow medium (e.g. floppy).  Can also  be  done  with  ":set
                   uc=0".  Can be undone with ":set uc=200".

       -nb         Become an editor server for NetBeans.  See the docs for de‐
                   tails.

       -o[N]       Open N windows stacked.  When N is omitted, open one window
                   for each file.

       -O[N]       Open  N  windows side by side.  When N is omitted, open one
                   window for each file.

       -p[N]       Open N tab pages.  When N is omitted, open one tab page for
                   each file.

       -P {parent-title}
                   Win32  GUI  only:  Specify the title of the parent applica‐
                   tion.  When possible, Vim will run in an MDI window  inside
                   the  application.  {parent-title} must appear in the window
                   title of the parent application.  Make sure that it is spe‐
                   cific  enough. Note that the implementation is still primi‐
                   tive.  It won't work with all  applications  and  the  menu
                   doesn't work.

       -R          Read-only  mode.   The  'readonly' option will be set.  You
                   can still edit the buffer, but will be prevented from acci‐
                   dentally overwriting a file.  If you do want to overwrite a
                   file, add an exclamation mark to  the  Ex  command,  as  in
                   ":w!".   The  -R  option  also  implies  the -n option (see
                   above).  The 'readonly' option  can  be  reset  with  ":set
                   noro".  See ":help 'readonly'".

       -r          List  swap files, with information about using them for re‐
                   covery.

       -r {file}   Recovery mode.  The swap file is used to recover a  crashed
                   editing  session.   The  swap  file is a file with the same
                   filename as the text file with ".swp" appended.  See ":help
                   recovery".

       -s          Silent  mode.   Only  when started as "Ex" or when the "-e"
                   option was given before the "-s" option.

       -s {scriptin}
                   The script file {scriptin} is read.  The characters in  the
                   file  are  interpreted  as if you had typed them.  The same
                   can be done with the command ":source! {scriptin}".  If the
                   end of the file is reached before the editor exits, further
                   characters are read from the keyboard.

       -T {terminal}
                   Tells Vim the name of the terminal you are using.  Only re‐
                   quired  when  the  automatic way doesn't work.  Should be a
                   terminal known to Vim (builtin) or defined in  the  termcap
                   or terminfo file.

       --not-a-term
                   Tells  Vim that the user knows that the input and/or output
                   is not connected to a terminal.  This will avoid the  warn‐
                   ing and the two second delay that would happen.

       --ttyfail   When  stdin  or  stdout is not a a terminal (tty) then exit
                   right away.

       -u {vimrc}  Use the commands in the file {vimrc}  for  initializations.
                   All  the  other  initializations  are skipped.  Use this to
                   edit a special kind of files.  It can also be used to  skip
                   all  initializations by giving the name "NONE".  See ":help
                   initialization" within vim for more details.

       -U {gvimrc} Use the commands in the file {gvimrc} for  GUI  initializa‐
                   tions.   All the other GUI initializations are skipped.  It
                   can also be used to skip all GUI initializations by  giving
                   the  name "NONE".  See ":help gui-init" within vim for more
                   details.

       -V[N]       Verbose.  Give messages about which files are  sourced  and
                   for  reading and writing a viminfo file.  The optional num‐
                   ber N is the value for 'verbose'.  Default is 10.

       -V[N]{filename}
                   Like -V and set 'verbosefile' to {filename}.  The result is
                   that  messages  are  not  displayed but written to the file
                   {filename}.  {filename} must not start with a digit.

       --log {filename}
                   If Vim has been compiled with  eval  and  channel  feature,
                   start  logging  and write entries to {filename}. This works
                   like calling ch_logfile({filename}, 'ao') very early during
                   startup.

       -v          Start  Vim  in Vi mode, just like the executable was called
                   "vi".  This only has effect when the executable  is  called
                   "ex".

       -w{number}  Set the 'window' option to {number}.

       -w {scriptout}
                   All  the  characters that you type are recorded in the file
                   {scriptout}, until you exit Vim.  This  is  useful  if  you
                   want  to  create  a script file to be used with "vim -s" or
                   ":source!".  If the {scriptout} file exists, characters are
                   appended.

       -W {scriptout}
                   Like -w, but an existing file is overwritten.

       -x          Use encryption when writing files.  Will prompt for a crypt
                   key.

       -X          Don't connect to the X server.  Shortens startup time in  a
                   terminal,  but  the  window title and clipboard will not be
                   used.

       -y          Start Vim in easy mode, just like the executable was called
                   "evim"  or "eview".  Makes Vim behave like a click-and-type
                   editor.

       -Z          Restricted mode.  Works like  the  executable  starts  with
                   "r".

       --          Denotes  the end of the options.  Arguments after this will
                   be handled as a file name.  This can  be  used  to  edit  a
                   filename that starts with a '-'.

       --clean     Do  not  use  any  personal  configuration (vimrc, plugins,
                   etc.).  Useful to see if a problem reproduces with a  clean
                   Vim setup.

       --echo-wid  GTK GUI only: Echo the Window ID on stdout.

       --literal   Take  file  name  arguments  literally, do not expand wild‐
                   cards.  This has no effect on Unix where the shell  expands
                   wildcards.

       --noplugin  Skip loading plugins.  Implied by -u NONE.

       --remote    Connect to a Vim server and make it edit the files given in
                   the rest of the arguments.  If no server is found a warning
                   is given and the files are edited in the current Vim.

       --remote-expr {expr}
                   Connect  to  a  Vim server, evaluate {expr} in it and print
                   the result on stdout.

       --remote-send {keys}
                   Connect to a Vim server and send {keys} to it.

       --remote-silent
                   As --remote, but without the  warning  when  no  server  is
                   found.

       --remote-wait
                   As  --remote,  but  Vim  does not exit until the files have
                   been edited.

       --remote-wait-silent
                   As --remote-wait, but without the warning when no server is
                   found.

       --serverlist
                   List the names of all Vim servers that can be found.

       --servername {name}
                   Use  {name}  as the server name.  Used for the current Vim,
                   unless used with a --remote argument, then it's the name of
                   the server to connect to.

       --socketid {id}
                   GTK  GUI only: Use the GtkPlug mechanism to run gvim in an‐
                   other window.

       --startuptime {file}
                   During startup write timing messages to the file {fname}.

       --version   Print version information and exit.

       --windowid {id}
                   Win32 GUI only: Make gvim try to use the window {id}  as  a
                   parent, so that it runs inside that window.

ON-LINE HELP
       Type  ":help"  in Vim to get started.  Type ":help subject" to get help
       on a specific subject.  For example: ":help ZZ" to  get  help  for  the
       "ZZ"  command.   Use <Tab> and CTRL-D to complete subjects (":help cmd‐
       line-completion").  Tags are present to jump from one place to  another
       (sort of hypertext links, see ":help").  All documentation files can be
       viewed in this way, for example ":help syntax.txt".

FILES
       /usr/local/share/vim/vim??/doc/*.txt
                      The Vim documentation files.  Use ":help  doc-file-list"
                      to get the complete list.
                      vim??  is short version number, like vim91 for Vim 9.1

       /usr/local/share/vim/vim??/doc/tags
                      The  tags file used for finding information in the docu‐
                      mentation files.

       /usr/local/share/vim/vim??/syntax/syntax.vim
                      System wide syntax initializations.

       /usr/local/share/vim/vim??/syntax/*.vim
                      Syntax files for various languages.

       /usr/local/share/vim/vimrc
                      System wide Vim initializations.

       ~/.vimrc, ~/.vim/vimrc, $XDG_CONFIG_HOME/vim/vimrc
                      Your personal Vim initializations (first  one  found  is
                      used).

       /usr/local/share/vim/gvimrc
                      System wide gvim initializations.

       ~/.gvimrc, ~/.vim/gvimrc, $XDG_CONFIG_HOME/vim/gvimrc
                      Your  personal  gvim initializations (first one found is
                      used).

       /usr/local/share/vim/vim??/optwin.vim
                      Script used for the ":options" command, a  nice  way  to
                      view and set options.

       /usr/local/share/vim/vim??/menu.vim
                      System wide menu initializations for gvim.

       /usr/local/share/vim/vim??/bugreport.vim
                      Script to generate a bug report.  See ":help bugs".

       /usr/local/share/vim/vim??/filetype.vim
                      Script  to  detect  the type of a file by its name.  See
                      ":help 'filetype'".

       /usr/local/share/vim/vim??/scripts.vim
                      Script to detect the type of a  file  by  its  contents.
                      See ":help 'filetype'".

       /usr/local/share/vim/vim??/print/*.ps
                      Files used for PostScript printing.

       For recent info read the VIM home page:
       <URL:http://www.vim.org/>

SEE ALSO
       vimtutor(1)

AUTHOR
       Most of Vim was made by Bram Moolenaar, with a lot of help from others.
       See ":help credits" in Vim.
       Vim is based on Stevie, worked on by: Tim Thompson,  Tony  Andrews  and
       G.R. (Fred) Walter.  Although hardly any of the original code remains.

BUGS
       Probably.  See ":help todo" for a list of known problems.

       Note  that a number of things that may be regarded as bugs by some, are
       in fact caused by a too-faithful reproduction of Vi's  behaviour.   And
       if  you  think  other things are bugs "because Vi does it differently",
       you should take a closer look at the vi_diff.txt file  (or  type  :help
       vi_diff.txt  when  in  Vim).   Also have a look at the 'compatible' and
       'cpoptions' options.



                                  2024 Jun 04                           VIM(1)
