diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 0860aab..707412c 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1977,15 +1977,15 @@
 
 acos({expr})							*acos()*
 		Return the arc cosine of {expr} measured in radians, as a
-		|Float|in the range of [0, pi].
-		{expr} must evaluate to a|Float|or a|Number|in the range
+		|Float| in the range of [0, pi].
+		{expr} must evaluate to a |Float| or a |Number| in the range
 		[-1, 1].
 		Examples: >
 			:echo acos(0)
 <			1.570796 >
 			:echo acos(-0.5)
 <			2.094395
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 add({list}, {expr})					*add()*
@@ -2031,16 +2031,16 @@
 		returned.
 
 asin({expr})						*asin()*
-		Return the arc sine of {expr} measured in radians, as a|Float|
+		Return the arc sine of {expr} measured in radians, as a |Float|
 		in the range of [-pi/2, pi/2].
-		{expr} must evaluate to a|Float|or a|Number|in the range
+		{expr} must evaluate to a |Float| or a |Number| in the range
 		[-1, 1].
 		Examples: >
 			:echo asin(0.8)
 <			0.927295 >
 			:echo asin(-0.5)
 <			-0.523599
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 atan({expr})						*atan()*
@@ -2057,14 +2057,14 @@
 
 atan2({expr1}, {expr2})					*atan2()*
 		Return the arc tangent of {expr1} / {expr2}, measured in
-		radians, as a|Float|in the range [-pi, pi].
-		{expr1} and {expr2} must evaluate to a|Float|or a|Number|.
+		radians, as a |Float| in the range [-pi, pi].
+		{expr1} and {expr2} must evaluate to a |Float| or a |Number|.
 		Examples: >
 			:echo atan2(-1, 1)
 <			-0.785398 >
 			:echo atan2(1, -1)
 <			2.356194
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 							*browse()*
@@ -2418,15 +2418,15 @@
 
 
 cosh({expr})						*cosh()*
-		Return the hyperbolic cosine of {expr} as a|Float|in the range
+		Return the hyperbolic cosine of {expr} as a |Float| in the range
 		[1, inf].
-		{expr} must evaluate to a|Float|or a|Number|.
+		{expr} must evaluate to a |Float| or a |Number|.
 		Examples: >
 			:echo cosh(0.5)
 <			1.127626 >
 			:echo cosh(-0.5)
 <			-1.127626
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 		
 count({comp}, {expr} [, {ic} [, {start}]])			*count()*
@@ -2689,15 +2689,15 @@
 		but gets the value of "bufcount", and checks if that exists.
 
 exp({expr})						*exp()*
-		Return the exponential of {expr} as a|Float|in the range
+		Return the exponential of {expr} as a |Float| in the range
 		[0, inf].
-		{expr} must evaluate to a|Float|or a|Number|.
+		{expr} must evaluate to a |Float| or a |Number|.
 		Examples: >
 			:echo exp(2)
 <			7.389056 >
 			:echo exp(-1)
 <			0.367879
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 expand({expr} [, {flag}])				*expand()*
@@ -2939,14 +2939,14 @@
 		for some integer i such that if {expr2} is non-zero, the
 		result has the same sign as {expr1} and magnitude less than
 		the magnitude of {expr2}.  If {expr2} is zero, the value
-		returned is zero.  The value returned is a|Float|.
-		{expr1} and {expr2} must evaluate to a|Float|or a|Number|.
+		returned is zero.  The value returned is a |Float|.
+		{expr1} and {expr2} must evaluate to a |Float| or a |Number|.
 		Examples: >
 			:echo fmod(12.33, 1.22)
 <			0.13 >
 			:echo fmod(-12.33, 1.22)
 <			-0.13
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 fnameescape({string})					*fnameescape()*
@@ -3911,15 +3911,15 @@
 
 
 log({expr})						*log()*
-		Return the natural logarithm (base e) of {expr} as a|Float|.
-		{expr} must evaluate to a|Float|or a|Number|in the range
+		Return the natural logarithm (base e) of {expr} as a |Float|.
+		{expr} must evaluate to a |Float| or a |Number| in the range
 		(0, inf].
 		Examples: >
 			:echo log(10)
 <			2.302585 >
 			:echo log(exp(5))
 <			5.0
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 log10({expr})						*log10()*
@@ -4906,8 +4906,8 @@
 		column position of the match. The first element of the |List|
 		is the line number and the second element is the byte index of
 		the column position of the match.  If no match is found,
