patch 8.0.0060
Problem:    When using an Ex command for 'keywordprg' it is escaped as with a
            shell command. (Romain Lafourcade)
Solution:   Escape for an Ex command. (closes #1175)
diff --git a/src/normal.c b/src/normal.c
index 99ced41..f5e5475 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -5713,9 +5713,13 @@
      */
     if (cmdchar == 'K' && !kp_help)
     {
-	/* Escape the argument properly for a shell command */
 	ptr = vim_strnsave(ptr, n);
-	p = vim_strsave_shellescape(ptr, TRUE, TRUE);
+	if (kp_ex)
+	    /* Escape the argument properly for an Ex command */
+	    p = vim_strsave_fnameescape(ptr, FALSE);
+	else
+	    /* Escape the argument properly for a shell command */
+	    p = vim_strsave_shellescape(ptr, TRUE, TRUE);
 	vim_free(ptr);
 	if (p == NULL)
 	{
diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim
index f896046..20cbaa0 100644
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -1222,7 +1222,7 @@
 func! Test_normal23_K()
   " Test for K command
   new
-  call append(0, ['version8.txt', 'man'])
+  call append(0, ['version8.txt', 'man', 'aa%bb', 'cc|dd'])
   let k = &keywordprg
   set keywordprg=:help
   1
@@ -1237,6 +1237,24 @@
   call assert_match('\*version8\.0\*', getline('.'))
   helpclose
 
+  set keywordprg=:new
+  set iskeyword+=%
+  set iskeyword+=\|
+  2
+  norm! K
+  call assert_equal('man', fnamemodify(bufname('%'), ':t'))
+  bwipe!
+  3
+  norm! K
+  call assert_equal('aa%bb', fnamemodify(bufname('%'), ':t'))
+  bwipe!
+  4
+  norm! K
+  call assert_equal('cc|dd', fnamemodify(bufname('%'), ':t'))
+  bwipe!
+  set iskeyword-=%
+  set iskeyword-=\|
+
   " Only expect "man" to work on Unix
   if !has("unix")
     let &keywordprg = k
diff --git a/src/version.c b/src/version.c
index 97b7e30..b567665 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    60,
+/**/
     59,
 /**/
     58,