Update runtime files
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index acd0f5c..cd66041 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt*	For Vim version 8.2.  Last change: 2022 Apr 25
+*builtin.txt*	For Vim version 8.2.  Last change: 2022 May 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2425,7 +2425,7 @@
 			all typeahead will be consumed by the last call.
 		'c'	Remove any script context when executing, so that
 			legacy script syntax applies, "s:var" does not work,
-			etc.  Note that if the keys being using set a script
+			etc.  Note that if the string being fed sets a script
 			context this still applies.
 		'!'	When used with 'x' will not end Insert mode. Can be
 			used in a test when a timer is set to exit Insert mode
diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt
index ff6995d..d3e0a9c 100644
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 8.2.  Last change: 2022 Mar 05
+*change.txt*    For Vim version 8.2.  Last change: 2022 May 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index 8b49134..b2928a5 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 8.2.  Last change: 2022 Apr 09
+*cmdline.txt*   For Vim version 8.2.  Last change: 2022 Apr 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 39208e4..ac61023 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 8.2.  Last change: 2022 Apr 17
+*eval.txt*	For Vim version 8.2.  Last change: 2022 May 06
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -523,8 +523,8 @@
 A key is always a String.  You can use a Number, it will be converted to a
 String automatically.  Thus the String '4' and the number 4 will find the same
 entry.  Note that the String '04' and the Number 04 are different, since the
-Number will be converted to the String '4'.  The empty string can also be used
-as a key.
+Number will be converted to the String '4', leading zeros are dropped.  The
+empty string can also be used as a key.
 
 In |Vim9| script literaly keys can be used if the key consists of alphanumeric
 characters, underscore and dash, see |vim9-literal-dict|.
@@ -534,7 +534,8 @@
 digits, '-' and '_'.  Example: >
 	:let mydict = #{zero: 0, one_key: 1, two-key: 2, 333: 3}
 Note that 333 here is the string "333".  Empty keys are not possible with #{}.
-In |Vim9| script the #{} form cannot be used.
+In |Vim9| script the #{} form cannot be used because it can be confused with
+the start of a comment.
 
 A value can be any expression.  Using a Dictionary for a value creates a
 nested Dictionary: >
@@ -3252,20 +3253,20 @@
 			{endmarker}.
 
 			If "eval" is not specified, then each line of text is
-			used as a |literal-string|.  If "eval" is specified,
-			then any Vim expression in the form ``={expr}`` is
-			evaluated and the result replaces the expression.
+			used as a |literal-string|, except that single quotes
+			doe not need to be doubled.
+			If "eval" is specified, then any Vim expression in the
+			form {expr} is evaluated and the result replaces the
+			expression, like with |interp-string|.
 			Example where $HOME is expanded: >
 				let lines =<< trim eval END
 				  some text
-				  See the file `=$HOME`/.vimrc
+				  See the file {$HOME}/.vimrc
 				  more text
 				END
 <			There can be multiple Vim expressions in a single line
 			but an expression cannot span multiple lines.  If any
 			expression evaluation fails, then the assignment fails.
-			once the "`=" has been found {expr} and a backtick
-			must follow.  {expr} cannot be empty.
 
 			{endmarker} must not contain white space.
 			{endmarker} cannot start with a lower case character.
@@ -3318,10 +3319,10 @@
 				DATA
 
 				let code =<< trim eval CODE
-				   let v = `=10 + 20`
-				   let h = "`=$HOME`"
-				   let s = "`=Str1()` abc `=Str2()`"
-				   let n = `=MyFunc(3, 4)`
+				   let v = {10 + 20}
+				   let h = "{$HOME}"
+				   let s = "{Str1()} abc {Str2()}"
+				   let n = {MyFunc(3, 4)}
 				CODE
 <
 								*E121*
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 124cfee..8668233 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 8.2.  Last change: 2022 Apr 13
+*options.txt*	For Vim version 8.2.  Last change: 2022 May 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt
index f8b5cac..09549b5 100644
--- a/runtime/doc/quickref.txt
+++ b/runtime/doc/quickref.txt
@@ -1,4 +1,4 @@
-*quickref.txt*  For Vim version 8.2.  Last change: 2022 Apr 06
+*quickref.txt*  For Vim version 8.2.  Last change: 2022 May 05
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1350,7 +1350,7 @@
 |CTRL-W_^|	CTRL-W ^		split window and edit alternate file
 |CTRL-W_n|	CTRL-W n  or  :new	create new empty window
 |CTRL-W_q|	CTRL-W q  or  :q[uit]	quit editing and close window
-|CTRL-W_c|	CTRL-W c  or  :cl[ose]	make buffer hidden and close window
+|CTRL-W_c|	CTRL-W c  or  :clo[se]	make buffer hidden and close window
 |CTRL-W_o|	CTRL-W o  or  :on[ly]	make current window only one on the
 					   screen
 
diff --git a/runtime/doc/scroll.txt b/runtime/doc/scroll.txt
index 0126195..8035d3c 100644
--- a/runtime/doc/scroll.txt
+++ b/runtime/doc/scroll.txt
@@ -1,4 +1,4 @@
-*scroll.txt*    For Vim version 8.2.  Last change: 2022 Apr 03
+*scroll.txt*    For Vim version 8.2.  Last change: 2022 May 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index e0919b8..9e9a0f1 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 8.2.  Last change: 2022 Apr 24
+*syntax.txt*	For Vim version 8.2.  Last change: 2022 May 06
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -5238,6 +5238,9 @@
 'highlight' option default.  Note that the highlighting depends on the value
 of 'background'.  You can see the current settings with the ":highlight"
 command.
+When possible the name is highlighted in the used colors.  If this makes it
+unreadable use Visual selection.
+
 							*hl-ColorColumn*
 ColorColumn	used for the columns set with 'colorcolumn'
 							*hl-Conceal*
@@ -5329,6 +5332,8 @@
 		Also used for similar items that need to stand out.
 							*hl-CurSearch*
 CurSearch	Current match for the last search pattern (see 'hlsearch').
+		Note: this is correct after a search, but may get outdated if
+		changes are made or the screen is redrawn. 
 							*hl-SpecialKey*
 SpecialKey	Meta and special keys listed with ":map", also for text used
 		to show unprintable characters in the text, 'listchars'.
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 1a84eb4..5bf28e2 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2022 Apr 27
+*todo.txt*      For Vim version 8.2.  Last change: 2022 May 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -41,7 +41,6 @@
 Once Vim9 is stable:
 - Use Vim9 for more runtime files.
 - Check code coverage, add more tests if needed.
-	vim9execute.c  line 3500
 	vim9expr.c
 	vim9instr.c
 	vim9script.c
