changeset 10330:71ca6a16e818 v8.0.0060

commit https://github.com/vim/vim/commit/426f3754223c8ff8a1bc51d6ba1eba11e8982ebc Author: Bram Moolenaar <Bram@vim.org> Date: Fri Nov 4 21:22:37 2016 +0100 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 https://github.com/vim/vim/issues/1175)
author Christian Brabandt <cb@256bit.org>
date Fri, 04 Nov 2016 21:30:05 +0100
parents 6156ad9f0447
children 443896d0af02
files src/normal.c src/testdir/test_normal.vim src/version.c
diffstat 3 files changed, 27 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/normal.c
+++ b/src/normal.c
@@ -5713,9 +5713,13 @@ nv_ident(cmdarg_T *cap)
      */
     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)
 	{
--- a/src/testdir/test_normal.vim
+++ b/src/testdir/test_normal.vim
@@ -1222,7 +1222,7 @@ endfunc
 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 @@ func! Test_normal23_K()
   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
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    60,
+/**/
     59,
 /**/
     58,