-		returns [0, 0].
->
+		returns [0, 0]. >
+
 			:let [lnum,col] = searchpairpos('{', '', '}', 'n')
 <
 		See |match-parens| for a bigger and more useful example.
@@ -5206,15 +5206,15 @@
 		
 
 sinh({expr})						*sinh()*
-		Return the hyperbolic sine of {expr} as a|Float|in the range
+		Return the hyperbolic sine of {expr} as a |Float| in the range
 		[-inf, inf].
-		{expr} must evaluate to a|Float|or a|Number|.
+		{expr} must evaluate to a |Float| or a |Number|.
 		Examples: >
 			:echo sinh(0.5)
 <			0.521095 >
 			:echo sinh(-0.9)
 <			-1.026517
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 sort({list} [, {func}])					*sort()* *E702*
@@ -5702,27 +5702,27 @@
 
 
 tan({expr})						*tan()*
-		Return the tangent of {expr}, measured in radians, as a|Float|
+		Return the tangent of {expr}, measured in radians, as a |Float|
 		in the range [-inf, inf].
-		{expr} must evaluate to a|Float|or a|Number|.
+		{expr} must evaluate to a |Float| or a |Number|.
 		Examples: >
 			:echo tan(10)
 <			0.648361 >
 			:echo tan(-4.01)
 <			-1.181502
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 tanh({expr})						*tanh()*
-		Return the hyperbolic tangent of {expr} as a|Float|in the
+		Return the hyperbolic tangent of {expr} as a |Float| in the
 		range [-1, 1].
-		{expr} must evaluate to a|Float|or a|Number|.
+		{expr} must evaluate to a |Float| or a |Number|.
 		Examples: >
 			:echo tanh(0.5)
 <			0.462117 >
 			:echo tanh(-1)
 <			-0.761594
-		{only available when compiled with|+float|}
+		{only available when compiled with |+float|}
 
 
 tolower({expr})						*tolower()*
diff --git a/runtime/doc/ft_ada.txt b/runtime/doc/ft_ada.txt
index 03e695d..21a9a50 100644
--- a/runtime/doc/ft_ada.txt
+++ b/runtime/doc/ft_ada.txt
@@ -45,7 +45,7 @@
 the colour specification; on simple terminals the colour specification
 ctermfg=White often shows well).
 
-There are several options you can select in this Ada mode. See|ft-ada-options|
+There are several options you can select in this Ada mode. See |ft-ada-options|
 for a complete list.
 
 To enable them, assign a value to the option.  For example, to turn one on:
@@ -143,7 +143,7 @@
 								*ada-compiler*
 
 The Ada mode supports more than one Ada compiler and will automatically load the
-compiler set in|g:ada_default_compiler|whenever an Ada source is opened. The
+compiler set in |g:ada_default_compiler| whenever an Ada source is opened. The
 provided compiler plug-ins are split into the actual compiler plug-in and a
 collection of support functions and variables. This allows the easy
 development of specialized compiler plug-ins fine tuned to your development
@@ -171,20 +171,20 @@
 
 							       *g:gnat.Make()*
 g:gnat.Make()
-		Calls|g:gnat.Make_Command|and displays the result inside a
+		Calls |g:gnat.Make_Command| and displays the result inside a
                |quickfix| window.
 
 							     *g:gnat.Pretty()*
 g:gnat.Pretty()
-		Calls|g:gnat.Pretty_Program|
+		Calls |g:gnat.Pretty_Program|
 
 							       *g:gnat.Find()*
 g:gnat.Find()
-		Calls|g:gnat.Find_Program|
+		Calls |g:gnat.Find_Program|
 
 							       *g:gnat.Tags()*
 g:gnat.Tags()
-		Calls|g:gnat.Tags_Command|
+		Calls |g:gnat.Tags_Command|
 
 						   *g:gnat.Set_Project_File()*
 g:gnat.Set_Project_File([{file}])
