forked from aniani/vim
updated for version 7.1-299
This commit is contained in:
parent
7a98925587
commit
aebaf89fd4
@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 7.1. Last change: 2008 Feb 20
|
||||
*eval.txt* For Vim version 7.1. Last change: 2008 May 28
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -1609,6 +1609,7 @@ finddir( {name}[, {path}[, {count}]])
|
||||
String find directory {name} in {path}
|
||||
findfile( {name}[, {path}[, {count}]])
|
||||
String find file {name} in {path}
|
||||
fnameescape( {fname}) String escape special characters in {fname}
|
||||
fnamemodify( {fname}, {mods}) String modify file name
|
||||
foldclosed( {lnum}) Number first line of fold at {lnum} if closed
|
||||
foldclosedend( {lnum}) Number last line of fold at {lnum} if closed
|
||||
@ -2620,6 +2621,19 @@ findfile({name}[, {path}[, {count}]]) *findfile()*
|
||||
< Searches from the directory of the current file upwards until
|
||||
it finds the file "tags.vim".
|
||||
|
||||
fnameescape({string}) *fnameescape()*
|
||||
Escape {string} for use as file name command argument. All
|
||||
characters that have a special meaning, such as '%' and '|'
|
||||
are escaped with a backslash.
|
||||
For most systems the characters escaped are "". For systems
|
||||
where a backslash appears in a filename, it depends on the
|
||||
value of 'isfname'.
|
||||
Example: >
|
||||
:let fname = 'some str%nge|name'
|
||||
:exe "edit " . fnameescape(fname)
|
||||
< results in executing: >
|
||||
edit some\ str\%nge\|name
|
||||
|
||||
fnamemodify({fname}, {mods}) *fnamemodify()*
|
||||
Modify file name {fname} according to {mods}. {mods} is a
|
||||
string of characters like it is used for file names on the
|
||||
|
@ -16,20 +16,23 @@ set cpo&vim
|
||||
augroup filetypedetect
|
||||
|
||||
" Ignored extensions
|
||||
if exists("*fnameescape")
|
||||
au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.rpmsave,?\+.rpmnew
|
||||
\ exe "doau filetypedetect BufRead " . expand("<afile>:r")
|
||||
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
|
||||
au BufNewFile,BufRead *~
|
||||
\ let s:name = expand("<afile>") |
|
||||
\ let s:short = substitute(s:name, '\~$', '', '') |
|
||||
\ if s:name != s:short && s:short != "" |
|
||||
\ exe "doau filetypedetect BufRead " . s:short |
|
||||
\ exe "doau filetypedetect BufRead " . fnameescape(s:short) |
|
||||
\ endif |
|
||||
\ unlet s:name |
|
||||
\ unlet s:short
|
||||
\ unlet s:name s:short
|
||||
au BufNewFile,BufRead ?\+.in
|
||||
\ if expand("<afile>:t") != "configure.in" |
|
||||
\ exe "doau filetypedetect BufRead " . expand("<afile>:r") |
|
||||
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) |
|
||||
\ endif
|
||||
elseif &verbose > 0
|
||||
echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()"
|
||||
endif
|
||||
|
||||
" Pattern used to match file names which should not be inspected.
|
||||
" Currently finds compressed files.
|
||||
|
15
src/eval.c
15
src/eval.c
@ -507,6 +507,7 @@ static void f_filewritable __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_filter __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_finddir __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_findfile __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_fnameescape __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_fnamemodify __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_foldclosed __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
static void f_foldclosedend __ARGS((typval_T *argvars, typval_T *rettv));
|
||||
@ -7107,6 +7108,7 @@ static struct fst
|
||||
{"filter", 2, 2, f_filter},
|
||||
{"finddir", 1, 3, f_finddir},
|
||||
{"findfile", 1, 3, f_findfile},
|
||||
{"fnameescape", 1, 1, f_fnameescape},
|
||||
{"fnamemodify", 2, 2, f_fnamemodify},
|
||||
{"foldclosed", 1, 1, f_foldclosed},
|
||||
{"foldclosedend", 1, 1, f_foldclosedend},
|
||||
@ -9464,6 +9466,19 @@ f_findfile(argvars, rettv)
|
||||
findfilendir(argvars, rettv, FINDFILE_FILE);
|
||||
}
|
||||
|
||||
/*
|
||||
* "fnameescape({string})" function
|
||||
*/
|
||||
static void
|
||||
f_fnameescape(argvars, rettv)
|
||||
typval_T *argvars;
|
||||
typval_T *rettv;
|
||||
{
|
||||
rettv->vval.v_string = vim_strsave_fnameescape(
|
||||
get_tv_string(&argvars[0]), FALSE);
|
||||
rettv->v_type = VAR_STRING;
|
||||
}
|
||||
|
||||
/*
|
||||
* "fnamemodify({fname}, {mods})" function
|
||||
*/
|
||||
|
@ -3656,22 +3656,7 @@ ExpandEscape(xp, str, numfiles, files, options)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#ifdef BACKSLASH_IN_FILENAME
|
||||
{
|
||||
char_u buf[20];
|
||||
int j = 0;
|
||||
|
||||
/* Don't escape '[' and '{' if they are in 'isfname'. */
|
||||
for (p = PATH_ESC_CHARS; *p != NUL; ++p)
|
||||
if ((*p != '[' && *p != '{') || !vim_isfilec(*p))
|
||||
buf[j++] = *p;
|
||||
buf[j] = NUL;
|
||||
p = vim_strsave_escaped(files[i], buf);
|
||||
}
|
||||
#else
|
||||
p = vim_strsave_escaped(files[i],
|
||||
xp->xp_shell ? SHELL_ESC_CHARS : PATH_ESC_CHARS);
|
||||
#endif
|
||||
p = vim_strsave_fnameescape(files[i], xp->xp_shell);
|
||||
if (p != NULL)
|
||||
{
|
||||
vim_free(files[i]);
|
||||
@ -3709,6 +3694,31 @@ ExpandEscape(xp, str, numfiles, files, options)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Escape special characters in "fname" for when used as a file name argument
|
||||
* after a Vim command, or, when "shell" is non-zero, a shell command.
|
||||
* Returns the result in allocated memory.
|
||||
*/
|
||||
char_u *
|
||||
vim_strsave_fnameescape(fname, shell)
|
||||
char_u *fname;
|
||||
int shell;
|
||||
{
|
||||
#ifdef BACKSLASH_IN_FILENAME
|
||||
char_u buf[20];
|
||||
int j = 0;
|
||||
|
||||
/* Don't escape '[' and '{' if they are in 'isfname'. */
|
||||
for (p = PATH_ESC_CHARS; *p != NUL; ++p)
|
||||
if ((*p != '[' && *p != '{') || !vim_isfilec(*p))
|
||||
buf[j++] = *p;
|
||||
buf[j] = NUL;
|
||||
return vim_strsave_escaped(fname, buf);
|
||||
#else
|
||||
return vim_strsave_escaped(fname, shell ? SHELL_ESC_CHARS : PATH_ESC_CHARS);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* Put a backslash before the file name in "pp", which is in allocated memory.
|
||||
*/
|
||||
|
@ -24,6 +24,7 @@ char_u *ExpandOne __ARGS((expand_T *xp, char_u *str, char_u *orig, int options,
|
||||
void ExpandInit __ARGS((expand_T *xp));
|
||||
void ExpandCleanup __ARGS((expand_T *xp));
|
||||
void ExpandEscape __ARGS((expand_T *xp, char_u *str, int numfiles, char_u **files, int options));
|
||||
char_u *vim_strsave_fnameescape __ARGS((char_u *fname, int shell));
|
||||
void tilde_replace __ARGS((char_u *orig_pat, int num_files, char_u **files));
|
||||
char_u *sm_gettail __ARGS((char_u *s));
|
||||
char_u *addstar __ARGS((char_u *fname, int len, int context));
|
||||
|
@ -666,6 +666,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
299,
|
||||
/**/
|
||||
298,
|
||||
/**/
|
||||
|
@ -336,10 +336,10 @@
|
||||
# endif
|
||||
#endif
|
||||
#ifdef BACKSLASH_IN_FILENAME
|
||||
# define PATH_ESC_CHARS ((char_u *)" \t*?[{`%#")
|
||||
# define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`%#'\"|!<")
|
||||
#else
|
||||
# define PATH_ESC_CHARS ((char_u *)" \t*?[{`$\\%#'\"|")
|
||||
# define SHELL_ESC_CHARS ((char_u *)" \t*?[{`$\\%#'\"|<>();&!")
|
||||
# define PATH_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<")
|
||||
# define SHELL_ESC_CHARS ((char_u *)" \t\n*?[{`$\\%#'\"|!<>();&")
|
||||
#endif
|
||||
|
||||
#define NUMBUFLEN 30 /* length of a buffer to store a number in ASCII */
|
||||
|
Loading…
x
Reference in New Issue
Block a user