@@ -128,6 +127,9 @@
 - Popup attached to text property stays visible when text is deleted with
   "cc". (#7737)  "C" works OK.  "dd" also files in a buffer with a single
   line.
+- Add text property that shifts text to make room for annotation (e.g.
+  variable type).  Like the opposite of conceal.  Requires fixing the cursor
+  positioning and mouse clicks as with conceal mode.
 - Auto-indenting may cause highlighting to shift. (#7719)
 - "cc" does not call inserted_bytes(). (Axel Forsman, #5763)
 - Combining text property with 'cursorline' does not always work (Billie
@@ -152,6 +154,7 @@
 - Make prompt-buffer variant work better.
 - Add option to not open the program window.  It's not used when attaching to
   an already running program. (M. Kelly)
+- Use the optional token on requests, match the result with it. #10300
 - When only gdb window exists, on "quit" edit another buffer.
 - Termdebug does not work when Vim was built with mzscheme: gdb hangs just
   after "run".  Everything else works, including communication channel.  Not
@@ -203,7 +206,11 @@
 - When 'encoding' is not utf-8, or the job is using another encoding, setup
   conversions.
 
+String interpolation: Handle backslash and quotes in the expression normally,
+do not require escaping.
+
 Add autocmd functions. PR #10291
+  a couple of outstanding comments, wait for Yegappan to respond
 
 Can deref_func_name() and deref_function_name() be merged?
 
@@ -223,9 +230,6 @@
 Test_communicate_ipv6(): is flaky on many systems
 Fails in line 64 of Ch_communicate, no exception is thrown.
 
-Patch for Template string: #4634
-Have another look at the implementation.
-
 Rename getdigraphlist -> digraph_getlist() etc.
 
 Can "CSI nr X" be used instead of outputting spaces?  Is it faster?  #8002
@@ -328,6 +332,8 @@
 Add an option to not fetch terminal codes in xterm, to avoid flicker when t_Co
 changes.
 
+Add ??= operator, "a ??= b" works like "a = a ?? b". #10343
+
 Add an option to start_timer() to return from the input loop with K_IGNORE.
 This is useful e.g. when a popup was created that disables mappings, we need
 to return from vgetc() to make this happen.  #7011
diff --git a/runtime/doc/vim9.txt b/runtime/doc/vim9.txt
index adf0353..1877129 100644
--- a/runtime/doc/vim9.txt
+++ b/runtime/doc/vim9.txt
@@ -1,4 +1,4 @@
-*vim9.txt*	For Vim version 8.2.  Last change: 2022 Apr 14
+*vim9.txt*	For Vim version 8.2.  Last change: 2022 Apr 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -857,10 +857,16 @@
 	var dict = {["key" .. nr]: value}
 
 The key type can be string, number, bool or float.  Other types result in an
-error.  A number can be given with and without the []: >
-	var dict = {123: 'without', [456]: 'with'}
+error.  Without using [] the value is used as a string, keeping leading zeros.
+An expression given with [] is evaluated and then converted to a string.
+Leading zeros will then be dropped: >
+	var dict = {000123: 'without', [000456]: 'with'}
 	echo dict
-	{'456': 'with', '123': 'without'}
+	{'456': 'with', '000123': 'without'}
+A float only works inside [] because the dot is not accepted otherwise: >
+	var dict = {[00.013]: 'float'}
+	echo dict
+	{'0.013': 'float'}
 
 
 No :xit, :t, :k, :append, :change or :insert ~
diff --git a/runtime/doc/visual.txt b/runtime/doc/visual.txt
index e9862b1..d703d98 100644
--- a/runtime/doc/visual.txt
+++ b/runtime/doc/visual.txt
@@ -1,4 +1,4 @@
-*visual.txt*    For Vim version 8.2.  Last change: 2022 Jan 20
+*visual.txt*    For Vim version 8.2.  Last change: 2022 May 06
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/ftplugin/wget.vim b/runtime/ftplugin/wget.vim
new file mode 100644
index 0000000..7a10221
--- /dev/null
+++ b/runtime/ftplugin/wget.vim
@@ -0,0 +1,29 @@
+" Vim filetype plugin file
+" Language:     Wget configuration file (/etc/wgetrc ~/.wgetrc)
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
+" Last Change:	2022 Apr 28
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:#,://
+setlocal commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let b:undo_ftplugin = "setl fo< com< cms<"
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+  let b:browsefilter = "Wget Configuration File (wgetrc, .wgetrc)\twgetrc;.wgetrc\n" .
+	\	       "All Files (*.*)\t*.*\n"
+  let b:undo_ftplugin ..= " | unlet! b:browsefilter"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8
diff --git a/runtime/ftplugin/wget2.vim b/runtime/ftplugin/wget2.vim
new file mode 100644
index 0000000..a6845f6
--- /dev/null
+++ b/runtime/ftplugin/wget2.vim
@@ -0,0 +1,29 @@
+" Vim filetype plugin file
+" Language:     Wget2 configuration file (/etc/wget2rc ~/.wget2rc)
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
+" Last Change:	2022 Apr 28
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=:#,://
+setlocal commentstring=#\ %s
+setlocal formatoptions-=t formatoptions+=croql
+
+let b:undo_ftplugin = "setl fo< com< cms<"
+
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+  let b:browsefilter = "Wget2 Configuration File (wget2rc, .wget2rc)\twget2rc;.wget2rc\n" .
+	\	       "All Files (*.*)\t*.*\n"
+  let b:undo_ftplugin ..= " | unlet! b:browsefilter"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8
diff --git a/runtime/gvim.desktop b/runtime/gvim.desktop
index 3c5ff1c..d25a04f 100644
--- a/runtime/gvim.desktop
+++ b/runtime/gvim.desktop
@@ -12,6 +12,7 @@
 Name[ru]=GVim
 Name[sr]=GVim
 Name[tr]=GVim
+Name[uk]=GVim
 Name=GVim
 # Translators: This is the Generic Application Name used in the Vim desktop file
 GenericName[ca]=Editor de text
@@ -25,6 +26,7 @@
 GenericName[ru]=Текстовый редактор
 GenericName[sr]=Едитор текст
 GenericName[tr]=Metin Düzenleyici
+GenericName[uk]=Редактор Тексту
 GenericName=Text Editor
 # Translators: This is the comment used in the Vim desktop file
 Comment[ca]=Edita fitxers de text
@@ -38,6 +40,7 @@
 Comment[ru]=Редактирование текстовых файлов
 Comment[sr]=Уређујте текст фајлове
 Comment[tr]=Metin dosyaları düzenleyin
+Comment[uk]=Редагувати текстові файли
 Comment=Edit text files
 # The translations should come from the po file. Leave them here for now, they will
 # be overwritten by the po file when generating the desktop.file!
@@ -97,9 +100,8 @@
 Comment[ta]=உரை கோப்புகளை தொகுக்கவும்
 Comment[th]=แก้ไขแฟ้มข้อความ
 Comment[tk]=Metin faýllary editle
-Comment[uk]=Редактор текстових файлів
 Comment[vi]=Soạn thảo tập tin văn bản
-Comment[wa]=Asspougnî des fitchîs tecses
+Comment[wa]=Asspougnî des fitcs tecses
 Comment[zh_CN]=编辑文本文件
 Comment[zh_TW]=編輯文字檔
 TryExec=gvim
@@ -118,6 +120,7 @@
 Keywords[ru]=текст;текстовый редактор;
 Keywords[sr]=Текст;едитор;
 Keywords[tr]=Metin;düzenleyici;
+Keywords[uk]=текст;редактор;
 Keywords=Text;editor;
 # Translators: This is the Icon file name. Do NOT translate
 Icon=gvim
diff --git a/runtime/indent/testdir/yaml.in b/runtime/indent/testdir/yaml.in
index 32ddc60..bf99668 100644
--- a/runtime/indent/testdir/yaml.in
+++ b/runtime/indent/testdir/yaml.in
@@ -14,11 +14,6 @@
 # END_INDENT
 
 # START_INDENT
-map: multiline
-value
-# END_INDENT
-
-# START_INDENT
 map: |
 line1
 line2
diff --git a/runtime/indent/testdir/yaml.ok b/runtime/indent/testdir/yaml.ok
index becdb1b..8b38633 100644
--- a/runtime/indent/testdir/yaml.ok
+++ b/runtime/indent/testdir/yaml.ok
@@ -14,11 +14,6 @@
 # END_INDENT
 
 # START_INDENT
-map: multiline
-  value
-# END_INDENT
-
-# START_INDENT
 map: |
   line1
   line2
diff --git a/runtime/indent/yaml.vim b/runtime/indent/yaml.vim
index ed57e68..1f79841 100644
--- a/runtime/indent/yaml.vim
+++ b/runtime/indent/yaml.vim
@@ -2,7 +2,7 @@
 " Language:	YAML
 " Maintainer:	Nikolai Pavlov <zyx.vim@gmail.com>
 " Last Update:	Lukas Reineke
-" Last Change:	2021 Aug 13
+" Last Change:	2022 May 02
 
 " Only load this indent file when no other was loaded.
 if exists('b:did_indent')
@@ -54,7 +54,7 @@
 let s:c_ns_anchor_property =  '\v\&'.s:c_ns_anchor_name
 
 let s:ns_word_char = '\v[[:alnum:]_\-]'
-let s:ns_tag_char  = '\v%('.s:ns_word_char.'|[#/;?:@&=+$.~*''()])'
+let s:ns_tag_char  = '\v%(%\x\x|'.s:ns_word_char.'|[#/;?:@&=+$.~*''()])'
 let s:c_named_tag_handle     = '\v\!'.s:ns_word_char.'+\!'
 let s:c_secondary_tag_handle = '\v\!\!'
 let s:c_primary_tag_handle   = '\v\!'
@@ -63,7 +63,7 @@
             \            '|'.s:c_primary_tag_handle.')'
 let s:c_ns_shorthand_tag = '\v'.s:c_tag_handle . s:ns_tag_char.'+'
 let s:c_non_specific_tag = '\v\!'
-let s:ns_uri_char  = '\v%('.s:ns_word_char.'\v|[#/;?:@&=+$,.!~*''()[\]])'
+let s:ns_uri_char  = '\v%(%\x\x|'.s:ns_word_char.'\v|[#/;?:@&=+$,.!~*''()[\]])'
 let s:c_verbatim_tag = '\v\!\<'.s:ns_uri_char.'+\>'
 let s:c_ns_tag_property = '\v'.s:c_verbatim_tag.
             \               '\v|'.s:c_ns_shorthand_tag.
diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
index 63d25db..9f84e6d 100644
--- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
+++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
@@ -2,7 +2,7 @@
 "
 " Author: Bram Moolenaar
 " Copyright: Vim license applies, see ":help license"
-" Last Change: 2022 Apr 16
+" Last Change: 2022 May 04
 "
 " WORK IN PROGRESS - The basics works stable, more to come
 " Note: In general you need at least GDB 7.12 because this provides the
@@ -915,7 +915,7 @@
     if empty(s:k_map_saved)
       nunmap K
     else
-      call mapset('n', 0, s:k_map_saved)
+      call mapset(s:k_map_saved)
     endif
     unlet s:k_map_saved
   endif
diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim
index 2516967..f5a50bf 100644
--- a/runtime/syntax/help.vim
+++ b/runtime/syntax/help.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Vim help file
 " Maintainer:	Bram Moolenaar (Bram@vim.org)
-" Last Change:	2021 Jun 13
+" Last Change:	2022 May 01
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -215,6 +215,12 @@
 hi def link helpTodo		Todo
 hi def link helpURL		String
 
+if expand('%:p') == $VIMRUNTIME .. '/doc/syntax.txt'
+  " highlight groups with their respective color
+  import 'dist/vimhelp.vim'
+  call vimhelp.HighlightGroups()
+endif
+
 let b:current_syntax = "help"
 
 let &cpo = s:cpo_save
diff --git a/runtime/syntax/i3config.vim b/runtime/syntax/i3config.vim
index a2f50e5..6163da2 100644
--- a/runtime/syntax/i3config.vim
+++ b/runtime/syntax/i3config.vim
@@ -3,7 +3,7 @@
 " Original Author: Mohamed Boughaba <mohamed dot bgb at gmail dot com>
 " Maintainer: Quentin Hibon (github user hiqua)
 " Version: 0.4
-" Last Change: 2022 Jan 15
+" Last Change: 2022 May 05
 
 " References:
 " http://i3wm.org/docs/userguide.html#configuring
@@ -50,6 +50,10 @@
 syn keyword i3ConfigInitializeKeyword set contained
 syn match i3ConfigInitialize /^\s*set\s\+.*$/ contains=i3ConfigVariable,i3ConfigInitializeKeyword,i3ConfigColor,i3ConfigString
 
+" Include
+syn keyword i3ConfigIncludeKeyword include contained
+syn match i3ConfigInclude /^\s*include\s\+.*$/ contains=i3ConfigIncludeKeyword,i3ConfigString,i3ConfigVariable
+
 " Gaps
 syn keyword i3ConfigGapStyleKeyword inner outer horizontal vertical top right bottom left current all set plus minus toggle up down contained
 syn match i3ConfigGapStyle /^\s*\(gaps\)\s\+\(inner\|outer\|horizontal\|vertical\|left\|top\|right\|bottom\)\(\s\+\(current\|all\)\)\?\(\s\+\(set\|plus\|minus\|toggle\)\)\?\(\s\+\(-\?\d\+\|\$.*\)\)$/ contains=i3ConfigGapStyleKeyword,i3ConfigNumber,i3ConfigVariable
@@ -221,6 +225,7 @@
 hi def link i3ConfigFontNamespace                   PreProc
 hi def link i3ConfigBindArgument                    PreProc
 hi def link i3ConfigNoStartupId                     PreProc
+hi def link i3ConfigIncludeKeyword                  Identifier
 hi def link i3ConfigFontKeyword                     Identifier
 hi def link i3ConfigBindKeyword                     Identifier
 hi def link i3ConfigOrientation                     Identifier
diff --git a/runtime/syntax/plsql.vim b/runtime/syntax/plsql.vim
index 0ac53d0..7b36c0a 100644
--- a/runtime/syntax/plsql.vim
+++ b/runtime/syntax/plsql.vim
@@ -4,7 +4,7 @@
 " Previous Maintainer: Jeff Lanzarotta (jefflanzarotta at yahoo dot com)
 " Previous Maintainer: C. Laurence Gonsalves (clgonsal@kami.com)
 " URL: https://github.com/lee-lindley/vim_plsql_syntax
-" Last Change: April 25, 2022   
+" Last Change: April 28, 2022   
 " History  Lee Lindley (lee dot lindley at gmail dot com)
 "               updated to 19c keywords. refined quoting. 
 "               separated reserved, non-reserved keywords and functions
@@ -23,9 +23,6 @@
 " To enable folding (It does setlocal foldmethod=syntax)
 " let plsql_fold = 1
 "
-" If you want to try procedure folding, it has issues
-" let plsql_procedure_fold = 1
-"
 "     From my vimrc file -- turn syntax and syntax folding on,
 "     associate file suffixes as plsql, open all the folds on file open
 " let plsql_fold = 1
@@ -67,23 +64,23 @@
 
 " Operators. and words that would be something else if not in operator mode
 syn match   plsqlOperator "[-+*/=<>@"]"
-syn match   plsqlOperator "\%\(\^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\*\*\|!=\|\~=\)"
-syn match   plsqlOperator "\<\%\(NOT\|AND\|OR\|LIKE\|BETWEEN\|IN\)\>"
+syn match   plsqlOperator "\(\^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\*\*\|!=\|\~=\)"
+syn match   plsqlOperator "\<\(NOT\|AND\|OR\|LIKE\|BETWEEN\|IN\)\>"
 syn match   plsqlBooleanLiteral "\<NULL\>"
-syn match   plsqlOperator "\<IS\\_s\+\%\(NOT\_s\+\)\?NULL\>"
+syn match   plsqlOperator "\<IS\\_s\+\(NOT\_s\+\)\?NULL\>"
 "
 " conditional compilation Preprocessor directives and sqlplus define sigil
 syn match plsqlPseudo "$[$a-z][a-z0-9$_#]*"
 syn match plsqlPseudo "&"
 
-syn match plsqlReserved "\<\%\(CREATE\|THEN\|UPDATE\|INSERT\|SET\)\>"
-syn match plsqlKeyword "\<\%\(REPLACE\|PACKAGE\|FUNCTION\|PROCEDURE\|TYPE|BODY\|WHEN\|MATCHED\)\>"
+syn match plsqlReserved "\<\(CREATE\|THEN\|UPDATE\|INSERT\|SET\)\>"
+syn match plsqlKeyword "\<\(REPLACE\|PACKAGE\|FUNCTION\|PROCEDURE\|TYPE|BODY\|WHEN\|MATCHED\)\>"
 syn region plsqlUpdate 
     \ matchgroup=plsqlReserved 
     \ start="\<UPDATE\>"
     \ end="\<SET\>"
     \ contains=@plsqlIdentifiers
-syn match plsqlReserved "\<WHEN\_s\+\%\(NOT\_s\+\)\?MATCHED\_s\+THEN\_s\+\%\(UPDATE\|INSERT\)\%\(\_s\+SET\)\?"
+syn match plsqlReserved "\<WHEN\_s\+\(NOT\_s\+\)\?MATCHED\_s\+THEN\_s\+\(UPDATE\|INSERT\)\(\_s\+SET\)\?"
 
 "
 " Oracle's non-reserved keywords
@@ -463,7 +460,9 @@
 syn keyword plsqlReserved OCIROWID OCISTRING OCITYPE OF ON OPTION ORACLE ORADATA ORDER ORLANY ORLVARY
 syn keyword plsqlReserved OUT OVERRIDING PARALLEL_ENABLE PARAMETER PASCAL PCTFREE PIPE PIPELINED POLYMORPHIC
 syn keyword plsqlReserved PRAGMA PRIOR PUBLIC RAISE RECORD RELIES_ON REM RENAME RESOURCE RESULT REVOKE ROWID 
-syn keyword plsqlReserved SB1 SB2 SELECT SEPARATE SHARE SHORT SIZE SIZE_T SPARSE SQLCODE SQLDATA
+syn keyword plsqlReserved SB1 SB2 
+syn match plsqlReserved "\<SELECT\>"
+syn keyword plsqlReserved SEPARATE SHARE SHORT SIZE SIZE_T SPARSE SQLCODE SQLDATA
 syn keyword plsqlReserved SQLNAME SQLSTATE STANDARD START STORED STRUCT STYLE SYNONYM TABLE TDO
 syn keyword plsqlReserved TRANSACTIONAL TRIGGER UB1 UB4 UNION UNIQUE UNSIGNED UNTRUSTED VALIST
 syn keyword plsqlReserved VALUES VARIABLE VIEW VOID WHERE WITH
@@ -517,28 +516,30 @@
 syn match   plsqlFunction "\.NEXT\>"hs=s+1
 
 if exists("plsql_legacy_sql_keywords")
-" Some of Oracle's SQL keywords.
-syn keyword plsqlSQLKeyword ABORT ACCESS ACCESSED ADD AFTER ALL ALTER AND ANY
-syn keyword plsqlSQLKeyword ASC ATTRIBUTE AUDIT AUTHORIZATION AVG BASE_TABLE
-syn keyword plsqlSQLKeyword BEFORE BETWEEN BY CASCADE CAST CHECK CLUSTER
-syn keyword plsqlSQLKeyword CLUSTERS COLAUTH COLUMN COMMENT COMPRESS CONNECT
-syn keyword plsqlSQLKeyword CONSTRAINT CRASH CURRENT DATA DATABASE
-syn keyword plsqlSQLKeyword DATA_BASE DBA DEFAULT DELAY DELETE DESC DISTINCT
-syn keyword plsqlSQLKeyword DROP DUAL EXCLUSIVE EXISTS EXTENDS EXTRACT
-syn keyword plsqlSQLKeyword FILE FORCE FOREIGN FROM GRANT GROUP HAVING HEAP
-syn keyword plsqlSQLKeyword IDENTIFIED IDENTIFIER IMMEDIATE IN INCLUDING
-syn keyword plsqlSQLKeyword INCREMENT INDEX INDEXES INITIAL INSERT INSTEAD
-syn keyword plsqlSQLKeyword INTERSECT INTO INVALIDATE ISOLATION KEY LIBRARY
-syn keyword plsqlSQLKeyword LIKE LOCK MAXEXTENTS MINUS MODE MODIFY MULTISET
-syn keyword plsqlSQLKeyword NESTED NOAUDIT NOCOMPRESS NOT NOWAIT OF OFF OFFLINE
-syn keyword plsqlSQLKeyword ON ONLINE OPERATOR OPTION ORDER ORGANIZATION
-syn keyword plsqlSQLKeyword PCTFREE PRIMARY PRIOR PRIVATE PRIVILEGES PUBLIC
-syn keyword plsqlSQLKeyword QUOTA RELEASE RENAME REPLACE RESOURCE REVOKE ROLLBACK
-syn keyword plsqlSQLKeyword ROW ROWLABEL ROWS SCHEMA SELECT SEPARATE SESSION SET
-syn keyword plsqlSQLKeyword SHARE SIZE SPACE START STORE SUCCESSFUL SYNONYM
-syn keyword plsqlSQLKeyword SYSDATE TABLE TABLES TABLESPACE TEMPORARY TO TREAT
-syn keyword plsqlSQLKeyword TRIGGER TRUNCATE UID UNION UNIQUE UNLIMITED UPDATE
-syn keyword plsqlSQLKeyword USE USER VALIDATE VALUES VIEW WHENEVER WHERE WITH
+    " Some of Oracle's SQL keywords.
+    syn keyword plsqlSQLKeyword ABORT ACCESS ACCESSED ADD AFTER ALL ALTER AND ANY
+    syn keyword plsqlSQLKeyword ASC ATTRIBUTE AUDIT AUTHORIZATION AVG BASE_TABLE
+    syn keyword plsqlSQLKeyword BEFORE BETWEEN BY CASCADE CAST CHECK CLUSTER
+    syn keyword plsqlSQLKeyword CLUSTERS COLAUTH COLUMN COMMENT COMPRESS CONNECT
+    syn keyword plsqlSQLKeyword CONSTRAINT CRASH CURRENT DATA DATABASE
+    syn keyword plsqlSQLKeyword DATA_BASE DBA DEFAULT DELAY DELETE DESC DISTINCT
+    syn keyword plsqlSQLKeyword DROP DUAL EXCLUSIVE EXISTS EXTENDS EXTRACT
+    syn keyword plsqlSQLKeyword FILE FORCE FOREIGN FROM GRANT GROUP HAVING HEAP
+    syn keyword plsqlSQLKeyword IDENTIFIED IDENTIFIER IMMEDIATE IN INCLUDING
+    syn keyword plsqlSQLKeyword INCREMENT INDEX INDEXES INITIAL INSERT INSTEAD
+    syn keyword plsqlSQLKeyword INTERSECT INTO INVALIDATE ISOLATION KEY LIBRARY
+    syn keyword plsqlSQLKeyword LIKE LOCK MAXEXTENTS MINUS MODE MODIFY MULTISET
+    syn keyword plsqlSQLKeyword NESTED NOAUDIT NOCOMPRESS NOT NOWAIT OF OFF OFFLINE
+    syn keyword plsqlSQLKeyword ON ONLINE OPERATOR OPTION ORDER ORGANIZATION
+    syn keyword plsqlSQLKeyword PCTFREE PRIMARY PRIOR PRIVATE PRIVILEGES PUBLIC
+    syn keyword plsqlSQLKeyword QUOTA RELEASE RENAME REPLACE RESOURCE REVOKE ROLLBACK
+    syn keyword plsqlSQLKeyword ROW ROWLABEL ROWS SCHEMA 
+    syn match plsqlSQLKeyword "\<SELECT\>"
+    syn keyword plsqlSQLKeyword SEPARATE SESSION SET
+    syn keyword plsqlSQLKeyword SHARE SIZE SPACE START STORE SUCCESSFUL SYNONYM
+    syn keyword plsqlSQLKeyword SYSDATE TABLE TABLES TABLESPACE TEMPORARY TO TREAT
+    syn keyword plsqlSQLKeyword TRIGGER TRUNCATE UID UNION UNIQUE UNLIMITED UPDATE
+    syn keyword plsqlSQLKeyword USE USER VALIDATE VALUES VIEW WHENEVER WHERE WITH
 endif
 
 
@@ -565,17 +566,16 @@
 syn keyword plsqlException ZERO_DIVIDE
 
 if exists("plsql_highlight_triggers")
-  syn keyword plsqlTrigger INSERTING UPDATING DELETING
+    syn keyword plsqlTrigger INSERTING UPDATING DELETING
 endif
 
-" so can not contain it for folding
+" so can not contain it for folding. May no longer be necessary and can change them to plsqlKeyword
 syn match plsqlBEGIN "\<BEGIN\>"
 syn match plsqlEND "\<END\>"
-syn match plsqlISAS "\<\%\(IS\|AS\)\>"
-
+syn match plsqlISAS "\<\(IS\|AS\)\>"
 
 " Various types of comments.
-  syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend extend contains=@plsqlCommentGroup,plsqlSpaceError
+syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend extend contains=@plsqlCommentGroup,plsqlSpaceError
 if exists("plsql_fold")
     syntax region plsqlComment
         \ start="/\*" end="\*/"
@@ -599,11 +599,12 @@
 " Various types of literals.
 " the + and - get sucked up as operators. Not sure how to take precedence here. Something to do with word boundaries.
 " most other syntax files do not try to includ +/- in the number token, so leave them as unary operators
+" even though the oracle documentation counts the sign as part of the numeric literal
 syn match   plsqlNumbers transparent "\<\d\|\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral
 syn match   plsqlNumbersCom contained transparent "\<\d\|\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral
 syn match   plsqlIntLiteral contained "\d\+"
-syn match   plsqlFloatLiteral contained "\d\+\.\%\(\d\+\%\([eE][+-]\?\d\+\)\?\)\?"
-syn match   plsqlFloatLiteral contained "\.\%\(\d\+\%\([eE][+-]\?\d\+\)\?\)"
+syn match   plsqlFloatLiteral contained "\d\+\.\(\d\+\([eE][+-]\?\d\+\)\?\)\?[fd]\?"
+syn match   plsqlFloatLiteral contained "\.\(\d\+\([eE][+-]\?\d\+\)\?\)[fd]\?"
 
 " double quoted strings in SQL are database object names. Should be a subgroup of Normal.
 " We will use Character group as a proxy for that so color can be chosen close to Normal
@@ -639,146 +640,82 @@
 syn cluster plsqlParenGroup contains=plsqlParenError,@plsqlCommentGroup,plsqlCommentSkip,plsqlIntLiteral,plsqlFloatLiteral,plsqlNumbersCom
 
 if exists("plsql_bracket_error")
-  if exists("plsql_fold")
-    syn region plsqlParen start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket fold keepend extend transparent
-  else
-    syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket
-  endif
-  syn match plsqlParenError "[\])]"
-  syn match plsqlErrInParen contained "[{}]"
-  syn region plsqlBracket transparent start='\[' end=']' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen
-  syn match plsqlErrInBracket contained "[);{}]"
+    " I suspect this code was copied from c.vim and never properly considered. Do
+    " we even use braces or brackets in sql or pl/sql?
+    if exists("plsql_fold")
+        syn region plsqlParen start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket fold keepend extend transparent
+    else
+        syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket
+    endif
+    syn match plsqlParenError "[\])]"
+    syn match plsqlErrInParen contained "[{}]"
+    syn region plsqlBracket transparent start='\[' end=']' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen
+    syn match plsqlErrInBracket contained "[);{}]"
 else
-  if exists("plsql_fold")
-    syn region plsqlParen start='(' end=')' contains=ALLBUT,@plsqlParenGroup,@plsqlFoldingGroupIgnore,plsqlErrInParen fold keepend extend transparent
-  else
-    syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,@plsqlFoldingGroupIgnore,plsqlErrInParen
-  endif
-  "syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,@plsqlProcedureGroup,plsqlBlock,plsqlBlockCont,plsqlPackage,plsqlProcedureJava
-  syn match plsqlParenError ")"
-  syn match plsqlErrInParen contained "[{}]"
+    if exists("plsql_fold")
+        syn region plsqlParen start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen fold keepend extend transparent
+    else
+        syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen
+    endif
+    syn match plsqlParenError ")"
+    " should this not be parens isntead of brackets? I never quite followed what this was doing
+    syn match plsqlErrInParen contained "[{}]"
 endif
 
 syn match plsqlReserved "\<BODY\>"
-syn match plsqlReserved "\<CREATE\_s\+\%\(OR\_s\+REPLACE\_s\+\)\?"
-" Loops.
-syn match   plsqlRepeat "\<\%\(FOR\|WHILE\|LOOP\|FORALL\)\>"
-syn match   plsqlRepeat "\<END\_s\+LOOP\>"
-syn match plsqlConditional "\<\%\(ELSIF\|IF\|ELSE\)\>"
-"syn match plsqlConditional "\<END\>\_s\+\<IF\>"
+syn match plsqlReserved "\<CREATE\_s\+\(OR\_s\+REPLACE\_s\+\)\?"
+" Loops
+syn match plsqlRepeat "\<\(FOR\|WHILE\|LOOP\|FORALL\)\>"
+syn match plsqlRepeat "\<END\_s\+LOOP\>"
+" conditionals
+syn match plsqlConditional "\<\(ELSIF\|IF\|ELSE\)\>"
+syn match plsqlConditional "\<END\>\_s\+\<IF\>"
+syn match plsqlCase "\<END\>\_s\+\<CASE\>"
 syn match plsqlCase "\<CASE\>"
-"syn match plsqlCase "\<END\>\s_\+\<CASE\>"
 
 if exists("plsql_fold")
     setlocal foldmethod=syntax
     syn sync fromstart
 
-    syn cluster plsqlFoldingGroupIgnore contains=plsqlProcedureDeclaration
+    syn cluster plsqlProcedureGroup contains=plsqlProcedure
+    syn cluster plsqlOnlyGroup contains=@plsqlProcedure,plsqlConditionalBlock,plsqlLoopBlock,plsqlBlock
 
-    "syntax match plsqlWhiteSpaceGroup "\_s\+" contained transparent
+    syntax region plsqlUpdateSet
+        \ start="\(\<update\>\_s\+\(\<set\>\)\@![a-z][a-z0-9$_#]*\_s\+\(\(\<set\>\)\@![a-z][a-z0-9$_#]*\_s\+\)\?\)\|\(\<when\>\_s\+\<matched\>\_s\+\<then\>\_s\+\<update\>\_s\+\)\<set\>"
+        \ end="\(\_s*\(;\|\<from\>\|\<where\>\|\<when\>\)\)\@="
+        \ fold
+        \ keepend 
+        \ extend
+        \ transparent
+        \ contains=ALLBUT,@plsqlOnlyGroup,plsqlSelect
 
+    syntax region plsqlSelect
+        \ start="\<select\>"
+        \ end="\(\_s*\<from\>\)\@="
+        \ fold
+        \ keepend 
+        \ extend
+        \ transparent
+        \ contains=ALLBUT,@plsqlOnlyGroup,plsqlUpdateSet
 
-  if exists("plsql_procedure_fold")
-  " this fails when a begin/end block is in a procedure. Unable to figure out why. - Lee
-
+    " this is brute force and requires you have the procedure/function name in the END
+    " statement. ALthough Oracle makes it optional, we cannot. If you do not
+    " have it, then you can fold the BEGIN/END block of the procedure but not
+    " the specification of it (other than a paren group). You also cannot fold
+    " BEGIN/END blocks in the procedure body. Local procedures will fold as
+    " long as the END statement includes the procedure/function name.
+    " As for why we cannot make it work any other way, I don't know. It is
+    " something to do with both plsqlBlock and plsqlProcedure both consuming BEGIN and END,
+    " even if we use a lookahead for one of them.
     syntax region plsqlProcedure
         "\ start="\(create\(\_s\+or\_s\+replace\)\?\_s\+\)\?\<\(procedure\|function\)\>\_s\+\z([a-z][a-z0-9$_#]*\)"
-        \ start="\(create\(\_s\+or\_s\+replace\)\?\_s\+\)\?\<\(procedure\|function\)\>\_s\+\z([a-z][a-z0-9$_#]*\)\([^;]\|\n\)\{-}\(\_s\+\<\(is\|as\)\>\)\@="
-        \ end="\(\<end\>\(\_s\+\z1\)\?\_s*;\)"
+        \ start="\<\(procedure\|function\)\>\_s\+\(\z([a-z][a-z0-9$_#]*\)\)\([^;]\|\n\)\{-}\<\(is\|as\)\>\_.\{-}\(\<end\>\_s\+\2\_s*;\)\@="
+        \ end="\<end\>\_s\+\z1\_s*;"
         \ fold
+        \ keepend 
         \ extend
         \ transparent
-        \ keepend 
-        \ contains=plsqlProcedureDeclaration,plsqlProcedureBlock,@plsqlCommentAll,plsqlKeyword,plsqlReserved,plsqlTypeAttribute,plsqlStorage
- 
-    syntax region plsqlProcedureDeclaration
-        \ transparent
-        \ fold
-        "\ start="\<\(is\|as\)\>\(\(\_.\)\{-}\<begin\>\)\@="
-        \ start="\<\(is\|as\)\>"
-        \ end="\(\_s\+\<begin\>\)\@="
-        \ nextgroup=plsqlProcedureBlock
-        \ contained
-        \ contains=ALLBUT,plsqlBlockCont,plsqlBlock,plsqlErrInBracket,plsqlPackage,plsqlProcedureDeclaration
-    ",plsqlProcedureBlock
-        \ keepend 
-        "\ extend
-" must have keepend which is weird because it is 0 lenght
-        " ,plsqlEnd,plsqlISAS
-    
-    syntax region plsqlProcedureBlock
-        \ start="\<begin\>"
-        "\ skip="\_s\+\<begin\>\_.\{-}\<end\>\_s*;"
-        \ matchgroup=NONE
-        \ end="\(\<end\>\(\_s\+\(if\|loop\|case\)\@![a-z][a-z0-9$_#]*\)\?\_s*;\)"
-        "\ end="\(\<end\>\)\@="
-        \ fold
-        \ contained
-        \ transparent
-        \ keepend
-        "\ extend
-        \ contains=ALLBUT,plsqlPackage,plsqlProcedure,plsqlProcedureBlock,plsqlProcedureDeclaration,plsqlProcedureJava,plsqlBlock
-
-    "syn cluster plsqlProcedureGroup contains=plsqlProcedure,plsqlProcedureDeclaration,plsqlProcedureBlock
-    syn cluster plsqlProcedureGroup contains=plsqlProcedure,plsqlProcedureDeclaration,plsqlProcedureBlock
-
-    " for inside packages
-    syn region plsqlProcedureSpec
-        \ start="\(procedure\|function\)\(\([^;]\|\n\)\{-}\<\(is\|as\)\>\)\@!"
-        "\ start="\(procedure\|function\)\(\([^;]\|\n\)\{-}\<\(is\|as\)\>\)\@!\(\_.*;\)\@="
-        \ end=";"
-        \ keepend extend
-        \ contains=@plsqlIdentifiers,plsqlKeyword,plsqlReserved,@plsqlCommentAll,plsqlParen
-        \ transparent
-    
-    syntax region plsqlBlockCont
-        \ transparent
-        \ start="\<begin\>"
-        \ end="\<end\>\_s*;"
-        \ fold
-        \ extend
-        \ contained
-        \ contains=ALLBUT,@plsqlProcedureGroup,plsqlPackage,plsqlErrInBracket,PlsqlProcedureJava,plsqlBlock
-        \ keepend
-        "\ end="\<end\>\_s*\;"
-
-    syntax region plsqlProcedureJava
-      \ matchgroup=NONE
-      \ start="\(\/\*\(\(\*\/\)\@!\_.\)*\*\/\_s*\)\?\(\(\(overriding\_s*\)\?member\|constructor\|static\)\_s*\)\?\<\(procedure\|function\)\>\_s*\(\k*\)\_[^;]\{-}\<\(is\|as\)\>\_s*language\_s*java\_s*name"
-      \ matchgroup=plsqlStringLiteral
-      \ end="'\_[^']*'\_s*;"
-      \ keepend extend
-      \ fold
-      \ contains=ALLBUT,plsqlProcedure,plsqlProcedureDeclaration,plsqlProcedureBlock,plsqlBlockCont,plsqlBlock,plsqlProcedureJava,plsqlErrInBracket,plsqlStringLiteral
-    
-    
-"    syntax region plsqlPackage
-"        \ start="\<create\>\_s\+\(or\_s\+replace\_s\+\)\?package\_s\+\(body\_s\+\)\?\z([a-z][a-z0-9$_#]*\)\>"
-"        \ matchgroup=plsqlEnd
-"        \ end="\<end\>\(\%\(\_s\+\z1\)\?\_s*;\)\@="
-"        \ fold
-"        \ transparent
-"        \ keepend extend
-"        \ contains=plsqlProcedure,plsqlBlockCont,@plsqlCommentAll,plsqlKeyword,plsqlReserved,@plsqlIdentifiers
-"        "\ contains=ALLBUT,plsqlPackage,plsqlProcedureDeclaration,plsqlBlock,plsqlConditionalBlock,plsqlLoopBlock,plsqlCaseBlock
-    
-    if exists("plsql_syntax_test_flag") 
-      hi plsqlProcedureDeclaration guifg='blue'
-      hi plsqlProcedureBlock guifg='red'
-      hi plsqlProcedure guifg='green'
-      hi plsqlCaseBlock guifg='pink'
-      hi plsqlBlock NONE
-    else
-      hi plsqlPackage NONE
-      hi plsqlProcedureDeclaration NONE
-      hi plsqlProcedureBlock NONE
-      hi plsqlProcedure NONE
-      hi plsqlBlock NONE
-      hi plsqlCaseBlock NONE
-    endif
-
-  " end plsql_procedure_fold
-  endif
+        \ contains=ALLBUT,plsqlBlock
 
     syntax region plsqlBlock
         \ start="\<begin\>"
@@ -809,7 +746,6 @@
         \ contained
         \ contains=ALLBUT,@plsqlProcedureGroup,plsqlPackage,plsqlErrInBracket,PlsqlProcedureJava
     
-    " Conditionals.
     syn region plsqlConditionalBlock
         \ transparent
         \ start="\<if\>\(\_s*;\)\@!"
@@ -827,45 +763,45 @@
 " Define the default highlighting.
 " Only when an item doesn't have highlighting yet.
 
-  hi def link plsqlAttribute	    Macro
-  hi def link plsqlBlockError	    Error
-  hi def link plsqlBooleanLiteral   Boolean
-  hi def link plsqlQuotedIdentifier	Character
-  hi def link plsqlComment	        Comment
-  hi def link plsqlCommentL	        Comment
-  hi def link plsqlConditional	    Keyword
-  hi def link plsqlCase	            Conditional
-  hi def link plsqlError	        Error
-  hi def link plsqlErrInBracket	    Error
-  hi def link plsqlErrInBlock	    Error
-  hi def link plsqlErrInParen	    Error
-  hi def link plsqlException	    Function
-  hi def link plsqlFloatLiteral	    Float
-  hi def link plsqlFunction	        Function
-  hi def link plsqlGarbage	        Error
-  hi def link plsqlHostIdentifier   Label
-  hi def link plsqlIdentifier	    Normal
-  hi def link plsqlIntLiteral	    Number
-  hi def link plsqlOperator	        Operator
-  hi def link plsqlParenError	    Error
-  hi def link plsqlSpaceError	    Error
-  hi def link plsqlPseudo	        PreProc
-  hi def link plsqlKeyword	        Keyword
-  hi def link plsqlEND              Keyword
-  hi def link plsqlBEGIN            Keyword
-  hi def link plsqlISAS             Statement
-  hi def link plsqlReserved         Statement
-  hi def link plsqlRepeat	        Repeat
-  hi def link plsqlStorage	        StorageClass
-  hi def link plsqlFunction  	    Function
-  hi def link plsqlStringError	    Error
-  hi def link plsqlStringLiteral    String
-  hi def link plsqlCommentString    String
-  hi def link plsqlComment2String   String
-  hi def link plsqlTrigger	        Function
-  hi def link plsqlTypeAttribute    StorageClass
-  hi def link plsqlTodo		        Todo
-" to be able to change them, need override whether defined or not
+hi def link plsqlAttribute	        Macro
+hi def link plsqlBlockError	        Error
+hi def link plsqlBooleanLiteral     Boolean
+hi def link plsqlQuotedIdentifier	Character
+hi def link plsqlComment	        Comment
+hi def link plsqlCommentL	        Comment
+hi def link plsqlConditional	    Conditional
+hi def link plsqlCase	            Conditional
+hi def link plsqlError	            Error
+hi def link plsqlErrInBracket	    Error
+hi def link plsqlErrInBlock	        Error
+hi def link plsqlErrInParen	        Error
+hi def link plsqlException	        Function
+hi def link plsqlFloatLiteral	    Float
+hi def link plsqlFunction	        Function
+hi def link plsqlGarbage	        Error
+hi def link plsqlHostIdentifier     Label
+hi def link plsqlIdentifier	        Normal
+hi def link plsqlIntLiteral	        Number
+hi def link plsqlOperator	        Operator
+hi def link plsqlParenError	        Error
+hi def link plsqlSpaceError	        Error
+hi def link plsqlPseudo	            PreProc
+hi def link plsqlKeyword	        Keyword
+hi def link plsqlEND                Keyword
+hi def link plsqlBEGIN              Keyword
+hi def link plsqlISAS               Statement
+hi def link plsqlReserved           Statement
+hi def link plsqlRepeat	            Repeat
+hi def link plsqlStorage	        StorageClass
+hi def link plsqlFunction  	        Function
+hi def link plsqlStringError	    Error
+hi def link plsqlStringLiteral      String
+hi def link plsqlCommentString      String
+hi def link plsqlComment2String     String
+hi def link plsqlTrigger	        Function
+hi def link plsqlTypeAttribute      StorageClass
+hi def link plsqlTodo		        Todo
+" to be able to change them after loading, need override whether defined or not
 if exists("plsql_legacy_sql_keywords")
     hi link plsqlSQLKeyword         Function
     hi link plsqlSymbol	            Normal
@@ -876,6 +812,8 @@
 endif
 
 let b:current_syntax = "plsql"
+
+" restore setting from when we entered this file
 let &cpo = s:cpo_sav
 unlet! s:cpo_sav
 
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 65b9776..67329ba 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Vim 8.2 script
 " Maintainer:	Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM>
-" Last Change:	April 26, 2022
-" Version:	8.2-36
+" Last Change:	May 07, 2022
+" Version:	8.2-38
 " URL:	http://www.drchip.org/astronaut/vim/index.html#SYNTAX_VIM
 " Automatically generated keyword lists: {{{1
 
@@ -79,12 +79,12 @@
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained	abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdline getcursorcharpos getftime getmarklist getreg gettagstack getwinposy has histdel hlID index inputsave isdirectory job_getchannel job_stop json_encode line listener_add log10 maplist matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_blob test_null_list test_refcount test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove
-syn keyword vimFuncName contained	acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdpos getcwd getftype getmatches getreginfo gettext getwinvar has_key histget hlset input inputsecret isinf job_info join keys line2byte listener_flush luaeval mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_channel test_null_partial test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth
-syn keyword vimFuncName contained	add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdtype getenv getimstatus getmousepos getregtype getwininfo glob haslocaldir histnr hostname inputdialog insert islocked job_setoptions js_decode len lispindent listener_remove map mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_dict test_null_string test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount
-syn keyword vimFuncName contained	and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdwintype getfontname getjumplist getpid gettabinfo getwinpos glob2regpat hasmapto hlexists iconv inputlist interrupt isnan job_start js_encode libcall list2blob localtime maparg match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_function test_option_not_set test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile
-syn keyword vimFuncName contained	append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcompletion getfperm getline getpos gettabvar getwinposx globpath histadd hlget indent inputrestore invert items job_status json_decode libcallnr list2str log mapcheck matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_job test_override test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
-syn keyword vimFuncName contained	appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcurpos getfsize getloclist getqflist gettabwinvar
+syn keyword vimFuncName contained	abs argc assert_equal assert_match atan browse bufloaded byteidx charclass chdir ch_log ch_sendexpr col copy debugbreak diff_hlID empty execute expandcmd filter floor foldlevel function getchangelist getcmdcompltype getcompletion getfperm getline getpos gettabvar getwinposx has histget hlset input inputsecret isdirectory job_getchannel job_stop json_encode line listener_add log10 maplist matchaddpos matchfuzzypos menu_info nextnonblank popup_atcursor popup_dialog popup_getoptions popup_menu popup_show prompt_setcallback prop_clear prop_type_change pumvisible range reduce reltimestr remote_send resolve screenchar screenstring searchpairpos setbufvar setcursorcharpos setmatches settabwinvar shiftwidth sign_place simplify sound_clear spellbadword state strcharpart stridx strridx swapinfo synIDtrans tabpagenr tanh term_getaltscreen term_getline term_gettty term_setansicolors term_start test_garbagecollect_now test_null_blob test_null_list test_refcount test_void timer_stopall trunc uniq winbufnr win_getid win_id2win winnr win_splitmove
+syn keyword vimFuncName contained	acos argidx assert_equalfile assert_nobeep atan2 browsedir bufname byteidxcomp charcol ch_evalexpr ch_logfile ch_sendraw complete cos deepcopy digraph_get environ exepath extend finddir fmod foldtext garbagecollect getchar getcmdline getcurpos getfsize getloclist getqflist gettabwinvar getwinposy has_key histnr hostname inputdialog insert isinf job_info join keys line2byte listener_flush luaeval mapnew matcharg matchlist min nr2char popup_beval popup_filter_menu popup_getpos popup_move pow prompt_setinterrupt prop_find prop_type_delete py3eval readblob reg_executing remote_expr remote_startserver reverse screenchars search searchpos setcellwidths setenv setpos settagstack sign_define sign_placelist sin soundfold spellsuggest str2float strchars string strtrans swapname synstack tabpagewinnr tempname term_getansicolors term_getscrolled terminalprops term_setapi term_wait test_garbagecollect_soon test_null_channel test_null_partial test_setmouse timer_info tolower type values wincol win_gettype winlayout winrestcmd winwidth
+syn keyword vimFuncName contained	add arglistid assert_exception assert_notequal balloon_gettext bufadd bufnr call charidx ch_evalraw ch_open ch_setoptions complete_add cosh delete digraph_getlist escape exists extendnew findfile fnameescape foldtextresult get getcharmod getcmdpos getcursorcharpos getftime getmarklist getreg gettagstack getwinvar haslocaldir hlexists iconv inputlist interrupt islocked job_setoptions js_decode len lispindent listener_remove map mapset matchdelete matchstr mkdir or popup_clear popup_filter_yesno popup_hide popup_notification prevnonblank prompt_setprompt prop_list prop_type_get pyeval readdir reg_recording remote_foreground remove round screencol searchcount server2client setcharpos setfperm setqflist setwinvar sign_getdefined sign_undefine sinh sound_playevent split str2list strdisplaywidth strlen strwidth synconcealed system tagfiles term_dumpdiff term_getattr term_getsize term_list term_setkill test_alloc_fail test_getvalue test_null_dict test_null_string test_settime timer_pause toupper typename virtcol windowsversion win_gotoid winline winrestview wordcount
+syn keyword vimFuncName contained	and argv assert_fails assert_notmatch balloon_show bufexists bufwinid ceil ch_canread ch_getbufnr ch_read ch_status complete_check count deletebufline digraph_set eval exists_compiled feedkeys flatten fnamemodify foreground getbufinfo getcharpos getcmdscreenpos getcwd getftype getmatches getreginfo gettext glob hasmapto hlget indent inputrestore invert isnan job_start js_encode libcall list2blob localtime maparg match matchend matchstrpos mode pathshorten popup_close popup_findinfo popup_list popup_setoptions printf prop_add prop_remove prop_type_list pyxeval readdirex reltime remote_peek rename rubyeval screenpos searchdecl serverlist setcharsearch setline setreg sha256 sign_getplaced sign_unplace slice sound_playfile sqrt str2nr strftime strpart submatch synID systemlist taglist term_dumpload term_getcursor term_getstatus term_scrape term_setrestore test_autochdir test_gui_event test_null_function test_option_not_set test_srand_seed timer_start tr undofile visualmode win_execute winheight win_move_separator winsaveview writefile
+syn keyword vimFuncName contained	append asin assert_false assert_report balloon_split buflisted bufwinnr changenr ch_close ch_getjob ch_readblob cindent complete_info cscope_connection did_filetype digraph_setlist eventhandler exp filereadable flattennew foldclosed fullcommand getbufline getcharsearch getcmdtype getenv getimstatus getmousepos getregtype getwininfo glob2regpat histadd hlID index inputsave isabsolutepath items job_status json_decode libcallnr list2str log mapcheck matchadd matchfuzzy max mzeval perleval popup_create popup_findpreview popup_locate popup_settext prompt_getprompt prop_add_list prop_type_add pum_getpos rand readfile reltimefloat remote_read repeat screenattr screenrow searchpair setbufline setcmdpos setloclist settabvar shellescape sign_jump sign_unplacelist sort sound_stop srand strcharlen strgetchar strptime substitute synIDattr tabpagebuflist tan term_dumpwrite term_getjob term_gettitle term_sendkeys term_setsize test_feedinput test_ignore_error test_null_job test_override test_unknown timer_stop trim undotree wildmenumode win_findbuf win_id2tabwin win_move_statusline win_screenpos xor
+syn keyword vimFuncName contained	appendbufline assert_beeps assert_inrange assert_true blob2list bufload byte2line char2nr ch_close_in ch_info ch_readraw clearmatches confirm cursor diff_filler echoraw executable expand filewritable float2nr foldclosedend funcref getbufvar getcharstr getcmdwintype getfontname getjumplist getpid gettabinfo getwinpos globpath histdel
 
 "--- syntax here and above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
diff --git a/runtime/syntax/wget.vim b/runtime/syntax/wget.vim
index 2587022..8178d02 100644
--- a/runtime/syntax/wget.vim
+++ b/runtime/syntax/wget.vim
@@ -1,7 +1,9 @@
 " Vim syntax file
 " Language:     Wget configuration file (/etc/wgetrc ~/.wgetrc)
 " Maintainer:	Doug Kearns <dougkearns@gmail.com>
-" Last Change:	2013 Jun 1
+" Last Change:	2022 Apr 28
+
+" GNU Wget 1.21 built on linux-gnu.
 
 if exists("b:current_syntax")
   finish
@@ -18,155 +20,206 @@
 syn region wgetString start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline
 
 syn case ignore
-syn keyword wgetBoolean on off contained
-syn keyword wgetNumber  inf    contained
-syn case match
 
-syn match wgetNumber "\<\%(\d\+\|inf\)\>" contained
-syn match wgetQuota  "\<\d\+[kKmM]\>"     contained
-syn match wgetTime   "\<\d\+[smhdw]\>"    contained
+syn keyword wgetBoolean on off yes no contained
+syn keyword wgetNumber	inf	      contained
+
+syn match wgetNumber "\<\d\+>"		  contained
+syn match wgetQuota  "\<\d\+[kmgt]\>"	  contained
+syn match wgetTime   "\<\d\+[smhdw]\>"	  contained
 
 "{{{ Commands
-let s:commands = map([
-        \ "accept",
-	\ "add_hostdir",
-	\ "adjust_extension",
-	\ "always_rest",
-	\ "ask_password",
-	\ "auth_no_challenge",
-	\ "background",
-	\ "backup_converted",
-	\ "backups",
-	\ "base",
-	\ "bind_address",
-	\ "ca_certificate",
-	\ "ca_directory",
-	\ "cache",
-	\ "certificate",
-	\ "certificate_type",
-	\ "check_certificate",
-	\ "connect_timeout",
-	\ "content_disposition",
-	\ "continue",
-	\ "convert_links",
-	\ "cookies",
-	\ "cut_dirs",
-	\ "debug",
-	\ "default_page",
-	\ "delete_after",
-	\ "dns_cache",
-	\ "dns_timeout",
-	\ "dir_prefix",
-	\ "dir_struct",
-	\ "domains",
-	\ "dot_bytes",
-	\ "dots_in_line",
-	\ "dot_spacing",
-	\ "dot_style",
-	\ "egd_file",
-	\ "exclude_directories",
-	\ "exclude_domains",
-	\ "follow_ftp",
-	\ "follow_tags",
-	\ "force_html",
-	\ "ftp_passwd",
-	\ "ftp_password",
-	\ "ftp_user",
-	\ "ftp_proxy",
-	\ "glob",
-	\ "header",
-	\ "html_extension",
-	\ "htmlify",
-	\ "http_keep_alive",
-	\ "http_passwd",
-	\ "http_password",
-	\ "http_proxy",
-	\ "https_proxy",
-	\ "http_user",
-	\ "ignore_case",
-	\ "ignore_length",
-	\ "ignore_tags",
-	\ "include_directories",
-	\ "inet4_only",
-	\ "inet6_only",
-	\ "input",
-	\ "iri",
-	\ "keep_session_cookies",
-	\ "kill_longer",
-	\ "limit_rate",
-	\ "load_cookies",
-	\ "locale",
-	\ "local_encoding",
-	\ "logfile",
-	\ "login",
-	\ "max_redirect",
-	\ "mirror",
-	\ "netrc",
-	\ "no_clobber",
-	\ "no_parent",
-	\ "no_proxy",
-	\ "numtries",
-	\ "output_document",
-	\ "page_requisites",
-	\ "passive_ftp",
-	\ "passwd",
-	\ "password",
-	\ "post_data",
-	\ "post_file",
-	\ "prefer_family",
-	\ "preserve_permissions",
-	\ "private_key",
-	\ "private_key_type",
-	\ "progress",
-	\ "protocol_directories",
-	\ "proxy_passwd",
-	\ "proxy_password",
-	\ "proxy_user",
-	\ "quiet",
-	\ "quota",
-	\ "random_file",
-	\ "random_wait",
-	\ "read_timeout",
-	\ "reclevel",
-	\ "recursive",
-	\ "referer",
-	\ "reject",
-	\ "relative_only",
-	\ "remote_encoding",
-	\ "remove_listing",
-	\ "restrict_file_names",
-	\ "retr_symlinks",
-	\ "retry_connrefused",
-	\ "robots",
-	\ "save_cookies",
-	\ "save_headers",
-	\ "secure_protocol",
-	\ "server_response",
-	\ "show_all_dns_entries",
-	\ "simple_host_check",
-	\ "span_hosts",
-	\ "spider",
-	\ "strict_comments",
-	\ "sslcertfile",
-	\ "sslcertkey",
-	\ "timeout",
-	\ "time_stamping",
-	\ "use_server_timestamps",
-	\ "tries",
-	\ "trust_server_names",
-	\ "user",
-	\ "use_proxy",
-	\ "user_agent",
-	\ "verbose",
-	\ "wait",
-	\ "wait_retry"],
-	\ "substitute(v:val, '_', '[-_]\\\\=', 'g')")
+let s:commands =<< trim EOL
+  accept
+  accept_regex
+  add_host_dir
+  adjust_extension
+  always_rest
+  ask_password
+  auth_no_challenge
+  background
+  backup_converted
+  backups
+  base
+  bind_address
+  bind_dns_address
+  body_data
+  body_file
+  ca_certificate
+  ca_directory
+  cache
+  certificate
+  certificate_type
+  check_certificate
+  choose_config
+  ciphers
+  compression
+  connect_timeout
+  content_disposition
+  content_on_error
+  continue
+  convert_file_only
+  convert_links
+  cookies
+  crl_file
+  cut_dirs
+  debug
+  default_page
+  delete_after
+  dns_cache
+  dns_servers
+  dns_timeout
+  dir_prefix
+  dir_struct
+  domains
+  dot_bytes
+  dots_in_line
+  dot_spacing
+  dot_style
+  egd_file
+  exclude_directories
+  exclude_domains
+  follow_ftp
+  follow_tags
+  force_html
+  ftp_passwd
+  ftp_password
+  ftp_user
+  ftp_proxy
+  ftps_clear_data_connection
+  ftps_fallback_to_ftp
+  ftps_implicit
+  ftps_resume_ssl
+  hsts
+  hsts_file
+  ftp_stmlf
+  glob
+  header
+  html_extension
+  htmlify
+  http_keep_alive
+  http_passwd
+  http_password
+  http_proxy
+  https_proxy
+  https_only
+  http_user
+  if_modified_since
+  ignore_case
+  ignore_length
+  ignore_tags
+  include_directories
+  inet4_only
+  inet6_only
+  input
+  input_meta_link
+  iri
+  keep_bad_hash
+  keep_session_cookies
+  kill_longer
+  limit_rate
+  load_cookies
+  locale
+  local_encoding
+  logfile
+  login
+  max_redirect
+  metalink_index
+  metalink_over_http
+  method
+  mirror
+  netrc
+  no_clobber
+  no_config
+  no_parent
+  no_proxy
+  numtries
+  output_document
+  page_requisites
+  passive_ftp
+  passwd
+  password
+  pinned_pubkey
+  post_data
+  post_file
+  prefer_family
+  preferred_location
+  preserve_permissions
+  private_key
+  private_key_type
+  progress
+  protocol_directories
+  proxy_passwd
+  proxy_password
+  proxy_user
+  quiet
+  quota
+  random_file
+  random_wait
+  read_timeout
+  rec_level
+  recursive
+  referer
+  regex_type
+  reject
+  rejected_log
+  reject_regex
+  relative_only
+  remote_encoding
+  remove_listing
+  report_speed
+  restrict_file_names
+  retr_symlinks
+  retry_connrefused
+  retry_on_host_error
+  retry_on_http_error
+  robots
+  save_cookies
+  save_headers
+  secure_protocol
+  server_response
+  show_all_dns_entries
+  show_progress
+  simple_host_check
+  span_hosts
+  spider
+  start_pos
+  strict_comments
+  sslcertfile
+  sslcertkey
+  timeout
+  timestamping
+  use_server_timestamps
+  tries
+  trust_server_names
+  unlink
+  use_askpass
+  user
+  use_proxy
+  user_agent
+  verbose
+  wait
+  wait_retry
+  warc_cdx
+  warc_cdx_dedup
+  warc_compression
+  warc_digests
+  warc_file
+  warc_header
+  warc_keep_log
+  warc_max_size
+  warc_temp_dir
+  wdebug
+  xattr
+EOL
 "}}}
 
-syn case ignore
+call map(s:commands, "substitute(v:val, '_', '[-_]\\\\=', 'g')")
+
 for cmd in s:commands
-  exe 'syn match wgetCommand "' . cmd . '" nextgroup=wgetAssignmentOperator skipwhite contained'
+  exe 'syn match wgetCommand "\<' . cmd . '\>" nextgroup=wgetAssignmentOperator skipwhite contained'
 endfor
+
 syn case match
 
 syn match wgetStart "^" nextgroup=wgetCommand,wgetComment skipwhite
@@ -179,6 +232,7 @@
 hi def link wgetNumber		   Number
 hi def link wgetQuota		   Number
 hi def link wgetString		   String
+hi def link wgetTime		   Number
 hi def link wgetTodo		   Todo
 
 let b:current_syntax = "wget"
diff --git a/runtime/syntax/wget2.vim b/runtime/syntax/wget2.vim
new file mode 100644
index 0000000..a63c336
--- /dev/null
+++ b/runtime/syntax/wget2.vim
@@ -0,0 +1,250 @@
+" Vim syntax file
+" Language:     Wget2 configuration file (/etc/wget2rc ~/.wget2rc)
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
+" Last Change:	2022 Apr 28
+
+" GNU Wget2 2.0.0 - multithreaded metalink/file/website downloader
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn match wgetComment "#.*$" contains=wgetTodo contained
+
+syn keyword wgetTodo TODO NOTE FIXME XXX contained
+
+syn region wgetString start=+"+ skip=+\\\\\|\\"+ end=+"+ contained oneline
+syn region wgetString start=+'+ skip=+\\\\\|\\'+ end=+'+ contained oneline
+
+syn case ignore
+
+syn keyword wgetBoolean on off yes no y n contained
+syn keyword wgetNumber	infinity inf	  contained
+
+syn match wgetNumber "\<\d\+>"		  contained
+syn match wgetQuota  "\<\d\+[kmgt]\>"	  contained
+syn match wgetTime   "\<\d\+[smhd]\>"	  contained
+
+"{{{ Commands
+let s:commands =<< trim EOL
+  accept
+  accept-regex
+  adjust-extension
+  append-output
+  ask-password
+  auth-no-challenge
+  background
+  backup-converted
+  backups
+  base
+  bind-address
+  bind-interface
+  body-data
+  body-file
+  ca-certificate
+  ca-directory
+  cache
+  certificate
+  certificate-type
+  check-certificate
+  check-hostname
+  chunk-size
+  clobber
+  compression
+  config
+  connect-timeout
+  content-disposition
+  content-on-error
+  continue
+  convert-file-only
+  convert-links
+  cookie-suffixes
+  cookies
+  crl-file
+  cut-dirs
+  cut-file-get-vars
+  cut-url-get-vars
+  debug
+  default-http-port
+  default-https-port
+  default-page
+  delete-after
+  directories
+  directory-prefix
+  dns-cache
+  dns-cache-preload
+  dns-timeout
+  domains
+  download-attr
+  egd-file
+  exclude-directories
+  exclude-domains
+  execute
+  filter-mime-type
+  filter-urls
+  follow-tags
+  force-atom
+  force-css
+  force-directories
+  force-html
+  force-metalink
+  force-progress
+  force-rss
+  force-sitemap
+  fsync-policy
+  gnupg-homedir
+  header
+  help
+  host-directories
+  hpkp
+  hpkp-file
+  hsts
+  hsts-file
+  hsts-preload
+  hsts-preload-file
+  html-extension
+  http-keep-alive
+  http-password
+  http-proxy
+  http-proxy-password
+  http-proxy-user
+  http-user
+  http2
+  http2-only
+  http2-request-window
+  https-enforce
+  https-only
+  https-proxy
+  hyperlink
+  if-modified-since
+  ignore-case
+  ignore-length
+  ignore-tags
+  include-directories
+  inet4-only
+  inet6-only
+  input-encoding
+  input-file
+  keep-extension
+  keep-session-cookies
+  level
+  limit-rate
+  list-plugins
+  load-cookies
+  local-db
+  local-encoding
+  local-plugin
+  max-redirect
+  max-threads
+  metalink
+  method
+  mirror
+  netrc
+  netrc-file
+  ocsp
+  ocsp-date
+  ocsp-file
+  ocsp-nonce
+  ocsp-server
+  ocsp-stapling
+  output-document
+  output-file
+  page-requisites
+  parent
+  password
+  plugin
+  plugin-dirs
+  plugin-help
+  plugin-opt
+  post-data
+  post-file
+  prefer-family
+  private-key
+  private-key-type
+  progress
+  protocol-directories
+  proxy
+  quiet
+  quota
+  random-file
+  random-wait
+  read-timeout
+  recursive
+  referer
+  regex-type
+  reject
+  reject-regex
+  remote-encoding
+  report-speed
+  restrict-file-names
+  retry-connrefused
+  retry-on-http-error
+  robots
+  save-content-on
+  save-cookies
+  save-headers
+  secure-protocol
+  server-response
+  signature-extensions
+  span-hosts
+  spider
+  start-pos
+  stats-dns
+  stats-ocsp
+  stats-server
+  stats-site
+  stats-tls
+  strict-comments
+  tcp-fastopen
+  timeout
+  timestamping
+  tls-false-start
+  tls-resume
+  tls-session-file
+  tries
+  trust-server-names
+  unlink
+  use-askpass
+  use-server-timestamps
+  user
+  user-agent
+  verbose
+  verify-save-failed
+  verify-sig
+  version
+  wait
+  waitretry
+  xattr
+EOL
+"}}}
+
+call map(s:commands, "substitute(v:val, '_', '[-_]\\\\=', 'g')")
+
+for cmd in s:commands
+  exe 'syn match wgetCommand "\<' . cmd . '\>" nextgroup=wgetAssignmentOperator skipwhite contained'
+endfor
+
+syn case match
+
+syn match wgetStart "^" nextgroup=wgetCommand,wgetComment skipwhite
+syn match wgetAssignmentOperator "=" nextgroup=wgetString,wgetBoolean,wgetNumber,wgetQuota,wgetTime skipwhite contained
+
+hi def link wgetAssignmentOperator Special
+hi def link wgetBoolean		   Boolean
+hi def link wgetCommand		   Identifier
+hi def link wgetComment		   Comment
+hi def link wgetNumber		   Number
+hi def link wgetQuota		   Number
+hi def link wgetString		   String
+hi def link wgetTime		   Number
+hi def link wgetTodo		   Todo
+
+let b:current_syntax = "wget"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: ts=8 fdm=marker:
diff --git a/runtime/tutor/Makefile b/runtime/tutor/Makefile
index b7b984a..3d1d560 100644
--- a/runtime/tutor/Makefile
+++ b/runtime/tutor/Makefile
@@ -11,7 +11,7 @@
 	tutor.de.utf-8 \
 	tutor.el tutor.el.cp737 \
 	tutor.eo \
-	tutor.es.utf-8 \
+	tutor.es \
 	tutor.fr.utf-8 \
 	tutor.hr tutor.hr.cp1250 \
 	tutor.hu tutor.hu.cp1250 \
@@ -48,8 +48,8 @@
 tutor.el.cp737: tutor.el.utf-8
 	iconv -f UTF-8 -t cp737 tutor.el.utf-8 > tutor.el.cp737
 
-tutor.es.utf-8: tutor.es
-	iconv -f ISO-8859-1 -t UTF-8 tutor.es > tutor.es.utf-8
+tutor.es: tutor.es.utf-8
+	iconv -f UTF-8 -t ISO-8859-1 tutor.es.utf-8 > tutor.es
 
 tutor.fr.utf-8: tutor.fr
 	iconv -f ISO-8859-1 -t UTF-8 tutor.fr > tutor.fr.utf-8
diff --git a/runtime/tutor/tutor.es b/runtime/tutor/tutor.es
index c4b5c21..7619fbc 100644
--- a/runtime/tutor/tutor.es
+++ b/runtime/tutor/tutor.es
@@ -1,84 +1,84 @@
 ===============================================================================
-=     B i e n v e n i d o   a l   t u t o r   d e   V I M  -  Versión 1.4     =
+=     B i e n v e n i d o   a l   t u t o r   d e   V I M  -  Versión 1.7     =
 ===============================================================================
 
-     Vim es un editor muy potente que dispone de muchos mandatos, demasiados
+     Vim es un editor muy potente que dispone de muchos comandos, demasiados
      para ser explicados en un tutor como éste. Este tutor está diseñado
-     para describir suficientes mandatos para que usted sea capaz de
+     para describir suficientes comandos para que usted sea capaz de
      aprender fácilmente a usar Vim como un editor de propósito general.
 
-     El tiempo necesario para completar el tutor es aproximadamente de 25-30
+     El tiempo necesario para completar el tutor es aproximadamente de 30
      minutos, dependiendo de cuánto tiempo se dedique a la experimentación.
 
-     Los mandatos de estas lecciones modificarán el texto. Haga una copia de
+     Los comandos de estas lecciones modificarán el texto. Haga una copia de
      este fichero para practicar (con «vimtutor» esto ya es una copia).
 
      Es importante recordar que este tutor está pensado para enseñar con
-     la práctica. Esto significa que es necesario ejecutar los mandatos
-     para aprenderlos adecuadamente. Si únicamente se lee el texto, se
-     olvidarán los mandatos.
+     la práctica. Esto significa que es necesario ejecutar los comandos
+     para aprenderlos adecuadamente. Si únicamente lee el texto, ¡se le
+     olvidarán los comandos.
 
-     Ahora, asegúrese de que la tecla de bloqueo de mayúsculas no está
+     Ahora, asegúrese de que la tecla de bloqueo de mayúsculas NO está
      activada y pulse la tecla	j  lo suficiente para mover el cursor
      de forma que la Lección 1.1 ocupe completamente la pantalla.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lección 1.1: MOVIMIENTOS DEL CURSOR
+		     Lección 1.1: MOVER EL CURSOR
 
- ** Para mover el cursor, pulse las teclas h,j,k,l de la forma que se indica. **
+ ** Para mover el cursor, pulse las teclas h,j,k,l de la forma indicada. **
       ^
-      k       Indicación: La tecla h está a la izquierda y mueve a la izquierda.
- < h	 l >		  La tecla l está a la derecha y mueve a la derecha.
+      k       Indicación: La tecla h está a la izquierda y lo mueve a la izquierda.
+ < h	 l >		  La tecla l está a la derecha y lo mueve a la derecha.
       j			  La tecla j parece una flecha que apunta hacia abajo.
       v
 
   1. Mueva el cursor por la pantalla hasta que se sienta cómodo con ello.
 
-  2. Mantenga pulsada la tecla	j  hasta que se repita «automágicamente».
----> Ahora ya sabe como llegar a la lección siguiente.
+  2. Mantenga pulsada la tecla (j) hasta que se repita «automágicamente».
+     Ahora ya sabe como llegar a la lección siguiente.
 
-  3. Utilizando la tecla abajo, vaya a la Lección 1.2.
+  3. Utilizando la tecla abajo, vaya a la lección 1.2.
 
-Nota: Si alguna vez no está seguro sobre algo que ha tecleado, pulse <ESC>
+NOTA: Si alguna vez no está seguro sobre algo que ha tecleado, pulse <ESC>
       para situarse en modo Normal. Luego vuelva a teclear la orden que deseaba.
 
-Nota: Las teclas de movimiento del cursor también funcionan. Pero usando
+NOTA: Las teclas de movimiento del cursor también funcionan. Pero usando
       hjkl podrá moverse mucho más rápido una vez que se acostumbre a ello.
+      ¡De verdad!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Lección 1.2: ENTRANDO Y SALIENDO DE VIM
+		    Lección 1.2: SALIR DE VIM
 
-  ¡¡ NOTA: Antes de ejecutar alguno de los pasos siguientes lea primero
+  ¡¡ NOTA: Antes de ejecutar alguno de los siguientes pasos lea primero
 	   la lección entera!!
 
   1. Pulse la tecla <ESC> (para asegurarse de que está en modo Normal).
 
-  2. Escriba:			:q! <INTRO>
+  2. Escriba:  :q! <INTRO>
+     Esto provoca la salida del editor DESCARTANDO cualquier cambio que haya hecho.
 
----> Esto provoca la salida del editor SIN guardar ningún cambio que se haya
-     hecho. Si quiere guardar los cambios y salir escriba:
-				:wq <INTRO>
+  3. Regrese aquí ejecutando el comando que le trajo a este tutor.
+     Éste puede haber sido:   vimtutor <INTRO>
 
-  3. Cuando vea el símbolo del sistema, escriba el mandato que le trajo a este
-     tutor. Éste puede haber sido:   vimtutor <INTRO>
-     Normalmente se usaría:	     vim tutor <INTRO>
+  4. Si ha memorizado estos pasos y se siente con confianza, ejecute los
+     pasos 1 a 3 para salir y volver a entrar al editor. 
 
----> 'vim' significa entrar al editor, 'tutor' es el fichero a editar.
+NOTA:  :q! <INTRO> descarta cualquier cambio que haya realizado.
+       En próximas lecciones aprenderá cómo guardar los cambios en un archivo.
 
-  4. Si ha memorizado estos pasos y se se siente con confianza, ejecute los
-     pasos 1 a 3 para salir y volver a entrar al editor. Después mueva el
-     cursor hasta la Lección 1.3.
+  5. Mueva el cursor hasta la Lección 1.3.
+
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Lección 1.3: EDICIÓN DE TEXTO - BORRADO
+		   Lección 1.3: EDITAR TEXTO - BORRAR
 
-** Estando en modo Normal pulse  x  para borrar el carácter sobre el cursor. **j
-
+  ** Pulse  x  para eliminar el carácter bajo el cursor. **
 
   1. Mueva el cursor a la línea de abajo señalada con --->.
 
-  2. Para corregir los errores, mueva el cursor hasta que esté bajo el
+  2. Para corregir los errores, mueva el cursor hasta que esté sobre el
      carácter que va a ser borrado.
 
-  3. Pulse la tecla  x	para borrar el carácter sobrante.
+  3. Pulse la tecla  x	para eliminar el carácter no deseado.
 
   4. Repita los pasos 2 a 4 hasta que la frase sea la correcta.
 
@@ -86,20 +86,20 @@
 
   5. Ahora que la línea esta correcta, continúe con la Lección 1.4.
 
-
 NOTA: A medida que vaya avanzando en este tutor no intente memorizar,
       aprenda practicando.
 
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Lección 1.4: EDICIÓN DE TEXTO - INSERCIÓN
+		   Lección 1.4: EDITAR TEXTO - BORRAR
 
-      ** Estando en modo Normal pulse  i  para insertar texto. **
-
+         ** Pulse  i  para insertar texto. **
 
   1. Mueva el cursor a la primera línea de abajo señalada con --->.
 
-  2. Para que la primera línea sea igual a la segunda, mueva el cursor bajo el
-     primer carácter que sigue al texto que ha de ser insertado.
+  2. Para hacer que la primera línea sea igual que la segunda, mueva el
+     cursor hasta que esté sobre el carácter ANTES del cual el texto va a ser
+     insertado.
 
   3. Pulse  i  y escriba los caracteres a añadir.
 
@@ -109,66 +109,116 @@
 ---> Flta texto en esta .
 ---> Falta algo de texto en esta línea.
 
-  5. Cuando se sienta cómodo insertando texto pase al resumen que está más
-     abajo.
+  5. Cuando se sienta cómodo insertando texto pase vaya a la lección 1.5.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lección 1.5: EDITAR TEXTO - AÑADIR
+
+
+			** Pulse  A  para añadir texto. **
+
+  1. Mueva el cursor a la primera línea inferior marcada con --->.
+     No importa sobre qué carácter está el cursor en esta línea.
+
+  2. Pulse  A  y escriba el texto necesario.
+
+  3. Cuando el texto haya sido añadido pulse <ESC> para volver al modo Normal.
+
+  4. Mueva el cursor a la segunda línea marcada con ---> y repita los
+     pasos 2 y 3 para corregir esta frase.
+
+---> Falta algún texto en es
+     Falta algún texto en esta línea.
+---> También falta alg
+     También falta algún texto aquí.
+
+  5. Cuando se sienta cómodo añadiendo texto pase a la lección 1.6.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lección 1.6: EDITAR UN ARCHIVO
+
+		    ** Use  :wq  para guardar un archivo y salir **
+
+ !! NOTA: Antes de ejecutar los siguientes pasos, lea la lección entera!!
+
+  1.  Si tiene acceso a otra terminal, haga lo siguiente en ella.
+      Si no es así, salga de este tutor como hizo en la lección 1.2:  :q!
+
+  2. En el símbolo del sistema escriba este comando:  vim archivo.txt <INTRO>
+     'vim' es el comando para arrancar el editor Vim, 'archivo.txt'
+     es el nombre del archivo que quiere editar
+     Utilice el nombre de un archivo que pueda cambiar.
+
+  3. Inserte y elimine texto como ya aprendió en las lecciones anteriores.
+
+  4. Guarde el archivo con los cambios y salga de Vim con:  :wq <INTRO>
+
+  5. Si ha salido de vimtutor en el paso 1 reinicie vimtutor y baje hasta
+     el siguiente sumario.
+
+  6. Después de leer los pasos anteriores y haberlos entendido: hágalos.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			    RESUMEN DE LA LECCIÓN 1
 
 
   1. El cursor se mueve utilizando las teclas de las flechas o las teclas hjkl.
 	 h (izquierda)	   j (abajo)	  k (arriba)	  l (derecha)
 
-  2. Para acceder a Vim (desde el símbolo del sistema %) escriba:
-     vim FILENAME <INTRO>
+  2. Para acceder a Vim desde el símbolo del sistema escriba:
+     vim NOMBREARCHIVO <INTRO>
 
   3. Para salir de Vim escriba: <ESC> :q! <INTRO> para eliminar todos
      los cambios.
+     O escriba:  <ESC>  :wq  <INTRO> para guardar los cambios.
 
-  4. Para borrar un carácter sobre el cursor en modo Normal pulse:  x
+  4. Para borrar un carácter bajo el cursor en modo Normal pulse:  x
 
-  5. Para insertar texto en la posición del cursor estando en modo Normal:
-	  pulse   i   escriba el texto	 pulse <ESC>
+  5. Para insertar o añadir texto escriba:
+     i  escriba el texto a insertar <ESC> inserta el texto antes del cursor
+	 A  escriba el texto a añadir <ESC> añade texto al final de la línea
 
-NOTA: Pulsando <ESC> se vuelve al modo Normal o cancela un mandato no deseado
-      o incompleto.
+NOTA: Pulsando <ESC> se vuelve al modo Normal o cancela una orden no deseada
+      o incompleta.
 
 Ahora continúe con la Lección 2.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lección 2.1:  MANDATOS PARA BORRAR
+		     Lección 2.1:  COMANDOS PARA BORRAR
 
 
-       ** Escriba dw para borrar hasta el final de una palabra **
+          ** Escriba dw para borrar una palabra **
 
 
   1. Pulse <ESC> para asegurarse de que está en el modo Normal.
 
-  2. Mueva el cursor a la línea de abajo señalada con --->.
+  2. Mueva el cursor a la línea inferior señalada con --->.
 
   3. Mueva el cursor al comienzo de una palabra que desee borrar.
 
   4. Pulse   dw   para hacer que la palabra desaparezca.
 
-
-  NOTA: Las letras   dw   aparecerán en la última línea de la pantalla cuando
-	las escriba. Si escribe algo equivocado pulse <ESC> y comience de nuevo.
-
+  NOTA: La letra  d  aparecerá en la última línea inferior derecha 
+    de la pantalla mientras la escribe. Vim está esperando que escriba  w .
+    Si ve otro carácter que no sea  d  escribió algo mal, pulse <ESC> y
+    comience de nuevo.
 
 ---> Hay algunas palabras pásalo bien que no pertenecen papel a esta frase.
 
+  5. Repita los pasos 3 y 4 hasta que la frase sea correcta y pase a la
+     lección 2.2.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Lección 2.2: MÁS MANDATOS PARA BORRAR
+		    Lección 2.2: MÁS COMANDOS PARA BORRAR
 
 
 	  ** Escriba  d$  para borrar hasta el final de la línea. **
 
-
   1. Pulse  <ESC>  para asegurarse de que está en el modo Normal.
 
-  2. Mueva el cursor a la línea de abajo señalada con --->.
+  2. Mueva el cursor a la línea inferior señalada con --->.
 
   3. Mueva el cursor al final de la línea correcta (DESPUÉS del primer . ).
 
@@ -176,319 +226,391 @@
 
 ---> Alguien ha escrito el final de esta línea dos veces. esta línea dos veces.
 
+  5. Pase a la lección 2.3 para entender qué está pasando.
 
 
 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Lección 2.3: SOBRE OPERADORES Y MOVIMIENTOS
+
+
+  Muchos comandos que cambian texto están compuestos por un operador y un
+  movimiento.
+  El formato para eliminar un comando con el operador de borrado  d  es el
+  siguiente:
+
+    d   movimiento
+
+  Donde:
+    d          - es el operador para borrar.
+    movimiento - es sobre lo que el comando va a operar (lista inferior).
+
+  Una lista resumida de movimientos:
+   w - hasta el comienzo de la siguiente palabra, EXCLUYENDO su primer
+       carácter.
+   e - hasta el final de la palabra actual, INCLUYENDO su primer carácter.
+   $ - hasta el final de la línea, INCLUYENDO el último carácter.
+
+NOTA: Pulsando únicamente el movimiento estando en el modo Normal sin un
+      operador, moverá el cursor como se especifica en la lista anterior.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  Lección 2.4: UTILIZAR UN CONTADOR PARA UN MOVIMIENTO
+
+
+   ** Al escribir un número antes de un movimiento, lo repite esas veces. **
+
+  1. Mueva el cursor al comienzo de la línea marcada con --->.
+
+  2. Escriba 2w  para mover el cursor dos palabras hacia adelante.
+
+  3. Escriba  3e  para mover el cursor al final de la tercera palabra hacia
+     adelante.
+
+  4. Escriba  0  (cero) para colocar el cursor al inicio de la línea.
+
+  5. Repita el paso 2 y 3 con diferentes números.
+
+---> Esto es solo una línea con palabra donde poder moverse.
+
+  6. Pase a la lección 2.5.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lección 2.5: UTILIZAR UN CONTADOR PARA BORRAR MAS
+
+
+   ** Al escribir un número con un operador lo repite esas veces. **
+
+  En combinación con el operador de borrado y el movimiento mencionado
+  anteriormente, añada un contador antes del movimiento para eliminar más:
+	 d   número   movimiento
+
+  1. Mueva el cursos a la primera palabra en MAYÚSCULAS en la línea
+     marcada con --->.
+
+  2. Escriba  d2w  para eliminar las dos palabras en MAYÚSCULAS.
+
+  3. Repita los pasos 1 y 2 con diferentes contadores para eliminar
+     las siguientes palabras en MAYÚSCULAS con un comando.
+
+--->  esta ABC DE serie FGHI JK LMN OP de palabras ha sido Q RS TUV limpiada.
+
+
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Lección 2.3: SOBRE MANDATOS Y OBJETOS
+			 Lección 2.6: OPERACIÓN EN LÍNEAS
 
 
-  El formato del mandato de borrar   d	 es como sigue:
+		   ** Escriba  dd   para eliminar una línea completa. **
 
-	 [número]   d	objeto	    O	     d	 [número]   objeto
-  donde:
-   número - es cuántas veces se ha de ejecutar el mandato (opcional, defecto=1).
-   d - es el mandato para borrar.
-   objeto - es sobre lo que el mandato va a operar (lista, abajo).
+  Debido a la frecuencia con que se elimina una línea completa, los
+  diseñadores de Vi, decidieron que sería más sencillo simplemente escribir
+  dos letras d para eliminar una línea.
 
-  Una lista corta de objetos:
-   w - desde el cursor hasta el final de la palabra, incluyendo el espacio.
-   e - desde el cursor hasta el final de la palabra, SIN incluir el espacio.
-   $ - desde el cursor hasta el final de la línea.
+  1. Mueva el cursor a la segunda línea del párrafo inferior.
+  2. Escriba  dd  para eliminar la línea.
+  3. Ahora muévase a la cuarta línea.
+  4. Escriba   2dd   para eliminar dos líneas a la vez.
 
-NOTE: Para los aventureros, pulsando sólo el objeto estando en modo Normal
-      sin un mandato moverá el cursor como se especifica en la lista de objetos.
+--->  1)  Las rosas son rojas,
+--->  2)  El barro es divertido,
+--->  3)  Las violetas son azules,
+--->  4)  Tengo un coche,
+--->  5)  Los relojes dan la hora,
+--->  6)  El azúcar es dulce
+--->  7)  Y también lo eres tú.
 
