Mercurial > vim
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