@@ -200,19 +200,19 @@
 
 							 *g:gnat.Make_Command*
 g:gnat.Make_Command	string
-		External command used for|g:gnat.Make()| (|'makeprg'|).
+		External command used for |g:gnat.Make()| (|'makeprg'|).
 
 						       *g:gnat.Pretty_Program*
 g:gnat.Pretty_Program	string
-		External command used for|g:gnat.Pretty()|
+		External command used for |g:gnat.Pretty()|
 
 							 *g:gnat.Find_Program*
 g:gnat.Find_Program	string
-		External command used for|g:gnat.Find()|
+		External command used for |g:gnat.Find()|
 
 							 *g:gnat.Tags_Command*
 g:gnat.Tags_Command	string
-		External command used for|g:gnat.Tags()|
+		External command used for |g:gnat.Tags()|
 
 							 *g:gnat.Error_Format*
 g:gnat.Error_Format	string
@@ -406,15 +406,15 @@
 g:gnat			    object
 		Control object which manages GNAT compiles.  The object
 		is created when the first Ada source code is loaded provided
-		that |g:ada_default_compiler|is set to 'gnat'. See
+		that |g:ada_default_compiler| is set to 'gnat'. See
 		|gnat_members| for details.
 
 								    *g:decada*
 g:decada		      object
 		Control object which manages Dec Ada compiles.	The object
 		is created when the first Ada source code is loaded provided
-		that |g:ada_default_compiler|is set to 'decada'. See
-	        |decada_members| for details.
+		that |g:ada_default_compiler| is set to 'decada'. See
+		|decada_members| for details.
 
 ------------------------------------------------------------------------------
 5.4 Constants ~
diff --git a/runtime/doc/if_lua.txt b/runtime/doc/if_lua.txt
index ff3c0f2..60d9f2e 100644
--- a/runtime/doc/if_lua.txt
+++ b/runtime/doc/if_lua.txt
@@ -94,10 +94,10 @@
 Lua$print$function has its output redirected to the Vim message area, with
 arguments separated by a white space instead of a tab.
 
-Lua uses the "vim" module (see|lua-vim|) to issue commands to Vim
+Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
 and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
 procedures that alter buffer content, open new buffers, and change cursor
-position are restricted when the command is executed in the|sandbox|.
+position are restricted when the command is executed in the |sandbox|.
 
 
 ==============================================================================
@@ -109,7 +109,7 @@
 Vim evaluation and command execution, and others.
 
 	$vim.isbuffer(value)$	Returns#true#if$value$is a buffer userdata and
-				$false$otherwise (see|lua-buffer|).
+				$false$otherwise (see |lua-buffer|).
 
 	$vim.buffer($[arg]$)$	If$arg$is a number, returns buffer with number
 				$arg$in the buffer list or, if$arg$is
@@ -121,7 +121,7 @@
 				buffer.
 
 	$vim.iswindow(value)$	Returns#true#if$value$is a window userdata and
-				$false$otherwise (see|lua-window|).
+				$false$otherwise (see |lua-window|).
 
 	$vim.window($[arg]$)$	If$arg$is a number, returns window with number
 				$arg$or#nil#if not found. Otherwise, if
@@ -133,7 +133,7 @@
 					:lua vim.command"set tw=60"
 					:lua vim.command"normal ddp"
 <
-	$vim.eval(${expr}$)$	Evaluates expression {expr} (see|expression|),
+	$vim.eval(${expr}$)$	Evaluates expression {expr} (see |expression|),
 				converts the result to Lua, and returns it.
 				Vim strings and numbers are directly converted
 				to Lua strings and numbers respectively. Vim
diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt
index a1d4cb2..ed67755 100644
--- a/runtime/doc/indent.txt
+++ b/runtime/doc/indent.txt
@@ -549,7 +549,7 @@
     :%s /\r$//g
 
 Or, you can simply |:let| the variable PHP_removeCRwhenUnix to 1 and the
-script will silently remove them when Vim loads a PHP file (at each|BufRead|).
+script will silently remove them when Vim loads a PHP file (at each |BufRead|).
 
 OPTIONS: ~
 
