diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-11-04 21:22:37 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-11-04 21:22:37 +0100 |
commit | 426f3754223c8ff8a1bc51d6ba1eba11e8982ebc (patch) | |
tree | 99e61b82b8af5bb25d3d7b5e4ddcd366b635e24b | |
parent | de5e2c219b99895445fb75ae3541ee69282a5846 (diff) |
patch 8.0.0060v8.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)
-rw-r--r-- | src/normal.c | 8 | ||||
-rw-r--r-- | src/testdir/test_normal.vim | 20 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 27 insertions, 3 deletions
diff --git a/src/normal.c b/src/normal.c index 99ced410d0..f5e5475f33 100644 --- 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) { diff --git a/src/testdir/test_normal.vim b/src/testdir/test_normal.vim index f896046d4b..20cbaa00f0 100644 --- 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 diff --git a/src/version.c b/src/version.c index 97b7e30981..b567665883 100644 --- 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, |