mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 9.1.0654: completion does not respect completeslash with fuzzy
Problem: completion does not respect completeslash with fuzzy (egesip) Solution: Change path separator on Windows, depending on 'completeslash' option value (glepnir) fixes: #15392 closes: #15418 Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
a0b5bc1285
commit
b9de1a057f
@ -3552,9 +3552,34 @@ get_next_filename_completion(void)
|
|||||||
size_t path_with_wildcard_len;
|
size_t path_with_wildcard_len;
|
||||||
char_u *path_with_wildcard;
|
char_u *path_with_wildcard;
|
||||||
|
|
||||||
|
#ifdef BACKSLASH_IN_FILENAME
|
||||||
|
char pathsep = (curbuf->b_p_csl[0] == 's') ?
|
||||||
|
'/' : (curbuf->b_p_csl[0] == 'b') ? '\\' : PATHSEP;
|
||||||
|
#else
|
||||||
|
char pathsep = PATHSEP;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (in_fuzzy)
|
if (in_fuzzy)
|
||||||
{
|
{
|
||||||
last_sep = vim_strrchr(leader, PATHSEP);
|
#ifdef BACKSLASH_IN_FILENAME
|
||||||
|
if (curbuf->b_p_csl[0] == 's')
|
||||||
|
{
|
||||||
|
for (i = 0; i < leader_len; i++)
|
||||||
|
{
|
||||||
|
if (leader[i] == '\\')
|
||||||
|
leader[i] = '/';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (curbuf->b_p_csl[0] == 'b')
|
||||||
|
{
|
||||||
|
for (i = 0; i < leader_len; i++)
|
||||||
|
{
|
||||||
|
if (leader[i] == '/')
|
||||||
|
leader[i] = '\\';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
last_sep = vim_strrchr(leader, pathsep);
|
||||||
if (last_sep == NULL)
|
if (last_sep == NULL)
|
||||||
{
|
{
|
||||||
// No path separator or separator is the last character,
|
// No path separator or separator is the last character,
|
||||||
|
@ -2668,6 +2668,38 @@ func Test_complete_fuzzy_match()
|
|||||||
unlet g:word
|
unlet g:word
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_complete_fuzzy_with_completeslash()
|
||||||
|
CheckMSWindows
|
||||||
|
|
||||||
|
call writefile([''], 'fobar', 'D')
|
||||||
|
let orig_shellslash = &shellslash
|
||||||
|
set cpt&
|
||||||
|
new
|
||||||
|
set completeopt+=fuzzy
|
||||||
|
set noshellslash
|
||||||
|
|
||||||
|
" Test with completeslash unset
|
||||||
|
set completeslash=
|
||||||
|
call setline(1, ['.\fob'])
|
||||||
|
call feedkeys("A\<C-X>\<C-F>\<Esc>0", 'tx!')
|
||||||
|
call assert_equal('.\fobar', getline('.'))
|
||||||
|
|
||||||
|
" Test with completeslash=backslash
|
||||||
|
set completeslash=backslash
|
||||||
|
call feedkeys("S.\\fob\<C-X>\<C-F>\<Esc>0", 'tx!')
|
||||||
|
call assert_equal('.\fobar', getline('.'))
|
||||||
|
|
||||||
|
" Test with completeslash=slash
|
||||||
|
set completeslash=slash
|
||||||
|
call feedkeys("S.\\fob\<C-X>\<C-F>\<Esc>0", 'tx!')
|
||||||
|
call assert_equal('./fobar', getline('.'))
|
||||||
|
|
||||||
|
" Reset and clean up
|
||||||
|
let &shellslash = orig_shellslash
|
||||||
|
set completeslash=
|
||||||
|
%bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Check that tie breaking is stable for completeopt+=fuzzy (which should
|
" Check that tie breaking is stable for completeopt+=fuzzy (which should
|
||||||
" behave the same on different platforms).
|
" behave the same on different platforms).
|
||||||
func Test_complete_fuzzy_match_tie()
|
func Test_complete_fuzzy_match_tie()
|
||||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
654,
|
||||||
/**/
|
/**/
|
||||||
653,
|
653,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user