-
+La duplicación para borrar líneas también funcionan con los operadores
+mencionados anteriormente.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	       Lección 2.4: UNA EXCEPCIÓN AL 'MANDATO-OBJETO'
-
-	   ** Escriba	dd   para borrar una línea entera. **
-
-  Debido a la frecuencia con que se borran líneas enteras, los diseñadores
-  de Vim decidieron que sería más fácil el escribir simplemente dos des en
-  una fila para borrar	una línea.
-
-  1. Mueva el cursor a la segunda línea de la lista de abajo.
-  2. Escriba  dd  para borrar la línea.
-  3. Muévase ahora a la cuarta línea.
-  4. Escriba   2dd   (recuerde	número-mandato-objeto) para borrar las dos
-     líneas.
-
-      1) Las rosas son rojas,
-      2) El barro es divertido,
-      3) El cielo es azul,
-      4) Yo tengo un coche,
-      5) Los relojes marcan la hora,
-      6) El azúcar es dulce,
-      7) Y así eres tú.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Lección 2.5: EL MANDATO DESHACER
+		     Lección 2.7: EL MANDATO DESHACER
 
 
-   ** Pulse  u	para deshacer los últimos mandatos,
+   ** Pulse  u	para deshacer los últimos comandos,
 	     U	para deshacer una línea entera.       **
 