diff --git a/runtime/doc/netbeans.txt b/runtime/doc/netbeans.txt
index 28c9c99..6370350 100644
--- a/runtime/doc/netbeans.txt
+++ b/runtime/doc/netbeans.txt
@@ -190,18 +190,18 @@
 
 There are two different ways to run Vim in NetBeans mode:
 
-	+ an IDE may start Vim with the|-nb|command line argument
-	+ NetBeans can be started from within Vim with the|:nbstart|command
+	+ an IDE may start Vim with the |-nb| command line argument
+	+ NetBeans can be started from within Vim with the |:nbstart| command
 
 							*netbeans-parameters*
 Three forms can be used to setup the NetBeans connection parameters.
-When started from the command line, the|-nb|command line argument may be:
+When started from the command line, the |-nb| command line argument may be:
 
 	-nb={fname}				from a file
 	-nb:{hostname}:{addr}:{password}	directly
 	-nb					from a file or environment
 
-When started from within Vim, the|:nbstart|optional argument may be:
+When started from within Vim, the |:nbstart| optional argument may be:
 
 	={fname}				from a file
 	:{hostname}:{addr}:{password}	        directly
@@ -325,8 +325,8 @@
 
 color		Argument with either a decimal number, "none" (without the
 		quotes) or the name of a color (without the quotes) defined
-		both in the color list in|highlight-ctermfg| and in the color
-		list in|gui-colors|.
+		both in the color list in |highlight-ctermfg| and in the color
+		list in |gui-colors|.
 		New in version 2.5.
 
 offset		A number argument that indicates a byte position in a buffer.
@@ -822,7 +822,7 @@
 							*:nbstart* *E511*
 :nbs[tart] {connection}	Start a new Netbeans session with {connection} as the
 			socket connection parameters.  The format of
-			{connection} is described in|netbeans-parameters|.
+			{connection} is described in |netbeans-parameters|.
 			At any time, one may check if the netbeans socket is
 			connected by running the command:
 			':echo has("netbeans_enabled")'
@@ -846,7 +846,7 @@
 characters.  For IDE -> editor they cannot be inserted.
 
 A NetBeans session may be initiated with Vim running in a terminal, and
-continued later in a GUI environment after running the |:gui|command. In this
+continued later in a GUI environment after running the |:gui| command. In this
 case, the highlighting defined for the NetBeans annotations may be cleared
 when the ":gui" command sources .gvimrc and this file loads a colorscheme
 that runs the command ":highlight clear".
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 860730f..0a41622 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -3703,7 +3703,7 @@
 	|hl-DiffText|	 T  inserted text in diff mode
 	|hl-SignColumn|	 >  column used for |signs|
 	|hl-SpellBad|	 B  misspelled word |spell|
-	|hl-SpellCap|	 P  word that should start with capital|spell|
+	|hl-SpellCap|	 P  word that should start with capital |spell|
 	|hl-SpellRare|	 R  rare word |spell|
 	|hl-SpellLocal|	 L  word from other region |spell|
 	|hl-Conceal|	 -  the placeholders used for concealed characters
diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim
index 44605ef..ce2d82f 100644
--- a/runtime/syntax/help.vim
+++ b/runtime/syntax/help.vim
@@ -11,7 +11,7 @@
 syn match helpHeadline		"^[-A-Z .][-A-Z0-9 .()]*[ \t]\+\*"me=e-1
 syn match helpSectionDelim	"^=\{3,}.*===$"
 syn match helpSectionDelim	"^-\{3,}.*--$"
-syn region helpExample		matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<"
+syn region helpExample		matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<" concealends
 if has("ebcdic")
   syn match helpHyperTextJump	"\\\@<!|[^"*|]\+|" contains=helpBar
   syn match helpHyperTextEntry	"\*[^"*|]\+\*\s"he=e-1 contains=helpStar
@@ -132,7 +132,6 @@
 
 " Define the default highlighting.
 " Only used when an item doesn't have highlighting yet
-hi def link helpExampleStart	helpIgnore
 hi def link helpIgnore		Ignore
 hi def link helpHyperTextJump	Subtitle
 hi def link helpBar		Ignore
