updated for version 7.2a
diff --git a/runtime/tutor/README_ami.txt b/runtime/tutor/README_ami.txt
new file mode 100644
index 0000000..13fa67d
--- /dev/null
+++ b/runtime/tutor/README_ami.txt
@@ -0,0 +1,32 @@
+README_ami.txt for version 7.2a of Vim: Vi IMproved.
+
+This file explains the installation of Vim on Amiga systems.
+See README.txt for general information about Vim.
+
+
+Unpack the distributed files in the place where you want to keep them. It is
+wise to have a "vim" directory to keep your vimrc file and any other files you
+change. The distributed files go into a subdirectory. This way you can
+easily upgrade to a new version. For example:
+
+ dh0:editors/vim contains your vimrc and modified files
+ dh0:editors/vim/vim54 contains the Vim version 5.4 distributed files
+ dh0:editors/vim/vim55 contains the Vim version 5.5 distributed files
+
+You would then unpack the archives like this:
+
+ cd dh0:editors
+ tar xf t:vim60bin.tar
+ tar xf t:vim60rt.tar
+
+Set the $VIM environment variable to point to the top directory of your Vim
+files. For the above example:
+
+ set VIM=dh0:editors/vim
+
+Vim version 5.4 will look for your vimrc file in $VIM, and for the runtime
+files in $VIM/vim54. See ":help $VIM" for more information.
+
+Make sure the Vim executable is in your search path. Either copy the Vim
+executable to a directory that is in your search path, or (preferred) modify
+the search path to include the directory where the Vim executable is.
diff --git a/runtime/tutor/runtime/delmenu.vim b/runtime/tutor/runtime/delmenu.vim
new file mode 100644
index 0000000..81df87d
--- /dev/null
+++ b/runtime/tutor/runtime/delmenu.vim
@@ -0,0 +1,25 @@
+" This Vim script deletes all the menus, so that they can be redefined.
+" Warning: This also deletes all menus defined by the user!
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2001 May 27
+
+aunmenu *
+
+silent! unlet did_install_default_menus
+silent! unlet did_install_syntax_menu
+if exists("did_menu_trans")
+ menutrans clear
+ unlet did_menu_trans
+endif
+
+silent! unlet find_help_dialog
+
+silent! unlet menutrans_help_dialog
+silent! unlet menutrans_path_dialog
+silent! unlet menutrans_tags_dialog
+silent! unlet menutrans_textwidth_dialog
+silent! unlet menutrans_fileformat_dialog
+silent! unlet menutrans_no_file
+
+" vim: set sw=2 :
diff --git a/runtime/tutor/runtime/macmap.vim b/runtime/tutor/runtime/macmap.vim
new file mode 100644
index 0000000..dc76f15
--- /dev/null
+++ b/runtime/tutor/runtime/macmap.vim
@@ -0,0 +1,75 @@
+" System gvimrc file for Mac OS X
+" Author: Benji Fisher <benji@member.AMS.org>
+" Last Change: Thu Mar 09 09:00 AM 2006 EST
+"
+" Define Mac-standard keyboard shortcuts.
+
+" We don't change 'cpoptions' here, because it would not be set properly when
+" a .vimrc file is found later. Thus don't use line continuation and use
+" <special> in mappings.
+
+nnoremap <special> <D-n> :confirm enew<CR>
+vmap <special> <D-n> <Esc><D-n>gv
+imap <special> <D-n> <C-O><D-n>
+cmap <special> <D-n> <C-C><D-n>
+omap <special> <D-n> <Esc><D-n>
+
+nnoremap <special> <D-o> :browse confirm e<CR>
+vmap <special> <D-o> <Esc><D-o>gv
+imap <special> <D-o> <C-O><D-o>
+cmap <special> <D-o> <C-C><D-o>
+omap <special> <D-o> <Esc><D-o>
+
+nnoremap <silent> <special> <D-w> :if winheight(2) < 0 <Bar> confirm enew <Bar> else <Bar> confirm close <Bar> endif<CR>
+vmap <special> <D-w> <Esc><D-w>gv
+imap <special> <D-w> <C-O><D-w>
+cmap <special> <D-w> <C-C><D-w>
+omap <special> <D-w> <Esc><D-w>
+
+nnoremap <silent> <special> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar> else<Bar>confirm w<Bar>endif<CR>
+vmap <special> <D-s> <Esc><D-s>gv
+imap <special> <D-s> <C-O><D-s>
+cmap <special> <D-s> <C-C><D-s>
+omap <special> <D-s> <Esc><D-s>
+
+nnoremap <special> <D-S-s> :browse confirm saveas<CR>
+vmap <special> <D-S-s> <Esc><D-s>gv
+imap <special> <D-S-s> <C-O><D-s>
+cmap <special> <D-S-s> <C-C><D-s>
+omap <special> <D-S-s> <Esc><D-s>
+
+" From the Edit menu of SimpleText:
+nnoremap <special> <D-z> u
+vmap <special> <D-z> <Esc><D-z>gv
+imap <special> <D-z> <C-O><D-z>
+cmap <special> <D-z> <C-C><D-z>
+omap <special> <D-z> <Esc><D-z>
+
+vnoremap <special> <D-x> "+x
+
+vnoremap <special> <D-c> "+y
+
+cnoremap <special> <D-c> <C-Y>
+
+nnoremap <special> <D-v> "+gP
+cnoremap <special> <D-v> <C-R>+
+execute 'vnoremap <script> <special> <D-v>' paste#paste_cmd['v']
+execute 'inoremap <script> <special> <D-v>' paste#paste_cmd['i']
+
+nnoremap <silent> <special> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar> else<Bar>exe ":norm ggVG"<Bar>endif<CR>
+vmap <special> <D-a> <Esc><D-a>
+imap <special> <D-a> <Esc><D-a>
+cmap <special> <D-a> <C-C><D-a>
+omap <special> <D-a> <Esc><D-a>
+
+nnoremap <special> <D-f> /
+vmap <special> <D-f> <Esc><D-f>
+imap <special> <D-f> <Esc><D-f>
+cmap <special> <D-f> <C-C><D-f>
+omap <special> <D-f> <Esc><D-f>
+
+nnoremap <special> <D-g> n
+vmap <special> <D-g> <Esc><D-g>
+imap <special> <D-g> <C-O><D-g>
+cmap <special> <D-g> <C-C><D-g>
+omap <special> <D-g> <Esc><D-g>
diff --git a/runtime/tutor/runtime/macros.info b/runtime/tutor/runtime/macros.info
new file mode 100755
index 0000000..bbb0b4f
--- /dev/null
+++ b/runtime/tutor/runtime/macros.info
Binary files differ
diff --git a/runtime/tutor/runtime/optwin.vim b/runtime/tutor/runtime/optwin.vim
new file mode 100644
index 0000000..7392b53
--- /dev/null
+++ b/runtime/tutor/runtime/optwin.vim
@@ -0,0 +1,1312 @@
+" These commands create the option window.
+"
+" Maintainer: Bram Moolenaar <Bram@vim.org>
+" Last Change: 2008 May 12
+
+" If there already is an option window, jump to that one.
+if bufwinnr("option-window") > 0
+ let s:thiswin = winnr()
+ while 1
+ if @% == "option-window"
+ finish
+ endif
+ exe "norm! \<C-W>w"
+ if s:thiswin == winnr()
+ break
+ endif
+ endwhile
+endif
+
+" Make sure the '<' flag is not included in 'cpoptions', otherwise <CR> would
+" not be recognized. See ":help 'cpoptions'".
+let s:cpo_save = &cpo
+set cpo&vim
+
+" function to be called when <CR> is hit in the option-window
+fun! <SID>CR()
+
+ " If on a continued comment line, go back to the first comment line
+ let lnum = line(".")
+ let line = getline(lnum)
+ while line[0] == "\t"
+ let lnum = lnum - 1
+ let line = getline(lnum)
+ endwhile
+
+ " <CR> on a "set" line executes the option line
+ if match(line, "^ \tset ") >= 0
+
+ " For a local option: go to the previous window
+ " If this is a help window, go to the window below it
+ let thiswin = winnr()
+ let local = <SID>Find(lnum)
+ if local >= 0
+ exe line
+ call <SID>Update(lnum, line, local, thiswin)
+ endif
+
+ " <CR> on a "option" line shows help for that option
+ elseif match(line, "^[a-z]") >= 0
+ let name = substitute(line, '\([^\t]*\).*', '\1', "")
+ exe "help '" . name . "'"
+
+ " <CR> on an index line jumps to the group
+ elseif match(line, '^ \=[0-9]') >= 0
+ exe "norm! /" . line . "\<CR>zt"
+ endif
+endfun
+
+" function to be called when <Space> is hit in the option-window
+fun! <SID>Space()
+
+ let lnum = line(".")
+ let line = getline(lnum)
+
+ " <Space> on a "set" line refreshes the option line
+ if match(line, "^ \tset ") >= 0
+
+ " For a local option: go to the previous window
+ " If this is a help window, go to the window below it
+ let thiswin = winnr()
+ let local = <SID>Find(lnum)
+ if local >= 0
+ call <SID>Update(lnum, line, local, thiswin)
+ endif
+
+ endif
+endfun
+
+" find the window in which the option applies
+" returns 0 for global option, 1 for local option, -1 for error
+fun! <SID>Find(lnum)
+ if getline(a:lnum - 1) =~ "(local to"
+ let local = 1
+ let thiswin = winnr()
+ exe "norm! \<C-W>p"
+ if exists("b:current_syntax") && b:current_syntax == "help"
+ exe "norm! \<C-W>j"
+ if winnr() == thiswin
+ exe "norm! \<C-W>j"
+ endif
+ endif
+ else
+ let local = 0
+ endif
+ if local && (winnr() == thiswin || (exists("b:current_syntax")
+ \ && b:current_syntax == "help"))
+ echo "Don't know in which window"
+ let local = -1
+ endif
+ return local
+endfun
+
+" Update a "set" line in the option window
+fun! <SID>Update(lnum, line, local, thiswin)
+ " get the new value of the option and update the option window line
+ if match(a:line, "=") >= 0
+ let name = substitute(a:line, '^ \tset \([^=]*\)=.*', '\1', "")
+ else
+ let name = substitute(a:line, '^ \tset \(no\)\=\([a-z]*\).*', '\2', "")
+ endif
+ if name == "pt" && &pt =~ "\x80"
+ let val = <SID>PTvalue()
+ else
+ exe "let val = substitute(&" . name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+ endif
+ if a:local
+ exe "norm! " . a:thiswin . "\<C-W>w"
+ endif
+ if match(a:line, "=") >= 0 || (val != "0" && val != "1")
+ call setline(a:lnum, " \tset " . name . "=" . val)
+ else
+ if val
+ call setline(a:lnum, " \tset " . name . "\tno" . name)
+ else
+ call setline(a:lnum, " \tset no" . name . "\t" . name)
+ endif
+ endif
+ set nomodified
+endfun
+
+" Reset 'title' and 'icon' to make it work faster.
+let s:old_title = &title
+let s:old_icon = &icon
+let s:old_sc = &sc
+let s:old_ru = &ru
+set notitle noicon nosc noru
+
+" If the current window is a help window, try finding a non-help window.
+" Relies on syntax highlighting to be switched on.
+let s:thiswin = winnr()
+while exists("b:current_syntax") && b:current_syntax == "help"
+ exe "norm! \<C-W>w"
+ if s:thiswin == winnr()
+ break
+ endif
+endwhile
+
+" Open the window
+new option-window
+setlocal ts=15 tw=0 noro
+
+" Insert help and a "set" command for each option.
+call append(0, '" Each "set" line shows the current value of an option (on the left).')
+call append(1, '" Hit <CR> on a "set" line to execute it.')
+call append(2, '" A boolean option will be toggled.')
+call append(3, '" For other options you can edit the value.')
+call append(4, '" Hit <CR> on a help line to open a help window on this option.')
+call append(5, '" Hit <CR> on an index line to jump there.')
+call append(6, '" Hit <Space> on a "set" line to refresh it.')
+
+" These functions are called often below. Keep them fast!
+
+" Init a local binary option
+fun! <SID>BinOptionL(name)
+ exe "norm! \<C-W>p"
+ exe "let val = &" . a:name
+ exe "norm! \<C-W>p"
+ call append("$", substitute(substitute(" \tset " . val . a:name . "\t" .
+ \!val . a:name, "0", "no", ""), "1", "", ""))
+endfun
+
+" Init a global binary option
+fun! <SID>BinOptionG(name, val)
+ call append("$", substitute(substitute(" \tset " . a:val . a:name . "\t" .
+ \!a:val . a:name, "0", "no", ""), "1", "", ""))
+endfun
+
+" Init a local string option
+fun! <SID>OptionL(name)
+ exe "norm! \<C-W>p"
+ exe "let val = substitute(&" . a:name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+ exe "norm! \<C-W>p"
+ call append("$", " \tset " . a:name . "=" . val)
+endfun
+
+" Init a global string option
+fun! <SID>OptionG(name, val)
+ call append("$", " \tset " . a:name . "=" . substitute(a:val, '[ \t\\"|]',
+ \ '\\\0', "g"))
+endfun
+
+let s:idx = 1
+let s:lnum = line("$")
+call append("$", "")
+
+fun! <SID>Header(text)
+ let line = s:idx . " " . a:text
+ if s:idx < 10
+ let line = " " . line
+ endif
+ call append("$", "")
+ call append("$", line)
+ call append("$", "")
+ call append(s:lnum, line)
+ let s:idx = s:idx + 1
+ let s:lnum = s:lnum + 1
+endfun
+
+" Get the value of 'pastetoggle'. It could be a special key.
+fun! <SID>PTvalue()
+ redir @a
+ silent set pt
+ redir END
+ return substitute(@a, '[^=]*=\(.*\)', '\1', "")
+endfun
+
+" Restore the previous value of 'cpoptions' here, it's used below.
+let &cpo = s:cpo_save
+
+" List of all options, organized by function.
+" The text should be sufficient to know what the option is used for.
+
+call <SID>Header("important")
+call append("$", "compatible\tbehave very Vi compatible (not advisable)")
+call <SID>BinOptionG("cp", &cp)
+call append("$", "cpoptions\tlist of flags to specify Vi compatibility")
+call <SID>OptionG("cpo", &cpo)
+call append("$", "insertmode\tuse Insert mode as the default mode")
+call <SID>BinOptionG("im", &im)
+call append("$", "paste\tpaste mode, insert typed text literally")
+call <SID>BinOptionG("paste", &paste)
+call append("$", "pastetoggle\tkey sequence to toggle paste mode")
+if &pt =~ "\x80"
+ call append("$", " \tset pt=" . <SID>PTvalue())
+else
+ call <SID>OptionG("pt", &pt)
+endif
+call append("$", "runtimepath\tlist of directories used for runtime files and plugins")
+call <SID>OptionG("rtp", &rtp)
+call append("$", "helpfile\tname of the main help file")
+call <SID>OptionG("hf", &hf)
+
+
+call <SID>Header("moving around, searching and patterns")
+call append("$", "whichwrap\tlist of flags specifying which commands wrap to another line")
+call append("$", "\t(local to window)")
+call <SID>OptionL("ww")
+call append("$", "startofline\tmany jump commands move the cursor to the first non-blank")
+call append("$", "\tcharacter of a line")
+call <SID>BinOptionG("sol", &sol)
+call append("$", "paragraphs\tnroff macro names that separate paragraphs")
+call <SID>OptionG("para", ¶)
+call append("$", "sections\tnroff macro names that separate sections")
+call <SID>OptionG("sect", §)
+call append("$", "path\tlist of directory names used for file searching")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("pa", &pa)
+call append("$", "cdpath\tlist of directory names used for :cd")
+call <SID>OptionG("cd", &cd)
+if has("netbeans_intg") || has("sun_workshop")
+ call append("$", "autochdir\tchange to directory of file in buffer")
+ call <SID>BinOptionG("acd", &acd)
+endif
+call append("$", "wrapscan\tsearch commands wrap around the end of the buffer")
+call <SID>BinOptionG("ws", &ws)
+call append("$", "incsearch\tshow match for partly typed search command")
+call <SID>BinOptionG("is", &is)
+call append("$", "magic\tchange the way backslashes are used in search patterns")
+call <SID>BinOptionG("magic", &magic)
+call append("$", "ignorecase\tignore case when using a search pattern")
+call <SID>BinOptionG("ic", &ic)
+call append("$", "smartcase\toverride 'ignorecase' when pattern has upper case characters")
+call <SID>BinOptionG("scs", &scs)
+call append("$", "casemap\tWhat method to use for changing case of letters")
+call <SID>OptionG("cmp", &cmp)
+call append("$", "maxmempattern\tmaximum amount of memory in Kbyte used for pattern matching")
+call append("$", " \tset mmp=" . &mmp)
+call append("$", "define\tpattern for a macro definition line")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("def", &def)
+if has("find_in_path")
+ call append("$", "include\tpattern for an include-file line")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inc")
+ call append("$", "includeexpr\texpression used to transform an include line to a file name")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inex")
+endif
+
+
+call <SID>Header("tags")
+call append("$", "tagbsearch\tuse binary searching in tags files")
+call <SID>BinOptionG("tbs", &tbs)
+call append("$", "taglength\tnumber of significant characters in a tag name or zero")
+call append("$", " \tset tl=" . &tl)
+call append("$", "tags\tlist of file names to search for tags")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("tag", &tag)
+call append("$", "tagrelative\tfile names in a tags file are relative to the tags file")
+call <SID>BinOptionG("tr", &tr)
+call append("$", "tagstack\ta :tag command will use the tagstack")
+call <SID>BinOptionG("tgst", &tgst)
+call append("$", "showfulltag\twhen completing tags in Insert mode show more info")
+call <SID>BinOptionG("sft", &sft)
+if has("cscope")
+ call append("$", "cscopeprg\tcommand for executing cscope")
+ call <SID>OptionG("csprg", &csprg)
+ call append("$", "cscopetag\tuse cscope for tag commands")
+ call <SID>BinOptionG("cst", &cst)
+ call append("$", "cscopetagorder\t0 or 1; the order in which \":cstag\" performs a search")
+ call append("$", " \tset csto=" . &csto)
+ call append("$", "cscopeverbose\tgive messages when adding a cscope database")
+ call <SID>BinOptionG("csverb", &csverb)
+ call append("$", "cscopepathcomp\thow many components of the path to show")
+ call append("$", " \tset cspc=" . &cspc)
+ call append("$", "cscopequickfix\tWhen to open a quickfix window for cscope")
+ call <SID>OptionG("csqf", &csqf)
+endif
+
+
+call <SID>Header("displaying text")
+call append("$", "scroll\tnumber of lines to scroll for CTRL-U and CTRL-D")
+call append("$", "\t(local to window)")
+call <SID>OptionL("scr")
+call append("$", "scrolloff\tnumber of screen lines to show around the cursor")
+call append("$", " \tset so=" . &so)
+call append("$", "wrap\tlong lines wrap")
+call <SID>BinOptionG("wrap", &wrap)
+call append("$", "linebreak\twrap long lines at a character in 'breakat'")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("lbr")
+call append("$", "breakat\twhich characters might cause a line break")
+call <SID>OptionG("brk", &brk)
+call append("$", "showbreak\tstring to put before wrapped screen lines")
+call <SID>OptionG("sbr", &sbr)
+call append("$", "sidescroll\tminimal number of columns to scroll horizontally")
+call append("$", " \tset ss=" . &ss)
+call append("$", "sidescrolloff\tminimal number of columns to keep left and right of the cursor")
+call append("$", " \tset siso=" . &siso)
+call append("$", "display\tinclude \"lastline\" to show the last line even if it doesn't fit")
+call append("$", "\tinclude \"uhex\" to show unprintable characters as a hex number")
+call <SID>OptionG("dy", &dy)
+call append("$", "fillchars\tcharacters to use for the status line, folds and filler lines")
+call <SID>OptionG("fcs", &fcs)
+call append("$", "cmdheight\tnumber of lines used for the command-line")
+call append("$", " \tset ch=" . &ch)
+call append("$", "columns\twidth of the display")
+call append("$", " \tset co=" . &co)
+call append("$", "lines\tnumber of lines in the display")
+call append("$", " \tset lines=" . &lines)
+call append("$", "lazyredraw\tdon't redraw while executing macros")
+call <SID>BinOptionG("lz", &lz)
+if has("reltime")
+ call append("$", "redrawtime\ttimeout for 'hlsearch' and :match highlighting in msec")
+ call append("$", " \tset rdt=" . &rdt)
+endif
+call append("$", "writedelay\tdelay in msec for each char written to the display")
+call append("$", "\t(for debugging)")
+call append("$", " \tset wd=" . &wd)
+call append("$", "list\tshow <Tab> as ^I and end-of-line as $")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("list")
+call append("$", "listchars\tlist of strings used for list mode")
+call <SID>OptionG("lcs", &lcs)
+call append("$", "number\tshow the line number for each line")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("nu")
+if has("linebreak")
+ call append("$", "numberwidth\tnumber of columns to use for the line number")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("nuw")
+endif
+
+
+call <SID>Header("syntax, highlighting and spelling")
+call append("$", "background\t\"dark\" or \"light\"; the background color brightness")
+call <SID>OptionG("bg", &bg)
+if has("autocmd")
+ call append("$", "filetype\ttype of file; triggers the FileType event when set")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("ft")
+endif
+if has("syntax")
+ call append("$", "syntax\tname of syntax highlighting used")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("syn")
+ call append("$", "synmaxcol\tmaximum column to look for syntax items")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("smc")
+endif
+call append("$", "highlight\twhich highlighting to use for various occasions")
+call <SID>OptionG("hl", &hl)
+call append("$", "hlsearch\thighlight all matches for the last used search pattern")
+call <SID>BinOptionG("hls", &hls)
+if has("syntax")
+ call append("$", "cursorcolumn\thighlight the screen column of the cursor")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("cuc")
+ call append("$", "cursorline\thighlight the screen line of the cursor")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("cul")
+ call append("$", "spell\thighlight spelling mistakes")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("spell")
+ call append("$", "spelllang\tlist of accepted languages")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("spl")
+ call append("$", "spellfile\tfile that \"zg\" adds good words to")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("spf")
+ call append("$", "spellcapcheck\tpattern to locate the end of a sentence")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("spc")
+ call append("$", "spellsuggest\tmethods used to suggest corrections")
+ call <SID>OptionG("sps", &sps)
+ call append("$", "mkspellmem\tamount of memory used by :mkspell before compressing")
+ call <SID>OptionG("msm", &msm)
+endif
+
+
+call <SID>Header("multiple windows")
+call append("$", "laststatus\t0, 1 or 2; when to use a status line for the last window")
+call append("$", " \tset ls=" . &ls)
+if has("statusline")
+ call append("$", "statusline\talternate format to be used for a status line")
+ call <SID>OptionG("stl", &stl)
+endif
+call append("$", "equalalways\tmake all windows the same size when adding/removing windows")
+call <SID>BinOptionG("ea", &ea)
+if has("vertsplit")
+ call append("$", "eadirection\tin which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"")
+ call <SID>OptionG("ead", &ead)
+endif
+call append("$", "winheight\tminimal number of lines used for the current window")
+call append("$", " \tset wh=" . &wh)
+call append("$", "winminheight\tminimal number of lines used for any window")
+call append("$", " \tset wmh=" . &wmh)
+call append("$", "winfixheight\tkeep the height of the window")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("wfh")
+if has("vertsplit")
+call append("$", "winfixwidth\tkeep the width of the window")
+call append("$", "\t(local to window)")
+call <SID>BinOptionL("wfw")
+ call append("$", "winwidth\tminimal number of columns used for the current window")
+ call append("$", " \tset wiw=" . &wiw)
+ call append("$", "winminwidth\tminimal number of columns used for any window")
+ call append("$", " \tset wmw=" . &wmw)
+endif
+call append("$", "helpheight\tinitial height of the help window")
+call append("$", " \tset hh=" . &hh)
+if has("quickfix")
+ call append("$", "previewheight\tdefault height for the preview window")
+ call append("$", " \tset pvh=" . &pvh)
+ call append("$", "previewwindow\tidentifies the preview window")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("pvw")
+endif
+call append("$", "hidden\tdon't unload a buffer when no longer shown in a window")
+call <SID>BinOptionG("hid", &hid)
+call append("$", "switchbuf\t\"useopen\" and/or \"split\"; which window to use when jumping")
+call append("$", "\tto a buffer")
+call <SID>OptionG("swb", &swb)
+call append("$", "splitbelow\ta new window is put below the current one")
+call <SID>BinOptionG("sb", &sb)
+if has("vertsplit")
+ call append("$", "splitright\ta new window is put right of the current one")
+ call <SID>BinOptionG("spr", &spr)
+endif
+if has("scrollbind")
+ call append("$", "scrollbind\tthis window scrolls together with other bound windows")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("scb")
+ call append("$", "scrollopt\t\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'")
+ call <SID>OptionG("sbo", &sbo)
+endif
+
+
+call <SID>Header("multiple tab pages")
+call append("$", "showtabline\t0, 1 or 2; when to use a tab pages line")
+call append("$", " \tset stal=" . &stal)
+call append("$", "tabpagemax\tmaximum number of tab pages to open for -p and \"tab all\"")
+call append("$", " \tset tpm=" . &tpm)
+call append("$", "tabline\tcustom tab pages line")
+call <SID>OptionG("tal", &tal)
+if has("gui")
+ call append("$", "guitablabel\tcustom tab page label for the GUI")
+ call <SID>OptionG("gtl", >l)
+ call append("$", "guitabtooltip\tcustom tab page tooltip for the GUI")
+ call <SID>OptionG("gtt", >t)
+endif
+
+
+call <SID>Header("terminal")
+call append("$", "term\tname of the used terminal")
+call <SID>OptionG("term", &term)
+call append("$", "ttytype\talias for 'term'")
+call <SID>OptionG("tty", &tty)
+call append("$", "ttybuiltin\tcheck built-in termcaps first")
+call <SID>BinOptionG("tbi", &tbi)
+call append("$", "ttyfast\tterminal connection is fast")
+call <SID>BinOptionG("tf", &tf)
+call append("$", "weirdinvert\tterminal that requires extra redrawing")
+call <SID>BinOptionG("wiv", &wiv)
+call append("$", "esckeys\trecognize keys that start with <Esc> in Insert mode")
+call <SID>BinOptionG("ek", &ek)
+call append("$", "scrolljump\tminimal number of lines to scroll at a time")
+call append("$", " \tset sj=" . &sj)
+call append("$", "ttyscroll\tmaximum number of lines to use scrolling instead of redrawing")
+call append("$", " \tset tsl=" . &tsl)
+if has("gui") || has("msdos") || has("win32")
+ call append("$", "guicursor\tspecifies what the cursor looks like in different modes")
+ call <SID>OptionG("gcr", &gcr)
+endif
+if has("title")
+ let &title = s:old_title
+ call append("$", "title\tshow info in the window title")
+ call <SID>BinOptionG("title", &title)
+ set notitle
+ call append("$", "titlelen\tpercentage of 'columns' used for the window title")
+ call append("$", " \tset titlelen=" . &titlelen)
+ call append("$", "titlestring\twhen not empty, string to be used for the window title")
+ call <SID>OptionG("titlestring", &titlestring)
+ call append("$", "titleold\tstring to restore the title to when exiting Vim")
+ call <SID>OptionG("titleold", &titleold)
+ let &icon = s:old_icon
+ call append("$", "icon\tset the text of the icon for this window")
+ call <SID>BinOptionG("icon", &icon)
+ set noicon
+ call append("$", "iconstring\twhen not empty, text for the icon of this window")
+ call <SID>OptionG("iconstring", &iconstring)
+endif
+if has("win32")
+ call append("$", "restorescreen\trestore the screen contents when exiting Vim")
+ call <SID>BinOptionG("rs", &rs)
+endif
+
+
+call <SID>Header("using the mouse")
+call append("$", "mouse\tlist of flags for using the mouse")
+call <SID>OptionG("mouse", &mouse)
+if has("gui")
+ call append("$", "mousefocus\tthe window with the mouse pointer becomes the current one")
+ call <SID>BinOptionG("mousef", &mousef)
+ call append("$", "mousehide\thide the mouse pointer while typing")
+ call <SID>BinOptionG("mh", &mh)
+endif
+call append("$", "mousemodel\t\"extend\", \"popup\" or \"popup_setpos\"; what the right")
+call append("$", "\tmouse button is used for")
+call <SID>OptionG("mousem", &mousem)
+call append("$", "mousetime\tmaximum time in msec to recognize a double-click")
+call append("$", " \tset mouset=" . &mouset)
+call append("$", "ttymouse\t\"xterm\", \"xterm2\", \"dec\" or \"netterm\"; type of mouse")
+call <SID>OptionG("ttym", &ttym)
+if has("mouseshape")
+ call append("$", "mouseshape\twhat the mouse pointer looks like in different modes")
+ call <SID>OptionG("mouses", &mouses)
+endif
+
+
+if has("gui")
+ call <SID>Header("GUI")
+ call append("$", "guifont\tlist of font names to be used in the GUI")
+ call <SID>OptionG("gfn", &gfn)
+ if has("xfontset")
+ call append("$", "guifontset\tpair of fonts to be used, for multibyte editing")
+ call <SID>OptionG("gfs", &gfs)
+ endif
+ call append("$", "guifontwide\tlist of font names to be used for double-wide characters")
+ call <SID>OptionG("gfw", &gfw)
+ if has("mac")
+ call append("$", "antialias\tuse smooth, antialiased fonts")
+ call <SID>BinOptionG("anti", &anti)
+ endif
+ call append("$", "guioptions\tlist of flags that specify how the GUI works")
+ call <SID>OptionG("go", &go)
+ if has("gui_gtk")
+ call append("$", "toolbar\t\"icons\", \"text\" and/or \"tooltips\"; how to show the toolbar")
+ call <SID>OptionG("tb", &tb)
+ if has("gui_gtk2")
+ call append("$", "toolbariconsize\tSize of toolbar icons")
+ call <SID>OptionG("tbis", &tbis)
+ endif
+ call append("$", "guiheadroom\troom (in pixels) left above/below the window")
+ call append("$", " \tset ghr=" . &ghr)
+ endif
+ call append("$", "guipty\tuse a pseudo-tty for I/O to external commands")
+ call <SID>BinOptionG("guipty", &guipty)
+ if has("browse")
+ call append("$", "browsedir\t\"last\", \"buffer\" or \"current\": which directory used for the file browser")
+ call <SID>OptionG("bsdir", &bsdir)
+ endif
+ if has("multi_lang")
+ call append("$", "langmenu\tlanguage to be used for the menus")
+ call <SID>OptionG("langmenu", &lm)
+ endif
+ call append("$", "menuitems\tmaximum number of items in one menu")
+ call append("$", " \tset mis=" . &mis)
+ if has("winaltkeys")
+ call append("$", "winaltkeys\t\"no\", \"yes\" or \"menu\"; how to use the ALT key")
+ call <SID>OptionG("wak", &wak)
+ endif
+ call append("$", "linespace\tnumber of pixel lines to use between characters")
+ call append("$", " \tset lsp=" . &lsp)
+ if has("balloon_eval")
+ call append("$", "balloondelay\tdelay in milliseconds before a balloon may pop up")
+ call append("$", " \tset bdlay=" . &bdlay)
+ call append("$", "ballooneval\twhether the balloon evaluation is to be used")
+ call <SID>BinOptionG("beval", &beval)
+ if has("eval")
+ call append("$", "balloonexpr\texpression to show in balloon eval")
+ call append("$", " \tset bexpr=" . &bexpr)
+ endif
+ endif
+ if exists("+macatsui")
+ call append("$", "macatsui\tuse ATSUI text drawing; disable to avoid display problems")
+ call <SID>OptionG("macatsui", &macatsui)
+ endif
+endif
+
+if has("printer")
+ call <SID>Header("printing")
+ call append("$", "printoptions\tlist of items that control the format of :hardcopy output")
+ call <SID>OptionG("popt", &popt)
+ call append("$", "printdevice\tname of the printer to be used for :hardcopy")
+ call <SID>OptionG("pdev", &pdev)
+ if has("postscript")
+ call append("$", "printexpr\texpression used to print the PostScript file for :hardcopy")
+ call <SID>OptionG("pexpr", &pexpr)
+ endif
+ call append("$", "printfont\tname of the font to be used for :hardcopy")
+ call <SID>OptionG("pfn", &pfn)
+ call append("$", "printheader\tformat of the header used for :hardcopy")
+ call <SID>OptionG("pheader", &pheader)
+ if has("postscript")
+ call append("$", "printencoding\tencoding used to print the PostScript file for :hardcopy")
+ call <SID>OptionG("penc", &penc)
+ endif
+ if has("multi_byte")
+ call append("$", "printmbcharset\tthe CJK character set to be used for CJK output from :hardcopy")
+ call <SID>OptionG("pmbcs", &pmbcs)
+ call append("$", "printmbfont\tlist of font names to be used for CJK output from :hardcopy")
+ call <SID>OptionG("pmbfn", &pmbfn)
+ endif
+endif
+
+call <SID>Header("messages and info")
+call append("$", "terse\tadd 's' flag in 'shortmess' (don't show search message)")
+call <SID>BinOptionG("terse", &terse)
+call append("$", "shortmess\tlist of flags to make messages shorter")
+call <SID>OptionG("shm", &shm)
+call append("$", "showcmd\tshow (partial) command keys in the status line")
+let &sc = s:old_sc
+call <SID>BinOptionG("sc", &sc)
+set nosc
+call append("$", "showmode\tdisplay the current mode in the status line")
+call <SID>BinOptionG("smd", &smd)
+call append("$", "ruler\tshow cursor position below each window")
+let &ru = s:old_ru
+call <SID>BinOptionG("ru", &ru)
+set noru
+if has("statusline")
+ call append("$", "rulerformat\talternate format to be used for the ruler")
+ call <SID>OptionG("ruf", &ruf)
+endif
+call append("$", "report\tthreshold for reporting number of changed lines")
+call append("$", " \tset report=" . &report)
+call append("$", "verbose\tthe higher the more messages are given")
+call append("$", " \tset vbs=" . &vbs)
+call append("$", "verbosefile\tfile to write messages in")
+call <SID>OptionG("vfile", &vfile)
+call append("$", "more\tpause listings when the screen is full")
+call <SID>BinOptionG("more", &more)
+if has("dialog_con") || has("dialog_gui")
+ call append("$", "confirm\tstart a dialog when a command fails")
+ call <SID>BinOptionG("cf", &cf)
+endif
+call append("$", "errorbells\tring the bell for error messages")
+call <SID>BinOptionG("eb", &eb)
+call append("$", "visualbell\tuse a visual bell instead of beeping")
+call <SID>BinOptionG("vb", &vb)
+if has("multi_lang")
+ call append("$", "helplang\tlist of preferred languages for finding help")
+ call <SID>OptionG("hlg", &hlg)
+endif
+
+
+call <SID>Header("selecting text")
+call append("$", "selection\t\"old\", \"inclusive\" or \"exclusive\"; how selecting text behaves")
+call <SID>OptionG("sel", &sel)
+call append("$", "selectmode\t\"mouse\", \"key\" and/or \"cmd\"; when to start Select mode")
+call append("$", "\tinstead of Visual mode")
+call <SID>OptionG("slm", &slm)
+if has("clipboard")
+ call append("$", "clipboard\t\"unnamed\" to use the * register like unnamed register")
+ call append("$", "\t\"autoselect\" to always put selected text on the clipboard")
+ call <SID>OptionG("cb", &cb)
+endif
+call append("$", "keymodel\t\"startsel\" and/or \"stopsel\"; what special keys can do")
+call <SID>OptionG("km", &km)
+
+
+call <SID>Header("editing text")
+call append("$", "undolevels\tmaximum number of changes that can be undone")
+call append("$", " \tset ul=" . &ul)
+call append("$", "modified\tchanges have been made and not written to a file")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("mod")
+call append("$", "readonly\tbuffer is not to be written")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ro")
+call append("$", "modifiable\tchanges to the text are not possible")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ma")
+call append("$", "textwidth\tline length above which to break a line")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("tw")
+call append("$", "wrapmargin\tmargin from the right in which to break a line")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("wm")
+call append("$", "backspace\tspecifies what <BS>, CTRL-W, etc. can do in Insert mode")
+call append("$", " \tset bs=" . &bs)
+call append("$", "comments\tdefinition of what comment lines look like")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("com")
+call append("$", "formatoptions\tlist of flags that tell how automatic formatting works")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("fo")
+call append("$", "formatlistpat\tpattern to recognize a numbered list")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("flp")
+if has("eval")
+ call append("$", "formatexpr\texpression used for \"gq\" to format lines")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("fex")
+endif
+if has("insert_expand")
+ call append("$", "complete\tspecifies how Insert mode completion works for CTRL-N and CTRL-P")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cpt")
+ call append("$", "completeopt\twhether to use a popup menu for Insert mode completion")
+ call <SID>OptionG("cot", &cot)
+ call append("$", "pumheight\tmaximum height of the popup menu")
+ call <SID>OptionG("ph", &ph)
+ call append("$", "completefunc\tuser defined function for Insert mode completion")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cfu")
+ call append("$", "omnifunc\tfunction for filetype-specific Insert mode completion")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("ofu")
+ call append("$", "dictionary\tlist of dictionary files for keyword completion")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("dict", &dict)
+ call append("$", "thesaurus\tlist of thesaurus files for keyword completion")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("tsr", &tsr)
+endif
+call append("$", "infercase\tadjust case of a keyword completion match")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("inf")
+if has("digraphs")
+ call append("$", "digraph\tenable entering digraps with c1 <BS> c2")
+ call <SID>BinOptionG("dg", &dg)
+endif
+call append("$", "tildeop\tthe \"~\" command behaves like an operator")
+call <SID>BinOptionG("top", &top)
+call append("$", "operatorfunc\tfunction called for the\"g@\" operator")
+call <SID>OptionG("opfunc", &opfunc)
+call append("$", "showmatch\tWhen inserting a bracket, briefly jump to its match")
+call <SID>BinOptionG("sm", &sm)
+call append("$", "matchtime\ttenth of a second to show a match for 'showmatch'")
+call append("$", " \tset mat=" . &mat)
+call append("$", "matchpairs\tlist of pairs that match for the \"%\" command")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("mps")
+call append("$", "joinspaces\tuse two spaces after '.' when joining a line")
+call <SID>BinOptionG("js", &js)
+call append("$", "nrformats\t\"alpha\", \"octal\" and/or \"hex\"; number formats recognized for")
+call append("$", "\tCTRL-A and CTRL-X commands")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("nf")
+
+
+call <SID>Header("tabs and indenting")
+call append("$", "tabstop\tnumber of spaces a <Tab> in the text stands for")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ts")
+call append("$", "shiftwidth\tnumber of spaces used for each step of (auto)indent")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("sw")
+call append("$", "smarttab\ta <Tab> in an indent inserts 'shiftwidth' spaces")
+call <SID>BinOptionG("sta", &sta)
+call append("$", "softtabstop\tif non-zero, number of spaces to insert for a <Tab>")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("sts")
+call append("$", "shiftround\tround to 'shiftwidth' for \"<<\" and \">>\"")
+call <SID>BinOptionG("sr", &sr)
+call append("$", "expandtab\texpand <Tab> to spaces in Insert mode")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("et")
+call append("$", "autoindent\tautomatically set the indent of a new line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ai")
+if has("smartindent")
+ call append("$", "smartindent\tdo clever autoindenting")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("si")
+endif
+if has("cindent")
+ call append("$", "cindent\tenable specific indenting for C code")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("cin")
+ call append("$", "cinoptions\toptions for C-indenting")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cino")
+ call append("$", "cinkeys\tkeys that trigger C-indenting in Insert mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cink")
+ call append("$", "cinwords\tlist of words that cause more C-indent")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("cinw")
+ call append("$", "indentexpr\texpression used to obtain the indent of a line")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("inde")
+ call append("$", "indentkeys\tkeys that trigger indenting with 'indentexpr' in Insert mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("indk")
+endif
+call append("$", "copyindent\tCopy whitespace for indenting from previous line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ci")
+call append("$", "preserveindent\tPreserve kind of whitespace when changing indent")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("pi")
+if has("lispindent")
+ call append("$", "lisp\tenable lisp mode")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("lisp")
+ call append("$", "lispwords\twords that change how lisp indenting works")
+ call <SID>OptionG("lw", &lw)
+endif
+
+
+if has("folding")
+ call <SID>Header("folding")
+ call append("$", "foldenable\tset to display all folds open")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("fen")
+ call append("$", "foldlevel\tfolds with a level higher than this number will be closed")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdl")
+ call append("$", "foldlevelstart\tvalue for 'foldlevel' when starting to edit a file")
+ call append("$", " \tset fdls=" . &fdls)
+ call append("$", "foldcolumn\twidth of the column used to indicate folds")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdc")
+ call append("$", "foldtext\texpression used to display the text of a closed fold")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdt")
+ call append("$", "foldclose\tset to \"all\" to close a fold when the cursor leaves it")
+ call <SID>OptionG("fcl", &fcl)
+ call append("$", "foldopen\tspecifies for which commands a fold will be opened")
+ call <SID>OptionG("fdo", &fdo)
+ call append("$", "foldminlines\tminimum number of screen lines for a fold to be closed")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fml")
+ call append("$", "commentstring\ttemplate for comments; used to put the marker in")
+ call <SID>OptionL("cms")
+ call append("$", "foldmethod\tfolding type: \"manual\", \"indent\", \"expr\", \"marker\" or \"syntax\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdm")
+ call append("$", "foldexpr\texpression used when 'foldmethod' is \"expr\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fde")
+ call append("$", "foldignore\tused to ignore lines when 'foldmethod' is \"indent\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdi")
+ call append("$", "foldmarker\tmarkers used when 'foldmethod' is \"marker\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fmr")
+ call append("$", "foldnestmax\tmaximum fold depth for when 'foldmethod is \"indent\" or \"syntax\"")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("fdn")
+endif
+
+
+if has("diff")
+ call <SID>Header("diff mode")
+ call append("$", "diff\tuse diff mode for the current window")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("diff")
+ call append("$", "diffopt\toptions for using diff mode")
+ call <SID>OptionG("dip", &dip)
+ call append("$", "diffexpr\texpression used to obtain a diff file")
+ call <SID>OptionG("dex", &dex)
+ call append("$", "patchexpr\texpression used to patch a file")
+ call <SID>OptionG("pex", &pex)
+endif
+
+
+call <SID>Header("mapping")
+call append("$", "maxmapdepth\tmaximum depth of mapping")
+call append("$", " \tset mmd=" . &mmd)
+call append("$", "remap\trecognize mappings in mapped keys")
+call <SID>BinOptionG("remap", &remap)
+call append("$", "timeout\tallow timing out halfway into a mapping")
+call <SID>BinOptionG("to", &to)
+call append("$", "ttimeout\tallow timing out halfway into a key code")
+call <SID>BinOptionG("ttimeout", &ttimeout)
+call append("$", "timeoutlen\ttime in msec for 'timeout'")
+call append("$", " \tset tm=" . &tm)
+call append("$", "ttimeoutlen\ttime in msec for 'ttimeout'")
+call append("$", " \tset ttm=" . &ttm)
+
+
+call <SID>Header("reading and writing files")
+call append("$", "modeline\tenable using settings from modelines when reading a file")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("ml")
+call append("$", "modelines\tnumber of lines to check for modelines")
+call append("$", " \tset mls=" . &mls)
+call append("$", "binary\tbinary file editing")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("bin")
+call append("$", "endofline\tlast line in the file has an end-of-line")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("eol")
+if has("multi_byte")
+ call append("$", "bomb\tPrepend a Byte Order Mark to the file")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("bomb")
+endif
+call append("$", "fileformat\tend-of-line format: \"dos\", \"unix\" or \"mac\"")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("ff")
+call append("$", "fileformats\tlist of file formats to look for when editing a file")
+call <SID>OptionG("ffs", &ffs)
+call append("$", "textmode\tobsolete, use 'fileformat'")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("tx")
+call append("$", "textauto\tobsolete, use 'fileformats'")
+call <SID>BinOptionG("ta", &ta)
+call append("$", "write\twriting files is allowed")
+call <SID>BinOptionG("write", &write)
+call append("$", "writebackup\twrite a backup file before overwriting a file")
+call <SID>BinOptionG("wb", &wb)
+call append("$", "backup\tkeep a backup after overwriting a file")
+call <SID>BinOptionG("bk", &bk)
+call append("$", "backupskip\tpatterns that specify for which files a backup is not made")
+call append("$", " \tset bsk=" . &bsk)
+call append("$", "backupcopy\twhether to make the backup as a copy or rename the existing file")
+call append("$", " \tset bkc=" . &bkc)
+call append("$", "backupdir\tlist of directories to put backup files in")
+call <SID>OptionG("bdir", &bdir)
+call append("$", "backupext\tfile name extension for the backup file")
+call <SID>OptionG("bex", &bex)
+call append("$", "autowrite\tautomatically write a file when leaving a modified buffer")
+call <SID>BinOptionG("aw", &aw)
+call append("$", "autowriteall\tas 'autowrite', but works with more commands")
+call <SID>BinOptionG("awa", &awa)
+call append("$", "writeany\talways write without asking for confirmation")
+call <SID>BinOptionG("wa", &wa)
+call append("$", "autoread\tautomatically read a file when it was modified outside of Vim")
+call append("$", "\t(global or local to buffer)")
+call <SID>BinOptionG("ar", &ar)
+call append("$", "patchmode\tkeep oldest version of a file; specifies file name extension")
+call <SID>OptionG("pm", &pm)
+call append("$", "fsync\tforcibly sync the file to disk after writing it")
+call <SID>BinOptionG("fs", &fs)
+if !has("msdos")
+ call append("$", "shortname\tuse 8.3 file names")
+ call append("$", "\t(local to buffer)")
+ call <SID>BinOptionL("sn")
+endif
+
+
+call <SID>Header("the swap file")
+call append("$", "directory\tlist of directories for the swap file")
+call <SID>OptionG("dir", &dir)
+call append("$", "swapfile\tuse a swap file for this buffer")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("swf")
+call append("$", "swapsync\t\"sync\", \"fsync\" or empty; how to flush a swap file to disk")
+call <SID>OptionG("sws", &sws)
+call append("$", "updatecount\tnumber of characters typed to cause a swap file update")
+call append("$", " \tset uc=" . &uc)
+call append("$", "updatetime\ttime in msec after which the swap file will be updated")
+call append("$", " \tset ut=" . &ut)
+call append("$", "maxmem\tmaximum amount of memory in Kbyte used for one buffer")
+call append("$", " \tset mm=" . &mm)
+call append("$", "maxmemtot\tmaximum amount of memory in Kbyte used for all buffers")
+call append("$", " \tset mmt=" . &mmt)
+
+
+call <SID>Header("command line editing")
+call append("$", "history\thow many command lines are remembered ")
+call append("$", " \tset hi=" . &hi)
+call append("$", "wildchar\tkey that triggers command-line expansion")
+call append("$", " \tset wc=" . &wc)
+call append("$", "wildcharm\tlike 'wildchar' but can also be used in a mapping")
+call append("$", " \tset wcm=" . &wcm)
+call append("$", "wildmode\tspecifies how command line completion works")
+call <SID>OptionG("wim", &wim)
+if has("wildoptions")
+ call append("$", "wildoptions\tempty or \"tagfile\" to list file name of matching tags")
+ call <SID>OptionG("wop", &wop)
+endif
+call append("$", "suffixes\tlist of file name extensions that have a lower priority")
+call <SID>OptionG("su", &su)
+if has("file_in_path")
+ call append("$", "suffixesadd\tlist of file name extensions added when searching for a file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("sua")
+endif
+if has("wildignore")
+ call append("$", "wildignore\tlist of patterns to ignore files for file name completion")
+ call <SID>OptionG("wig", &wig)
+endif
+if has("wildmenu")
+ call append("$", "wildmenu\tcommand-line completion shows a list of matches")
+ call <SID>BinOptionG("wmnu", &wmnu)
+endif
+if has("vertsplit")
+ call append("$", "cedit\tkey used to open the command-line window")
+ call <SID>OptionG("cedit", &cedit)
+ call append("$", "cmdwinheight\theight of the command-line window")
+ call <SID>OptionG("cwh", &cwh)
+endif
+
+
+call <SID>Header("executing external commands")
+call append("$", "shell\tname of the shell program used for external commands")
+call <SID>OptionG("sh", &sh)
+if has("amiga")
+ call append("$", "shelltype\twhen to use the shell or directly execute a command")
+ call append("$", " \tset st=" . &st)
+endif
+call append("$", "shellquote\tcharacter(s) to enclose a shell command in")
+call <SID>OptionG("shq", &shq)
+call append("$", "shellxquote\tlike 'shellquote' but include the redirection")
+call <SID>OptionG("sxq", &sxq)
+call append("$", "shellcmdflag\targument for 'shell' to execute a command")
+call <SID>OptionG("shcf", &shcf)
+call append("$", "shellredir\tused to redirect command output to a file")
+call <SID>OptionG("srr", &srr)
+call append("$", "shelltemp\tuse a temp file for shell commands instead of using a pipe")
+call <SID>BinOptionG("stmp", &stmp)
+call append("$", "equalprg\tprogram used for \"=\" command")
+call append("$", "\t(global or local to buffer)")
+call <SID>OptionG("ep", &ep)
+call append("$", "formatprg\tprogram used to format lines with \"gq\" command")
+call <SID>OptionG("fp", &fp)
+call append("$", "keywordprg\tprogram used for the \"K\" command")
+call <SID>OptionG("kp", &kp)
+call append("$", "warn\twarn when using a shell command and a buffer has changes")
+call <SID>BinOptionG("warn", &warn)
+
+
+if has("quickfix")
+ call <SID>Header("running make and jumping to errors")
+ call append("$", "errorfile\tname of the file that contains error messages")
+ call <SID>OptionG("ef", &ef)
+ call append("$", "errorformat\tlist of formats for error messages")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("efm", &efm)
+ call append("$", "makeprg\tprogram used for the \":make\" command")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("mp", &mp)
+ call append("$", "shellpipe\tstring used to put the output of \":make\" in the error file")
+ call <SID>OptionG("sp", &sp)
+ call append("$", "makeef\tname of the errorfile for the 'makeprg' command")
+ call <SID>OptionG("mef", &mef)
+ call append("$", "grepprg\tprogram used for the \":grep\" command")
+ call append("$", "\t(global or local to buffer)")
+ call <SID>OptionG("gp", &gp)
+ call append("$", "grepformat\tlist of formats for output of 'grepprg'")
+ call <SID>OptionG("gfm", &gfm)
+endif
+
+
+if has("msdos") || has("os2") || has("win16") || has("win32") || has("osfiletype")
+ call <SID>Header("system specific")
+ if has("msdos")
+ call append("$", "bioskey\tcall the BIOS to get a keyoard character")
+ call <SID>BinOptionG("biosk", &biosk)
+ call append("$", "conskey\tuse direct console I/O to get a keyboard character")
+ call <SID>BinOptionG("consk", &consk)
+ endif
+ if has("osfiletype")
+ call append("$", "osfiletype\tOS-specific information about the type of file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("oft")
+ endif
+ if has("msdos") || has("os2") || has("win16") || has("win32")
+ call append("$", "shellslash\tuse forward slashes in file names; for Unix-like shells")
+ call <SID>BinOptionG("ssl", &ssl)
+ endif
+endif
+
+
+call <SID>Header("language specific")
+call append("$", "isfname\tspecifies the characters in a file name")
+call <SID>OptionG("isf", &isf)
+call append("$", "isident\tspecifies the characters in an identifier")
+call <SID>OptionG("isi", &isi)
+call append("$", "iskeyword\tspecifies the characters in a keyword")
+call append("$", "\t(local to buffer)")
+call <SID>OptionL("isk")
+call append("$", "isprint\tspecifies printable characters")
+call <SID>OptionG("isp", &isp)
+if has("textobjects")
+ call append("$", "quoteescape\tspecifies escape characters in a string")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("qe")
+endif
+if has("rightleft")
+ call append("$", "rightleft\tdisplay the buffer right-to-left")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("rl")
+ call append("$", "rightleftcmd\tWhen to edit the command-line right-to-left")
+ call append("$", "\t(local to window)")
+ call <SID>OptionL("rlc")
+ call append("$", "revins\tInsert characters backwards")
+ call <SID>BinOptionG("ri", &ri)
+ call append("$", "allowrevins\tAllow CTRL-_ in Insert and Command-line mode to toggle 'revins'")
+ call <SID>BinOptionG("ari", &ari)
+ call append("$", "aleph\tthe ASCII code for the first letter of the Hebrew alphabet")
+ call append("$", " \tset al=" . &al)
+ call append("$", "hkmap\tuse Hebrew keyboard mapping")
+ call <SID>BinOptionG("hk", &hk)
+ call append("$", "hkmapp\tuse phonetic Hebrew keyboard mapping")
+ call <SID>BinOptionG("hkp", &hkp)
+endif
+if has("farsi")
+ call append("$", "altkeymap\tuse Farsi as the second language when 'revins' is set")
+ call <SID>BinOptionG("akm", &akm)
+ call append("$", "fkmap\tuse Farsi keyboard mapping")
+ call <SID>BinOptionG("fk", &fk)
+endif
+if has("arabic")
+ call append("$", "arabic\tPrepare for editing Arabic text")
+ call append("$", "\t(local to window)")
+ call <SID>BinOptionL("arab")
+ call append("$", "arabicshape\tPerform shaping of Arabic characters")
+ call <SID>BinOptionG("arshape", &arshape)
+ call append("$", "termbidi\tTerminal will perform bidi handling")
+ call <SID>BinOptionG("tbidi", &tbidi)
+endif
+if has("keymap")
+ call append("$", "keymap\tname of a keyboard mappping")
+ call <SID>OptionL("kmp")
+endif
+if has("langmap")
+ call append("$", "langmap\ttranslate characters for Normal mode")
+ call <SID>OptionG("lmap", &lmap)
+endif
+if has("xim")
+ call append("$", "imdisable\twhen set never use IM; overrules following IM options")
+ call <SID>BinOptionG("imd", &imd)
+endif
+call append("$", "iminsert\tin Insert mode: 1: use :lmap; 2: use IM; 0: neither")
+call append("$", "\t(local to window)")
+call <SID>OptionL("imi")
+call append("$", "imsearch\tentering a search pattern: 1: use :lmap; 2: use IM; 0: neither")
+call append("$", "\t(local to window)")
+call <SID>OptionL("ims")
+if has("xim")
+ call append("$", "imcmdline\twhen set always use IM when starting to edit a command line")
+ call <SID>BinOptionG("imc", &imc)
+endif
+
+
+if has("multi_byte")
+ call <SID>Header("multi-byte characters")
+ call append("$", "encoding\tcharacter encoding used in Vim: \"latin1\", \"utf-8\"")
+ call append("$", "\t\"euc-jp\", \"big5\", etc.")
+ call <SID>OptionG("enc", &enc)
+ call append("$", "fileencoding\tcharacter encoding for the current file")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("fenc")
+ call append("$", "fileencodings\tautomatically detected character encodings")
+ call <SID>OptionG("fencs", &fencs)
+ call append("$", "termencoding\tcharacter encoding used by the terminal")
+ call <SID>OptionG("tenc", &tenc)
+ call append("$", "charconvert\texpression used for character encoding conversion")
+ call <SID>OptionG("ccv", &ccv)
+ call append("$", "delcombine\tDelete combining (composing) characters on their own")
+ call <SID>BinOptionG("deco", &deco)
+ call append("$", "maxcombine\tMaximum number of combining (composing) characters displayed")
+ call <SID>OptionG("mco", &mco)
+ if has("xim") && has("gui_gtk")
+ call append("$", "imactivatekey\tkey that activates the X input method")
+ call <SID>OptionG("imak", &imak)
+ endif
+ call append("$", "ambiwidth\tWidth of ambiguous width characters")
+ call <SID>OptionG("ambw", &ambw)
+endif
+
+
+call <SID>Header("various")
+if has("virtualedit")
+ call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"")
+ call <SID>OptionG("ve", &ve)
+endif
+if has("autocmd")
+ call append("$", "eventignore\tlist of autocommand events which are to be ignored")
+ call <SID>OptionG("ei", &ei)
+endif
+call append("$", "loadplugins\tload plugin scripts when starting up")
+call <SID>BinOptionG("lpl", &lpl)
+call append("$", "exrc\tenable reading .vimrc/.exrc/.gvimrc in the current directory")
+call <SID>BinOptionG("ex", &ex)
+call append("$", "secure\tsafer working with script files in the current directory")
+call <SID>BinOptionG("secure", &secure)
+call append("$", "gdefault\tuse the 'g' flag for \":substitute\"")
+call <SID>BinOptionG("gd", &gd)
+call append("$", "edcompatible\t'g' and 'c' flags of \":substitute\" toggle")
+call <SID>BinOptionG("ed", &ed)
+if exists("+opendevice")
+ call append("$", "opendevice\tallow reading/writing devices")
+ call <SID>BinOptionG("odev", &odev)
+endif
+if exists("+maxfuncdepth")
+ call append("$", "maxfuncdepth\tmaximum depth of function calls")
+ call append("$", " \tset mfd=" . &mfd)
+endif
+if has("mksession")
+ call append("$", "sessionoptions\tlist of words that specifies what to put in a session file")
+ call <SID>OptionG("ssop", &ssop)
+ call append("$", "viewoptions\tlist of words that specifies what to save for :mkview")
+ call <SID>OptionG("vop", &vop)
+ call append("$", "viewdir\tdirectory where to store files with :mkview")
+ call <SID>OptionG("vdir", &vdir)
+endif
+if has("viminfo")
+ call append("$", "viminfo\tlist that specifies what to write in the viminfo file")
+ call <SID>OptionG("vi", &vi)
+endif
+if has("quickfix")
+ call append("$", "bufhidden\twhat happens with a buffer when it's no longer in a window")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("bh")
+ call append("$", "buftype\t\"\", \"nofile\", \"nowrite\" or \"quickfix\": type of buffer")
+ call append("$", "\t(local to buffer)")
+ call <SID>OptionL("bt")
+endif
+call append("$", "buflisted\twhether the buffer shows up in the buffer list")
+call append("$", "\t(local to buffer)")
+call <SID>BinOptionL("bl")
+call append("$", "debug\tset to \"msg\" to see all error messages")
+call append("$", " \tset debug=" . &debug)
+if has("mzscheme")
+ call append("$", "mzquantum\tinterval in milliseconds between polls for MzScheme threads")
+ call append("$", " \tset mzq=" . &mzq)
+endif
+
+set cpo&vim
+
+" go to first line
+1
+
+" reset 'modified', so that ":q" can be used to close the window
+setlocal nomodified
+
+if has("syntax")
+ " Use Vim highlighting, with some additional stuff
+ setlocal ft=vim
+ syn match optwinHeader "^ \=[0-9].*"
+ syn match optwinName "^[a-z]*\t" nextgroup=optwinComment
+ syn match optwinComment ".*" contained
+ syn match optwinComment "^\t.*"
+ if !exists("did_optwin_syntax_inits")
+ let did_optwin_syntax_inits = 1
+ hi link optwinHeader Title
+ hi link optwinName Identifier
+ hi link optwinComment Comment
+ endif
+endif
+
+" Install autocommands to enable mappings in option-window
+noremap <silent> <buffer> <CR> <C-\><C-N>:call <SID>CR()<CR>
+inoremap <silent> <buffer> <CR> <Esc>:call <SID>CR()<CR>
+noremap <silent> <buffer> <Space> :call <SID>Space()<CR>
+
+" Make the buffer be deleted when the window is closed.
+setlocal buftype=nofile bufhidden=delete noswapfile
+
+augroup optwin
+ au! BufUnload,BufHidden option-window nested
+ \ call <SID>unload() | delfun <SID>unload
+augroup END
+
+fun! <SID>unload()
+ delfun <SID>CR
+ delfun <SID>Space
+ delfun <SID>Find
+ delfun <SID>Update
+ delfun <SID>OptionL
+ delfun <SID>OptionG
+ delfun <SID>BinOptionL
+ delfun <SID>BinOptionG
+ delfun <SID>Header
+ au! optwin
+endfun
+
+" Restore the previous value of 'title' and 'icon'.
+let &title = s:old_title
+let &icon = s:old_icon
+let &ru = s:old_ru
+let &sc = s:old_sc
+let &cpo = s:cpo_save
+unlet s:old_title s:old_icon s:old_ru s:old_sc s:cpo_save s:idx s:lnum
diff --git a/runtime/tutor/runtime/tools.info b/runtime/tutor/runtime/tools.info
new file mode 100755
index 0000000..4d173b0
--- /dev/null
+++ b/runtime/tutor/runtime/tools.info
Binary files differ
diff --git a/runtime/tutor/runtime/vim32x32.xpm b/runtime/tutor/runtime/vim32x32.xpm
new file mode 100644
index 0000000..43a3a40
--- /dev/null
+++ b/runtime/tutor/runtime/vim32x32.xpm
@@ -0,0 +1,43 @@
+/* XPM */
+static char * vim32x32[] = {
+"32 32 8 1",
+" c None",
+". c #000000",
+"+ c #000080",
+"@ c #008000",
+"# c #00FF00",
+"$ c #808080",
+"% c #C0C0C0",
+"& c #FFFFFF",
+" .. ",
+" .##. ",
+" ...........#@@#. ......... ",
+" .&&&&&&&&&&&.@@@#.&&&&&&&&&. ",
+" .&%%%%%%%%%%%.@@@.&%%%%%%%%%. ",
+" .%%%%%%%%%%$.@@@@.%%%%%%%%$. ",
+" .$%%%%%%$$.@@@@@@.$%%%%%$$. ",
+" .&%%%%%%$.@@@@@@.&%%%%%$$. ",
+" .&%%%%%%$.@@@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@@.&&%%%%$$. ",
+" .&%%%%%%$.@@.&&%%%%$$.#. ",
+" ..&%%%%%%$.@.&&%%%%$$.@@#. ",
+" .#.&%%%%%%$..&&%%%%$$.@@@@#. ",
+" .#@.&%%%%%%$.&&%%%%$$.@@@@@@#. ",
+".#@@.&%%%%%%$&&%%%%$$.@@@@@@@@#.",
+".+@@.&%%%%%%$&%%%%$$.@@@@@@@@@+.",
+" .+@.&%%%%%%$%%%%$$.@@@@@@@@@+. ",
+" .+.&%%%%%%%%%%...@@@@@@@@@+. ",
+" ..&%%%%%%%%%.%%.@@@@@@@@+. ",
+" .&%%%%%%%%%.%%.@@@@@@@+. ",
+" .&%%%%%%%%$...@...@...... ",
+" .&%%%%%%%$.%%%.%%%.%%%.%%. ",
+" .&%%%%%%$$..%%..%%%%%%%%%%. ",
+" .&%%%%%$$..%%...%%++%%..%. ",
+" .&%%%%$$.@.%%..%%+.%%..%%. ",
+" .&%%%$$.@@.%%..%%..%%..%%. ",
+" .&%%$$..+.%%..%%..%%..%%. ",
+" .%$$. ..%%%.%%..%%..%%%. ",
+" ... ....+.. .. ... ",
+" .++. ",
+" .. "};
diff --git a/runtime/tutor/runtime/vim48x48.xpm b/runtime/tutor/runtime/vim48x48.xpm
new file mode 100644
index 0000000..b2fdd95
--- /dev/null
+++ b/runtime/tutor/runtime/vim48x48.xpm
@@ -0,0 +1,59 @@
+/* XPM */
+static char * vim48x48[] = {
+"48 48 8 1",
+" c None",
+". c #000000",
+"+ c #000084",
+"@ c #008200",
+"# c #00FF00",
+"$ c #848284",
+"& c #C6C3C6",
+"* c #FFFFFF",
+" .. ",
+" .##. ",
+" .#@@#. ",
+" ...............#@@@@#. ............... ",
+" .***************.@@@@@#. .***************. ",
+" .**&&&&&&&&&&&&&&$.@@@@@#.**&&&&&&&&&&&&&&$.",
+" .*&&&&&&&&&&&&&&&$.@@@@@@.*&&&&&&&&&&&&&&&$.",
+" .*$&&&&&&&&&&&&&&$.@@@@@@.*$&&&&&&&&&&&&&&$.",
+" .$$$&&&&&&&&&$$$.@@@@@@@@.$$$&&&&&&&&&&&$$.",
+" ..*&&&&&&&&&$$.@@@@@@@@@@..*&&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@@.**&&&&&&&&&$$. ",
+" .*&&&&&&&&&$$.@@@@.**&&&&&&&&&$$.. ",
+" ..*&&&&&&&&&$$.@@@.**&&&&&&&&&$$.@#. ",
+" .#.*&&&&&&&&&$$.@@.**&&&&&&&&&$$.@@@#. ",
+" .#@.*&&&&&&&&&$$.@.**&&&&&&&&&$$.@@@@@#. ",
+" .#@@.*&&&&&&&&&$$..**&&&&&&&&&$$.@@@@@@@#. ",
+" .#@@@.*&&&&&&&&&$$.**&&&&&&&&&$$.@@@@@@@@@#. ",
+" .#@@@@.*&&&&&&&&&$$**&&&&&&&&&$$.@@@@@@@@@@@#. ",
+".#+@@@@.*&&&&&&&&&$$*&&&&&&&&&$$.@@@@@@@@@@@@@#.",
+" .++@@@.*&&&&&&&&&$*&&&&&&&&&$$.@@@@@@@@@@@@@++.",
+" .++@@.*&&&&&&&&&$&&&&&&&&&$$.@@@@@@@@@@@@@++. ",
+" .++@.*&&&&&&&&&&&&&&&&&&$$.@@@@@@@@@@@@@++. ",
+" .++.*&&&&&&&&&&&&&&&&....@@@@@@@@@@@@@++. ",
+" .+.*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@@+++ ",
+" ..*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&&&.&&&.@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&&$$...@@@@@@@@@@++. ",
+" .*&&&&&&&&&&&&&$$...@@....@@....+.... ",
+" .*&&&&&&&&&&&&$$..&&..&&&&..&&&&..&&&. ",
+" .*&&&&&&&&&&&$$..&&&.@.&&&&&&&&&&&&&&&. ",
+" .*&&&&&&&&&&$$.@.&&&.@.&&&&&&&&&&&&&&&. ",
+" .*&&&&&&&&&$$.@@.&&.@@.&&....&&....&&. ",
+" .*&&&&&&&&$$.@@.&&&.@.&&&.+.&&&. .&&&. ",
+" .*&&&&&&&$$.@@@.&&.@@.&&.++.&&. .&&. ",
+" .*&&&&&&$$.@@@.&&&.@.&&&.+.&&&. .&&&. ",
+" .*&&&&&$$.++@@.&&.@@.&&.. .&&. .&&. ",
+" .*&&&&$$. .++.&&&.@.&&&. .&&&. .&&&. ",
+" .$$$$$. .+.&&&&..&&&&..&&&&..&&&&. ",
+" ..... .+....@+.... .... .... ",
+" .++@@++. ",
+" .++++. ",
+" .++. ",
+" .. "};
diff --git a/runtime/tutor/runtime/vimlogo.eps b/runtime/tutor/runtime/vimlogo.eps
new file mode 100644
index 0000000..5bf45ff
--- /dev/null
+++ b/runtime/tutor/runtime/vimlogo.eps
@@ -0,0 +1,791 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 147 74 429 356
+%%LanguageLevel: 1
+%%Creator: CorelDRAW 11
+%%Title: vimlogo.eps
+%%CreationDate: Mon Feb 02 14:35:16 2004
+%%DocumentProcessColors: Cyan Yellow Black
+%%DocumentSuppliedResources: (atend)
+%%EndComments
+%%BeginProlog
+/AutoFlatness false def
+/AutoSteps 0 def
+/CMYKMarks true def
+/UseLevel 1 def
+%Build: CorelDRAW 11 Version 11.633
+%Color profile: Generic offset separations profile
+/CorelIsEPS true def
+%%BeginResource: procset wCorel11Dict 11.0 0
+/wCorel11Dict 300 dict def wCorel11Dict begin
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/bd{bind def}bind def/ld{load def}bd/xd{exch def}bd/_ null def/rp{{pop}repeat}
+bd/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld/@np/newpath ld/Tl/translate ld
+/$sv 0 def/@sv{/$sv save def}bd/@rs{$sv restore}bd/spg/showpage ld/showpage{}
+bd currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd/$dsf xd/$sdf false def/$SDF
+false def/$Scra 0 def/SetScr/setscreen ld/@ss{2 index 0 eq{$dsf 3 1 roll 4 -1
+roll pop}if exch $Scra add exch load SetScr}bd/SepMode_5 where{pop}{/SepMode_5
+0 def}ifelse/CorelIsSeps where{pop}{/CorelIsSeps false def}ifelse
+/CorelIsInRIPSeps where{pop}{/CorelIsInRIPSeps false def}ifelse/CorelIsEPS
+where{pop}{/CorelIsEPS false def}ifelse/CurrentInkName_5 where{pop}
+{/CurrentInkName_5(Composite)def}ifelse/$ink_5 where{pop}{/$ink_5 -1 def}
+ifelse/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def/$n _ def/$o 0 def/$fil 0
+def/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def/$N _ def/$O 0 def/$PF false
+def/s1c 0 def/s1m 0 def/s1y 0 def/s1k 0 def/s1t 0 def/s1n _ def/$bkg false def
+/SK 0 def/SM 0 def/SY 0 def/SC 0 def/$op false def matrix currentmatrix/$ctm xd
+/$ptm matrix def/$ttm matrix def/$stm matrix def/$ffpnt true def
+/CorelDrawReencodeVect[16#0/grave 16#5/breve 16#6/dotaccent 16#8/ring
+16#A/hungarumlaut 16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle
+16#60/grave 16#7C/bar
+16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl
+16#88/circumflex/perthousand/Scaron/guilsinglleft/OE
+16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash
+16#98/tilde/trademark/scaron/guilsinglright/oe 16#9F/Ydieresis
+16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section
+16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron
+16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def
+/L2?/languagelevel where{pop languagelevel 2 ge}{false}ifelse def/Comp?{
+/LumSepsDict where{pop false}{/AldusSepsDict where{pop false}{1 0 0 0 @gs
+setcmykcolor currentcmykcolor @gr add add add 0 ne 0 1 0 0 @gs setcmykcolor
+currentcmykcolor @gr add add add 0 ne 0 0 1 0 @gs setcmykcolor currentcmykcolor
+@gr add add add 0 ne 0 0 0 1 @gs setcmykcolor currentcmykcolor @gr add add add
+0 ne and and and}ifelse}ifelse}bd/@PL{/LV where{pop LV 2 ge L2? not and{@np
+/Courier findfont 12 scalefont setfont 72 144 m
+(The PostScript level set in the Corel application is higher than)show 72 132 m
+(the PostScript level of this device. Change the PS Level in the Corel)show 72
+120 m(application to Level 1 by selecting the PostScript tab in the print)show
+72 108 m(dialog, and selecting Level 1 from the Compatibility drop down list.)
+show flush spg quit}if}if}bd/@BeginSysCorelDict{systemdict/Corel30Dict known
+{systemdict/Corel30Dict get exec}if systemdict/CorelLexDict known{1 systemdict
+/CorelLexDict get exec}if}bd/@EndSysCorelDict{systemdict/Corel30Dict known
+{end}if/EndCorelLexDict where{pop EndCorelLexDict}if}bd AutoFlatness{/@ifl{dup
+currentflat exch sub 10 gt{
+([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n)print flush
+@np exit}{currentflat 2 add setflat}ifelse}bd/@fill/fill ld/fill{currentflat{
+{@fill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@eofill/eofill ld/eofill
+{currentflat{{@eofill}stopped{@ifl}{exit}ifelse}bind loop setflat}bd/@clip
+/clip ld/clip{currentflat{{@clip}stopped{@ifl}{exit}ifelse}bind loop setflat}
+bd/@eoclip/eoclip ld/eoclip{currentflat{{@eoclip}stopped{@ifl}{exit}ifelse}
+bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke}stopped
+{@ifl}{exit}ifelse}bind loop setflat}bd}if L2?{/@ssa{true setstrokeadjust}bd}{
+/@ssa{}bd}ifelse/d/setdash ld/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit
+ld/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd/W/eoclip ld/c/curveto ld/C/c ld/l
+/lineto ld/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld/N/newpath ld/P{11 rp}
+bd/u{}bd/U{}bd/A{pop}bd/q/@gs ld/Q/@gr ld/&{}bd/@j{@sv @np}bd/@J{@rs}bd/g{1
+exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def}bd/G{1
+sub neg/$K xd _ 1 0 0 0/$C xd/$M xd/$Y xd/$T xd/$N xd}bd/k{1 index type
+/stringtype eq{/$t xd/$n xd}{/$t 0 def/$n _ def}ifelse/$k xd/$y xd/$m xd/$c xd
+/$fil 0 def}bd/K{1 index type/stringtype eq{/$T xd/$N xd}{/$T 0 def/$N _ def}
+ifelse/$K xd/$Y xd/$M xd/$C xd}bd/x/k ld/X/K ld/sf{1 index type/stringtype eq{
+/s1t xd/s1n xd}{/s1t 0 def/s1n _ def}ifelse/s1k xd/s1y xd/s1m xd/s1c xd}bd/i{
+dup 0 ne{setflat}{pop}ifelse}bd/v{4 -2 roll 2 copy 6 -2 roll c}bd/V/v ld/y{2
+copy c}bd/Y/y ld/@w{matrix rotate/$ptm xd matrix scale $ptm dup concatmatrix
+/$ptm xd 1 eq{$ptm exch dup concatmatrix/$ptm xd}if 1 w}bd/@g{1 eq dup/$sdf xd
+{/$scp xd/$sca xd/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd/$SCA xd/$SCF xd}
+if}bd/@D{2 index 0 eq{$dsf 3 1 roll 4 -1 roll pop}if 3 copy exch $Scra add exch
+load SetScr/$dsp xd/$dsa xd/$dsf xd}bd/$ngx{$SDF{$SCF SepMode_5 0 eq{$SCA}
+{$dsa}ifelse $SCP @ss}if}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd/@MX{2 copy ge
+{pop}{exch pop}ifelse}bd/InRange{3 -1 roll @MN @MX}bd/@sqr{dup 0 rl dup 0 exch
+rl neg 0 rl @cp}bd/currentscale{1 0 dtransform matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt 0 1 dtransform matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt}bd/@unscale{}bd/wDstChck{2 1 roll dup 3 -1 roll
+eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub}bd/@lin{exch pop abs 1
+exch sub}bd/cmyk2rgb{3{dup 5 -1 roll add 1 exch sub dup 0 lt{pop 0}if exch}
+repeat pop}bd/rgb2cmyk{3{1 exch sub 3 1 roll}repeat 3 copy @MN @MN 3{dup 5 -1
+roll sub neg exch}repeat}bd/rgb2g{2 index .299 mul 2 index .587 mul add 1 index
+.114 mul add 4 1 roll pop pop pop}bd/WaldoColor_5 where{pop}{/SetRgb
+/setrgbcolor ld/GetRgb/currentrgbcolor ld/SetGry/setgray ld/GetGry/currentgray
+ld/SetRgb2 systemdict/setrgbcolor get def/GetRgb2 systemdict/currentrgbcolor
+get def/SetHsb systemdict/sethsbcolor get def/GetHsb systemdict
+/currenthsbcolor get def/rgb2hsb{SetRgb2 GetHsb}bd/hsb2rgb{3 -1 roll dup floor
+sub 3 1 roll SetHsb GetRgb2}bd/setcmykcolor where{pop/LumSepsDict where{pop
+/SetCmyk_5{LumSepsDict/setcmykcolor get exec}def}{/AldusSepsDict where{pop
+/SetCmyk_5{AldusSepsDict/setcmykcolor get exec}def}{/SetCmyk_5/setcmykcolor ld
+}ifelse}ifelse}{/SetCmyk_5{cmyk2rgb SetRgb}bd}ifelse/currentcmykcolor where{
+pop/GetCmyk/currentcmykcolor ld}{/GetCmyk{GetRgb rgb2cmyk}bd}ifelse
+/setoverprint where{pop}{/setoverprint{/$op xd}bd}ifelse/currentoverprint where
+{pop}{/currentoverprint{$op}bd}ifelse/@tc_5{5 -1 roll dup 1 ge{pop}{4{dup 6 -1
+roll mul exch}repeat pop}ifelse}bd/@trp{exch pop 5 1 roll @tc_5}bd
+/setprocesscolor_5{SepMode_5 0 eq{SetCmyk_5}{0 4 $ink_5 sub index exch pop 5 1
+roll pop pop pop pop SepsColor true eq{$ink_5 3 gt{1 sub neg SetGry}{0 0 0 4
+$ink_5 roll SetCmyk_5}ifelse}{1 sub neg SetGry}ifelse}ifelse}bd
+/findcmykcustomcolor where{pop}{/findcmykcustomcolor{5 array astore}bd}ifelse
+/Corelsetcustomcolor_exists false def/setcustomcolor where{pop
+/Corelsetcustomcolor_exists true def}if CorelIsSeps true eq CorelIsInRIPSeps
+false eq and{/Corelsetcustomcolor_exists false def}if
+Corelsetcustomcolor_exists false eq{/setcustomcolor{exch aload pop SepMode_5 0
+eq{pop @tc_5 setprocesscolor_5}{CurrentInkName_5 eq{4 index}{0}ifelse 6 1 roll
+5 rp 1 sub neg SetGry}ifelse}bd}if/@scc_5{dup type/booleantype eq{dup
+currentoverprint ne{setoverprint}{pop}ifelse}{1 eq setoverprint}ifelse dup _ eq
+{pop setprocesscolor_5 pop}{findcmykcustomcolor exch setcustomcolor}ifelse
+SepMode_5 0 eq{true}{GetGry 1 eq currentoverprint and not}ifelse}bd/colorimage
+where{pop/ColorImage{colorimage}def}{/ColorImage{/ncolors xd/$multi xd $multi
+true eq{ncolors 3 eq{/daqB xd/daqG xd/daqR xd pop pop exch pop abs{daqR pop
+daqG pop daqB pop}repeat}{/daqK xd/daqY xd/daqM xd/daqC xd pop pop exch pop abs
+{daqC pop daqM pop daqY pop daqK pop}repeat}ifelse}{/dataaq xd{dataaq ncolors
+dup 3 eq{/$dat xd 0 1 $dat length 3 div 1 sub{dup 3 mul $dat 1 index get 255
+div $dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div rgb2g 255 mul
+cvi exch pop $dat 3 1 roll put}for $dat 0 $dat length 3 idiv getinterval pop}{
+4 eq{/$dat xd 0 1 $dat length 4 div 1 sub{dup 4 mul $dat 1 index get 255 div
+$dat 2 index 1 add get 255 div $dat 3 index 2 add get 255 div $dat 4 index 3
+add get 255 div cmyk2rgb rgb2g 255 mul cvi exch pop $dat 3 1 roll put}for $dat
+0 $dat length ncolors idiv getinterval}if}ifelse}image}ifelse}bd}ifelse
+/setcmykcolor{1 5 1 roll _ currentoverprint @scc_5/$ffpnt xd}bd
+/currentcmykcolor{GetCmyk}bd/setrgbcolor{rgb2cmyk setcmykcolor}bd
+/currentrgbcolor{currentcmykcolor cmyk2rgb}bd/sethsbcolor{hsb2rgb setrgbcolor}
+bd/currenthsbcolor{currentrgbcolor rgb2hsb}bd/setgray{dup dup setrgbcolor}bd
+/currentgray{currentrgbcolor rgb2g}bd/InsideDCS false def/IMAGE/image ld/image
+{InsideDCS{IMAGE}{/EPSDict where{pop SepMode_5 0 eq{IMAGE}{dup type/dicttype eq
+{dup/ImageType get 1 ne{IMAGE}{dup dup/BitsPerComponent get 8 eq exch
+/BitsPerComponent get 1 eq or currentcolorspace 0 get/DeviceGray eq and{
+CurrentInkName_5(Black)eq{IMAGE}{dup/DataSource get/TCC xd/Height get abs{TCC
+pop}repeat}ifelse}{IMAGE}ifelse}ifelse}{2 index 1 ne{CurrentInkName_5(Black)eq
+{IMAGE}{/TCC xd pop pop exch pop abs{TCC pop}repeat}ifelse}{IMAGE}ifelse}
+ifelse}ifelse}{IMAGE}ifelse}ifelse}bd}ifelse/WaldoColor_5 true def/$fm 0 def
+/wfill{1 $fm eq{fill}{eofill}ifelse}bd/@Pf{@sv SepMode_5 0 eq $Psc 0 ne or
+$ink_5 3 eq or{0 J 0 j[]0 d $t $c $m $y $k $n $o @scc_5 pop $ctm setmatrix 72
+1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform
+ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform
+floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop $Psn load exec}{1 SetGry
+wfill}ifelse @rs @np}bd/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if $fil
+1 eq{CorelPtrnDoFill}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$fil 4 eq
+{CorelShfillDoFill}{$t $c $m $y $k $n $o @scc_5{wfill}{@np}ifelse}ifelse}
+ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd/f{@cp F}bd/S{
+matrix currentmatrix $ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K
+$N $O @scc_5{matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse $SDF
+{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp S}bd/B{@gs F @gr S}bd/b{@cp B}bd/_E{
+5 array astore exch cvlit xd}bd/@cc{currentfile $dat readhexstring pop}bd/@sm{
+/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd/Bblly xd/Bbllx xd}bd/@c{
+@cp}bd/@P{/$fil 3 def/$Psn xd/$Psc xd array astore/$Prm xd}bd/tcc{@cc}def/@B{
+@gs S @gr F}bd/@b{@cp @B}bd/@sep{CurrentInkName_5(Composite)eq{/$ink_5 -1 def}
+{CurrentInkName_5(Cyan)eq{/$ink_5 0 def}{CurrentInkName_5(Magenta)eq{/$ink_5 1
+def}{CurrentInkName_5(Yellow)eq{/$ink_5 2 def}{CurrentInkName_5(Black)eq
+{/$ink_5 3 def}{/$ink_5 4 def}ifelse}ifelse}ifelse}ifelse}ifelse}bd/@whi{@gs
+-72000 dup m -72000 72000 l 72000 dup l 72000 -72000 l @cp 1 SetGry fill @gr}
+bd/@neg{[{1 exch sub}/exec cvx currenttransfer/exec cvx]cvx settransfer @whi}
+bd/deflevel 0 def/@sax{/deflevel deflevel 1 add def}bd/@eax{/deflevel deflevel
+dup 0 gt{1 sub}if def deflevel 0 gt{/eax load}{eax}ifelse}bd/eax{{exec}forall}
+bd/@rax{deflevel 0 eq{@rs @sv}if}bd systemdict/pdfmark known not{/pdfmark
+/cleartomark ld}if/wclip{1 $fm eq{clip}{eoclip}ifelse}bd
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/@ii{concat 3 index 3 index m 3 index 1 index l 2 copy l 1 index 3 index l 3
+index 3 index l clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true
+def pop pop}{1 eq{s1t s1c s1m s1y s1k s1n $O @scc_5/$frg xd}{/$frg false def}
+ifelse 1 eq{@gs $ctm setmatrix F @gr}if}ifelse @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string
+def $bkg $frg or{$SDF{$SCF $SCA $SCP @ss}if $llx $lly Tl $urx $llx sub $ury
+$lly sub scale $bkg{$t $c $m $y $k $n $o @scc_5 pop}if $wid $hei abs $bts 1 eq
+{$bkg}{$bts}ifelse[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]/tcc load $bts
+1 eq{imagemask}{image}ifelse $SDF{$dsf $dsa $dsp @ss}if}{$hei abs{tcc pop}
+repeat}ifelse @gr $ctm setmatrix}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd
+/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd $ngx $llx $lly Tl $urx $llx sub $ury
+$lly sub scale $wid $hei abs $bts[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse
+]$msimage false eq $ncl 1 eq or{/$dat $wid $bts mul $ncl mul 8 div ceiling cvi
+string def/@cc load false $ncl ColorImage}{$wid $bts mul 8 div ceiling cvi $ncl
+3 eq{dup dup/$dat1 exch string def/$dat2 exch string def/$dat3 exch string def
+/@cc1 load/@cc2 load/@cc3 load}{dup dup dup/$dat1 exch string def/$dat2 exch
+string def/$dat3 exch string def/$dat4 exch string def/@cc1 load/@cc2 load
+/@cc3 load/@cc4 load}ifelse true $ncl ColorImage}ifelse $SDF{$dsf $dsa $dsp
+@ss}if @gr $ctm setmatrix}bd/@cc1{currentfile $dat1 readhexstring pop}bd/@cc2{
+currentfile $dat2 readhexstring pop}bd/@cc3{currentfile $dat3 readhexstring pop
+}bd/@cc4{currentfile $dat4 readhexstring pop}bd/$msimage false def/COMP 0 def
+/MaskedImage false def L2?{/@I_2{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx
+xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling
+cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq{/DeviceRGB}{/DeviceCMYK}
+ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub $ury $lly sub scale 8
+dict begin/ImageType 1 def/Width $wid def/Height $hei abs def/BitsPerComponent
+$bts def/Decode $ncl 1 eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}
+ifelse}ifelse def/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def
+/DataSource currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP
+2 eq{/RunLengthDecode filter}if}ifelse def currentdict end image $SDF{$dsf $dsa
+$dsp @ss}if @gr $ctm setmatrix}bd}{/@I_2{}bd}ifelse/@I_3{@sm @gs @ii @np/$ury
+xd/$urx xd/$lly xd/$llx xd/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul
+$ncl mul 8 div ceiling cvi string def $ngx $ncl 1 eq{/DeviceGray}{$ncl 3 eq
+{/DeviceRGB}{/DeviceCMYK}ifelse}ifelse setcolorspace $llx $lly Tl $urx $llx sub
+$ury $lly sub scale/ImageDataDict 8 dict def ImageDataDict begin/ImageType 1
+def/Width $wid def/Height $hei abs def/BitsPerComponent $bts def/Decode $ncl 1
+eq{[0 1]}{$ncl 3 eq{[0 1 0 1 0 1]}{[0 1 0 1 0 1 0 1]}ifelse}ifelse def
+/ImageMatrix[$wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse]def/DataSource
+currentfile/ASCII85Decode filter COMP 1 eq{/DCTDecode filter}{COMP 2 eq{
+/RunLengthDecode filter}if}ifelse def end/MaskedImageDict 7 dict def
+MaskedImageDict begin/ImageType 3 def/InterleaveType 3 def/MaskDict
+ImageMaskDict def/DataDict ImageDataDict def end MaskedImageDict image $SDF
+{$dsf $dsa $dsp @ss}if @gr $ctm setmatrix}bd/@SetMask{/$mbts xd/$mhei xd/$mwid
+xd/ImageMaskDict 8 dict def ImageMaskDict begin/ImageType 1 def/Width $mwid def
+/Height $mhei abs def/BitsPerComponent $mbts def/DataSource maskstream def
+/ImageMatrix[$mwid 0 0 $mhei neg 0 $mhei 0 gt{$mhei}{0}ifelse]def/Decode[1 0]
+def end}bd/@daq{dup type/arraytype eq{{}forall}if}bd/@BMP{/@cc xd UseLevel 3 eq
+MaskedImage true eq and{7 -2 roll pop pop @I_3}{12 index 1 gt UseLevel 2 eq
+UseLevel 3 eq or and{7 -2 roll pop pop @I_2}{11 index 1 eq{12 -1 roll pop @i}{
+7 -2 roll pop pop @I}ifelse}ifelse}ifelse}bd
+% Copyright (c)1992-2002 Corel Corporation
+% All rights reserved. v11.0 r0.0
+/@p{/$fil 1 def 1 eq dup/$vectpat xd{/$pfrg true def}{@gs $t $c $m $y $k $n $o
+@scc_5/$pfrg xd @gr}ifelse/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd/$pn xd}bd
+/CorelPtrnDoFill{@gs $ctm setmatrix $pm concat CorelPtrnSetBBox wclip @sv Bburx
+Bbury $pm itransform/$tury xd/$turx xd Bbllx Bblly $pm itransform/$tlly xd
+/$tllx xd newpath $tllx $tlly m $tllx $tury l $turx $tury l $turx $tlly l $tllx
+$tlly m @cp pathbbox @rs/$tury xd/$turx xd/$tlly xd/$tllx xd/$wid $turx $tllx
+sub def/$hei $tury $tlly sub def @gs $vectpat{1 0 0 0 0 _ $o @scc_5{wfill}if}{
+$t $c $m $y $k $n $o @scc_5{SepMode_5 0 eq $pfrg or{$tllx $tlly Tl $wid $hei
+scale <00> 8 1 false[8 0 0 1 0 0]{}imagemask}{/$bkg true def}ifelse}if}ifelse
+@gr $wid 0 gt $hei 0 gt and{$pn cvlit load aload pop/$pd xd 3 -1 roll sub
+/$phei xd exch sub/$pwid xd $wid $pwid div ceiling 1 add/$tlx xd $hei $phei div
+ceiling 1 add/$tly xd currentdict/CorelPtrnL2Pattern known $psy 0 eq and $psx 0
+eq and{CorelPtrnL2Pattern}{$psx 0 eq{CorelPtrnTileVeritcal}{CorelPtrnTileHoriz
+}ifelse}ifelse}if @gr @np/$bkg false def}bd/CorelPtrnSetBBox{pathbbox/$ury xd
+/$urx xd/$lly xd/$llx xd}bd/CorelPtrnSetFirstTile{$tllx $pxf add dup $tllx gt
+{$pwid sub}if/$tx xd $tury $pyf sub dup $tury lt{$phei add}if/$ty xd}bd/p{/$pm
+xd 7 rp/$pyf xd/$pxf xd/$pn xd/$fil 1 def}bd/CorelPtrnDraw{@ep}bd
+/CorelPtrnPutTile{@sv/$in true def 2 copy dup $lly le{/$in false def}if $phei
+sub $ury ge{/$in false def}if dup $urx ge{/$in false def}if $pwid add $llx le{
+/$in false def}if $in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl 0
+$phei rl clip @np $pn cvlit load aload pop 7 -1 roll 5 index sub 7 -1 roll 3
+index sub Tl matrix currentmatrix/$ctm xd CorelPtrnDraw pop pop pop pop}{pop
+pop}ifelse @rs}bd/CorelPtrnTileHoriz{CorelPtrnSetFirstTile 0 1 $tly 1 sub{dup
+$psx mul $tx add{dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty
+exch sub 0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch CorelPtrnPutTile
+pop}for pop pop}for}bd/CorelPtrnTileVeritcal{CorelPtrnSetFirstTile 0 1 $tlx 1
+sub{dup $pwid mul $tx add exch $psy mul $ty exch sub{dup $ury lt{$phei add}
+{exit}ifelse}loop 0 1 $tly 1 sub{$phei mul 3 copy sub CorelPtrnPutTile pop}for
+pop pop}for}bd L2? UseLevel 2 ge and{/CorelPtrnL2Pattern{@sv[$pn cvlit load
+aload pop pop]$pwid $phei $pn cvlit load aload pop pop pop pop pathbbox pop pop
+2 index sub exch 3 index sub 4 -2 roll pop pop exch matrix identmatrix
+translate/PatternMatrix xd/PatternYStep xd/PatternXStep xd/PatternBBox xd
+currentdict/PatternMainDict xd <</PaintType 1/PatternType 1/TilingType 1/BBox
+PatternBBox/XStep PatternXStep/YStep PatternYStep/PaintProc{begin
+PatternMainDict begin $ctm currentmatrix pop 0 CorelPtrnDraw end end}bind >>
+PatternMatrix makepattern setpattern fill @rs}def}if
+end
+%%EndResource
+%%EndProlog
+%%BeginSetup
+wCorel11Dict begin
+@BeginSysCorelDict
+2.6131 setmiterlimit
+1.00 setflat
+/$fst 128 def
+%%EndSetup
+
+%%Page: 1 1
+%LogicalPage: 1
+%%BeginPageSetup
+@sv
+@sm
+@sv
+%%EndPageSetup
+@rax %Note: Object
+147.81600 74.66400 428.47200 355.32000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+428.47200 216.43200 m
+286.70400 355.32000 L
+147.81600 213.62400 L
+286.70400 74.66400 L
+428.47200 216.43200 L
+@c
+B
+
+@rax %Note: Object
+286.70400 80.35200 422.78400 216.43200 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.58 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+414.28800 216.43200 m
+422.78400 216.43200 L
+286.70400 80.35200 L
+286.70400 88.84800 L
+414.28800 216.43200 L
+@c
+B
+
+@rax %Note: Object
+153.50400 80.35200 286.70400 213.62400 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.51 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+153.50400 213.62400 m
+162.00000 213.62400 L
+286.70400 88.84800 L
+286.70400 80.35200 L
+153.50400 213.62400 L
+@c
+B
+
+@rax %Note: Object
+153.50400 213.62400 286.70400 349.63200 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 341.20800 m
+286.70400 349.63200 L
+153.50400 213.62400 L
+162.00000 213.62400 L
+286.70400 341.20800 L
+@c
+B
+
+@rax %Note: Object
+286.70400 216.43200 422.78400 349.63200 @E
+ 0 O 0 @g
+0.73 0.00 0.99 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 349.63200 m
+286.70400 341.20800 L
+414.28800 216.43200 L
+422.78400 216.43200 L
+286.70400 349.63200 L
+@c
+B
+
+@rax %Note: Object
+162.00000 88.84800 414.28800 341.20800 @E
+ 0 O 0 @g
+0.60 0.00 0.40 0.40 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+286.70400 88.84800 m
+414.28800 216.43200 L
+286.70400 341.20800 L
+162.00000 213.62400 L
+286.70400 88.84800 L
+@c
+B
+
+@rax %Note: Object
+165.81600 103.03200 423.72000 344.01600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+313.20000 312.84000 m
+321.69600 304.27200 L
+321.69600 304.27200 L
+263.08800 244.80000 L
+263.08800 304.27200 L
+268.77600 304.27200 L
+277.27200 312.84000 L
+277.27200 335.44800 L
+268.77600 344.01600 L
+174.31200 344.01600 L
+165.81600 335.44800 L
+165.81600 312.84000 L
+174.31200 304.27200 L
+180.93600 304.27200 L
+180.93600 111.52800 L
+191.30400 103.03200 L
+220.60800 103.03200 L
+423.72000 312.84000 L
+423.72000 335.44800 L
+415.22400 344.01600 L
+322.63200 344.01600 L
+313.20000 335.44800 L
+313.20000 312.84000 L
+@c
+B
+
+@rax %Note: Object
+171.43200 309.96000 271.58400 338.40000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+177.12000 309.96000 m
+171.43200 315.64800 L
+171.43200 332.64000 L
+177.12000 338.32800 L
+265.96800 338.40000 L
+271.58400 332.64000 L
+265.96800 329.90400 L
+263.08800 332.64000 L
+177.12000 318.52800 L
+177.12000 309.96000 L
+@c
+B
+
+@rax %Note: Object
+187.48800 108.72000 194.11200 315.64800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+194.11200 108.72000 m
+187.48800 114.40800 L
+187.48800 310.03200 L
+194.11200 315.64800 L
+194.11200 108.72000 L
+@c
+B
+
+@rax %Note: Object
+247.03200 207.93600 341.56800 315.64800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+335.88000 309.96000 m
+341.56800 315.64800 L
+341.56800 304.27200 L
+247.03200 207.93600 L
+257.47200 230.61600 L
+335.88000 309.96000 L
+@c
+B
+
+@rax %Note: Object
+177.12000 309.96000 196.05600 321.33600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+196.05600 318.45600 m
+194.11200 315.64800 L
+187.48800 309.96000 L
+177.12000 309.96000 L
+177.12000 321.33600 L
+196.05600 318.45600 L
+@c
+B
+
+@rax %Note: Object
+247.03200 208.00800 271.58400 332.64000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+257.47200 309.96000 m
+257.47200 230.61600 L
+247.03200 208.00800 L
+247.03200 315.72000 L
+263.08800 315.72000 L
+265.96800 318.52800 L
+263.08800 332.64000 L
+271.58400 332.64000 L
+271.58400 315.64800 L
+265.96800 309.96000 L
+257.47200 309.96000 L
+@c
+B
+
+@rax %Note: Object
+318.88800 309.96000 418.10400 338.32800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+324.50400 309.96000 m
+318.88800 315.64800 L
+318.88800 332.64000 L
+325.44000 338.32800 L
+411.48000 338.32800 L
+418.10400 332.64000 L
+408.60000 324.14400 L
+324.50400 318.52800 L
+324.50400 309.96000 L
+@c
+B
+
+@rax %Note: Object
+194.11200 108.72000 418.10400 332.64000 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+418.10400 315.64800 m
+218.66400 108.72000 L
+194.11200 108.72000 L
+194.11200 117.21600 L
+212.11200 117.21600 L
+411.48000 321.33600 L
+408.60000 332.64000 L
+418.10400 332.64000 L
+418.10400 315.64800 L
+@c
+B
+
+@rax %Note: Object
+324.50400 309.96000 343.44000 321.33600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.50 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+343.44000 318.45600 m
+341.49600 315.64800 L
+335.88000 309.96000 L
+324.50400 309.96000 L
+324.50400 321.33600 L
+343.44000 318.45600 L
+@c
+B
+
+@rax %Note: Object
+177.12000 114.40800 412.41600 332.71200 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+247.03200 208.00800 m
+247.03200 315.72000 L
+263.08800 315.72000 L
+265.96800 318.52800 L
+265.96800 329.90400 L
+263.08800 332.71200 L
+179.92800 332.71200 L
+177.12000 329.90400 L
+177.12000 318.52800 L
+179.92800 315.72000 L
+194.11200 315.72000 L
+194.11200 117.21600 L
+197.78400 114.40800 L
+213.98400 114.40800 L
+412.41600 321.33600 L
+412.41600 329.47200 L
+409.53600 332.71200 L
+327.38400 332.71200 L
+324.50400 329.90400 L
+324.50400 318.45600 L
+327.38400 315.64800 L
+341.56800 315.64800 L
+341.56800 304.27200 L
+247.03200 208.00800 L
+@c
+B
+
+@rax %Note: Object
+292.89600 185.18400 326.95200 213.55200 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+298.58400 207.86400 m
+305.20800 213.55200 L
+322.20000 213.55200 L
+326.95200 207.86400 L
+321.26400 190.87200 L
+314.71200 185.18400 L
+297.72000 185.18400 L
+292.89600 190.87200 L
+298.58400 207.86400 L
+@c
+B
+
+@rax %Note: Object
+304.27200 114.33600 424.22400 182.37600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+304.27200 114.33600 m
+321.33600 165.31200 L
+315.64800 165.31200 L
+321.33600 182.37600 L
+346.75200 182.37600 L
+352.44000 176.68800 L
+356.25600 176.68800 L
+361.87200 182.37600 L
+380.80800 182.37600 L
+386.49600 176.68800 L
+390.24000 176.68800 L
+395.92800 182.37600 L
+416.66400 182.37600 L
+424.22400 171.00000 L
+411.84000 130.68000 L
+417.45600 130.68000 L
+411.98400 114.33600 L
+377.92800 114.33600 L
+391.24800 154.00800 L
+382.75200 154.00800 L
+374.90400 130.82400 L
+380.52000 130.82400 L
+375.19200 114.33600 L
+341.13600 114.33600 L
+354.38400 154.00800 L
+345.88800 154.00800 L
+337.96800 130.68000 L
+343.65600 130.68000 L
+338.32800 114.33600 L
+304.27200 114.33600 L
+@c
+B
+
+@rax %Note: Object
+311.83200 120.02400 418.46400 176.68800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+414.07200 176.68800 m
+418.46400 170.42400 L
+404.49600 125.64000 L
+410.11200 125.64000 L
+408.24000 120.02400 L
+385.56000 120.02400 L
+398.80800 159.69600 L
+378.93600 159.69600 L
+367.63200 125.64000 L
+373.24800 125.64000 L
+371.37600 120.02400 L
+348.69600 120.02400 L
+361.94400 159.69600 L
+342.07200 159.69600 L
+330.76800 125.64000 L
+336.45600 125.64000 L
+334.51200 120.02400 L
+311.83200 120.02400 L
+328.89600 171.00000 L
+323.20800 171.00000 L
+325.08000 176.68800 L
+345.88800 176.68800 L
+351.57600 171.00000 L
+357.19200 171.00000 L
+362.88000 176.68800 L
+379.87200 176.68800 L
+385.56000 171.00000 L
+391.24800 171.00000 L
+396.93600 176.68800 L
+414.07200 176.68800 L
+@c
+B
+
+@rax %Note: Object
+267.40800 114.33600 318.45600 182.37600 @E
+ 0 O 0 @g
+0.00 0.00 0.00 1.00 k
+/$fm 0 def
+318.45600 182.37600 m
+301.10400 130.75200 L
+307.00800 130.75200 L
+301.39200 114.33600 L
+267.40800 114.33600 L
+284.40000 165.31200 L
+278.71200 165.31200 L
+318.45600 182.37600 L
+@c
+278.71200 165.31200 m
+284.40000 182.37600 L
+318.45600 182.37600 L
+@c
+F
+
+@rax %Note: Object
+267.40800 114.33600 318.45600 182.37600 @E
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+318.45600 182.37600 m
+301.10400 130.75200 L
+307.00800 130.75200 L
+301.39200 114.33600 L
+267.40800 114.33600 L
+284.40000 165.31200 L
+278.71200 165.31200 L
+@c
+278.71200 165.31200 m
+284.40000 182.37600 L
+318.45600 182.37600 L
+@c
+S
+
+@rax %Note: Object
+274.96800 120.02400 310.89600 176.68800 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+297.64800 120.02400 m
+299.52000 125.64000 L
+293.83200 125.64000 L
+310.89600 176.68800 L
+287.28000 176.68800 L
+285.33600 171.00000 L
+291.96000 171.00000 L
+274.96800 120.02400 L
+297.64800 120.02400 L
+@c
+B
+
+@rax %Note: Object
+299.52000 190.87200 320.32800 207.86400 @E
+ 0 O 0 @g
+0.00 0.00 0.00 0.20 k
+0 J 0 j [] 0 d 0 R 0 @G
+0.00 0.00 0.00 1.00 K
+0 0.21600 0.21600 0.00000 @w
+/$fm 0 def
+316.51200 193.68000 m
+320.32800 205.05600 L
+318.45600 207.86400 L
+307.08000 207.86400 L
+303.33600 205.05600 L
+299.52000 193.68000 L
+301.46400 190.87200 L
+312.84000 190.87200 L
+316.51200 193.68000 L
+@c
+B
+
+%%PageTrailer
+@rs
+@rs
+%%Trailer
+@EndSysCorelDict
+end
+%%DocumentSuppliedResources: procset wCorel11Dict 11.0 0
+%%EOF
diff --git a/runtime/tutor/tutor.sv.utf-8 b/runtime/tutor/tutor.sv.utf-8
new file mode 100644
index 0000000..967fc82
--- /dev/null
+++ b/runtime/tutor/tutor.sv.utf-8
@@ -0,0 +1,830 @@
+===============================================================================
+= V ä l k o m m e n t i l l h a n d l e d n i n g e n i V i m - Ver. 1.5 =
+===============================================================================
+
+ Vim är en väldigt kraftfull redigerare som har många kommandon, alltför
+ många att förklara i en handledning som denna. Den här handledningen är
+ gjord för att förklara tillräckligt många kommandon så att du enkelt ska
+ kunna använda Vim som en redigerare för alla ändamål.
+
+ Den beräknade tiden för att slutföra denna handledning är 25-30 minuter,
+ beroende på hur mycket tid som läggs ned på experimentering.
+
+ Kommandona i lektionerna kommer att modifiera texten. Gör en kopia av den
+ här filen att öva på (om du startade "vimtutor är det här redan en kopia).
+
+ Det är viktigt att komma ihåg att den här handledningen är konstruerad
+ att lära vid användning. Det betyder att du måste köra kommandona för att
+ lära dig dem ordentligt. Om du bara läser texten så kommer du att glömma
+ kommandona!
+
+ Försäkra dig nu om att din Caps-Lock tangent INTE är aktiv och tryck på
+ j-tangenten tillräckligt många gånger för att förflytta markören så att
+ Lektion 1.1 fyller skärmen helt.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.1: FLYTTA MARKÖREN
+
+
+ ** För att flytta markören, tryck på tangenterna h,j,k,l som indikerat. **
+ ^
+ k Tips:
+ < h l > h-tangenten är till vänster och flyttar till vänster.
+ j l-tangenten är till höger och flyttar till höger.
+ v j-tangenten ser ut som en pil ned.
+ 1. Flytta runt markören på skärmen tills du känner dig bekväm.
+
+ 2. Håll ned tangenten pil ned (j) tills att den repeterar.
+---> Nu vet du hur du tar dig till nästa lektion.
+
+ 3. Flytta till Lektion 1.2, med hjälp av ned tangenten.
+
+Notera: Om du är osäker på någonting du skrev, tryck <ESC> för att placera dig
+ dig i Normal-läge. Skriv sedan om kommandot.
+
+Notera: Piltangenterna borde också fungera. Men om du använder hjkl så kommer
+ du att kunna flytta omkring mycket snabbare, när du väl vant dig vid
+ det.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.2: STARTA OCH AVSLUTA VIM
+
+
+ !! NOTERA: Innan du utför någon av punkterna nedan, läs hela lektionen!!
+
+ 1. Tryck <ESC>-tangenten (för att se till att du är i Normal-läge).
+
+ 2. Skriv: :q! <ENTER>.
+
+---> Detta avslutar redigeraren UTAN att spara några ändringar du gjort.
+ Om du vill spara ändringarna och avsluta skriv:
+ :wq <ENTER>
+
+ 3. När du ser skal-prompten, skriv kommandot som tog dig in i den här
+ handledningen. Det kan vara: vimtutor <ENTER>
+ Normalt vill du använda: vim tutor <ENTER>
+
+---> 'vim' betyder öppna redigeraren vim, 'tutor' är filen du vill redigera.
+
+ 4. Om du har memorerat dessa steg och känner dig självsäker, kör då stegen
+ 1 till 3 för att avsluta och starta om redigeraren. Flytta sedan ned
+ markören till Lektion 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.3: TEXT REDIGERING - BORTTAGNING
+
+
+** När du är i Normal-läge tryck x för att ta bort tecknet under markören. **
+
+ 1. Flytta markören till raden nedan med markeringen --->.
+
+ 2. För att rätta felen, flytta markören tills den står på tecknet som ska
+ tas bort. fix the errors, move the cursor until it is on top of the
+
+ 3. Tryck på x-tangenten för att ta bort det felaktiga tecknet.
+
+ 4. Upprepa steg 2 till 4 tills meningen är korrekt.
+
+---> Kkon hoppadee övverr måånen.
+
+ 5. Nu när raden är korrekt, gå till Lektion 1.4.
+
+NOTERA: När du går igenom den här handledningen, försök inte att memorera, lär
+ genom användning.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 1.4: TEXT REDIGERING - INFOGNING
+
+
+ ** När du är i Normal-läge tryck i för att infoga text. **
+
+ 1. Flytta markören till den första raden nedan med markeringen --->.
+
+ 2. För att göra den första raden likadan som den andra, flytta markören till
+ det första tecknet EFTER där text ska infogas.
+
+ 3. Tryck i och skriv in det som saknas.
+
+ 4. När du rättat ett fel tryck <ESC> för att återgå till Normal-läge.
+ Upprepa steg 2 till 4 för att rätta meningen.
+
+---> Det sakns här .
+---> Det saknas lite text från den här raden.
+
+ 5. När du känner dig bekväm med att infoga text, gå till sammanfattningen
+ nedan.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 1 SAMMANFATTNING
+
+
+ 1. Markören flyttas genom att använda piltangenterna eller hjkl-tangenterna.
+ h (vänster) j (ned) k (upp) l (höger)
+
+ 2. För att starta Vim (från %-prompten) skriv: vim FILNAMN <ENTER>
+
+ 3. För att avsluta Vim skriv: <ESC> :q! <ENTER> för att kasta ändringar.
+ ELLER skriv: <ESC> :wq <ENTER> för att spara ändringar.
+
+ 4. För att ta bort tecknet under markören i Normal-läge skriv: x
+
+ 5. För att infoga text vid markören i Normal-läge skriv:
+ i skriv in text <ESC>
+
+NOTERA: Genom att trycka <ESC> kommer du att placeras i Normal-läge eller
+ avbryta ett delvis färdigskrivet kommando.
+
+Fortsätt nu med Lektion 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.1: BORTTAGNINGSKOMMANDON
+
+
+ ** Skriv dw för att radera till slutet av ett ord. **
+
+ 1. Tryck <ESC> för att försäkra dig om att du är i Normal-läge.
+
+ 2. Flytta markören till raden nedan markerad --->.
+
+ 3. Flytta markören till början av ett ord som måste raderas.
+
+ 4. Skriv dw för att radera ordet.
+
+ NOTERA: Bokstäverna dw kommer att synas på den sista raden på skärmen när
+ du skriver dem. Om du skrev något fel, tryck <ESC> och börja om.
+
+---> Det är ett några ord roliga att som inte hör hemma i den här meningen.
+
+ 5. Upprepa stegen 3 och 4 tills meningen är korrekt och gå till Lektion 2.2.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.2: FLER BORTTAGNINGSKOMMANDON
+
+
+ ** Skriv d$ för att radera till slutet på raden. **
+
+ 1. Tryck <ESC> för att försäkra dig om att du är i Normal-läge.
+
+ 2. Flytta markören till raden nedan markerad --->.
+
+ 3. Flytta markören till slutet på den rätta raden (EFTER den första . ).
+
+ 4. Skriv d$ för att radera till slutet på raden.
+
+---> Någon skrev slutet på den här raden två gånger. den här raden två gånger.
+
+
+ 5. Gå vidare till Lektion 2.3 för att förstå vad det är som händer.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 2.3: KOMMANDON OCH OBJEKT
+
+
+ Syntaxen för d raderingskommandot är följande:
+
+ [nummer] d objekt ELLER d [nummer] objekt
+ Var:
+ nummer - är antalet upprepningar av kommandot (valfritt, standard=1).
+ d - är kommandot för att radera.
+ objekt - är vad kommandot kommer att operera på (listade nedan).
+
+ En kort lista över objekt:
+ w - från markören till slutet av ordet, inklusive blanksteget.
+ e - från markören till slutet av ordet, EJ inklusive blanksteget.
+ $ - från markören till slutet på raden.
+
+NOTERA: För den äventyrslystne, genom att bara trycka på objektet i
+ Normal-läge (utan kommando) så kommer markören att flyttas som
+ angivet i objektlistan.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.4: ETT UNDANTAG TILL 'KOMMANDO-OBJEKT'
+
+
+ ** Skriv dd för att radera hela raden. **
+
+ På grund av hur vanligt det är att ta bort hela rader, valde upphovsmannen
+ till Vi att det skulle vara enklare att bara trycka d två gånger i rad för
+ att ta bort en rad.
+
+ 1. Flytta markören till den andra raden i frasen nedan.
+ 2. Skriv dd för att radera raden.
+ 3. Flytta nu till den fjärde raden.
+ 4. Skriv 2dd (kom ihåg: nummer-kommando-objekt) för att radera de två
+ raderna.
+
+ 1) Roses are red,
+ 2) Mud is fun,
+ 3) Violets are blue,
+ 4) I have a car,
+ 5) Clocks tell time,
+ 6) Sugar is sweet
+ 7) And so are you.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 2.5: ÅNGRA-KOMMANDOT
+
+
+** Skriv u för att ångra det senaste kommandona, U för att fixa en hel rad. **
+
+ 1. Flytta markören till slutet av raden nedan markerad ---> och placera den
+ på det första felet.
+ 2. Skriv x för att radera den första felaktiga tecknet.
+ 3. Skriv nu u för att ångra det senaste körda kommandot.
+ 4. Rätta den här gången alla felen på raden med x-kommandot.
+ 5. Skriv nu U för att återställa raden till dess ursprungliga utseende.
+ 6. Skriv nu u några gånger för att ångra U och tidigare kommandon.
+ 7. Tryck nu CTRL-R (håll inne CTRL samtidigt som du trycker R) några gånger
+ för att upprepa kommandona (ångra ångringarna).
+
+---> Fiixa felen ppå deen häär meningen och återskapa dem med ångra.
+
+ 8. Det här är väldigt användbara kommandon. Gå nu vidare till
+ Lektion 2 Sammanfattning.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 2 SAMMANFATTNING
+
+
+ 1. För att radera från markören till slutet av ett ord skriv: dw
+
+ 2. För att radera från markören till slutet av en rad skriv: d$
+
+ 3. För att radera en hel rad skriv: dd
+
+ 4. Syntaxen för ett kommando i Normal-läge är:
+
+ [nummer] kommando objekt ELLER kommando [nummer] objekt
+ där:
+ nummer - är hur många gånger kommandot kommandot ska repeteras
+ kommando - är vad som ska göras, t.ex. d för att radera
+ objekt - är vad kommandot ska operera på, som t.ex. w (ord),
+ $ (till slutet av raden), etc.
+
+ 5. För att ångra tidigare kommandon, skriv: u (litet u)
+ För att ångra alla tidigare ändringar på en rad skriv: U (stort U)
+ För att ångra ångringar tryck: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.1: KLISTRA IN-KOMMANDOT
+
+
+ ** Skriv p för att klistra in den senaste raderingen efter markören. **
+
+ 1. Flytta markören till den första raden i listan nedan.
+
+ 2. Skriv dd för att radera raden och lagra den i Vims buffert.
+
+ 3. Flytta markören till raden OVANFÖR där den raderade raden borde vara.
+
+ 4. När du är i Normal-läge, skriv p för att byta ut raden.
+
+ 5. Repetera stegen 2 till 4 för att klistra in alla rader i rätt ordning.
+
+ d) Kan du lära dig också?
+ b) Violetter är blå,
+ c) Intelligens fås genom lärdom,
+ a) Rosor är röda,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 3.2: ERSÄTT-KOMMANDOT
+
+
+ ** Skriv r och ett tecken för att ersätta tecknet under markören. **
+
+ 1. Flytta markören till den första raden nedan markerad --->.
+
+ 2. Flytta markören så att den står på det första felet.
+
+ 3. Skriv r och sedan det tecken som borde ersätta felet.
+
+ 4. Repetera steg 2 och 3 tills den första raden är korrekt.
+
+---> När drn här ruden skrevs, trickte någon på fil knappar!
+---> När den här raden skrevs, tryckte någon på fel knappar!
+
+ 5. Gå nu vidare till Lektion 3.2.
+
+NOTERA: Kom ihåg att du skall lära dig genom användning, inte genom memorering.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.3: ÄNDRA-KOMMANDOT
+
+
+ ** För att ändra en del eller ett helt ord, skriv cw . **
+
+ 1. Flytta markören till den första redan nedan markerad --->.
+
+ 2. Placera markören på d i rdrtn.
+
+ 3. Skriv cw och det rätta ordet (i det här fallet, skriv "aden".)
+
+ 4. Tryck <ESC> och flytta markören till nästa fel (det första tecknet som
+ ska ändras.)
+
+ 5. Repetera steg 3 och 4 tills den första raden är likadan som den andra.
+
+---> Den här rdrtn har några otf som brhotrt ändras mrf ändra-komjendit.
+---> Den här raden har några ord som behöver ändras med ändra-kommandot.
+
+Notera att cw inte bara ändrar ordet, utan även placerar dig i infogningsläge.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 3.4: FLER ÄNDRINGAR MED c
+
+
+ ** Ändra-kommandot används på samma objekt som radera. **
+
+ 1. Ändra-kommandot fungerar på samma sätt som radera. Syntaxen är:
+
+ [nummer] c objekt ELLER c [nummer] objekt
+
+ 2. Objekten är också de samma, som t.ex. w (ord), $ (slutet av raden), etc.
+
+ 3. Flytta till den första raden nedan markerad -->.
+
+ 4. Flytta markören till det första felet.
+
+ 5. Skriv c$ för att göra resten av raden likadan som den andra och tryck
+ <ESC>.
+
+---> Slutet på den här raden behöver hjälp med att få den att likna den andra.
+---> Slutet på den här raden behöver rättas till med c$-kommandot.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 3 SAMMANFATTNING
+
+
+ 1. För att ersätta text som redan har blivit raderad, skriv p .
+ Detta klistrar in den raderade texten EFTER markören (om en rad raderades
+ kommer den att hamna på raden under markören.
+
+ 2. För att ersätta tecknet under markören, skriv r och sedan tecknet som
+ kommer att ersätta orginalet.
+
+ 3. Ändra-kommandot låter dig ändra det angivna objektet från markören till
+ slutet på objektet. eg. Skriv cw för att ändra från markören till slutet
+ på ordet, c$ för att ändra till slutet på en rad.
+
+ 4. Syntaxen för ändra-kommandot är:
+
+ [nummer] c objekt ELLER c [nummer] objekt
+
+Gå nu till nästa lektion.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.1: POSITION OCH FILSTATUS
+
+
+ ** Tryck CTRL-g för att visa din position i filen och filstatusen.
+ Tryck SHIFT-G för att flytta till en rad i filen. **
+
+ Notera: Läsa hela den lektion innan du utför något av stegen!!
+
+ 1. Håll ned Ctrl-tangenten och tryck g . En statusrad med filnamn och raden
+ du befinner dig på kommer att synas. Kom ihåg radnummret till Steg 3.
+
+ 2. Tryck shift-G för att flytta markören till slutet på filen.
+
+ 3. Skriv in nummret på raden du var på och tryck sedan shift-G. Detta kommer
+ att ta dig tillbaka till raden du var på när du först tryckte Ctrl-g.
+ (När du skriver in nummren, kommer de INTE att visas på skärmen.)
+
+ 4. Om du känner dig säker på det här, utför steg 1 till 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.2: SÖK-KOMMANDOT
+
+
+ ** Skriv / följt av en fras för att söka efter frasen. **
+
+ 1. I Normal-läge skriv /-tecknet. Notera att det och markören blir synlig
+ längst ned på skärmen precis som med :-kommandot.
+
+ 2. Skriv nu "feeel" <ENTER>. Det här är ordet du vill söka efter.
+
+ 3. För att söka efter samma fras igen, tryck helt enkelt n .
+ För att söka efter samma fras igen i motsatt riktning, tryck Shift-N .
+
+ 4. Om du vill söka efter en fras bakåt i filen, använd kommandot ? istället
+ för /.
+
+---> "feeel" är inte rätt sätt att stava fel: feeel är ett fel.
+
+Notera: När sökningen når slutet på filen kommer den att fortsätta vid början.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.3: SÖKNING EFTER MATCHANDE PARENTESER
+
+
+ ** Skriv % för att hitta en matchande ),], or } . **
+
+ 1. Placera markören på någon av (, [, or { på raden nedan markerad --->.
+
+ 2. Skriv nu %-tecknet.
+
+ 3. Markören borde vara på den matchande parentesen eller hakparentesen.
+
+ 4. Skriv % för att flytta markören tillbaka till den första hakparentesen
+ (med matchning).
+
+---> Det ( här är en testrad med (, [ ] och { } i den. ))
+
+Notera: Det här är väldigt användbart vid avlusning av ett program med icke
+ matchande parenteser!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 4.4: ETT SÄTT ATT ÄNDRA FEL
+
+
+ ** Skriv :s/gammalt/nytt/g för att ersätta "gammalt" med "nytt". **
+
+ 1. Flytta markören till raden nedan markerad --->.
+
+ 2. Skriv :s/denn/den <ENTER> . Notera att det här kommandot bara ändrar den
+ första förekomsten på raden.
+
+ 3. Skriv nu :s/denn/den/g vilket betyder ersätt globalt på raden.
+ Det ändrar alla förekomster på raden.
+
+---> denn bästa tiden att se blommor blomma är denn på våren.
+
+ 4. För att ändra alla förekomster av en teckensträng mellan två rader,
+ skriv :#,#s/gammalt/nytt/g där #,# är de två radernas radnummer.
+ Skriv :%s/gammtl/nytt/g för att ändra varje förekomst i hela filen.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 4 SAMMANFATTNING
+
+
+ 1. Ctrl-g visar din position i filen och filstatusen.
+ Shift-G flyttar till slutet av filen. Ett radnummer följt Shift-G
+ flyttar till det radnummret.
+
+ 2. Skriver man / följt av en fras söks det FRAMMÅT efter frasen.
+ Skriver man ? följt av en fras söks det BAKÅT efter frasen.
+ Efter en sökning skriv n för att hitta nästa förekomst i samma riktning
+ eller Shift-N för att söka i den motsatta riktningen.
+
+ 3. Skriver man % när markören är på ett (,),[,],{, eller } hittas dess
+ matchande par.
+
+ 4. För att ersätta den första gammalt med nytt på en rad skriv :s/gammlt/nytt
+ För att ersätta alla gammlt med nytt på en rad skriv :s/gammlt/nytt/g
+ För att ersätta fraser mellan rad # och rad # skriv :#,#s/gammlt/nytt/g
+ För att ersätta alla förekomster i filen skriv :%s/gammlt/nytt/g
+ För att bekräfta varje gång lägg till "c" :%s/gammlt/nytt/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.1: HUR MAN KÖR ETT EXTERNT KOMMANDO
+
+
+ ** Skriv :! följt av ett externt kommando för att köra det kommandot. **
+
+ 1. Skriv det välbekanta kommandot : för att placera markören längst ned
+ på skärmen på skärmen. Detta låter dig skriva in ett kommando.
+
+ 2. Skriv nu ! (utropstecken). Detta låter dig köra ett godtyckligt externt
+ skalkommando.
+
+ 3. Som ett exempel skriv ls efter ! och tryck sedan <ENTER>. Detta kommer
+ att visa dig en listning av din katalog, precis som om du kört det vid
+ skalprompten. Använd :!dir om ls inte fungerar.
+
+Notera: Det är möjligt att köra vilket externt kommando som helst på det här
+ sättet.
+
+Notera: Alla :-kommandon måste avslutas med att trycka på <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.2: MER OM ATT SPARA FILER
+
+
+ ** För att spara ändringar gjorda i en fil, skriv :w FILNAMN. **
+
+ 1. Skriv :!dir eller :!ls för att få en listning av din katalog.
+ Du vet redan att du måste trycka <ENTER> efter det här.
+
+ 2. Välj ett filnamn som inte redan existerar, som t.ex. TEST.
+
+ 3. Skriv nu: :w TEST (där TEST är filnamnet du valt.)
+
+ 4. Det här sparar hela filen (Vim handledningen) under namnet TEST.
+ För att verifiera detta, skriv :!dir igen för att se din katalog
+
+Notera: Om du skulle avsluta Vim och sedan öppna igen med filnamnet TEST så
+ skulle filen vara en exakt kopia av handledningen när du sparade den.
+
+ 5. Ta nu bort filen genom att skriva (MS-DOS): :!del TEST
+ eller (Unix): :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.3: ETT SELEKTIVT SPARA-KOMMANDO
+
+
+ ** För att spara en del av en fil, skriv :#,# w FILNAMN **
+
+ 1. Ännu en gång, skriv :!dir eller :!ls för att få en listning av din
+ katalog och välj ett passande filnamn som t.ex. TEST.
+
+ 2. Flytta markören högst upp på den här sidan och tryck Ctrl-g för att få
+ reda på radnumret på den raden. KOM IHÅG DET NUMMRET!
+
+ 3. Flytta nu längst ned på sidan och skriv Ctrl-g igen.
+ KOM IHÅG DET RADNUMMRET OCKSÅ!
+
+ 4. För att BARA spara en sektion till en fil, skriv :#,# w TEST
+ där #,# är de två nummren du kom ihåg (toppen, botten) och TEST är
+ ditt filnamn.
+
+ 5. Ännu en gång, kolla så att filen är där med :!dir men radera den INTE.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 5.4: TA EMOT OCH FÖRENA FILER
+
+
+ ** För att infoga innehållet av en fil, skriv :r FILNAMN **
+
+ 1. Skriv :!dir för att försäkra dig om att TEST-filen från tidigare
+ fortfarande är kvar.
+
+ 2. Placera markören högst upp på den här sidan.
+
+NOTERA: Efter att du kört Steg 3 kommer du att se Lektion 5.3.
+ Flytta då NED till den här lektionen igen.
+
+ 3. Ta nu emot din TEST-fil med kommandot :r TEST där TEST är namnet på
+ filen.
+
+NOTERA: Filen du tar emot placeras där markören är placerad.
+
+ 4. För att verifiera att filen togs emot, gå tillbaka och notera att det nu
+ finns två kopior av Lektion 5.3, orginalet och filversionen.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 5 SAMMANFATTNING
+
+
+ 1. :!kommando kör ett externt kommando.
+
+ Några användbara exempel är:
+ (MS-DOS) (Unix)
+ :!dir :!ls - visar en kataloglistning.
+ :!del FILNAMN :!rm FILNAMN - tar bort filen FILNAMN.
+
+ 2. :w FILNAMN sparar den aktuella Vim-filen med namnet FILNAMN.
+
+ 3. :#,#w FILNAMN sparar raderna # till # i filen FILNAMN.
+
+ 4. :r FILNAMN tar emot filen FILNAMN och infogar den i den aktuella filen
+ efter markören.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.1: ÖPPNA-KOMMANDOT
+
+
+ ** Skriv o för att öppna en rad under markören och placera dig i
+ Infoga-läge. **
+
+ 1. Flytta markören till raden nedan markerad --->.
+
+ 2. Skriv o (litet o) för att öppna upp en rad NEDANFÖR markören och placera
+ dig i Infoga-mode.
+
+ 3. Kopiera nu raden markerad ---> och tryck <ESC> för att avsluta
+ Infoga-läget.
+
+---> Efter du skrivit o placerad markören på en öppen rad i Infoga-läge.
+
+ 4. För att öppna upp en rad OVANFÖR markören, skriv ett stort O , istället
+ för ett litet o. Pröva detta på raden nedan.
+Öppna upp en rad ovanför denna genom att trycka Shift-O när markören står här.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.2: LÄGG TILL-KOMMANDOT
+
+
+ ** Skriv a för att infoga text EFTER markören. **
+
+ 1. Flytta markören till slutet av den första raden nedan markerad ---> genom
+ att skriv $ i Normal-läge.
+
+ 2. Skriv ett a (litet a) för att lägga till text EFTER tecknet under
+ markören. (Stort A lägger till i slutet av raden.)
+
+Notera: Detta undviker att behöva skriva i , det sista tecknet, texten att
+ infoga, <ESC>, högerpil, och slutligen, x, bara för att lägga till i
+ slutet på en rad!
+
+ 3. Gör nu färdigt den första raden. Notera också att lägga till är likadant
+ som Infoga-läge, enda skillnaden är positionen där texten blir infogad.
+
+---> Här kan du träna
+---> Här kan du träna på att lägga till text i slutet på en rad.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.3: EN ANNAN VERSION AV ERSÄTT
+
+
+ ** Skriv ett stort R för att ersätta fler än ett tecken. **
+
+ 1. Flytta markören till den första raden nedan markerad --->.
+
+ 2. Placera markören vid början av det första ordet som är annorlunda jämfört
+ med den andra raden markerad ---> (ordet "sista").
+
+ 3. Skriv nu R och ersätt resten av texten på den första raden genom att
+ skriva över den gamla texten så att den första raden blir likadan som
+ den andra.
+
+---> För att få den första raden lika som den sista, använd tangenterna.
+---> För att få den första raden lika som den andra, skriv R och den nya texten.
+
+ 4. Notera att när du trycker <ESC> för att avsluta, så blir eventuell
+ oförändrad text kvar.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lektion 6.4: SÄTT FLAGGOR
+
+ ** Sätt en flagga så att en sökning eller ersättning ignorerar storlek **
+
+ 1. Sök efter "ignore" genom att skriva:
+ /ignore
+ Repetera flera gånger genom att trycka på n-tangenten
+
+ 2. Sätt 'ic' (Ignore Case) flaggan genom att skriva:
+ :set ic
+
+ 3. Sök nu efter "ignore" igen genom att trycka: n
+ Repeat search several more times by hitting the n key
+
+ 4. Sätt 'hlsearch' and 'incsearch' flaggorna:
+ :set hls is
+
+ 5. Skriv nu in sök-kommandot igen, och se vad som händer:
+ /ignore
+
+ 6. För att ta bort framhävningen av träffar, skriv
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 6 SAMMANFATTNING
+
+
+ 1. Genom att skriva o öpnnas en rad NEDANFÖR markören och markören placeras
+ på den öppna raden i Infoga-läge.
+ Genom att skriva ett stort O öppnas raden OVANFÖR raden som markören är
+ på.
+
+ 2. Skriv ett a för att infoga text EFTER tecknet som markören står på.
+ Genom att skriva ett stort A läggs text automatiskt till i slutet på
+ raden.
+
+ 3. Genom att skriva ett stort R hamnar du i Ersätt-läge till <ESC> trycks
+ för att avsluta.
+
+ 4. Genom att skriva ":set xxx" sätts flaggan "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 7: ON-LINE HJÄLP-KOMMANDON
+
+
+ ** Använd on-line hjälpsystemet **
+
+ Vim har ett omfattande on-line hjälpsystem. För att komma igång pröva ett av
+ dessa tre:
+ - tryck <HELP> tangenten (om du har någon)
+ - tryck <F1> tangenten (om du har någon)
+ - skriv :help <ENTER>
+
+ Skriv :q <ENTER> för att stränga hjälpfönstret.
+
+ Du kan hitta hjälp om nästan allting, genom att ge ett argument till
+ ":help" kommandot. Pröva dessa (glöm inte att trycka <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ LEKTION 8: SKAPA ETT UPPSTARTSSKRIPT
+
+ ** Aktivera Vim- funktioner **
+
+ Vim har många fler funktioner än Vi, men de flesta av dem är inaktiverade som
+ standard. För att börja använda fler funktioner måste du skapa en "vimrc"-fil.
+
+ 1. Börja redigera "vimrc"-filen, detta beror på ditt system:
+ :edit ~/.vimrc för Unix
+ :edit $VIM/_vimrc för MS-Windows
+
+ 2. Läs nu texten i exempel "vimrc"-filen:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Spara filen med:
+
+ :write
+
+ Nästa gång du startar Vim kommer den att använda syntaxframhävning.
+ Du kan lägga till alla inställningar du föredrar till den här "vimrc"-filen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Detta avslutar handledningen i Vim. Den var avsedd att ge en kort översikt av
+ redigeraren Vim, bara tillräckligt för att du ska kunna använda redigeraren
+ relativt enkelt. Den är långt ifrån komplett eftersom Vim har många många fler
+ kommandon. Läs användarmanualen härnäst: ":help user-manual".
+
+ För vidare läsning rekommenderas den här boken:
+ Vim - Vi Improved - av Steve Oualline
+ Förlag: New Riders
+ Den första boken som är endast behandlar Vim. Speciellt användbar för
+ nybörjare. Det finns många exempel och bilder.
+ Se http://iccf-holland.org/click5.html
+
+ Den här boken är äldre och behandlar mer Vi än Vim, men rekommenderas också:
+ Learning the Vi Editor - av Linda Lamb
+ Förlag: O'Reilly & Associates Inc.
+ Det är en bra bok för att lära sig nästan allt som du vill kunna göra med Vi.
+ Den sjätte upplagan inkluderar också information om Vim.
+
+ Den här handledningen är skriven av Michael C. Pierce och Robert K. Ware,
+ Colorado School of Mines med idéer från Charles Smith,
+ Colorado State University. E-post: bware@mines.colorado.edu.
+
+ Modifierad för Vim av Bram Moolenaar.
+ Översatt av Johan Svedberg <johan@svedberg.com>
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.vi.utf-8 b/runtime/tutor/tutor.vi.utf-8
new file mode 100644
index 0000000..ea7142a
--- /dev/null
+++ b/runtime/tutor/tutor.vi.utf-8
@@ -0,0 +1,812 @@
+===============================================================================
+= Xin chào mừng bạn đến với Hướng dẫn dùng Vim - Phiên bản 1.5 =
+===============================================================================
+ Vim là một trình soạn thảo rất mạnh. Vim có rất nhiều câu lệnh,
+ chính vì thế không thể trình bày hết được trong cuốn hướng dẫn này.
+ Cuốn hướng dẫn chỉ đưa ra những câu lệnh để giúp bạn sử dụng Vim
+ được dễ dàng hơn. Đây cũng chính là mục đich của sách
+
+ Cần khoảng 25-30 phút để hoàn thành bài học, phụ thuộc vào thời
+ gian thực hành.
+
+ Các câu lệnh trong bài học sẽ thay đổi văn bản này. Vì thế hãy tạo
+ một bản sao của tập tin này để thực hành (nếu bạn dùng "vimtutor"
+ thì đây đã là bản sao).
+
+ Hãy nhớ rằng hướng dẫn này viết với nguyên tắc "học đi đôi với hành".
+ Có nghĩa là bạn cần chạy các câu lệnh để học chúng. Nếu chỉ đọc, bạn
+ sẽ quên các câu lệnh!
+
+ Bây giờ, cần chắc chắn là phím Shift KHÔNG bị nhấn và hãy nhấn phím
+ j đủ số lần cần thiết (di chuyển con trỏ) để Bài 1.1 hiện ra đầy đủ
+ trên màn hình.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 1.1: DI CHUYỂN CON TRỎ
+
+
+ ** Để di chuyển con trỏ, nhấn các phím h,j,k,l như đã chỉ ra. **
+ ^
+ k Gợi ý: phím h ở phía trái và di chuyển sang trái.
+ < h l > phím l ở bên phải và di chuyển sang phải.
+ j phím j trong như một mũi tên chỉ xuống
+ v
+ 1. Di chuyển con trỏ quanh màn hình cho đến khi bạn quen dùng.
+
+ 2. Nhấn và giữ phím (j) cho đến khi nó lặp lại.
+---> Bây giờ bạn biết cách chuyển tới bài học thứ hai.
+
+ 3. Sử dụng phím di chuyển xuống bài 1.2.
+
+Chú ý: Nếu bạn không chắc chắn về những gì đã gõ, hãy nhấn <ESC> để chuyển vào
+ chế độ Câu lệnh, rồi gõ lại những câu lệnh mình muốn.
+
+Chú ý: Các phím mũi tên cũng làm việc. Nhưng một khi sử dụng thành thạo hjkl,
+ bạn sẽ di chuyển con trỏ nhanh hơn so với các phím mũi tên.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 1.2: VÀO VÀ THOÁT VIM
+
+
+ !! CHÚ Ý: Trước khi thực hiện bất kỳ lệnh nào, xin hãy đọc cả bài học này!!
+
+ 1. Nhấn phím <ESC> (để chắc chắn là bạn đang ở chế độ Câu lệnh).
+
+ 2. Gõ: :q! <ENTER>.
+
+---> Lệnh này sẽ thoát trình soạn thảo mà KHÔNG ghi nhớ bất kỳ thay đổi nào mà bạn đã làm.
+ Nếu bạn muốn ghi nhớ những thay đổi đó và thoát thì hãy gõ:
+ :wq <ENTER>
+
+ 3. Khi thấy dấu nhắc shell, hãy gõ câu lệnh đã đưa bạn tới hướng dẫn này. Có
+ thể là lệnh: vimtutor vi <ENTER>
+ Thông thường bạn dùng: vim tutor.vi<ENTER>
+
+---> 'vim' là trình soạn thảo vim, 'tutor.vi' là tập tin bạn muốn soạn thảo.
+
+ 4. Nếu bạn đã nhớ và nắm chắc những câu lệnh trên, hãy thực hiện các bước từ
+ 1 tới 3 để thoát và quay vào trình soạn thảo. Sau đó di chuyển con trỏ
+ tới Bài 1.3.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 1.3: SOẠN THẢO VĂN BẢN - XÓA
+
+
+** Trong chế độ Câu lệnh nhấn x để xóa ký tự nằm dưới con trỏ. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Để sửa lỗi, di chuyển con trỏ để nó nằm trên ký tự sẽ bị
+ xóa.
+
+ 3. Nhấn phím x để xóa ký tự không mong muốn.
+
+ 4. Lặp lại các bước từ 2 tới 4 để sửa lại câu.
+
+---> Emm xiinh em đứnng chỗ nào cũnkg xinh.
+
+ 5. Câu trên đã sửa xong, hãy chuyển tới Bài 1.4.
+
+Chú ý: Khi học theo cuốn hướng dẫn này đừng cố nhớ, mà học từ thực hành.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 1.4: SOẠN THẢO VĂN BẢN - CHÈN
+
+
+ ** Trong chế độ Câu lệnh nhấn i để chèn văn bản. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu ---> đầu tiên.
+
+ 2. Để dòng thứ nhất giống hệt với dòng thứ hai, di chuyển con trỏ lên ký tự
+ đầu tiên NGAY SAU chỗ muốn chèn văn bản.
+
+ 3. Nhấn i và gõ văn bản cần thêm.
+
+ 4. Sau mỗi lần chèn từ còn thiếu nhấn <ESC> để trở lại chế dộ Câu lệnh.
+ Lặp lại các bước từ 2 tới 4 để sửa câu này.
+
+---> Mot lam chang nen , ba cay chum lai hon cao.
+---> Mot cay lam chang nen non, ba cay chum lai nen hon nui cao.
+
+ 5. Sau khi thấy quen với việc chèn văn bản hãy chuyển tới phần tổng kết
+ ở dưới.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 1
+
+
+ 1. Con trỏ được di chuyển bởi các phím mũi tên hoặc các phím hjkl.
+ h (trái) j (xuống) k (lên) l (phải)
+
+ 2. Để vào Vim (từ dấu nhắc %) gõ: vim TÊNTẬPTIN <ENTER>
+
+ 3. Muốn thoát Vim gõ: <ESC> :q! <ENTER> để vứt bỏ mọi thay đổi.
+ HOẶC gõ: <ESC> :wq <ENTER> để ghi nhớ thay đổi.
+
+ 4. Để xóa bỏ ký tự nằm dưới con trỏ trong chế độ Câu lệnh gõ: x
+
+ 5. Để chèn văn bản tại vị trí con trỏ trong chế độ Câu lệnh gõ:
+ i văn bản sẽ nhập <ESC>
+
+CHÚ Ý: Nhấn <ESC> sẽ đưa bạn vào chế độ Câu lệnh hoặc sẽ hủy bỏ một câu lệnh
+ hay đoạn câu lệnh không mong muốn.
+
+Bây giờ chúng ta tiếp tục với Bài 2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.1: CÁC LỆNH XÓA
+
+
+ ** Gõ dw để xóa tới cuối một từ. **
+
+ 1. Nhấn <ESC> để chắc chắn là bạn đang trong chế độ Câu lệnh.
+
+ 2. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 3. Di chuyển con trỏ tới ký tự đầu của từ cần xóa.
+
+ 4. Gõ dw để làm từ đó biến mất.
+
+ CHÚ Ý: các ký tự dw sẽ xuất hiện trên dòng cuối cùng của màn hình khi bạn gõ
+ chúng. Nếu bạn gõ nhầm, hãy nhấn <ESC> và làm lại từ đầu.
+
+---> Khi trái tỉm tìm tim ai như mùa đông giá lạnh lanh
+ Anh đâu thành cánh én nhỏ trùng khơi.
+
+ 5. Lặp lại các bước cho đến khi sửa xong câu thơ rồi chuyển tới Bài 2.2.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.2: CÁC CÂU LỆNH XÓA KHÁC
+
+
+ ** gõ d$ để xóa tới cuối một dòng. **
+
+ 1. Nhấn <ESC> để chắc chắn là bạn đang trong chế độ Câu lệnh.
+
+ 2. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 3. Di chuyển con trỏ tới cuối câu đúng (SAU dấu . đầu tiên).
+
+ 4. Gõ d$ để xóa tới cuối dòng.
+
+---> Đã qua đi những tháng năm khờ dại. thừa thãi.
+
+
+ 5. Chuyển tới Bài 2.3 để hiểu cái gì đang xảy ra.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.3: CÂU LỆNH VÀ ĐỐI TƯỢNG
+
+
+ Câu lệnh xóa d có dạng như sau:
+
+ [số] d đối_tượng HOẶC d [số] đối_tượng
+ Trong đó:
+ số - là số lần thực hiện câu lệnh (không bắt buộc, mặc định=1).
+ d - là câu lệnh xóa.
+ đối_tượng - câu lệnh sẽ thực hiện trên chúng (liệt kê phía dưới).
+
+ Danh sách ngắn của đối tượng:
+ w - từ con trỏ tới cuối một từ, bao gồm cả khoảng trắng.
+ e - từ con trỏ tới cuối một từ, KHÔNG bao gồm khoảng trắng.
+ $ - từ con trỏ tới cuối một dòng.
+
+CHÚ Ý: Dành cho những người ham tìm hiểu, chỉ nhấn đối tượng trong chế độ Câu
+ lệnh mà không có câu lệnh sẽ di chuyển con trỏ như trong danh sách trên.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.4: TRƯỜNG HỢP NGOẠI LỆ CỦA QUY LUẬT 'CÂU LỆNH-ĐỐI TƯỢNG'
+
+
+ ** Gõ dd để xóa cả một dòng. **
+
+ Người dùng thường xuyên xóa cả một dòng, vì thế các nhà phát triển Vi đã
+ quyết định dùng hai chữ d để đơn giản hóa thao tác này.
+
+ 1. Di chuyển con trỏ tới dòng thứ hai trong cụm phía dưới.
+ 2. Gõ dd để xóa dòng này.
+ 3. Bây giờ di chuyển tới dòng thứ tư.
+ 4. Gõ 2dd (hãy nhớ lại bộ ba số-câu lệnh-đối tượng) để xóa hai dòng.
+
+ 1) Trong tim em khắc sâu bao kỉ niệm
+ 2) Tình yêu chân thành em dành cả cho anh
+ 3) Dẫu cuộc đời như bể dâu thay đổi
+ 4) Anh mãi là ngọn lửa ấm trong đêm
+ 5) Đã qua đi những tháng năm khờ dại
+ 7) Hãy để tự em lau nước mắt của mình
+ 8) Lặng lẽ sống những đêm dài bất tận
+ 9) Bao khổ đau chờ tia nắng bình minh
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 2.5: CÂU LỆNH "HỦY THAO TÁC"
+
+
+ ** Nhấn u để hủy bỏ những câu lệnh cuối cùng, U để sửa cả một dòng. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu ---> và đặt con trỏ trên từ có lỗi
+ đầu tiên
+ 2. Gõ x để xóa chữ cái gây ra lỗi đầu tiên.
+ 3. Bây giờ gõ u để hủy bỏ câu lệnh vừa thự hiện (xóa chữ cái).
+ 4. Dùng câu lệnh x để sửa lỗi cả dòng này.
+ 5. Bây giờ gõ chữ U hoa để phục hồi trạng thái ban đầu của dòng.
+ 6. Bây giờ gõ u vài lần để hủy bỏ câu lệnh U và các câu lệnh trước.
+ 7. Bây giờ gõ CTRL-R (giữ phím CTRL và gõ R) và lầu để thực hiện
+ lại các câu lệnh (hủy bỏ các câu lệnh hủy bỏ).
+
+---> Câyy ccó cộii, nuước csó nguuồn.
+
+ 8. Đây là những câu lệnh rất hữu ích. Bây giờ chuyển tới Tổng kết Bài 2.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 2
+
+
+ 1. Để xóa từ con trỏ tới cuối một từ gõ: dw
+
+ 2. Để xóa từ con trỏ tới cuối một dòng gõ: d$
+
+ 3. Để xóa cả một dòng gõ: dd
+
+ 4. Một câu lệnh trong chế độ Câu lệnh có dạng:
+
+ [số] câu_lệnh đối_tượng HOẶC câu_lệnh [số] đối_tượng
+ trong đó:
+ số - là số lần thực hiện câu lệnh (không bắt buộc, mặc định=1).
+ câu_lệnh - là những gì thực hiện, ví dụ d dùng để xóa.
+ đối_tượng - câu lệnh sẽ thực hiện trên chúng, ví dụ w (từ),
+ $ (tới cuối một dòng), v.v...
+
+ 5. Để hủy bỏ thao tác trước, gõ: u (chữ u thường)
+ Để hủy bỏ tất cả các thao tác trên một dòng, gõ: U (chữ U hoa)
+ Để hủy bỏ các câu lệnh hủy bỏ, gõ: CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 3.1: CÂU LỆNH DÁN
+
+
+ ** Gõ p để dán những gì vừa xóa tới sau con trỏ. **
+
+ 1. Di chuyển con trỏ tới dòng đầu tiên trong cụm ở dưới.
+
+ 2. Gõ dd để xóa và ghi lại một dòng trong bộ nhớ đệm của Vim.
+
+ 3. Di chuyển con trỏ tới dòng Ở TRÊN chỗ cần dán.
+
+ 4. Trong chế độ Câu lệnh, gõ p để thay thế dòng.
+
+ 5. Lặp lại các bước từ 2 tới 4 để đặt các dòng theo đúng thứ tự của chúng.
+
+ d) Niềm vui như gió xưa bay nhè nhẹ
+ b) Em vẫn mong anh sẽ đến với em
+ c) Đừng để em mất đi niềm hy vọng đó
+ a) Ai sẽ giúp em vượt qua sóng gió
+ e) Dễ ra đi khó giữ lại bên mình
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 3.2: CÂU LỆNH THAY THẾ
+
+
+ ** Gõ r và một ký tự để thay thế ký tự nằm dưới con trỏ. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Di chuyển con trỏ tới ký tự gõ sai đầu tiên.
+
+ 3. Gõ r và ký tự đúng.
+
+ 4. Lặp lại các bước từ 2 đến 4 để sửa cả dòng.
+
+---> "Trên đời nài làm gì có đườmg, người to đi mãi rồi thànk đường là tHôi"
+---> "Trên đời này làm gì có đường, người ta đi mãi rồi thành đường mà thôi"
+
+ 5. Bây giờ chuyển sang Bài 3.3.
+
+CHÚ Ý: Hãy nhớ rằng bạn cần thực hành, không nên "học vẹt".
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 3.3: CÂU LỆNH THAY ĐỔI
+
+
+ ** Để thay đổi một phần hay cả một từ, gõ cw . **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Đặt con trỏ trên chữ trong.
+
+ 3. Gõ cw và sửa lại từ (trong trường hợp này, gõ 'ine'.)
+
+ 4. Gõ <ESC> và chuyển tới lỗi tiếp theo (chữ cái đầu tiên trong số cần thay.)
+
+ 5. Lặp lại các bước 3 và 4 cho tới khi thu được dòng như dòng thứ hai.
+
+---> Trên dùgn này có một dầy từ cần tyays đổi, sử dunk câu lệnh thay đổi.
+---> Trên dong này có một vai từ cần thay đổi, sử dung câu lệnh thay đổi.
+
+Chú ý rằng cw không chỉ thay đổi từ, nhưng còn đưa bạn vào chế độ chèn.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 3.4: TIẾP TỤC THAY ĐỔI VỚI c
+
+
+ ** Câu lệnh thay đổi được sử dụng với cùng đối tượng như câu lệnh xóa. **
+
+ 1. Câu lệnh thay đổi làm việc tương tự như câu lệnh xóa. Định dạng như sau:
+
+ [số] c đối_tượng HOẶC c [số] đối_tượng
+
+ 2. Đối tượng cũng giống như ở trên, ví dụ w (từ), $ (cuối dòng), v.v...
+
+ 3. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 4. Di chuyển con trỏ tới dòng có lỗi đầu tiên.
+
+ 5. Gõ c$ để sửa cho giống với dòng thứ hai và gõ <ESC>.
+
+---> Doan cuoi dong nay can sua de cho giong voi dong thu hai.
+---> Doan cuoi dong nay can su dung cau lenh c$ de sua.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 3
+
+
+ 1. Để dán đoạn văn bản vừa xóa, gõ p. Câu lệnh này sẽ đặt đoạn văn bản này
+ PHÍA SAU con trỏ (nếu một dòng vừa bị xóa, dòng này sẽ được đặt vào dòng
+ nằm dưới con trỏ).
+
+ 2. Để thay thế ký tự dưới con trỏ, gõ r và sau đó gõ
+ ký tự muốn thay vào.
+
+ 3. Câu lệnh thay đổi cho phép bạn thay đổi đối tượng chỉ ra từ con
+ trỏ tới cuối đối tượng. vd. Gõ cw để thay đổi từ
+ con trỏ tới cuối một từ, c$ để thay đổi tới cuối một dòng.
+
+ 4. Định dạng để thay đổi:
+
+ [số] c đối_tượng HOẶC c [số] đối_tượng
+
+Bây giờ chúng ta tiếp tục bài học mới.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 4.1: THÔNG TIN VỀ TẬP TIN VÀ VỊ TRÍ TRONG TẬP TIN
+
+
+ ** Gõ CTRL-g để hiển thị vị trí của bạn trong tập tin và thông tin về tập tin.
+ Gõ SHIFT-G để chuyển tới một dòng trong tập tin. **
+
+ Chú ý: Đọc toàn bộ bài học này trước khi thực hiện bất kỳ bước nào!!
+
+ 1. Giữ phím Ctrl và nhấn g . Một dòng thông tin xuất hiện tại cuối trang
+ với tên tập tin và dòng mà bạn đang nằm trên. Hãy nhớ số dòng này
+ Cho bước số 3.
+
+ 2. Nhấn shift-G để chuyển tới cuối tập tin.
+
+ 3. Gõ số dòng mà bạn đã nằm trên và sau đó shift-G. Thao tác này sẽ đưa bạn
+ trở lại dòng mà con trỏ đã ở trước khi nhấn tổ hợp Ctrl-g.
+ (Khi bạn gõ số, chúng sẽ KHÔNG hiển thị trên màn hình.)
+
+ 4. Nếu bạn cảm thấy đã hiểu rõ, hãy thực hiện các bước từ 1 tới 3.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 4.2: CÂU LỆNH TÌM KIẾM
+
+
+ ** Gõ / và theo sau là cụm từ muốn tìm kiếm. **
+
+ 1. Trong chế độ Câu lệnh gõ ký tự / .Chú ý rằng ký tự này và con trỏ sẽ
+ xuất hiện tại cuối màn hình giống như câu lệnh : .
+
+ 2. Bây giờ gõ 'loiiiii' <ENTER>. Đây là từ bạn muốn tìm.
+
+ 3. Để tìm kiếm cụm từ đó lần nữa, đơn giản gõ n .
+ Để tìm kiếm cụm từ theo hướng ngược lại, gõ Shift-N .
+
+ 4. Nếu bạn muối tìm kiếm cụm từ theo hướng ngược lại đầu tập tin, sử dụng
+ câu lệnh ? thay cho /.
+
+---> "loiiiii" là những gì không đúng lắm; loiiiii thường xuyên xảy ra.
+
+Chú ý: Khi tìm kiếm đến cuối tập tin, việc tìm kiếm sẽ tiếp tục từ đầu
+ tập tin này.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 4.3: TÌM KIẾM CÁC DẤU NGOẶC SÁNH ĐÔI
+
+
+ ** Gõ % để tìm kiếm ),], hay } . **
+
+ 1. Đặt con trỏ trên bất kỳ một (, [, hay { nào trong dòng có dấu --->.
+
+ 2. Bây giờ gõ ký tự % .
+
+ 3. Con trỏ sẽ di chuyển đến dấu ngoặc tạo cặp (dấu đóng ngoặc).
+
+ 4. Gõ % để chuyển con trỏ trở lại dấu ngoặc đầu tiên (dấu mở ngoặc).
+
+---> Đây là ( một dòng thử nghiệm với các dấu ngoặc (, [ ] và { } . ))
+
+Chú ý: Rất có ích khi sửa lỗi chương trình, khi có các lỗi thừa thiếu dấu ngoặc!
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 4.4: MỘT CÁCH SỬA LỖI
+
+
+ ** Gõ :s/cũ/mới/g để thay thế 'mới' vào 'cũ'. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Gõ :s/duou/ruou <ENTER> . Chú ý rằng câu lệnh này chỉ thay đổi từ tìm
+ thấy đầu tiên trên dòng (từ 'duou' đầu dòng).
+
+ 3. Bây giờ gõ :s/duou/ruou/g để thực hiện thay thế trên toàn bộ dòng.
+ Lệnh này sẽ thay thế tất cả những từ ('duou') tìm thấy trên dòng.
+
+---> duou ngon phai co ban hie. Khong duou cung khong hoa.
+
+ 4. Để thay thế thực hiện trong đoạn văn bản giữa hai dòng,
+ gõ :#,#s/cũ/mới/g trong đó #,# là số thứ tự của hai dòng.
+ Gõ :%s/cũ/mới/g để thực hiện thay thế trong toàn bộ tập tin.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 4
+
+
+ 1. Ctrl-g vị trí của con trỏ trong tập tin và thông tin về tập tin.
+ Shift-G di chuyển con trỏ tới cuối tập tin. Số dòng và theo sau
+ là Shift-G di chuyển con trỏ tới dòng đó.
+
+ 2. Gõ / và cụm từ theo sau để tìm kiếm cụm từ VỀ PHÍA TRƯỚC.
+ Gõ ? và cụm từ theo sau để tìm kiếm cụm từ NGƯỢC TRỞ LẠI.
+ Sau một lần tìm kiếm gõ n để tìm kiếm cụm từ lại một lần nữa theo hướng
+ đã tìm hoặc Shift-N để tìm kiếm theo hướng ngược lại.
+
+ 3. Gõ % khi con trỏ nằm trên một (,),[,],{, hay } sẽ chỉ ra vị trí của
+ dấu ngoặc còn lại trong cặp.
+
+ 4. Để thay thế 'mới' cho 'cũ' đầu tiên trên dòng, gõ :s/cũ/mới
+ Để thay thế 'mới' cho tất cả 'cũ' trên dòng, gõ :s/cũ/mới/g
+ Để thay thế giữa hai dòng, gõ :#,#s/cũ/mới/g
+ Để thay thế trong toàn bộ tập tin, gõ :%s/cũ/mới/g
+ Để chương trình hỏi lại trước khi thay thế, thêm 'c' :%s/cũ/mới/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Lesson 5.1: CÁCH THỰC HIỆN MỘT CÂU LỆNH NGOẠI TRÚ
+
+
+ ** Gõ :! theo sau là một câu lệnh ngoại trú để thực hiện câu lệnh đó. **
+
+ 1. Gõ câu lệnh quen thuộc : để đặt con trỏ tại cuối màn hình.
+ Thao tác này cho phép bạn nhập một câu lệnh.
+
+ 2. Bây giờ gõ ký tự ! (chấm than). Ký tự này cho phép bạn
+ thực hiện bất kỳ một câu lệnh shell nào.
+
+ 3. Ví dụ gõ ls theo sau dấu ! và gõ <ENTER>. Lệnh này
+ sẽ hiển thị nội dung của thư mục hiện thời, hoặc sử dụng
+ lệnh :!dir nếu ls không làm việc.
+
+Chú ý: Có thể thực hiện bất kỳ câu lệnh ngoại trú nào theo cách này.
+
+Chú ý: Tất cả các câu lệnh : cần kết thúc bởi phím <ENTER>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 5.2: GHI LẠI CÁC TẬP TIN
+
+
+ ** Để ghi lại các thay đổi, gõ :w TÊNTỆPTIN. **
+
+ 1. Gõ :!dir hoặc :!ls để lấy bảng liệt kê thư mục hiện thời.
+ Như bạn đã biết, bạn cần gõ <ENTER> để thực hiện.
+
+ 2. Chọn một tên tập tin chưa có, ví dụ TEST.
+
+ 3. Bây giờ gõ: :w TEST (trong đó TEST là tên tập tin bạn đã chọn.)
+
+ 4. Thao tác này ghi toàn bộ tập tin (Hướng dẫn dùng Vim) dưới tên TEST.
+ Để kiểm tra lại, gõ :!dir một lần nữa để liệt kê thư mục.
+
+Chú ý: Nếu bạn thoát khỏi Vim và quay trở lại với tên tập tin TEST, thì tập
+ tin sẽ là bản sao của hướng dẫn tại thời điểm bạn ghi lại.
+
+ 5. Bây giờ xóa bỏ tập tin (MS-DOS): :!del TEST
+ hay (Unix): :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 5.3: CÂU LỆNH GHI CHỌN LỌC
+
+
+ ** Để ghi một phần của tập tin, gõ :#,# w TÊNTẬPTIN **
+
+ 1. Gõ lại một lần nữa :!dir hoặc :!ls để liệt kê nội dung thư mục
+ rồi chọn một tên tập tin thích hợp, ví dụ TEST.
+
+ 2. Di chuyển con trỏ tới đầu trang này, rồi gõ Ctrl-g để tìm ra số thứ
+ tự của dòng đó. HÃY NHỚ SỐ THỨ TỰ NÀY!
+
+ 3. Bây giờ di chuyển con trỏ tới dòng cuối trang và gõ lại Ctrl-g lần nữa.
+ HÃY NHỚ CẢ SỐ THỨ TỰ NÀY!
+
+ 4. Để CHỈ ghi lại một phần vào một tập tin, gõ :#,# w TEST trong đó #,#
+ là hai số thứ tự bạn đã nhớ (đầu,cuối) và TEST là tên tập tin.
+
+ 5. Nhắc lại, xem tập tin của bạn có ở đó không với :!dir nhưng ĐỪNG xóa.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 5.4: ĐỌC VÀ KẾT HỢP CÁC TẬP TIN
+
+
+ ** Để chèn nội dung của một tập tin, gõ :r TÊNTẬPTIN **
+
+ 1. Gõ :!dir để chắc chắn là có tệp tin TEST.
+
+ 2. Đặt con trỏ tại đầu trang này.
+
+CHÚ Ý: Sau khi thực hiện Bước 3 bạn sẽ thấy Bài 5.3. Sau đó cần di chuyển
+ XUỐNG bài học này lần nữa.
+
+ 3. Bây giờ dùng câu lệnh :r TEST để đọc tập tin TEST, trong đó TEST là
+ tên của tập tin.
+
+CHÚ Ý: Tập tin được đọc sẽ đặt bắt đầu từ vị trí của con trỏ.
+
+ 4. Để kiểm tra lại, di chuyển con trỏ ngược trở lại và thấy rằng bây giờ
+ có hai Bài 5.3, bản gốc và bản vừa chèn.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 5
+
+
+ 1. :!câulệnh thực hiện một câu lệnh ngoại trú
+
+ Một vài ví dụ hữu ích:
+ (MS-DOS) (Unix)
+ :!dir :!ls - liệt kê nội dung một thư mục.
+ :!del TÊNTẬPTIN :!rm TÊNTẬPTIN - xóa bỏ tập tin TÊNTẬPTIN.
+
+ 2. :w TÊNTẬPTIN ghi tập tin hiện thời của Vim lên đĩa với tên TÊNTẬPTIN.
+
+ 3. :#,#w TÊNTẬPTIN ghi các dòng từ # tới # vào tập tin TÊNTẬPTIN.
+
+ 4. :r TÊNTẬPTIN đọc tập tin trên đĩa TÊNTẬPTIN và chèn nội dung của nó vào
+ tập tin hiện thời sau vị trí của con trỏ.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 6.1: CÂU LỆNH TẠO DÒNG
+
+
+ ** Gõ o để mở một dòng phía dưới con trỏ và chuyển vào chế độ Soạn thảo. **
+
+ 1. Di chuyển con trỏ tới dòng có dấu --->.
+
+ 2. Gõ o (chữ thường) để mở một dòng BÊN DƯỚI con trỏ và chuyển vào chế độ
+ Soạn thảo.
+
+ 3. Bây giờ sao chép dòng có dấu ---> và nhấn <ESC> để thoát khỏi chế độ Soạn
+ thảo.
+
+---> Sau khi gõ o con trỏ sẽ đặt trên dòng vừa mở trong chế độ Soạn thảo.
+
+ 4. Để mở một dòng Ở TRÊN con trỏ, đơn giản gõ một chữ O hoa, thay cho
+ chữ o thường. Hãy thử thực hiện trên dòng dưới đây.
+Di chuyển con trỏ tới dòng này, rồi gõ Shift-O sẽ mở một dòng trên nó.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 6.2: CÂU LỆNH THÊM VÀO
+
+
+ ** Gõ a để chèn văn bản vào SAU con trỏ. **
+
+ 1. Di chuyển con trỏ tới cuối dòng đầu tiên có ký hiệu --->
+ bằng cách gõ $ trong chế độ câu lệnh.
+
+ 2. Gõ a (chữ thường) để thêm văn bản vào SAU ký tự dưới con trỏ.
+ (Chữ A hoa thêm văn bản vào cuối một dòng.)
+
+Chú ý: Lệnh này thay cho việc gõ i , ký tự cuối cùng, văn bản muốn chèn,
+ <ESC>, mũi tên sang phải, và cuối cùng, x , chỉ để thêm vào cuối dòng!
+
+ 3. Bây giờ thêm cho đủ dòng thứ nhất. Chú ý rằng việc thêm giống hệt với
+ việc chèn, trừ vị trí chèn văn bản.
+
+---> Dong nay cho phep ban thuc hanh
+---> Dong nay cho phep ban thuc hanh viec them van ban vao cuoi dong.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 6.3: MỘT CÁCH THAY THẾ KHÁC
+
+
+ ** Gõ chữ cái R hoa để thay thế nhiều ký tự. **
+
+ 1. Di chuyển con trỏ tới cuối dòng đầu tiên có ký hiệu --->.
+
+ 2. Đặt con trỏ tại chữ cái đầu của từ đầu tiên khác với dòng có dấu
+ ---> tiếp theo (từ 'tren').
+
+ 3. Bây giờ gõ R và thay thế phần còn lại của dòng thứ nhất bằng cách gõ
+ đè lên văn bản cũ để cho hai dòng giống nhau.
+
+---> De cho dong thu nhat giong voi dong thu hai tren trang nay.
+---> De cho dong thu nhat giong voi dong thu hai, go R va van ban moi.
+
+ 4. Chú ý rằng khi bạn nhấn <ESC> để thoát, đoạn văn bản không sửa đổi sẽ
+ được giữ nguyên.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 6.4: THIẾT LẬP CÁC THAM SỐ
+
+ ** Thiết lập một tùy chọn để việc tìm kiếm hay thay thế lờ đi kiểu chữ **
+
+ 1. Tìm kiếm từ 'lodi' bằng cách gõ:
+ /lodi
+ Lặp lại vài lần bằng phím n.
+
+ 2. Đặt tham số 'ic' (Lodi - ignore case) bằng cách gõ:
+ :set ic
+
+ 3. Bây giờ thử lại tìm kiếm 'lodi' bằng cách gõ: n
+ Lặp lại vài lần bằng phím n.
+
+ 4. Đặt các tham số 'hlsearch' và 'incsearch':
+ :set hls is
+
+ 5. Bây giờ nhập lại câu lệnh tìm kiếm một lần nữa và xem cái gì xảy ra:
+ /lodi
+
+ 6. Để xóa bỏ việc hiện sáng từ tìm thấy, gõ:
+ :nohlsearch
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ TỔNG KẾT BÀI 6
+
+
+ 1. Gõ o mở một dòng phía DƯỚI con trỏ và đặt con trỏ trên dòng vừa mở
+ trong chế độ Soạn thảo.
+ Gõ một chữ O hoa để mở dòng phía TRÊN dòng của con trỏ.
+
+ 2. Gõ a để chèn văn bản vào SAU ký tự nằm dưới con trỏ.
+ Gõ một chữ A hoa tự động thêm văn bản vào cuối một dòng.
+
+ 3. Gõ một chữ R hoa chuyển vào chế độ Thay thế cho đến khi nhấn <ESC>.
+
+ 4. Gõ ":set xxx" sẽ đặt tham số "xxx"
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 7: CÂU LỆNH TRỢ GIÚP
+
+
+ ** Sử dụng hệ thống trợ giúp có sẵn **
+
+ Vim có một hệ thống trợ giúp đầy đủ. Để bắt đầu, thử một trong ba
+ lệnh sau:
+ - nhấn phím <HELP> (nếu bàn phím có)
+ - nhấn phím <F1> (nếu bàn phím có)
+ - gõ :help <ENTER>
+
+ Gõ :q <ENTER> để đóng cửa sổ trợ giúp.
+
+ Bạn có thể tìm thấy trợ giúp theo một đề tài, bằng cách đưa tham số tới
+ câu lệnh ":help". Hãy thử (đừng quên gõ <ENTER>):
+
+ :help w
+ :help c_<T
+ :help insert-index
+ :help user-manual
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Bài 8: TẠO MỘT SCRIPT KHỞI ĐỘNG
+
+ ** Bật các tính năng của Vim **
+
+ Vim có nhiều tính năng hơn Vi, nhưng hầu hết chúng bị tắt theo mặc định.
+ Để sử dụng các tính năng này bạn cần phải tạo một tập tin "vimrc".
+
+ 1. Soạn thảo tệp tin "vimrc", phụ thuộc vào hệ thống của bạn:
+ :edit ~/.vimrc đối với Unix
+ :edit $VIM/_vimrc đối với MS-Windows
+
+ 2. Bây giờ đọc tập tin "vimrc" ví dụ:
+
+ :read $VIMRUNTIME/vimrc_example.vim
+
+ 3. Ghi lại tập tin:
+
+ :write
+
+ Trong lần khởi động tiếp theo, Vim sẽ sử dụng việc hiện sáng cú pháp.
+ Bạn có thể thêm các thiết lập ưa thích vào tập tin "vimrc" này.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Bài học hướng dẫn sử dụng Vim (Vim Tutor) kết thúc tại đây. Bài học đưa ra
+ cái nhìn tổng quát về trình soạn thảo Vim, chỉ đủ để bạn có thể sử dụng
+ trình soạn thảo một cách dễ dàng. Bài học còn rất xa để có thể nói là đầy
+ đủ vì Vim có rất rất nhiều câu lệnh. Tiếp theo xin hãy đọc hướng dẫn người
+ dùng: ":help user-manual".
+
+ Cuốn sách sau được khuyên dùng cho việc nghiên cứu sâu hơn:
+ Vim - Vi Improved - Tác giả: Steve Oualline
+ Nhà xuất bản: New Riders
+ Cuốn sách đầu tiên dành hoàn toàn cho Vim. Đặc biệt có ích cho người mới.
+ Có rất nhiều ví dụ và tranh ảnh.
+ Hãy xem: http://iccf-holland.org/click5.html
+
+ Cuốn sách tiếp theo này xuất bản sớm hơn và nói nhiều về Vi hơn là Vim,
+ nhưng cũng rất nên đọc:
+ Learning the Vi Editor - Tác giả: Linda Lamb
+ Nhà xuất bản: O'Reilly & Associates Inc.
+ Đây là một cuốn sách hay và cho bạn biết tất cả cách thực hiện những gì muốn
+ làm với Vi. Lần xuất bản thứ sáu đã thêm thông tin về Vim.
+
+ Bài học hướng dẫn này viết bởi Michael C. Pierce và Robert K. Ware,
+ Colorado School of Mines sử dụng ý tưởng của Charles Smith,
+ Colorado State University. E-mail: bware@mines.colorado.edu.
+
+ Sửa đổi cho Vim bởi Bram Moolenaar.
+
+ Dịch bởi: Phan Vĩnh Thịnh <teppi@vnlinux.org>, 2005
+ Translator: Phan Vinh Thịnh <teppi@vnlinux.org>, 2005
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/vimdir.info b/runtime/tutor/vimdir.info
new file mode 100755
index 0000000..ddb2a14
--- /dev/null
+++ b/runtime/tutor/vimdir.info
Binary files differ
diff --git a/runtime/tutor/vimtutor.bat b/runtime/tutor/vimtutor.bat
new file mode 100644
index 0000000..b147a8c
--- /dev/null
+++ b/runtime/tutor/vimtutor.bat
@@ -0,0 +1,67 @@
+:: Start Vim on a copy of the tutor file.
+@echo off
+
+:: Usage: vimtutor [-console] [xx]
+::
+:: -console means gvim will not be used
+:: xx is a language code like "es" or "nl".
+:: When an xx argument is given, it tries loading that tutor.
+:: When this fails or no xx argument was given, it tries using 'v:lang'
+:: When that also fails, it uses the English version.
+
+:: Use Vim to copy the tutor, it knows the value of $VIMRUNTIME
+FOR %%d in (. %TMP% %TEMP%) DO IF EXIST %%d\nul SET TUTORCOPY=%%d\$tutor$
+
+SET xx=%1
+
+IF NOT .%1==.-console GOTO use_gui
+SHIFT
+SET xx=%1
+GOTO use_vim
+:use_gui
+
+:: Try making a copy of tutor with gvim. If gvim cannot be found, try using
+:: vim instead. If vim cannot be found, alert user to check environment and
+:: installation.
+
+:: The script tutor.vim tells Vim which file to copy.
+:: For Windows NT "start" works a bit differently.
+IF .%OS%==.Windows_NT GOTO ntaction
+
+start /w gvim -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim"
+IF ERRORLEVEL 1 GOTO use_vim
+
+:: Start gvim without any .vimrc, set 'nocompatible'
+start /w gvim -u NONE -c "set nocp" %TUTORCOPY%
+
+GOTO end
+
+:ntaction
+start "dummy" /b /w gvim -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim"
+IF ERRORLEVEL 1 GOTO use_vim
+
+:: Start gvim without any .vimrc, set 'nocompatible'
+start "dummy" /b /w gvim -u NONE -c "set nocp" %TUTORCOPY%
+
+GOTO end
+
+:use_vim
+:: The script tutor.vim tells Vim which file to copy
+vim -u NONE -c "so $VIMRUNTIME/tutor/tutor.vim"
+IF ERRORLEVEL 1 GOTO no_executable
+
+:: Start vim without any .vimrc, set 'nocompatible'
+vim -u NONE -c "set nocp" %TUTORCOPY%
+
+GOTO end
+
+:no_executable
+ECHO.
+ECHO.
+ECHO No vim or gvim found in current directory or PATH.
+ECHO Check your installation or re-run install.exe
+
+:end
+:: remove the copy of the tutor
+IF EXIST %TUTORCOPY% DEL %TUTORCOPY%
+SET xx=