-  1. Mueva el cursor a la línea de abajo señalada con ---> y sitúelo bajo el
+  1. Mueva el cursor a la línea inferior señalada con ---> y sitúelo bajo el
      primer error.
-  2. Pulse  x  para borrar el primer caráter erróneo.
-  3. Pulse ahora  u  para deshacer el último mandato ejecutado.
-  4. Ahora corrija todos los errores de la línea usando el mandato  x.
+  2. Pulse  x  para borrar el primer carácter no deseado.
+  3. Pulse ahora  u  para deshacer el último comando ejecutado.
+  4. Ahora corrija todos los errores de la línea usando el comando  x.
   5. Pulse ahora  U  mayúscula para devolver la línea a su estado original.
   6. Pulse ahora  u  unas pocas veces para deshacer lo hecho por  U  y los
-     mandatos previos.
+     comandos previos.
   7. Ahora pulse CTRL-R (mantenga pulsada la tecla CTRL y pulse R) unas
-     pocas veces para volver a ejecutar los mandatos (deshacer lo deshecho).
+     cuantas veces para volver a ejecutar los comandos (deshacer lo deshecho).
 
 ---> Corrrija los errores dee esttta línea y vuuelva a ponerlos coon deshacer.
 
-  8. Estos mandatos son muy útiles. Ahora pase al resumen de la Lección 2.
+  8. Estos son unos comandos muy útiles. Ahora vayamos al resumen de la
+     lección 2.
+
+
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			    RESUMEN DE LA LECCIÓN 2
 
-  1. Para borrar desde el cursor hasta el final de una palabra pulse:	dw
+  1. Para borrar desde el cursor hasta siguiente palabra pulse:	     dw
+  2. Para borrar desde el cursor hasta el final de la palabra pulse: de
+  3. Para borrar desde el cursor hasta el final de una línea pulse:	 d$
+  4. Para borrar una línea entera pulse:                             dd
 
-  2. Para borrar desde el cursor hasta el final de una línea pulse:	d$
-
-  3. Para borrar una línea entera pulse:    dd
-
-  4. El formato de un mandato en modo Normal es:
-
-       [número]   mandato   objeto   O	 mandato   [número]   objeto
+  5. Para repetir un movimiento precédalo con un número:  2w
+  6. El formato para un comando de cambio es:
+               operador  [número]  movimiento
      donde:
-       número - es cuántas veces se ha de ejecutar el mandato
-       mandato - es lo que hay que hacer, por ejemplo, d para borrar
-       objeto - es sobre lo que el mandato va a operar, por ejemplo
-		w (palabra), $ (hasta el final de la línea), etc.
+       comando    - es lo que hay que hacer, por ejemplo,  d  para borrar
+       [número]   - es un número opcional para repetir el movimiento
+       movimiento - se mueve sobre el texto sobre el que operar, como
+		            w (palabra), $ (hasta el final de la línea), etc.
+  7. Para moverse al inicio de la línea utilice un cero:  0
 
-  5. Para deshacer acciones previas pulse:		 u (u minúscula)
+  8. Para deshacer acciones previas pulse:		         u (u minúscula)
      Para deshacer todos los cambios de una línea pulse: U (U mayúscula)
-     Para deshacer lo deshecho pulse:			 CTRL-R
+     Para deshacer lo deshecho pulse:			         CTRL-R
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lección 3.1: EL MANDATO «PUT» (poner)
+			 Lección 3.1: EL COMANDO «PUT» (poner)
 
-  ** Pulse p para poner lo último que ha borrado después del cursor. **
+** Pulse  p  para poner (pegar) después del cursor lo último que ha borrado. **
 
-  1. Mueva el cursor al final de la lista de abajo.
+  1. Mueva el cursor a la primera línea inferior marcada con --->.
 
-  2. Escriba  dd  para borrar la línea y almacenarla en el buffer de Vim.
+  2. Escriba  dd  para borrar la línea y almacenarla en un registro de Vim.
 
-  3. Mueva el cursor a la línea que debe quedar por debajo de la
-     línea a mover.
+  3. Mueva el cursor a la línea c) por ENCIMA de donde debería estar 
+     la línea eliminada.
 
-  4. Estando en mod Normal, pulse   p	para restituir la línea borrada.
+  4. Pulse   p	para pegar la línea borrada por debajo del cursor.
 
   5. Repita los pasos 2 a 4 para poner todas las líneas en el orden correcto.
 
-     d) ¿Puedes aprenderla tú?
-     b) Las violetas son azules,
-     c) La inteligencia se aprende,
-     a) Las rosas son rojas,
+---> d) ¿Puedes aprenderla tú?
+---> b) Las violetas son azules,
+---> c) La inteligencia se aprende,
+---> a) Las rosas son rojas,
+     
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Lección 3.2: EL MANDATO «REPLACE» (remplazar)
+		       Lección 3.2: EL COMANDO REEMPLAZAR
 
 
-  ** Pulse  r  y un carácter para sustituir el carácter sobre el cursor. **
+  ** Pulse  rx  para reemplazar el carácter bajo el cursor con  x . **
 
+  1. Mueva el cursor a la primera línea inferior marcada con --->.
 
-  1. Mueva el cursor a la primera línea de abajo señalada con --->.
+  2. Mueva el cursor para situarlo sobre el primer error.
 
-  2. Mueva el cursor para situarlo bajo el primer error.
+  3. Pulse   r	 y después el carácter que debería ir ahí.
 
-  3. Pulse   r	 y el carácter que debe sustituir al erróneo.
-
-  4. Repita los pasos 2 y 3 hasta que la primera línea esté corregida.
+  4. Repita los pasos 2 y 3 hasta que la primera sea igual a la segunda.
 
 ---> ¡Cuendo esta línea fue rscrita alguien pulso algunas teclas equibocadas!
 ---> ¡Cuando esta línea fue escrita alguien pulsó algunas teclas equivocadas!
 
+  5. Ahora pase a la lección 3.3.
 
-
+NOTA: Recuerde que debería aprender practicando.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Lección 3.3: EL MANDATO «CHANGE» (cambiar)
+			Lección 3.3: EL COMANDO CAMBIAR
 
 
-     ** Para cambiar parte de una palabra o toda ella escriba  cw . **
+     ** Para cambiar hasta el final de una línea, escriba  ce . **
 
-
-  1. Mueva el cursor a la primera línea de abajo señalada con --->.
+  1. Mueva el cursor a la primera línea inferior marcada con --->.
 
   2. Sitúe el cursor en la u de lubrs.
 
-  3. Escriba  cw  y corrija la palabra (en este caso, escriba 'ínea').
+  3. Escriba  ce  y corrija la palabra (en este caso, escriba 'ínea').
 
-  4. Pulse <ESC> y mueva el cursor al error siguiente (el primer carácter
-     que deba cambiarse).
+  4. Pulse <ESC> y mueva el cursor al siguiente error que debe ser cambiado.
 
   5. Repita los pasos 3 y 4 hasta que la primera frase sea igual a la segunda.
 
----> Esta lubrs tiene unas pocas pskavtad que corregir usem el mandato change.
----> Esta línea tiene unas pocas palabras que corregir usando el mandato change.
+---> Esta lubrs tiene unas pocas pskavtad que corregir usem el comando change.
+---> Esta línea tiene unas pocas palabras que corregir usando el comando change.
+
+Tenga en cuenta que  ce  elimina la palabra y entra en el modo Insertar.
+                    cc  hace lo mismo para toda la línea.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		      Lección 3.4: MÁS CAMBIOS USANDO c
 
-   ** El mandato change se utiliza con los mismos objetos que delete. **
+   ** El operador change se utiliza con los mismos movimientos que delete. **
 
-  1. El mandato change funciona de la misma forma que delete. El formato es:
+  1. El operador change funciona de la misma forma que delete. El formato es:
 
-       [número]   c   objeto	   O	    c	[número]   objeto
+       c   [número]   movimiento
 
-  2. Los objetos son tambiém los mismos, tales como  w (palabra), $ (fin de
-     la línea), etc.
+  2. Los movimientos son también los mismos, tales como  w (palabra) o 
+  $ (fin de la línea).
 
-  3. Mueva el cursor a la primera línea de abajo señalada con --->.
+  3. Mueva el cursor a la primera línea inferior señalada con --->.
 
   4. Mueva el cursor al primer error.
 
-  5. Escriba  c$  para hacer que el resto de la línea sea como la segunda
+  5. Pulse  c$  y escriba el resto de la línea para que sea como la segunda
      y pulse <ESC>.
 
 ---> El final de esta línea necesita alguna ayuda para que sea como la segunda.
----> El final de esta línea necesita ser corregido usando el mandato  c$.
+---> El final de esta línea necesita ser corregido usando el comando  c$.
+
+NOTA: Puede utilizar el retorno de carro para corregir errores mientras escribe.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			    RESUMEN DE LA LECCIÓN 3
 
 
-  1. Para sustituir texto que ha sido borrado, pulse  p . Esto Pone el texto
-     borrado DESPUÉS del cursor (si lo que se ha borrado es una línea se
-     situará sobre la línea que está sobre el cursor).
+  1. Para volver a poner o pegar el texto que acaba de ser borrado,
+     escriba  p . Esto pega el texto después del cursor (si se borró una
+     línea, al pegarla, esta se situará en la línea debajo del cursor).
 
   2. Para sustituir el carácter bajo el cursor, pulse	r   y luego el
-     carácter que sustituirá al original.
+     carácter que quiere que esté en ese lugar.
 
-  3. El mandato change le permite cambiar el objeto especificado desde la
-     posición del cursor hasta el final del objeto; e.g. Pulse	cw  para
-     cambiar desde el cursor hasta el final de la palabra, c$  para cambiar
-     hasta el final de la línea.
+  3. El operador change le permite cambiar desde la posición del cursor
+     hasta donde el movimiento indicado le lleve. Por ejemplo, pulse  ce
+     para cambiar desde el cursor hasta el final de la palabra, o  c$
+     para cambiar hasta el final de la línea.
 
   4. El formato para change es:
 
-	 [número]   c	objeto	      O		c   [número]   objeto
+	 c   [número]   movimiento
 
   Pase ahora a la lección siguiente.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	       Lección 4.1: SITUACIÓN EN EL FICHERO Y SU ESTADO
+	       Lección 4.1: UBICACIÓN DEL CURSOR Y ESTADO DEL ARCHIVO
 
+ ** Pulse CTRL-G para mostrar su situación en el fichero y su estado.
+    Pulse G para moverse a una determinada línea del fichero. **
 
- ** Pulse CTRL-g para mostrar su situación en el fichero y su estado.
-    Pulse MAYU-G para moverse a una determinada línea del fichero. **
+NOTA: ¡¡Lea esta lección entera antes de ejecutar cualquiera de los pasos!!
 
-  Nota: ¡¡Lea esta lección entera antes de ejecutar alguno de los pasos!!
+  1. Mantenga pulsada la tecla Ctrl y pulse  g . Le llamamos a esto CTRL-G.
+     Aparecerá un mensaje en la parte inferior de la página con el nombre
+     del archivo y la posición en este. Recuerde el número de línea
+     para el paso 3.
 
+NOTA: Quizás pueda ver la posición del cursor en la esquina inferior derecha
+      de la pantalla. Esto ocurre cuando la opción 'ruler' (regla) está
+      habilitada (consulte  :help 'ruler'  )
 
-  1. Mantenga pulsada la tecla Ctrl y pulse  g . Aparece una línea de estado
-     al final de la pantalla con el nombre del fichero y la línea en la que
-     está situado. Recuerde el número de la línea para el Paso 3.
+  2. Pulse  G  para mover el cursor hasta la parte inferior del archivo.
+     Pulse  gg  para mover el cursor al inicio del archivo.
 
-  2. Pulse Mayu-G para ir al final del fichero.
+  3. Escriba el número de la línea en la que estaba y después  G  . Esto
+     le volverá a la línea en la que estaba cuando pulsó CTRL-G.
 
-  3. Escriba el número de la línea en la que estaba y despúes Mayu-G. Esto
-     le volverá a la línea en la que estaba cuando pulsó Ctrl-g.
-     (Cuando escriba los números NO se mostrarán en la pantalla).
-
-  4. Si se siente confiado en poder hacer esto ejecute los pasos 1 a 3.
+  4. Si se siente seguro en poder hacer esto ejecute los pasos 1 a 3.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Lección 4.2: EL MANDATO «SEARCH» (buscar)
+			Lección 4.2: EL COMANDO «SEARCH» (buscar)
 
      ** Escriba  /  seguido de una frase para buscar la frase. **
 
   1. En modo Normal pulse el carácter  / . Fíjese que tanto el carácter  /
      como el cursor aparecen en la última línea de la pantalla, lo mismo
-     que el mandato  : .
+     que el comando  : .
 
   2. Escriba ahora   errroor   <INTRO>. Esta es la palabra que quiere buscar.
 
-  3. Para repetir la búsqueda, simplemente pulse  n .
-     Para busacar la misma frase en la dirección opuesta, pulse Mayu-N .
+  3. Para repetir la búsqueda de la misma frase otra vez, simplemente pulse  n .
+     Para buscar la misma frase en la dirección opuesta, pulse  N .
 
   4. Si quiere buscar una frase en la dirección opuesta (hacia arriba),
-     utilice el mandato  ?  en lugar de  / .
+     utilice el comando  ?  en lugar de  / .
+  
+  5. Para regresar al lugar de donde procedía pulse  CTRL-O  (Mantenga pulsado
+  Ctrl mientras pulsa la letra o). Repita el proceso para regresar más atrás.
+  CTRL-I va hacia adelante.
 
----> Cuando la búsqueda alcanza el final del fichero continuará desde el
-     principio.
+---> "errroor" no es la forma correcta de escribir error, errroor es un error.
 
-  «errroor» no es la forma de deletrear error; errroor es un error.
+NOTA: Cuando la búsqueda llega al final del archivo, continuará desde el
+      comienzo, a menos que la opción 'wrapscan' haya sido desactivada.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 	       Lección 4.3: BÚSQUEDA PARA COMPROBAR PARÉNTESIS
 
    ** Pulse %  para encontrar el paréntesis correspondiente a ),] o } . **
 
-
-  1. Sitúe el cursor en cualquiera de los caracteres ), ] o } en la línea de
-     abajo señalada con --->.
+  1. Sitúe el cursor en cualquiera de los caracteres (, [ o { en la línea 
+     inferior señalada con --->.
 
   2. Pulse ahora el carácter  %  .
 
-  3. El cursor debería situarse en el paréntesis (, corchete [ o llave {
-     correspondiente.
+  3. El cursor se moverá a la pareja de cierre del paréntesis, corchete
+     o llave correspondiente.
 
-  4. Pulse  %  para mover de nuevo el cursor al paréntesis, corchete o llave
-     correspondiente.
+  4. Pulse  %  para mover el cursor a la otra pareja del carácter.
 
----> Esto ( es una línea de prueba con (, [, ], {, y } en ella. )).
+  5. Mueva el cursor a otro (,),[,],{ o } y vea lo que hace % .
 
-Nota: ¡Esto es muy útil en la detección de errores en un programa con
-      paréntesis, corchetes o llaves disparejos.
+---> Esto ( es una línea de prueba con (, [, ], {, y } en ella. ))
+
+NOTA: ¡Esto es muy útil en la detección de errores en un programa con
+      paréntesis, corchetes o llaves sin pareja.
+      
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		  Lección 4.4: UNA FORMA DE CAMBIAR ERRORES
+		  Lección 4.4: EL COMANDO SUSTITUIR
 
 
     ** Escriba	:s/viejo/nuevo/g para sustituir 'viejo' por 'nuevo'. **
 
-
-  1. Mueva el cursor a la línea de abajo señalada con --->.
+  1. Mueva el cursor a la línea inferior señalada con --->.
 
   2. Escriba  :s/laas/las/  <INTRO> . Tenga en cuenta que este mandato cambia
      sólo la primera aparición en la línea de la expresión a cambiar.
+  
+  3. Ahora escriba :/laas/la/g . Al añadir la opción  g  esto significa
+     que hará la sustitución global en la línea, cambiando todas las
+     ocurrencias del término "laas" en la línea.
 
 ---> Laas mejores épocas para ver laas flores son laas primaveras.
 
-  4. Para cambiar todas las apariciones de una expresión ente dos líneas
-     escriba   :#,#s/viejo/nuevo/g   donde #,# son los números de las dos
-     líneas. Escriba   :%s/viejo/nuevo/g   para hacer los cambios en todo
-     el fichero.
-
-
-
-
+  4. Para cambiar cada ocurrencia de la cadena de caracteres entre dos líneas,
+     Pulse  :#,#s/viejo/nuevo/g  donde #,# son los números de línea del rango
+                                 de líneas donde se realizará la sustitución.
+     Pulse  :%s/old/new/g        para cambiar cada ocurrencia en todo el
+                                 archivo.
+     Pulse  :%s/old/new/gc       para encontrar cada ocurrencia en todo el 
+                                 archivo, pidiendo confirmación para 
+                                 realizar la sustitución o no.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			    RESUMEN DE LA LECCIÓN 4
 
 
-  1. Ctrl-g  muestra la posición del cursor en el fichero y su estado.
-     Mayu-G mueve el cursor al final del fichero. Un número de línea
-     seguido de Mayu-G mueve el cursor a la línea con ese número.
+  1. CTRL-G  muestra la posición del cursor en el fichero y su estado.
+             G  mueve el cursor al final del archivo.
+     número  G  mueve el cursor a ese número de línea.
+            gg  mueve el cursor a la primera línea del archivo.
 
   2. Pulsando  /  seguido de una frase busca la frase hacia ADELANTE.
      Pulsando  ?  seguido de una frase busca la frase hacia ATRÁS.
      Después de una búsqueda pulse  n  para encontrar la aparición
-     siguiente en la misma dirección.
+     siguiente en la misma dirección o  N  para buscar en dirección opuesta.
 
   3. Pulsando  %  cuando el cursor esta sobre (,), [,], { o } localiza
      la pareja correspondiente.
 
-  4. Para cambiar viejo por nuevo en una línea pulse	      :s/viejo/nuevo
+  4. Para cambiar viejo en el primer nuevo en una línea pulse  :s/viejo/nuevo
      Para cambiar todos los viejo por nuevo en una línea pulse :s/viejo/nuevo/g
      Para cambiar frases entre dos números de líneas pulse  :#,#s/viejo/nuevo/g
      Para cambiar viejo por nuevo en todo el fichero pulse  :%s/viejo/nuevo/g
@@ -499,11 +621,10 @@
 		Lección 5.1: CÓMO EJECUTAR UN MANDATO EXTERNO
 
 
-  ** Escriba  :!  seguido de un mandato externo para ejecutar ese mandato. **
+  ** Escriba  :!  seguido de un comando externo para ejecutar ese comando. **
 
-
-  1. Escriba el conocido mandato  :  para situar el cursor al final de la
-     pantalla. Esto le permitirá introducir un mandato.
+  1. Escriba el conocido comando  :  para situar el cursor al final de la
+     pantalla. Esto le permitirá introducir un comando.
 
   2. Ahora escriba el carácter ! (signo de admiración). Esto le permitirá
      ejecutar cualquier mandato del sistema.
@@ -512,9 +633,11 @@
      le mostrará una lista de su directorio, igual que si estuviera en el
      símbolo del sistema. Si  ls  no funciona utilice	!:dir	.
 
---->Nota: De esta manera es posible ejecutar cualquier mandato externo.
+NOTA: De esta manera es posible ejecutar cualquier comando externo,
+      también incluyendo argumentos.
 
---->Nota: Todos los mandatos   :   deben finalizarse pulsando <INTRO>.
+NOTA: Todos los comando   :   deben finalizarse pulsando <INTRO>.
+      De ahora en adelante no siempre se mencionará.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -522,10 +645,10 @@
 
 
      ** Para guardar los cambios hechos en un fichero,
-	escriba  :w NOMBRE_DE_FICHERO. **
+	escriba  :w NOMBRE_DE_FICHERO **
 
-
-  1. Escriba  :!dir  o	:!ls  para ver una lista de su directorio.
+  1. Escriba  :!dir  o	:!ls  para ver una lista de los archivos 
+     de su directorio.
      Ya sabe que debe pulsar <INTRO> después de ello.
 
   2. Elija un nombre de fichero que todavía no exista, como TEST.
@@ -533,210 +656,337 @@
   3. Ahora escriba   :w TEST  (donde TEST es el nombre de fichero elegido).
 
   4. Esta acción guarda todo el fichero  (Vim Tutor)  bajo el nombre TEST.
-     Para comprobarlo escriba	:!dir	de nuevo y vea su directorio.
+     Para comprobarlo escriba	:!dir  o  :!ls  de nuevo y vea su directorio.
 
----> Tenga en cuenta que si sale de Vim y  entra de nuevo con el nombre de
-     fichero TEST, el fichero sería una copia exacta del tutor cuando lo
-     ha guardado.
+NOTA: Si saliera de Vim y volviera a entrar de nuevo con  vim TEST  , el
+      archivo sería una copia exacta del tutorial cuando lo guardó.
+
+  5. Ahora elimine el archivo escribiendo (Windows):  :!del TEST
+                                        o (Unix):     :!rm TEST
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	       Lección 5.3: UN MANDATO DE ESCRITURA SELECTIVO
-
-   ** Para guardar parte del fichero escriba   :#,# NOMBRE_DEL_FICHERO **
+	       Lección 5.3: SELECCIONAR TEXTO PARA GUARDAR
 
 
-  1. Escriba de nuevo, una vez más,  :!dir  o  :!ls  para obtener una lista
-     de su directorio y elija nombre de fichero adecuado, como TEST.
+   ** Para guardar parte del archivo, escriba  v  movimiento  :w ARCHIVO **
 
-  2. Mueva el cursor al principio de la pantalla y pulse  Ctrl-g  para saber
-     el número de la línea correspondiente. ¡RECUERDE ESTE NÚMERO!
+  1. Mueva el cursor a esta línea.
 
-  3. Ahora mueva el cursor a la última línea de la pantalla y pulse Ctrl-g
-     de nuevo. ¡RECUERDE TAMBIÉN ESTE NÚMERO!
+  2. Pulse  v  y mueva el cursor hasta el quinto elemento inferior. Vea que
+     el texto es resaltado.
 
-  4. Para guardar SOLAMENTE una parte de un fichero, escriba  :#,# w TEST
-     donde #,# son los números que usted ha recordado (primera línea,
-     última línea) y TEST es su nombre de dichero.
+  3. Pulse el carácter  :  en la parte inferior de la pantalla aparecerá
+     :'<,'>
 
-  5. De nuevo, vea que el fichero esta ahí con	:!dir  pero NO lo borre.
+  4. Pulse  w TEST  , donde TEST es un nombre de archivo que aún no existe.
+     Verifique que  :'<,'>w TEST  antes de pulsar <INTRO>.
+
+  5. Vim escribirá las líneas seleccionadas en el archivo TEST. Utilice
+     :!dir  o  :!ls  para verlo. ¡No lo elimine todavía! Lo utilizaremos
+     en la siguiente lección.
+
+NOTA: Al pulsar  v  inicia la selección visual. Puede mover el cursor para
+      hacer la selección más grande o pequeña. Después puede utilizar un
+      operador para hacer algo con el texto. Por ejemplo,  d  eliminará
+      el texto seleccionado.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		Lección 5.4: RECUPERANDO Y MEZCLANDO FICHEROS
 
+
  ** Para insertar el contenido de un fichero escriba :r NOMBRE_DEL_FICHERO **
 
-  1. Escriba   :!dir   para asegurarse de que su fichero TEST del ejercicio
-     anterior está presente.
+  1. Sitúe el cursor justo por encima de esta línea.
 
-  2. Situe el cursor al principio de esta pantalla.
+NOTA: Después de ejecutar el paso 2 verá texto de la lección 5.3. Después
+      DESCIENDA hasta ver de nuevo esta lección.
 
-NOTA: Después de ejecutar el paso 3 se verá la Lección 5.3. Luego muévase
-      hacia ABAJO para ver esta lección de nuevo.
+  2. Ahora recupere el archivo TEST utilizando el comando  :r TEST  donde
+     TEST es el nombre que ha utilizado.
+     El archivo que ha recuperado se colocará debajo de la línea donde
+     se encuentra el cursor.
 
-  3. Ahora recupere el fichero TEST utilizando el mandato  :r TEST  donde
-     TEST es el nombre del fichero.
+  3. Para verificar que se ha recuperado el archivo, suba el cursor y 
+     compruebe que ahora hay dos copias de la lección 5.3, la original y
+     la versión del archivo.
 
-NOTA: El fichero recuperado se sitúa a partir de la posición del cursor.
+NOTA: También puede leer la salida de un comando externo. Por ejemplo,
+      :r !ls  lee la salida del comando ls y lo pega debajo de la línea
+      donde se encuentra el cursor.
 
-  4. Para verificar que el fichero ha sido recuperado, mueva el cursor hacia
-     arriba y vea que hay dos copias de la Lección 5.3, la original y la
-     versión del fichero.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			   RESUMEN DE LA LECCIÓN 5
 
 
-  1.  :!mandato  ejecuta un mandato externo.
+  1.  :!comando  ejecuta un comando externo.
 
       Algunos ejemplos útiles son:
-	  :!dir - muestra el contenido de un directorio.
-	  :!del NOMBRE_DE_FICHERO  -  borra el fichero NOMBRE_DE FICHERO.
+      (Windows)     (Unix)
+	  :!dir          :!ls           - muestra el contenido de un directorio.
+	  :!del ARCHIVO  :!rm ARCHIVO   -  borra el fichero ARCHIVO.
 
-  2.  :#,#w NOMBRE_DE _FICHERO  guarda desde la línea # hasta la # en el
-     fichero NOMBRE_DE_FICHERO.
+  2.  :w ARCHIVO escribe el archivo actual de Vim en el disco con el 
+      nombre de ARCHIVO.
 
-  3.  :r NOMBRE_DE _FICHERO  recupera el fichero del disco NOMBRE_DE FICHERO
-     y lo inserta en el fichero en curso a partir de la posición del cursor.
+  3.  v  movimiento  :w ARCHIVO  guarda las líneas seleccionadas visualmente
+      en el archivo ARCHIVO.
 
+  4.  :r ARCHIVO  recupera del disco el archivo ARCHIVO y lo pega debajo
+      de la posición del cursor.
 
-
-
-
+  5.  :r !dir  lee la salida del comando dir y lo pega debajo de la
+      posición del cursor.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lección 6.1: EL MANDATO «OPEN» (abrir)
+			 Lección 6.1: EL COMANDO OPEN
 
 
 	 ** Pulse  o  para abrir una línea debajo del cursor
-	    y situarle en modo Insert **
+	    y situarle en modo Insertar **
 
+  1. Mueva el cursor a la línea inferior señalada con --->.
 
-  1. Mueva el cursor a la línea de abajo señalada con --->.
+  2. Pulse la letra minúscula  o  para abrir una línea por DEBAJO del cursor
+     y situarle en modo Insertar.
+  
+  3. Ahora escriba algún texto y después pulse <ESC> para salir del modo
+     insertar.
 
-  2. Pulse  o (minúscula) para abrir una línea por DEBAJO del cursor
-     y situarle en modo Insert.
+---> Después de pulsar  o  el cursor se sitúa en la línea abierta en modo Insertar.
 
-  3. Ahora copie la línea señalada con ---> y pulse <ESC> para salir del
-     modo Insert.
-
----> Luego de pulsar  o  el cursor se sitúa en la línea abierta en modo Insert.
-
-  4. Para abrir una línea por encima del cursor, simplemente pulse una O
+  4. Para abrir una línea por ENCIMA del cursor, simplemente pulse una O
      mayúscula, en lugar de una o minúscula. Pruebe este en la línea siguiente.
-Abra una línea sobre ésta pulsando Mayu-O cuando el cursor está en esta línea.
+
+---> Abra una línea sobre esta pulsando O cuando el cursor está en esta línea.
+
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Lección 6.2: EL MANDATO «APPEND» (añadir)
+			Lección 6.2: EL COMANDO APPEND (añadir)
+
 
 	 ** Pulse  a  para insertar texto DESPUÉS del cursor. **
 
+  1. Mueva el cursor al inicio de la primera línea inferior señalada con --->.
 
-  1. Mueva el cursor al final de la primera línea de abajo señalada con --->
-     pulsando  $  en modo Normal.
+  2. Escriba  e  hasta que el cursor esté al final de  lín .
 
-  2. Escriba una  a  (minúscula) para añadir texto DESPUÉS del carácter
-     que está sobre el cursor. (A mayúscula añade texto al final de la línea).
+  3. Escriba una  a  (minúscula) para añadir texto DESPUÉS del cursor.
 
-Nota: ¡Esto evita el pulsar  i , el último carácter, el texto a insertar,
-      <ESC>, cursor a la derecha y, finalmente, x , sólo para añadir algo
-      al final de una línea!
+  4. Complete la palabra como en la línea inferior. Pulse <ESC> para salir
+     del modo insertar.
+  
+  5. Utilice  e  para moverse hasta la siguiente palabra incompleta y 
+     repita los pasos 3 y 4.
 
-  3. Complete ahora la primera línea. Nótese que append es exactamente lo
-     mismo que modo Insert, excepto por el lugar donde se inserta el texto.
+---> Esta lín le permit prati cómo añad texto a una línea.
+---> Esta línea le permitirá practicar cómo añadir texto a una línea.
 
----> Esta línea le permitirá praticar
----> Esta línea le permitirá praticar el añadido de texto al final de una línea.
+NOTA: a, i y A todos entran en el modo Insertar, la única diferencia es
+      dónde ubican los caracteres insertados.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lección 6.3: OTRA VERSIÓN DE «REPLACE» (remplazar)
+		     Lección 6.3: OTRA VERSIÓN DE REPLACE (remplazar)
+
 
     ** Pulse una  R  mayúscula para sustituir más de un carácter. **
 
+  1. Mueva el cursor a la primera línea inferior señalada con --->. Mueva
+     el cursor al inicio de la primera  xxx .
 
-  1. Mueva el cursor a la primera línea de abajo señalada con --->.
+  2. Ahora pulse  R  y escriba el número que aparece en la línea inferior,
+     esto reemplazará el texto xxx .
+  
+  3. Pulse <ESC> para abandonar el modo Reemplazar. Observe que el resto de
+     la línea permanece sin modificaciones.
 
-  2. Sitúe el cursor al comienzo de la primera palabra que sea diferente
-     de las de la segunda línea marcada con ---> (la palabra 'anterior').
+  4. Repita los pasos para reemplazar el texto xxx que queda.
 
-  3. Ahora pulse  R  y sustituya el resto del texto de la primera línea
-     escribiendo sobre el viejo texto para que la primera línea sea igual
-     que la segunda.
+---> Sumar 123 a xxx da un resultado de xxx.
+---> Sumar 123 a 456 da un resultado de 579.
 
----> Para hacer que esta línea sea igual que la anterior use las teclas.
----> Para hacer que esta línea sea igual que la siguiente escriba R y el texto.
-
-  4. Nótese que cuando pulse <ESC> para salir, el texto no alterado permanece.
-
-
+NOTA: El modo Reemplazar es como el modo Insertar, pero cada carácter escrito
+      elimina un carácter ya existente.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lección 6.4: FIJAR OPCIONES
-
- ** Fijar una opción de forma que una búsqueda o sustitución ignore la caja **
-  (Para el concepto de caja de una letra, véase la nota al final del fichero)
+			 Lección 6.4: COPIAR Y PEGAR TEXTO
 
 
-  1. Busque 'ignorar' introduciendo:
-     /ignorar
-     Repita varias veces la búsque pulsando la tecla n
 
-  2. Fije la opción 'ic' (Ignorar la caja de la letra) escribiendo:
-     :set ic
+	  ** Utilice el operador  y  para copiar texto y  p  para pegarlo. **
 
-  3. Ahora busque 'ignorar' de nuevo pulsando n
-     Repita la búsqueda varias veces más pulsando la tecla n
+  1. Mueva el cursor a la línea inferior marcada con ---> y posicione el 
+     cursor después de "a)". 
 
-  4. Fije las opciones 'hlsearch' y 'insearch':
-     :set hls is
+  2. Inicie el modo Visual con  v  y mueva el cursor justo antes de "primer".
 
-  5. Ahora introduzca la orden de búsqueda otra vez, y vea qué pasa:
-     /ignore
+  3. Pulse  y  para copiar ("yank") el texto resaltado.
 
+  4. Mueva el cursor al final de la siguiente línea mediante:  j$
+
+  5. Pulse  p  para poner (pegar) el texto. Después escriba: el segundo <ESC>.
+
+  6. Utilice el modo visual para seleccionar " elemento.", y cópielo con  y
+     mueva el cursor al final de la siguiente línea con j$  y pegue el texto
+     recién copiado con  p .
+
+--->  a) este es el primer elemento.
+      b)
+
+NOTA: También puede utilizar  y  como un operador:  yw  copia una palabra,
+      yy  copia la línea completa donde está el cursor, después  p  pegará
+      esa línea.
+     
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Lección 6.5: ACTIVAR (SET) UNA OPCIÓN
+
+
+	  ** Active una opción para buscar o sustituir ignorando si está
+         en mayúsculas o minúsculas el texto. **
+
+  1. Busque la cadena de texto 'ignorar' escribiendo:  /ignorar <INTRO>
+     Repita la búsqueda varias veces pulsando  n .
+
+  2. Active la opción 'ic' (Ignore case o ignorar mayúsculas y minúsculas) 
+     mediante:   :set ic
+
+  3. Ahora busque de nuevo 'ignorar' pulsando  n
+     Observe que ahora también se encuentran Ignorar e IGNORAR.
+
+  4. Active las opciones 'hlsearch' y 'incsearch' escribiendo:  :set hls is
+
+  5. Ahora escriba de nuevo el comando de búsqueda y vea qué ocurre:  /ignore <INTRO>
+
+  6. Para inhabilitar el ignorar la distinción de mayúsculas y minúsculas     
+     escriba:  :set noic
+
+NOTA:  Para eliminar el resaltado de las coincidencias escriba:   :nohlsearch
+NOTA:  Si quiere ignorar las mayúsculas y minúsculas, solo para un comando
+       de búsqueda, utilice  \c  en la frase:  /ignorar\c <INTRO>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			   RESUMEN DE LA LECCIÓN 6
 
 
-  1. Pulsando  o  abre una línea por DEBAJO del cursor y sitúa el cursor en
-     la línea abierta en modo Insert.
-     Pulsando una O mayúscula se abre una línea SOBRE la que está el cursor.
+  1. Escriba  o  para abrir una línea por DEBAJO de la posición del cursor y 
+     entrar en modo Insertar.
+     Escriba  O  para abrir una línea por ENCIMA de la posición del cursor y
+     entrar en modo Insertar
 
-  2. Pulse una	a  para insertar texto DESPUÉS del carácter sobre el cursor.
-     Pulsando una  A  mayúscula añade automáticamente texto al final de la
-     línea.
+  2. Escriba  a  para insertar texto DESPUÉS del cursor.
+     Escriba  A  para insertar texto al final de la línea.
 
-  3. Pulsando una  R  mayúscula se entra en modo Replace hasta que, para salir,
-     se pulse <ESC>.
+  3. El comando  e  mueve el cursor al final de una palabra.
 
-  4. Escribiendo «:set xxx» fija la opción «xxx»
+  4. El operador  y  copia (yank) texto,  p  lo pega (pone).
 
+  5. Al escribir una  R  mayúscula entra en el modo Reemplazar hasta que
+     se pulsa  <ESC>  .
 
+  6. Al escribir ":set xxx" activa la opción "xxx".  Algunas opciones son:
+  	'ic' 'ignorecase'	ignorar mayúsculas/minúsculas al buscar
+	'is' 'incsearch'	mostrar las coincidencias parciales para la búsqueda
+                        de una frase
+	'hls' 'hlsearch'	resalta todas las coincidencias de la frases
+     Puedes utilizar tanto los nombre largos o cortos de las opciones.
 
-
-
-
+  7. Añade "no" para inhabilitar una opción:   :set noic
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		  Lección 7: MANDATOS PARA LA AYUDA EN LÍNEA
+		  Lección 7: OBTENER AYUDA
+
 
 		 ** Utilice el sistema de ayuda en línea **
 
-
-  Vim dispone de un sistema de ayuda en línea. Para activarlo, pruebe una
+  Vim dispone de un sistema de ayuda en línea. Para comenzar, pruebe una
   de estas tres formas:
 	- pulse la tecla <AYUDA> (si dispone de ella)
 	- pulse la tecla <F1> (si dispone de ella)
 	- escriba   :help <INTRO>
 
-  Escriba   :q <INTRO>	 para cerrar la ventana de ayuda.
+  Lea el texto en la ventana de ayuda para descubrir cómo funciona la ayuda.
+  Escriba  CTRL-W CTRL-W  para saltar de una ventana a otra.
+  Escriba    :q <INTRO>   para cerrar la ventana de ayuda.
 
   Puede encontrar ayuda en casi cualquier tema añadiendo un argumento al
-  mandato «:help» mandato. Pruebe éstos:
+  comando «:help». Pruebe éstos (no olvide pulsar <INTRO>):
 
-  :help w <INTRO>
-  :help c_<T <INTRO>
-  :help insert-index <INTRO>
+  :help w 
+  :help c_CTRL-D
+  :help insert-index 
+  :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lección 7.2: CREAR UN SCRIPT DE INICIO
+
+
+			  ** Habilitar funcionalidades en Vim **
+
+  Vim tiene muchas más funcionalidades que Vi, pero algunas están
+  inhabilitadas de manera predeterminada.
+  Para empezar a utilizar más funcionalidades debería crear un archivo
+  llamado "vimrc".
+
+  1. Comience a editar el archivo "vimrc". Esto depende de su sistema:
+	:e ~/.vimrc		para Unix
+	:e ~/_vimrc		para Windows
+
+  2. Ahora lea el contenido del archivo "vimrc" de ejemplo:
+	:r $VIMRUNTIME/vimrc_example.vim
+
+  3. Guarde el archivo mediante:
+	:w
+
+  La próxima vez que inicie Vim, este usará el resaltado de sintaxis.
+  Puede añadir todos sus ajustes preferidos a este archivo "vimrc".
+  Para más información escriba  :help vimrc-intro
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			     Lección 7.3: COMPLETADO
+
+
+	      ** Completado de la línea de comandos con CTRL-D o <TAB> **
+
+  1. Asegúrese de que Vim no está en el modo compatible:  :set nocp
+
+  2. Vea qué archivos existen en el directorio con:  :!ls   o   :!dir
+
+  3. Escriba el inicio de un comando:  :e
+
+  4. Pulse  CTRL-D  y Vim mostrará una lista de comandos que empiezan con "e".
+
+  5. Añada  d<TAB>  y Vim completará el nombre del comando a ":edit".
+
+  6. Ahora añada un espacio y el inicio del nombre de un archivo:  :edit FIL
+
+  7. Pulse <TAB>.  Vim completará el nombre (si solo hay uno).
+
+NOTA:  El completado funciona con muchos comandos. Solo pulse CTRL-D o
+       <TAB>.  Es especialmente útil para   :help .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       RESUMEN DE LA LECCIÓN 7
+
+
+  1. Escriba  :help  o pulse <F1> o <HELP>  para abrir la ventana de ayuda.
+
+  2. Escriba  :help cmd  para encontrar ayuda sobre  cmd .
+
+  3. Escriba  CTRL-W CTRL-W  para saltar a otra ventana.
+
+  4. Escriba  :q  para cerrar la ventana de ayuda.
+
+  5. Cree un fichero vimrc de inicio para guardar sus ajustes preferidos.
+
+  6. Cuando escriba un comando  :  pulse CTRL-D para ver posibles opciones.
+     Pulse <TAB> para utilizar una de las opciones de completado.
+
+
+
+
+
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -744,13 +994,15 @@
   Aquí concluye el tutor de Vim. Está pensado para dar una visión breve del
   editor Vim, lo suficiente para permitirle usar el editor de forma bastante
   sencilla. Está muy lejos de estar completo pues Vim tiene muchísimos más
-  mandatos.
+  comandos. Lea el siguiente manual de usuario: ":help user-manual".
 
   Para lecturas y estudios posteriores se recomienda el libro:
-	Learning the Vi Editor - por Linda Lamb
-	Editorial: O'Reilly & Associates Inc.
-  Es un buen libro para llegar a saber casi todo lo que desee hacer con Vi.
-  La sexta edición incluye también información sobre Vim.
+	Vim - Vi Improved - de Steve Oualline
+	Editado por: New Riders
+  El primer libro dedicado completamente a Vim. Especialmente útil para
+  recién principiantes.
+  Tiene muchos ejemplos e imágenes.
+  Vea https://iccf-holland.org/click5.html
 
   Este tutorial ha sido escrito por Michael C. Pierce y Robert K. Ware,
   Colorado School of Mines utilizando ideas suministradas por Charles Smith,
@@ -760,10 +1012,12 @@
   Modificado para Vim por Bram Moolenaar.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
+    
   Traducido del inglés por:
 
-  Eduardo F. Amatria
-  Correo electrónico: eferna1@platea.pntic.mec.es
+  * Eduardo F. Amatria
+    Correo electrónico: eferna1@platea.pntic.mec.es
+  * Victorhck
+    Correo electrónico: victorhck@opensuse.org
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/tutor/tutor.es.utf-8 b/runtime/tutor/tutor.es.utf-8
index b7cb720..a04d453 100644
--- a/runtime/tutor/tutor.es.utf-8
+++ b/runtime/tutor/tutor.es.utf-8
@@ -1,84 +1,84 @@
 ===============================================================================
-=     B i e n v e n i d o   a l   t u t o r   d e   V I M  -  Versión 1.4     =
+=     B i e n v e n i d o   a l   t u t o r   d e   V I M  -  Versión 1.7     =
 ===============================================================================
 
-     Vim es un editor muy potente que dispone de muchos mandatos, demasiados
+     Vim es un editor muy potente que dispone de muchos comandos, demasiados
      para ser explicados en un tutor como éste. Este tutor está diseñado
-     para describir suficientes mandatos para que usted sea capaz de
+     para describir suficientes comandos para que usted sea capaz de
      aprender fácilmente a usar Vim como un editor de propósito general.
 
-     El tiempo necesario para completar el tutor es aproximadamente de 25-30
+     El tiempo necesario para completar el tutor es aproximadamente de 30
      minutos, dependiendo de cuánto tiempo se dedique a la experimentación.
 
-     Los mandatos de estas lecciones modificarán el texto. Haga una copia de
+     Los comandos de estas lecciones modificarán el texto. Haga una copia de
      este fichero para practicar (con «vimtutor» esto ya es una copia).
 
      Es importante recordar que este tutor está pensado para enseñar con
-     la práctica. Esto significa que es necesario ejecutar los mandatos
-     para aprenderlos adecuadamente. Si únicamente se lee el texto, se
-     olvidarán los mandatos.
+     la práctica. Esto significa que es necesario ejecutar los comandos
+     para aprenderlos adecuadamente. Si únicamente lee el texto, ¡se le
+     olvidarán los comandos.
 
-     Ahora, asegúrese de que la tecla de bloqueo de mayúsculas no está
+     Ahora, asegúrese de que la tecla de bloqueo de mayúsculas NO está
      activada y pulse la tecla	j  lo suficiente para mover el cursor
      de forma que la Lección 1.1 ocupe completamente la pantalla.
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lección 1.1: MOVIMIENTOS DEL CURSOR
+		     Lección 1.1: MOVER EL CURSOR
 
- ** Para mover el cursor, pulse las teclas h,j,k,l de la forma que se indica. **
+ ** Para mover el cursor, pulse las teclas h,j,k,l de la forma indicada. **
       ^
-      k       Indicación: La tecla h está a la izquierda y mueve a la izquierda.
- < h	 l >		  La tecla l está a la derecha y mueve a la derecha.
+      k       Indicación: La tecla h está a la izquierda y lo mueve a la izquierda.
+ < h	 l >		  La tecla l está a la derecha y lo mueve a la derecha.
       j			  La tecla j parece una flecha que apunta hacia abajo.
       v
 
   1. Mueva el cursor por la pantalla hasta que se sienta cómodo con ello.
 
-  2. Mantenga pulsada la tecla	j  hasta que se repita «automágicamente».
----> Ahora ya sabe como llegar a la lección siguiente.
+  2. Mantenga pulsada la tecla (j) hasta que se repita «automágicamente».
+     Ahora ya sabe como llegar a la lección siguiente.
 
-  3. Utilizando la tecla abajo, vaya a la Lección 1.2.
+  3. Utilizando la tecla abajo, vaya a la lección 1.2.
 
-Nota: Si alguna vez no está seguro sobre algo que ha tecleado, pulse <ESC>
+NOTA: Si alguna vez no está seguro sobre algo que ha tecleado, pulse <ESC>
       para situarse en modo Normal. Luego vuelva a teclear la orden que deseaba.
 
-Nota: Las teclas de movimiento del cursor también funcionan. Pero usando
+NOTA: Las teclas de movimiento del cursor también funcionan. Pero usando
       hjkl podrá moverse mucho más rápido una vez que se acostumbre a ello.
+      ¡De verdad!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Lección 1.2: ENTRANDO Y SALIENDO DE VIM
+		    Lección 1.2: SALIR DE VIM
 
-  ¡¡ NOTA: Antes de ejecutar alguno de los pasos siguientes lea primero
+  ¡¡ NOTA: Antes de ejecutar alguno de los siguientes pasos lea primero
 	   la lección entera!!
 
   1. Pulse la tecla <ESC> (para asegurarse de que está en modo Normal).
 
-  2. Escriba:			:q! <INTRO>
+  2. Escriba:  :q! <INTRO>
+     Esto provoca la salida del editor DESCARTANDO cualquier cambio que haya hecho.
 
----> Esto provoca la salida del editor SIN guardar ningún cambio que se haya
-     hecho. Si quiere guardar los cambios y salir escriba:
-				:wq <INTRO>
+  3. Regrese aquí ejecutando el comando que le trajo a este tutor.
+     Éste puede haber sido:   vimtutor <INTRO>
 
-  3. Cuando vea el símbolo del sistema, escriba el mandato que le trajo a este
-     tutor. Éste puede haber sido:   vimtutor <INTRO>
-     Normalmente se usaría:	     vim tutor <INTRO>
+  4. Si ha memorizado estos pasos y se siente con confianza, ejecute los
+     pasos 1 a 3 para salir y volver a entrar al editor. 
 
----> 'vim' significa entrar al editor, 'tutor' es el fichero a editar.
+NOTA:  :q! <INTRO> descarta cualquier cambio que haya realizado.
+       En próximas lecciones aprenderá cómo guardar los cambios en un archivo.
 
-  4. Si ha memorizado estos pasos y se se siente con confianza, ejecute los
-     pasos 1 a 3 para salir y volver a entrar al editor. Después mueva el
-     cursor hasta la Lección 1.3.
+  5. Mueva el cursor hasta la Lección 1.3.
+
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Lección 1.3: EDICIÓN DE TEXTO - BORRADO
+		   Lección 1.3: EDITAR TEXTO - BORRAR
 
-** Estando en modo Normal pulse  x  para borrar el carácter sobre el cursor. **j
-
+  ** Pulse  x  para eliminar el carácter bajo el cursor. **
 
   1. Mueva el cursor a la línea de abajo señalada con --->.
 
-  2. Para corregir los errores, mueva el cursor hasta que esté bajo el
+  2. Para corregir los errores, mueva el cursor hasta que esté sobre el
      carácter que va a ser borrado.
 
-  3. Pulse la tecla  x	para borrar el carácter sobrante.
+  3. Pulse la tecla  x	para eliminar el carácter no deseado.
 
   4. Repita los pasos 2 a 4 hasta que la frase sea la correcta.
 
@@ -86,20 +86,20 @@
 
   5. Ahora que la línea esta correcta, continúe con la Lección 1.4.
 
-
 NOTA: A medida que vaya avanzando en este tutor no intente memorizar,
       aprenda practicando.
 
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   Lección 1.4: EDICIÓN DE TEXTO - INSERCIÓN
+		   Lección 1.4: EDITAR TEXTO - BORRAR
 
-      ** Estando en modo Normal pulse  i  para insertar texto. **
-
+         ** Pulse  i  para insertar texto. **
 
   1. Mueva el cursor a la primera línea de abajo señalada con --->.
 
-  2. Para que la primera línea sea igual a la segunda, mueva el cursor bajo el
-     primer carácter que sigue al texto que ha de ser insertado.
+  2. Para hacer que la primera línea sea igual que la segunda, mueva el
+     cursor hasta que esté sobre el carácter ANTES del cual el texto va a ser
+     insertado.
 
   3. Pulse  i  y escriba los caracteres a añadir.
 
@@ -109,66 +109,116 @@
 ---> Flta texto en esta .
 ---> Falta algo de texto en esta línea.
 
-  5. Cuando se sienta cómodo insertando texto pase al resumen que está más
-     abajo.
+  5. Cuando se sienta cómodo insertando texto pase vaya a la lección 1.5.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lección 1.5: EDITAR TEXTO - AÑADIR
+
+
+			** Pulse  A  para añadir texto. **
+
+  1. Mueva el cursor a la primera línea inferior marcada con --->.
+     No importa sobre qué carácter está el cursor en esta línea.
+
+  2. Pulse  A  y escriba el texto necesario.
+
+  3. Cuando el texto haya sido añadido pulse <ESC> para volver al modo Normal.
+
+  4. Mueva el cursor a la segunda línea marcada con ---> y repita los
+     pasos 2 y 3 para corregir esta frase.
+
+---> Falta algún texto en es
+     Falta algún texto en esta línea.
+---> También falta alg
+     También falta algún texto aquí.
+
+  5. Cuando se sienta cómodo añadiendo texto pase a la lección 1.6.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lección 1.6: EDITAR UN ARCHIVO
+
+		    ** Use  :wq  para guardar un archivo y salir **
+
+ !! NOTA: Antes de ejecutar los siguientes pasos, lea la lección entera!!
+
+  1.  Si tiene acceso a otra terminal, haga lo siguiente en ella.
+      Si no es así, salga de este tutor como hizo en la lección 1.2:  :q!
+
+  2. En el símbolo del sistema escriba este comando:  vim archivo.txt <INTRO>
+     'vim' es el comando para arrancar el editor Vim, 'archivo.txt'
+     es el nombre del archivo que quiere editar
+     Utilice el nombre de un archivo que pueda cambiar.
+
+  3. Inserte y elimine texto como ya aprendió en las lecciones anteriores.
+
+  4. Guarde el archivo con los cambios y salga de Vim con:  :wq <INTRO>
+
+  5. Si ha salido de vimtutor en el paso 1 reinicie vimtutor y baje hasta
+     el siguiente sumario.
+
+  6. Después de leer los pasos anteriores y haberlos entendido: hágalos.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			    RESUMEN DE LA LECCIÓN 1
 
 
   1. El cursor se mueve utilizando las teclas de las flechas o las teclas hjkl.
 	 h (izquierda)	   j (abajo)	  k (arriba)	  l (derecha)
 
-  2. Para acceder a Vim (desde el símbolo del sistema %) escriba:
-     vim FILENAME <INTRO>
+  2. Para acceder a Vim desde el símbolo del sistema escriba:
+     vim NOMBREARCHIVO <INTRO>
 
   3. Para salir de Vim escriba: <ESC> :q! <INTRO> para eliminar todos
      los cambios.
+     O escriba:  <ESC>  :wq  <INTRO> para guardar los cambios.
 
-  4. Para borrar un carácter sobre el cursor en modo Normal pulse:  x
+  4. Para borrar un carácter bajo el cursor en modo Normal pulse:  x
 
-  5. Para insertar texto en la posición del cursor estando en modo Normal:
-	  pulse   i   escriba el texto	 pulse <ESC>
+  5. Para insertar o añadir texto escriba:
+     i  escriba el texto a insertar <ESC> inserta el texto antes del cursor
+	 A  escriba el texto a añadir <ESC> añade texto al final de la línea
 
-NOTA: Pulsando <ESC> se vuelve al modo Normal o cancela un mandato no deseado
-      o incompleto.
+NOTA: Pulsando <ESC> se vuelve al modo Normal o cancela una orden no deseada
+      o incompleta.
 
 Ahora continúe con la Lección 2.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lección 2.1:  MANDATOS PARA BORRAR
+		     Lección 2.1:  COMANDOS PARA BORRAR
 
 
-       ** Escriba dw para borrar hasta el final de una palabra **
+          ** Escriba dw para borrar una palabra **
 
 
   1. Pulse <ESC> para asegurarse de que está en el modo Normal.
 
-  2. Mueva el cursor a la línea de abajo señalada con --->.
+  2. Mueva el cursor a la línea inferior señalada con --->.
 
   3. Mueva el cursor al comienzo de una palabra que desee borrar.
 
   4. Pulse   dw   para hacer que la palabra desaparezca.
 
-
-  NOTA: Las letras   dw   aparecerán en la última línea de la pantalla cuando
-	las escriba. Si escribe algo equivocado pulse <ESC> y comience de nuevo.
-
+  NOTA: La letra  d  aparecerá en la última línea inferior derecha 
+    de la pantalla mientras la escribe. Vim está esperando que escriba  w .
+    Si ve otro carácter que no sea  d  escribió algo mal, pulse <ESC> y
+    comience de nuevo.
 
 ---> Hay algunas palabras pásalo bien que no pertenecen papel a esta frase.
 
+  5. Repita los pasos 3 y 4 hasta que la frase sea correcta y pase a la
+     lección 2.2.
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Lección 2.2: MÁS MANDATOS PARA BORRAR
+		    Lección 2.2: MÁS COMANDOS PARA BORRAR
 
 
 	  ** Escriba  d$  para borrar hasta el final de la línea. **
 
-
   1. Pulse  <ESC>  para asegurarse de que está en el modo Normal.
 
-  2. Mueva el cursor a la línea de abajo señalada con --->.
+  2. Mueva el cursor a la línea inferior señalada con --->.
 
   3. Mueva el cursor al final de la línea correcta (DESPUÉS del primer . ).
 
@@ -176,319 +226,391 @@
 
 ---> Alguien ha escrito el final de esta línea dos veces. esta línea dos veces.
 
+  5. Pase a la lección 2.3 para entender qué está pasando.
 
 
 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    Lección 2.3: SOBRE OPERADORES Y MOVIMIENTOS
+
+
+  Muchos comandos que cambian texto están compuestos por un operador y un
+  movimiento.
+  El formato para eliminar un comando con el operador de borrado  d  es el
+  siguiente:
+
+    d   movimiento
+
+  Donde:
+    d          - es el operador para borrar.
+    movimiento - es sobre lo que el comando va a operar (lista inferior).
+
+  Una lista resumida de movimientos:
+   w - hasta el comienzo de la siguiente palabra, EXCLUYENDO su primer
+       carácter.
+   e - hasta el final de la palabra actual, INCLUYENDO su primer carácter.
+   $ - hasta el final de la línea, INCLUYENDO el último carácter.
+
+NOTA: Pulsando únicamente el movimiento estando en el modo Normal sin un
+      operador, moverá el cursor como se especifica en la lista anterior.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		  Lección 2.4: UTILIZAR UN CONTADOR PARA UN MOVIMIENTO
+
+
+   ** Al escribir un número antes de un movimiento, lo repite esas veces. **
+
+  1. Mueva el cursor al comienzo de la línea marcada con --->.
+
+  2. Escriba 2w  para mover el cursor dos palabras hacia adelante.
+
+  3. Escriba  3e  para mover el cursor al final de la tercera palabra hacia
+     adelante.
+
+  4. Escriba  0  (cero) para colocar el cursor al inicio de la línea.
+
+  5. Repita el paso 2 y 3 con diferentes números.
+
+---> Esto es solo una línea con palabra donde poder moverse.
+
+  6. Pase a la lección 2.5.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     Lección 2.5: UTILIZAR UN CONTADOR PARA BORRAR MAS
+
+
+   ** Al escribir un número con un operador lo repite esas veces. **
+
+  En combinación con el operador de borrado y el movimiento mencionado
+  anteriormente, añada un contador antes del movimiento para eliminar más:
+	 d   número   movimiento
+
+  1. Mueva el cursos a la primera palabra en MAYÚSCULAS en la línea
+     marcada con --->.
+
+  2. Escriba  d2w  para eliminar las dos palabras en MAYÚSCULAS.
+
+  3. Repita los pasos 1 y 2 con diferentes contadores para eliminar
+     las siguientes palabras en MAYÚSCULAS con un comando.
+
+--->  esta ABC DE serie FGHI JK LMN OP de palabras ha sido Q RS TUV limpiada.
+
+
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    Lección 2.3: SOBRE MANDATOS Y OBJETOS
+			 Lección 2.6: OPERACIÓN EN LÍNEAS
 
 
-  El formato del mandato de borrar   d	 es como sigue:
+		   ** Escriba  dd   para eliminar una línea completa. **
 
-	 [número]   d	objeto	    O	     d	 [número]   objeto
-  donde:
-   número - es cuántas veces se ha de ejecutar el mandato (opcional, defecto=1).
-   d - es el mandato para borrar.
-   objeto - es sobre lo que el mandato va a operar (lista, abajo).
+  Debido a la frecuencia con que se elimina una línea completa, los
+  diseñadores de Vi, decidieron que sería más sencillo simplemente escribir
+  dos letras d para eliminar una línea.
 
-  Una lista corta de objetos:
-   w - desde el cursor hasta el final de la palabra, incluyendo el espacio.
-   e - desde el cursor hasta el final de la palabra, SIN incluir el espacio.
-   $ - desde el cursor hasta el final de la línea.
+  1. Mueva el cursor a la segunda línea del párrafo inferior.
+  2. Escriba  dd  para eliminar la línea.
+  3. Ahora muévase a la cuarta línea.
+  4. Escriba   2dd   para eliminar dos líneas a la vez.
 
-NOTE: Para los aventureros, pulsando sólo el objeto estando en modo Normal
-      sin un mandato moverá el cursor como se especifica en la lista de objetos.
+--->  1)  Las rosas son rojas,
+--->  2)  El barro es divertido,
+--->  3)  Las violetas son azules,
+--->  4)  Tengo un coche,
+--->  5)  Los relojes dan la hora,
+--->  6)  El azúcar es dulce
+--->  7)  Y también lo eres tú.
 
-
+La duplicación para borrar líneas también funcionan con los operadores
+mencionados anteriormente.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	       Lección 2.4: UNA EXCEPCIÓN AL 'MANDATO-OBJETO'
-
-	   ** Escriba	dd   para borrar una línea entera. **
-
-  Debido a la frecuencia con que se borran líneas enteras, los diseñadores
-  de Vim decidieron que sería más fácil el escribir simplemente dos des en
-  una fila para borrar	una línea.
-
-  1. Mueva el cursor a la segunda línea de la lista de abajo.
-  2. Escriba  dd  para borrar la línea.
-  3. Muévase ahora a la cuarta línea.
-  4. Escriba   2dd   (recuerde	número-mandato-objeto) para borrar las dos
-     líneas.
-
-      1) Las rosas son rojas,
-      2) El barro es divertido,
-      3) El cielo es azul,
-      4) Yo tengo un coche,
-      5) Los relojes marcan la hora,
-      6) El azúcar es dulce,
-      7) Y así eres tú.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Lección 2.5: EL MANDATO DESHACER
+		     Lección 2.7: EL MANDATO DESHACER
 
 
-   ** Pulse  u	para deshacer los últimos mandatos,
+   ** Pulse  u	para deshacer los últimos comandos,
 	     U	para deshacer una línea entera.       **
 
-  1. Mueva el cursor a la línea de abajo señalada con ---> y sitúelo bajo el
+  1. Mueva el cursor a la línea inferior señalada con ---> y sitúelo bajo el
      primer error.
-  2. Pulse  x  para borrar el primer caráter erróneo.
-  3. Pulse ahora  u  para deshacer el último mandato ejecutado.
-  4. Ahora corrija todos los errores de la línea usando el mandato  x.
+  2. Pulse  x  para borrar el primer carácter no deseado.
+  3. Pulse ahora  u  para deshacer el último comando ejecutado.
+  4. Ahora corrija todos los errores de la línea usando el comando  x.
   5. Pulse ahora  U  mayúscula para devolver la línea a su estado original.
   6. Pulse ahora  u  unas pocas veces para deshacer lo hecho por  U  y los
-     mandatos previos.
+     comandos previos.
   7. Ahora pulse CTRL-R (mantenga pulsada la tecla CTRL y pulse R) unas
-     pocas veces para volver a ejecutar los mandatos (deshacer lo deshecho).
+     cuantas veces para volver a ejecutar los comandos (deshacer lo deshecho).
 
 ---> Corrrija los errores dee esttta línea y vuuelva a ponerlos coon deshacer.
 
-  8. Estos mandatos son muy útiles. Ahora pase al resumen de la Lección 2.
+  8. Estos son unos comandos muy útiles. Ahora vayamos al resumen de la
+     lección 2.
+
+
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			    RESUMEN DE LA LECCIÓN 2
 
-  1. Para borrar desde el cursor hasta el final de una palabra pulse:	dw
+  1. Para borrar desde el cursor hasta siguiente palabra pulse:	     dw
+  2. Para borrar desde el cursor hasta el final de la palabra pulse: de
+  3. Para borrar desde el cursor hasta el final de una línea pulse:	 d$
+  4. Para borrar una línea entera pulse:                             dd
 
-  2. Para borrar desde el cursor hasta el final de una línea pulse:	d$
-
-  3. Para borrar una línea entera pulse:    dd
-
-  4. El formato de un mandato en modo Normal es:
-
-       [número]   mandato   objeto   O	 mandato   [número]   objeto
+  5. Para repetir un movimiento precédalo con un número:  2w
+  6. El formato para un comando de cambio es:
+               operador  [número]  movimiento
      donde:
-       número - es cuántas veces se ha de ejecutar el mandato
-       mandato - es lo que hay que hacer, por ejemplo, d para borrar
-       objeto - es sobre lo que el mandato va a operar, por ejemplo
-		w (palabra), $ (hasta el final de la línea), etc.
+       comando    - es lo que hay que hacer, por ejemplo,  d  para borrar
+       [número]   - es un número opcional para repetir el movimiento
+       movimiento - se mueve sobre el texto sobre el que operar, como
+		            w (palabra), $ (hasta el final de la línea), etc.
+  7. Para moverse al inicio de la línea utilice un cero:  0
 
-  5. Para deshacer acciones previas pulse:		 u (u minúscula)
+  8. Para deshacer acciones previas pulse:		         u (u minúscula)
      Para deshacer todos los cambios de una línea pulse: U (U mayúscula)
-     Para deshacer lo deshecho pulse:			 CTRL-R
+     Para deshacer lo deshecho pulse:			         CTRL-R
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lección 3.1: EL MANDATO «PUT» (poner)
+			 Lección 3.1: EL COMANDO «PUT» (poner)
 
-  ** Pulse p para poner lo último que ha borrado después del cursor. **
+** Pulse  p  para poner (pegar) después del cursor lo último que ha borrado. **
 
-  1. Mueva el cursor al final de la lista de abajo.
+  1. Mueva el cursor a la primera línea inferior marcada con --->.
 
-  2. Escriba  dd  para borrar la línea y almacenarla en el buffer de Vim.
+  2. Escriba  dd  para borrar la línea y almacenarla en un registro de Vim.
 
-  3. Mueva el cursor a la línea que debe quedar por debajo de la
-     línea a mover.
+  3. Mueva el cursor a la línea c) por ENCIMA de donde debería estar 
+     la línea eliminada.
 
-  4. Estando en mod Normal, pulse   p	para restituir la línea borrada.
+  4. Pulse   p	para pegar la línea borrada por debajo del cursor.
 
   5. Repita los pasos 2 a 4 para poner todas las líneas en el orden correcto.
 
-     d) ¿Puedes aprenderla tú?
-     b) Las violetas son azules,
-     c) La inteligencia se aprende,
-     a) Las rosas son rojas,
+---> d) ¿Puedes aprenderla tú?
+---> b) Las violetas son azules,
+---> c) La inteligencia se aprende,
+---> a) Las rosas son rojas,
+     
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Lección 3.2: EL MANDATO «REPLACE» (remplazar)
+		       Lección 3.2: EL COMANDO REEMPLAZAR
 
 
-  ** Pulse  r  y un carácter para sustituir el carácter sobre el cursor. **
+  ** Pulse  rx  para reemplazar el carácter bajo el cursor con  x . **
 
+  1. Mueva el cursor a la primera línea inferior marcada con --->.
 
-  1. Mueva el cursor a la primera línea de abajo señalada con --->.
+  2. Mueva el cursor para situarlo sobre el primer error.
 
-  2. Mueva el cursor para situarlo bajo el primer error.
+  3. Pulse   r	 y después el carácter que debería ir ahí.
 
-  3. Pulse   r	 y el carácter que debe sustituir al erróneo.
-
-  4. Repita los pasos 2 y 3 hasta que la primera línea esté corregida.
+  4. Repita los pasos 2 y 3 hasta que la primera sea igual a la segunda.
 
 ---> ¡Cuendo esta línea fue rscrita alguien pulso algunas teclas equibocadas!
 ---> ¡Cuando esta línea fue escrita alguien pulsó algunas teclas equivocadas!
 
+  5. Ahora pase a la lección 3.3.
 
-
+NOTA: Recuerde que debería aprender practicando.
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Lección 3.3: EL MANDATO «CHANGE» (cambiar)
+			Lección 3.3: EL COMANDO CAMBIAR
 
 
-     ** Para cambiar parte de una palabra o toda ella escriba  cw . **
+     ** Para cambiar hasta el final de una línea, escriba  ce . **
 
-
-  1. Mueva el cursor a la primera línea de abajo señalada con --->.
+  1. Mueva el cursor a la primera línea inferior marcada con --->.
 
   2. Sitúe el cursor en la u de lubrs.
 
-  3. Escriba  cw  y corrija la palabra (en este caso, escriba 'ínea').
+  3. Escriba  ce  y corrija la palabra (en este caso, escriba 'ínea').
 
-  4. Pulse <ESC> y mueva el cursor al error siguiente (el primer carácter
-     que deba cambiarse).
+  4. Pulse <ESC> y mueva el cursor al siguiente error que debe ser cambiado.
 
   5. Repita los pasos 3 y 4 hasta que la primera frase sea igual a la segunda.
 
----> Esta lubrs tiene unas pocas pskavtad que corregir usem el mandato change.
----> Esta línea tiene unas pocas palabras que corregir usando el mandato change.
+---> Esta lubrs tiene unas pocas pskavtad que corregir usem el comando change.
+---> Esta línea tiene unas pocas palabras que corregir usando el comando change.
+
+Tenga en cuenta que  ce  elimina la palabra y entra en el modo Insertar.
+                    cc  hace lo mismo para toda la línea.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		      Lección 3.4: MÁS CAMBIOS USANDO c
 
-   ** El mandato change se utiliza con los mismos objetos que delete. **
+   ** El operador change se utiliza con los mismos movimientos que delete. **
 
-  1. El mandato change funciona de la misma forma que delete. El formato es:
+  1. El operador change funciona de la misma forma que delete. El formato es:
 
-       [número]   c   objeto	   O	    c	[número]   objeto
+       c   [número]   movimiento
 
-  2. Los objetos son tambiém los mismos, tales como  w (palabra), $ (fin de
-     la línea), etc.
+  2. Los movimientos son también los mismos, tales como  w (palabra) o 
+  $ (fin de la línea).
 
-  3. Mueva el cursor a la primera línea de abajo señalada con --->.
+  3. Mueva el cursor a la primera línea inferior señalada con --->.
 
   4. Mueva el cursor al primer error.
 
-  5. Escriba  c$  para hacer que el resto de la línea sea como la segunda
+  5. Pulse  c$  y escriba el resto de la línea para que sea como la segunda
      y pulse <ESC>.
 
 ---> El final de esta línea necesita alguna ayuda para que sea como la segunda.
----> El final de esta línea necesita ser corregido usando el mandato  c$.
+---> El final de esta línea necesita ser corregido usando el comando  c$.
+
+NOTA: Puede utilizar el retorno de carro para corregir errores mientras escribe.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			    RESUMEN DE LA LECCIÓN 3
 
 
-  1. Para sustituir texto que ha sido borrado, pulse  p . Esto Pone el texto
-     borrado DESPUÉS del cursor (si lo que se ha borrado es una línea se
-     situará sobre la línea que está sobre el cursor).
+  1. Para volver a poner o pegar el texto que acaba de ser borrado,
+     escriba  p . Esto pega el texto después del cursor (si se borró una
+     línea, al pegarla, esta se situará en la línea debajo del cursor).
 
   2. Para sustituir el carácter bajo el cursor, pulse	r   y luego el
-     carácter que sustituirá al original.
+     carácter que quiere que esté en ese lugar.
 
-  3. El mandato change le permite cambiar el objeto especificado desde la
-     posición del cursor hasta el final del objeto; e.g. Pulse	cw  para
-     cambiar desde el cursor hasta el final de la palabra, c$  para cambiar
-     hasta el final de la línea.
+  3. El operador change le permite cambiar desde la posición del cursor
+     hasta donde el movimiento indicado le lleve. Por ejemplo, pulse  ce
+     para cambiar desde el cursor hasta el final de la palabra, o  c$
+     para cambiar hasta el final de la línea.
 
   4. El formato para change es:
 
-	 [número]   c	objeto	      O		c   [número]   objeto
+	 c   [número]   movimiento
 
   Pase ahora a la lección siguiente.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	       Lección 4.1: SITUACIÓN EN EL FICHERO Y SU ESTADO
+	       Lección 4.1: UBICACIÓN DEL CURSOR Y ESTADO DEL ARCHIVO
 
+ ** Pulse CTRL-G para mostrar su situación en el fichero y su estado.
+    Pulse G para moverse a una determinada línea del fichero. **
 
- ** Pulse CTRL-g para mostrar su situación en el fichero y su estado.
-    Pulse MAYU-G para moverse a una determinada línea del fichero. **
+NOTA: ¡¡Lea esta lección entera antes de ejecutar cualquiera de los pasos!!
 
-  Nota: ¡¡Lea esta lección entera antes de ejecutar alguno de los pasos!!
+  1. Mantenga pulsada la tecla Ctrl y pulse  g . Le llamamos a esto CTRL-G.
+     Aparecerá un mensaje en la parte inferior de la página con el nombre
+     del archivo y la posición en este. Recuerde el número de línea
+     para el paso 3.
 
+NOTA: Quizás pueda ver la posición del cursor en la esquina inferior derecha
+      de la pantalla. Esto ocurre cuando la opción 'ruler' (regla) está
+      habilitada (consulte  :help 'ruler'  )
 
-  1. Mantenga pulsada la tecla Ctrl y pulse  g . Aparece una línea de estado
-     al final de la pantalla con el nombre del fichero y la línea en la que
-     está situado. Recuerde el número de la línea para el Paso 3.
+  2. Pulse  G  para mover el cursor hasta la parte inferior del archivo.
+     Pulse  gg  para mover el cursor al inicio del archivo.
 
-  2. Pulse Mayu-G para ir al final del fichero.
+  3. Escriba el número de la línea en la que estaba y después  G  . Esto
+     le volverá a la línea en la que estaba cuando pulsó CTRL-G.
 
-  3. Escriba el número de la línea en la que estaba y despúes Mayu-G. Esto
-     le volverá a la línea en la que estaba cuando pulsó Ctrl-g.
-     (Cuando escriba los números NO se mostrarán en la pantalla).
-
-  4. Si se siente confiado en poder hacer esto ejecute los pasos 1 a 3.
+  4. Si se siente seguro en poder hacer esto ejecute los pasos 1 a 3.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Lección 4.2: EL MANDATO «SEARCH» (buscar)
+			Lección 4.2: EL COMANDO «SEARCH» (buscar)
 
      ** Escriba  /  seguido de una frase para buscar la frase. **
 
   1. En modo Normal pulse el carácter  / . Fíjese que tanto el carácter  /
      como el cursor aparecen en la última línea de la pantalla, lo mismo
-     que el mandato  : .
+     que el comando  : .
 
   2. Escriba ahora   errroor   <INTRO>. Esta es la palabra que quiere buscar.
 
-  3. Para repetir la búsqueda, simplemente pulse  n .
-     Para busacar la misma frase en la dirección opuesta, pulse Mayu-N .
+  3. Para repetir la búsqueda de la misma frase otra vez, simplemente pulse  n .
+     Para buscar la misma frase en la dirección opuesta, pulse  N .
 
   4. Si quiere buscar una frase en la dirección opuesta (hacia arriba),
-     utilice el mandato  ?  en lugar de  / .
+     utilice el comando  ?  en lugar de  / .
+  
+  5. Para regresar al lugar de donde procedía pulse  CTRL-O  (Mantenga pulsado
+  Ctrl mientras pulsa la letra o). Repita el proceso para regresar más atrás.
+  CTRL-I va hacia adelante.
 
----> Cuando la búsqueda alcanza el final del fichero continuará desde el
-     principio.
+---> "errroor" no es la forma correcta de escribir error, errroor es un error.
 
-  «errroor» no es la forma de deletrear error; errroor es un error.
+NOTA: Cuando la búsqueda llega al final del archivo, continuará desde el
+      comienzo, a menos que la opción 'wrapscan' haya sido desactivada.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 	       Lección 4.3: BÚSQUEDA PARA COMPROBAR PARÉNTESIS
 
    ** Pulse %  para encontrar el paréntesis correspondiente a ),] o } . **
 
-
-  1. Sitúe el cursor en cualquiera de los caracteres ), ] o } en la línea de
-     abajo señalada con --->.
+  1. Sitúe el cursor en cualquiera de los caracteres (, [ o { en la línea 
+     inferior señalada con --->.
 
   2. Pulse ahora el carácter  %  .
 
-  3. El cursor debería situarse en el paréntesis (, corchete [ o llave {
-     correspondiente.
+  3. El cursor se moverá a la pareja de cierre del paréntesis, corchete
+     o llave correspondiente.
 
-  4. Pulse  %  para mover de nuevo el cursor al paréntesis, corchete o llave
-     correspondiente.
+  4. Pulse  %  para mover el cursor a la otra pareja del carácter.
 
----> Esto ( es una línea de prueba con (, [, ], {, y } en ella. )).
+  5. Mueva el cursor a otro (,),[,],{ o } y vea lo que hace % .
 
-Nota: ¡Esto es muy útil en la detección de errores en un programa con
-      paréntesis, corchetes o llaves disparejos.
+---> Esto ( es una línea de prueba con (, [, ], {, y } en ella. ))
+
+NOTA: ¡Esto es muy útil en la detección de errores en un programa con
+      paréntesis, corchetes o llaves sin pareja.
+      
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		  Lección 4.4: UNA FORMA DE CAMBIAR ERRORES
+		  Lección 4.4: EL COMANDO SUSTITUIR
 
 
     ** Escriba	:s/viejo/nuevo/g para sustituir 'viejo' por 'nuevo'. **
 
-
-  1. Mueva el cursor a la línea de abajo señalada con --->.
+  1. Mueva el cursor a la línea inferior señalada con --->.
 
   2. Escriba  :s/laas/las/  <INTRO> . Tenga en cuenta que este mandato cambia
      sólo la primera aparición en la línea de la expresión a cambiar.
+  
+  3. Ahora escriba :/laas/la/g . Al añadir la opción  g  esto significa
+     que hará la sustitución global en la línea, cambiando todas las
+     ocurrencias del término "laas" en la línea.
 
 ---> Laas mejores épocas para ver laas flores son laas primaveras.
 
-  4. Para cambiar todas las apariciones de una expresión ente dos líneas
-     escriba   :#,#s/viejo/nuevo/g   donde #,# son los números de las dos
-     líneas. Escriba   :%s/viejo/nuevo/g   para hacer los cambios en todo
-     el fichero.
-
-
-
-
+  4. Para cambiar cada ocurrencia de la cadena de caracteres entre dos líneas,
+     Pulse  :#,#s/viejo/nuevo/g  donde #,# son los números de línea del rango
+                                 de líneas donde se realizará la sustitución.
+     Pulse  :%s/old/new/g        para cambiar cada ocurrencia en todo el
+                                 archivo.
+     Pulse  :%s/old/new/gc       para encontrar cada ocurrencia en todo el 
+                                 archivo, pidiendo confirmación para 
+                                 realizar la sustitución o no.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			    RESUMEN DE LA LECCIÓN 4
 
 
-  1. Ctrl-g  muestra la posición del cursor en el fichero y su estado.
-     Mayu-G mueve el cursor al final del fichero. Un número de línea
-     seguido de Mayu-G mueve el cursor a la línea con ese número.
+  1. CTRL-G  muestra la posición del cursor en el fichero y su estado.
+             G  mueve el cursor al final del archivo.
+     número  G  mueve el cursor a ese número de línea.
+            gg  mueve el cursor a la primera línea del archivo.
 
   2. Pulsando  /  seguido de una frase busca la frase hacia ADELANTE.
      Pulsando  ?  seguido de una frase busca la frase hacia ATRÁS.
      Después de una búsqueda pulse  n  para encontrar la aparición
-     siguiente en la misma dirección.
+     siguiente en la misma dirección o  N  para buscar en dirección opuesta.
 
   3. Pulsando  %  cuando el cursor esta sobre (,), [,], { o } localiza
      la pareja correspondiente.
 
-  4. Para cambiar viejo por nuevo en una línea pulse	      :s/viejo/nuevo
+  4. Para cambiar viejo en el primer nuevo en una línea pulse  :s/viejo/nuevo
      Para cambiar todos los viejo por nuevo en una línea pulse :s/viejo/nuevo/g
      Para cambiar frases entre dos números de líneas pulse  :#,#s/viejo/nuevo/g
      Para cambiar viejo por nuevo en todo el fichero pulse  :%s/viejo/nuevo/g
@@ -499,11 +621,10 @@
 		Lección 5.1: CÓMO EJECUTAR UN MANDATO EXTERNO
 
 
-  ** Escriba  :!  seguido de un mandato externo para ejecutar ese mandato. **
+  ** Escriba  :!  seguido de un comando externo para ejecutar ese comando. **
 
-
-  1. Escriba el conocido mandato  :  para situar el cursor al final de la
-     pantalla. Esto le permitirá introducir un mandato.
+  1. Escriba el conocido comando  :  para situar el cursor al final de la
+     pantalla. Esto le permitirá introducir un comando.
 
   2. Ahora escriba el carácter ! (signo de admiración). Esto le permitirá
      ejecutar cualquier mandato del sistema.
@@ -512,9 +633,11 @@
      le mostrará una lista de su directorio, igual que si estuviera en el
      símbolo del sistema. Si  ls  no funciona utilice	!:dir	.
 
---->Nota: De esta manera es posible ejecutar cualquier mandato externo.
+NOTA: De esta manera es posible ejecutar cualquier comando externo,
+      también incluyendo argumentos.
 
---->Nota: Todos los mandatos   :   deben finalizarse pulsando <INTRO>.
+NOTA: Todos los comando   :   deben finalizarse pulsando <INTRO>.
+      De ahora en adelante no siempre se mencionará.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -522,10 +645,10 @@
 
 
      ** Para guardar los cambios hechos en un fichero,
-	escriba  :w NOMBRE_DE_FICHERO. **
+	escriba  :w NOMBRE_DE_FICHERO **
 
-
-  1. Escriba  :!dir  o	:!ls  para ver una lista de su directorio.
+  1. Escriba  :!dir  o	:!ls  para ver una lista de los archivos 
+     de su directorio.
      Ya sabe que debe pulsar <INTRO> después de ello.
 
   2. Elija un nombre de fichero que todavía no exista, como TEST.
@@ -533,210 +656,337 @@
   3. Ahora escriba   :w TEST  (donde TEST es el nombre de fichero elegido).
 
   4. Esta acción guarda todo el fichero  (Vim Tutor)  bajo el nombre TEST.
-     Para comprobarlo escriba	:!dir	de nuevo y vea su directorio.
+     Para comprobarlo escriba	:!dir  o  :!ls  de nuevo y vea su directorio.
 
----> Tenga en cuenta que si sale de Vim y  entra de nuevo con el nombre de
-     fichero TEST, el fichero sería una copia exacta del tutor cuando lo
-     ha guardado.
+NOTA: Si saliera de Vim y volviera a entrar de nuevo con  vim TEST  , el
+      archivo sería una copia exacta del tutorial cuando lo guardó.
+
+  5. Ahora elimine el archivo escribiendo (Windows):  :!del TEST
+                                        o (Unix):     :!rm TEST
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-	       Lección 5.3: UN MANDATO DE ESCRITURA SELECTIVO
-
-   ** Para guardar parte del fichero escriba   :#,# NOMBRE_DEL_FICHERO **
+	       Lección 5.3: SELECCIONAR TEXTO PARA GUARDAR
 
 
-  1. Escriba de nuevo, una vez más,  :!dir  o  :!ls  para obtener una lista
-     de su directorio y elija nombre de fichero adecuado, como TEST.
+   ** Para guardar parte del archivo, escriba  v  movimiento  :w ARCHIVO **
 
-  2. Mueva el cursor al principio de la pantalla y pulse  Ctrl-g  para saber
-     el número de la línea correspondiente. ¡RECUERDE ESTE NÚMERO!
+  1. Mueva el cursor a esta línea.
 
-  3. Ahora mueva el cursor a la última línea de la pantalla y pulse Ctrl-g
-     de nuevo. ¡RECUERDE TAMBIÉN ESTE NÚMERO!
+  2. Pulse  v  y mueva el cursor hasta el quinto elemento inferior. Vea que
+     el texto es resaltado.
 
-  4. Para guardar SOLAMENTE una parte de un fichero, escriba  :#,# w TEST
-     donde #,# son los números que usted ha recordado (primera línea,
-     última línea) y TEST es su nombre de dichero.
+  3. Pulse el carácter  :  en la parte inferior de la pantalla aparecerá
+     :'<,'>
 
-  5. De nuevo, vea que el fichero esta ahí con	:!dir  pero NO lo borre.
+  4. Pulse  w TEST  , donde TEST es un nombre de archivo que aún no existe.
+     Verifique que  :'<,'>w TEST  antes de pulsar <INTRO>.
+
+  5. Vim escribirá las líneas seleccionadas en el archivo TEST. Utilice
+     :!dir  o  :!ls  para verlo. ¡No lo elimine todavía! Lo utilizaremos
+     en la siguiente lección.
+
+NOTA: Al pulsar  v  inicia la selección visual. Puede mover el cursor para
+      hacer la selección más grande o pequeña. Después puede utilizar un
+      operador para hacer algo con el texto. Por ejemplo,  d  eliminará
+      el texto seleccionado.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		Lección 5.4: RECUPERANDO Y MEZCLANDO FICHEROS
 
+
  ** Para insertar el contenido de un fichero escriba :r NOMBRE_DEL_FICHERO **
 
-  1. Escriba   :!dir   para asegurarse de que su fichero TEST del ejercicio
-     anterior está presente.
+  1. Sitúe el cursor justo por encima de esta línea.
 
-  2. Situe el cursor al principio de esta pantalla.
+NOTA: Después de ejecutar el paso 2 verá texto de la lección 5.3. Después
+      DESCIENDA hasta ver de nuevo esta lección.
 
-NOTA: Después de ejecutar el paso 3 se verá la Lección 5.3. Luego muévase
-      hacia ABAJO para ver esta lección de nuevo.
+  2. Ahora recupere el archivo TEST utilizando el comando  :r TEST  donde
+     TEST es el nombre que ha utilizado.
+     El archivo que ha recuperado se colocará debajo de la línea donde
+     se encuentra el cursor.
 
-  3. Ahora recupere el fichero TEST utilizando el mandato  :r TEST  donde
-     TEST es el nombre del fichero.
+  3. Para verificar que se ha recuperado el archivo, suba el cursor y 
+     compruebe que ahora hay dos copias de la lección 5.3, la original y
+     la versión del archivo.
 
-NOTA: El fichero recuperado se sitúa a partir de la posición del cursor.
+NOTA: También puede leer la salida de un comando externo. Por ejemplo,
+      :r !ls  lee la salida del comando ls y lo pega debajo de la línea
+      donde se encuentra el cursor.
 
-  4. Para verificar que el fichero ha sido recuperado, mueva el cursor hacia
-     arriba y vea que hay dos copias de la Lección 5.3, la original y la
-     versión del fichero.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			   RESUMEN DE LA LECCIÓN 5
 
 
-  1.  :!mandato  ejecuta un mandato externo.
+  1.  :!comando  ejecuta un comando externo.
 
       Algunos ejemplos útiles son:
-	  :!dir - muestra el contenido de un directorio.
-	  :!del NOMBRE_DE_FICHERO  -  borra el fichero NOMBRE_DE FICHERO.
+      (Windows)     (Unix)
+	  :!dir          :!ls           - muestra el contenido de un directorio.
+	  :!del ARCHIVO  :!rm ARCHIVO   -  borra el fichero ARCHIVO.
 
-  2.  :#,#w NOMBRE_DE _FICHERO  guarda desde la línea # hasta la # en el
-     fichero NOMBRE_DE_FICHERO.
+  2.  :w ARCHIVO escribe el archivo actual de Vim en el disco con el 
+      nombre de ARCHIVO.
 
-  3.  :r NOMBRE_DE _FICHERO  recupera el fichero del disco NOMBRE_DE FICHERO
-     y lo inserta en el fichero en curso a partir de la posición del cursor.
+  3.  v  movimiento  :w ARCHIVO  guarda las líneas seleccionadas visualmente
+      en el archivo ARCHIVO.
 
+  4.  :r ARCHIVO  recupera del disco el archivo ARCHIVO y lo pega debajo
+      de la posición del cursor.
 
-
-
-
+  5.  :r !dir  lee la salida del comando dir y lo pega debajo de la
+      posición del cursor.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lección 6.1: EL MANDATO «OPEN» (abrir)
+			 Lección 6.1: EL COMANDO OPEN
 
 
 	 ** Pulse  o  para abrir una línea debajo del cursor
-	    y situarle en modo Insert **
+	    y situarle en modo Insertar **
 
+  1. Mueva el cursor a la línea inferior señalada con --->.
 
-  1. Mueva el cursor a la línea de abajo señalada con --->.
+  2. Pulse la letra minúscula  o  para abrir una línea por DEBAJO del cursor
+     y situarle en modo Insertar.
+  
+  3. Ahora escriba algún texto y después pulse <ESC> para salir del modo
+     insertar.
 
-  2. Pulse  o (minúscula) para abrir una línea por DEBAJO del cursor
-     y situarle en modo Insert.
+---> Después de pulsar  o  el cursor se sitúa en la línea abierta en modo Insertar.
 
-  3. Ahora copie la línea señalada con ---> y pulse <ESC> para salir del
-     modo Insert.
-
----> Luego de pulsar  o  el cursor se sitúa en la línea abierta en modo Insert.
-
-  4. Para abrir una línea por encima del cursor, simplemente pulse una O
+  4. Para abrir una línea por ENCIMA del cursor, simplemente pulse una O
      mayúscula, en lugar de una o minúscula. Pruebe este en la línea siguiente.
-Abra una línea sobre ésta pulsando Mayu-O cuando el cursor está en esta línea.
+
+---> Abra una línea sobre esta pulsando O cuando el cursor está en esta línea.
+
+
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Lección 6.2: EL MANDATO «APPEND» (añadir)
+			Lección 6.2: EL COMANDO APPEND (añadir)
+
 
 	 ** Pulse  a  para insertar texto DESPUÉS del cursor. **
 
+  1. Mueva el cursor al inicio de la primera línea inferior señalada con --->.
 
-  1. Mueva el cursor al final de la primera línea de abajo señalada con --->
-     pulsando  $  en modo Normal.
+  2. Escriba  e  hasta que el cursor esté al final de  lín .
 
-  2. Escriba una  a  (minúscula) para añadir texto DESPUÉS del carácter
-     que está sobre el cursor. (A mayúscula añade texto al final de la línea).
+  3. Escriba una  a  (minúscula) para añadir texto DESPUÉS del cursor.
 
-Nota: ¡Esto evita el pulsar  i , el último carácter, el texto a insertar,
-      <ESC>, cursor a la derecha y, finalmente, x , sólo para añadir algo
-      al final de una línea!
+  4. Complete la palabra como en la línea inferior. Pulse <ESC> para salir
+     del modo insertar.
+  
+  5. Utilice  e  para moverse hasta la siguiente palabra incompleta y 
+     repita los pasos 3 y 4.
 
-  3. Complete ahora la primera línea. Nótese que append es exactamente lo
-     mismo que modo Insert, excepto por el lugar donde se inserta el texto.
+---> Esta lín le permit prati cómo añad texto a una línea.
+---> Esta línea le permitirá practicar cómo añadir texto a una línea.
 
----> Esta línea le permitirá praticar
----> Esta línea le permitirá praticar el añadido de texto al final de una línea.
+NOTA: a, i y A todos entran en el modo Insertar, la única diferencia es
+      dónde ubican los caracteres insertados.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Lección 6.3: OTRA VERSIÓN DE «REPLACE» (remplazar)
+		     Lección 6.3: OTRA VERSIÓN DE REPLACE (remplazar)
+
 
     ** Pulse una  R  mayúscula para sustituir más de un carácter. **
 
+  1. Mueva el cursor a la primera línea inferior señalada con --->. Mueva
+     el cursor al inicio de la primera  xxx .
 
-  1. Mueva el cursor a la primera línea de abajo señalada con --->.
+  2. Ahora pulse  R  y escriba el número que aparece en la línea inferior,
+     esto reemplazará el texto xxx .
+  
+  3. Pulse <ESC> para abandonar el modo Reemplazar. Observe que el resto de
+     la línea permanece sin modificaciones.
 
-  2. Sitúe el cursor al comienzo de la primera palabra que sea diferente
-     de las de la segunda línea marcada con ---> (la palabra 'anterior').
+  4. Repita los pasos para reemplazar el texto xxx que queda.
 
-  3. Ahora pulse  R  y sustituya el resto del texto de la primera línea
-     escribiendo sobre el viejo texto para que la primera línea sea igual
-     que la segunda.
+---> Sumar 123 a xxx da un resultado de xxx.
+---> Sumar 123 a 456 da un resultado de 579.
 
----> Para hacer que esta línea sea igual que la anterior use las teclas.
----> Para hacer que esta línea sea igual que la siguiente escriba R y el texto.
-
-  4. Nótese que cuando pulse <ESC> para salir, el texto no alterado permanece.
-
-
+NOTA: El modo Reemplazar es como el modo Insertar, pero cada carácter escrito
+      elimina un carácter ya existente.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 Lección 6.4: FIJAR OPCIONES
-
- ** Fijar una opción de forma que una búsqueda o sustitución ignore la caja **
-  (Para el concepto de caja de una letra, véase la nota al final del fichero)
+			 Lección 6.4: COPIAR Y PEGAR TEXTO
 
 
-  1. Busque 'ignorar' introduciendo:
-     /ignorar
-     Repita varias veces la búsque pulsando la tecla n
 
-  2. Fije la opción 'ic' (Ignorar la caja de la letra) escribiendo:
-     :set ic
+	  ** Utilice el operador  y  para copiar texto y  p  para pegarlo. **
 
-  3. Ahora busque 'ignorar' de nuevo pulsando n
-     Repita la búsqueda varias veces más pulsando la tecla n
+  1. Mueva el cursor a la línea inferior marcada con ---> y posicione el 
+     cursor después de "a)". 
 
-  4. Fije las opciones 'hlsearch' y 'insearch':
-     :set hls is
+  2. Inicie el modo Visual con  v  y mueva el cursor justo antes de "primer".
 
-  5. Ahora introduzca la orden de búsqueda otra vez, y vea qué pasa:
-     /ignore
+  3. Pulse  y  para copiar ("yank") el texto resaltado.
 
+  4. Mueva el cursor al final de la siguiente línea mediante:  j$
+
+  5. Pulse  p  para poner (pegar) el texto. Después escriba: el segundo <ESC>.
+
+  6. Utilice el modo visual para seleccionar " elemento.", y cópielo con  y
+     mueva el cursor al final de la siguiente línea con j$  y pegue el texto
+     recién copiado con  p .
+
+--->  a) este es el primer elemento.
+      b)
+
+NOTA: También puede utilizar  y  como un operador:  yw  copia una palabra,
+      yy  copia la línea completa donde está el cursor, después  p  pegará
+      esa línea.
+     
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    Lección 6.5: ACTIVAR (SET) UNA OPCIÓN
+
+
+	  ** Active una opción para buscar o sustituir ignorando si está
+         en mayúsculas o minúsculas el texto. **
+
+  1. Busque la cadena de texto 'ignorar' escribiendo:  /ignorar <INTRO>
+     Repita la búsqueda varias veces pulsando  n .
+
+  2. Active la opción 'ic' (Ignore case o ignorar mayúsculas y minúsculas) 
+     mediante:   :set ic
+
+  3. Ahora busque de nuevo 'ignorar' pulsando  n
+     Observe que ahora también se encuentran Ignorar e IGNORAR.
+
+  4. Active las opciones 'hlsearch' y 'incsearch' escribiendo:  :set hls is
+
+  5. Ahora escriba de nuevo el comando de búsqueda y vea qué ocurre:  /ignore <INTRO>
+
+  6. Para inhabilitar el ignorar la distinción de mayúsculas y minúsculas     
+     escriba:  :set noic
+
+NOTA:  Para eliminar el resaltado de las coincidencias escriba:   :nohlsearch
+NOTA:  Si quiere ignorar las mayúsculas y minúsculas, solo para un comando
+       de búsqueda, utilice  \c  en la frase:  /ignorar\c <INTRO>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			   RESUMEN DE LA LECCIÓN 6
 
 
-  1. Pulsando  o  abre una línea por DEBAJO del cursor y sitúa el cursor en
-     la línea abierta en modo Insert.
-     Pulsando una O mayúscula se abre una línea SOBRE la que está el cursor.
+  1. Escriba  o  para abrir una línea por DEBAJO de la posición del cursor y 
+     entrar en modo Insertar.
+     Escriba  O  para abrir una línea por ENCIMA de la posición del cursor y
+     entrar en modo Insertar
 
-  2. Pulse una	a  para insertar texto DESPUÉS del carácter sobre el cursor.
-     Pulsando una  A  mayúscula añade automáticamente texto al final de la
-     línea.
+  2. Escriba  a  para insertar texto DESPUÉS del cursor.
+     Escriba  A  para insertar texto al final de la línea.
 
-  3. Pulsando una  R  mayúscula se entra en modo Replace hasta que, para salir,
-     se pulse <ESC>.
+  3. El comando  e  mueve el cursor al final de una palabra.
 
-  4. Escribiendo «:set xxx» fija la opción «xxx»
+  4. El operador  y  copia (yank) texto,  p  lo pega (pone).
 
+  5. Al escribir una  R  mayúscula entra en el modo Reemplazar hasta que
+     se pulsa  <ESC>  .
 
+  6. Al escribir ":set xxx" activa la opción "xxx".  Algunas opciones son:
+  	'ic' 'ignorecase'	ignorar mayúsculas/minúsculas al buscar
+	'is' 'incsearch'	mostrar las coincidencias parciales para la búsqueda
+                        de una frase
+	'hls' 'hlsearch'	resalta todas las coincidencias de la frases
+     Puedes utilizar tanto los nombre largos o cortos de las opciones.
 
-
-
-
+  7. Añade "no" para inhabilitar una opción:   :set noic
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		  Lección 7: MANDATOS PARA LA AYUDA EN LÍNEA
+		  Lección 7: OBTENER AYUDA
+
 
 		 ** Utilice el sistema de ayuda en línea **
 
-
-  Vim dispone de un sistema de ayuda en línea. Para activarlo, pruebe una
+  Vim dispone de un sistema de ayuda en línea. Para comenzar, pruebe una
   de estas tres formas:
 	- pulse la tecla <AYUDA> (si dispone de ella)
 	- pulse la tecla <F1> (si dispone de ella)
 	- escriba   :help <INTRO>
 
-  Escriba   :q <INTRO>	 para cerrar la ventana de ayuda.
+  Lea el texto en la ventana de ayuda para descubrir cómo funciona la ayuda.
+  Escriba  CTRL-W CTRL-W  para saltar de una ventana a otra.
+  Escriba    :q <INTRO>   para cerrar la ventana de ayuda.
 
   Puede encontrar ayuda en casi cualquier tema añadiendo un argumento al
-  mandato «:help» mandato. Pruebe éstos:
+  comando «:help». Pruebe éstos (no olvide pulsar <INTRO>):
 
-  :help w <INTRO>
-  :help c_<T <INTRO>
-  :help insert-index <INTRO>
+  :help w 
+  :help c_CTRL-D
+  :help insert-index 
+  :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      Lección 7.2: CREAR UN SCRIPT DE INICIO
+
+
+			  ** Habilitar funcionalidades en Vim **
+
+  Vim tiene muchas más funcionalidades que Vi, pero algunas están
+  inhabilitadas de manera predeterminada.
+  Para empezar a utilizar más funcionalidades debería crear un archivo
+  llamado "vimrc".
+
+  1. Comience a editar el archivo "vimrc". Esto depende de su sistema:
+	:e ~/.vimrc		para Unix
+	:e ~/_vimrc		para Windows
+
+  2. Ahora lea el contenido del archivo "vimrc" de ejemplo:
+	:r $VIMRUNTIME/vimrc_example.vim
+
+  3. Guarde el archivo mediante:
+	:w
+
+  La próxima vez que inicie Vim, este usará el resaltado de sintaxis.
+  Puede añadir todos sus ajustes preferidos a este archivo "vimrc".
+  Para más información escriba  :help vimrc-intro
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			     Lección 7.3: COMPLETADO
+
+
+	      ** Completado de la línea de comandos con CTRL-D o <TAB> **
+
+  1. Asegúrese de que Vim no está en el modo compatible:  :set nocp
+
+  2. Vea qué archivos existen en el directorio con:  :!ls   o   :!dir
+
+  3. Escriba el inicio de un comando:  :e
+
+  4. Pulse  CTRL-D  y Vim mostrará una lista de comandos que empiezan con "e".
+
+  5. Añada  d<TAB>  y Vim completará el nombre del comando a ":edit".
+
+  6. Ahora añada un espacio y el inicio del nombre de un archivo:  :edit FIL
+
+  7. Pulse <TAB>.  Vim completará el nombre (si solo hay uno).
+
+NOTA:  El completado funciona con muchos comandos. Solo pulse CTRL-D o
+       <TAB>.  Es especialmente útil para   :help .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       RESUMEN DE LA LECCIÓN 7
+
+
+  1. Escriba  :help  o pulse <F1> o <HELP>  para abrir la ventana de ayuda.
+
+  2. Escriba  :help cmd  para encontrar ayuda sobre  cmd .
+
+  3. Escriba  CTRL-W CTRL-W  para saltar a otra ventana.
+
+  4. Escriba  :q  para cerrar la ventana de ayuda.
+
+  5. Cree un fichero vimrc de inicio para guardar sus ajustes preferidos.
+
+  6. Cuando escriba un comando  :  pulse CTRL-D para ver posibles opciones.
+     Pulse <TAB> para utilizar una de las opciones de completado.
+
+
+
+
+
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -744,13 +994,15 @@
   Aquí concluye el tutor de Vim. Está pensado para dar una visión breve del
   editor Vim, lo suficiente para permitirle usar el editor de forma bastante
   sencilla. Está muy lejos de estar completo pues Vim tiene muchísimos más
-  mandatos.
+  comandos. Lea el siguiente manual de usuario: ":help user-manual".
 
   Para lecturas y estudios posteriores se recomienda el libro:
-	Learning the Vi Editor - por Linda Lamb
-	Editorial: O'Reilly & Associates Inc.
-  Es un buen libro para llegar a saber casi todo lo que desee hacer con Vi.
-  La sexta edición incluye también información sobre Vim.
+	Vim - Vi Improved - de Steve Oualline
+	Editado por: New Riders
+  El primer libro dedicado completamente a Vim. Especialmente útil para
+  recién principiantes.
+  Tiene muchos ejemplos e imágenes.
+  Vea https://iccf-holland.org/click5.html
 
   Este tutorial ha sido escrito por Michael C. Pierce y Robert K. Ware,
   Colorado School of Mines utilizando ideas suministradas por Charles Smith,
@@ -760,10 +1012,12 @@
   Modificado para Vim por Bram Moolenaar.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
+    
   Traducido del inglés por:
 
-  Eduardo F. Amatria
-  Correo electrónico: eferna1@platea.pntic.mec.es
+  * Eduardo F. Amatria
+    Correo electrónico: eferna1@platea.pntic.mec.es
+  * Victorhck
+    Correo electrónico: victorhck@opensuse.org
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/runtime/vim.desktop b/runtime/vim.desktop
index cd3bdef..b883550 100644
--- a/runtime/vim.desktop
+++ b/runtime/vim.desktop
@@ -12,6 +12,7 @@
 Name[ru]=Vim
 Name[sr]=Vim
 Name[tr]=Vim
+Name[uk]=Vim
 Name=Vim
 # Translators: This is the Generic Application Name used in the Vim desktop file
 GenericName[ca]=Editor de text
@@ -25,6 +26,7 @@
 GenericName[ru]=Текстовый редактор
 GenericName[sr]=Едитор текст
 GenericName[tr]=Metin Düzenleyici
+GenericName[uk]=Редактор Тексту
 GenericName=Text Editor
 # Translators: This is the comment used in the Vim desktop file
 Comment[ca]=Edita fitxers de text
@@ -38,6 +40,7 @@
 Comment[ru]=Редактирование текстовых файлов
 Comment[sr]=Уређујте текст фајлове
 Comment[tr]=Metin dosyaları düzenleyin
+Comment[uk]=Редагувати текстові файли
 Comment=Edit text files
 # The translations should come from the po file. Leave them here for now, they will
 # be overwritten by the po file when generating the desktop.file.
@@ -97,7 +100,6 @@
 Comment[ta]=உரை கோப்புகளை தொகுக்கவும்
 Comment[th]=แก้ไขแฟ้มข้อความ
 Comment[tk]=Metin faýllary editle
-Comment[uk]=Редактор текстових файлів
 Comment[vi]=Soạn thảo tập tin văn bản
 Comment[wa]=Asspougnî des fitchîs tecses
 Comment[zh_CN]=编辑文本文件
@@ -118,6 +120,7 @@
 Keywords[ru]=текст;текстовый редактор;
 Keywords[sr]=Текст;едитор;
 Keywords[tr]=Metin;düzenleyici;
+Keywords[uk]=текст;редактор;
 Keywords=Text;editor;
 # Translators: This is the Icon file name. Do NOT translate
 Icon=gvim