0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

updated for version 7.0077

This commit is contained in:
Bram Moolenaar 2005-05-31 22:22:17 +00:00
parent 5c06f8b043
commit 54ee775e9d
18 changed files with 212 additions and 107 deletions

View File

@ -1,4 +1,4 @@
*starting.txt* For Vim version 7.0aa. Last change: 2005 Apr 18 *starting.txt* For Vim version 7.0aa. Last change: 2005 May 31
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -312,6 +312,11 @@ a slash. Thus "-R" means recovery and "-/R" readonly.
for reading or writing a viminfo file. Can be used to find for reading or writing a viminfo file. Can be used to find
out what is happening upon startup and exit. {not in Vi} out what is happening upon startup and exit. {not in Vi}
-V[N]{filename}
Like -V and set 'verbosefile' to {filename}. The result is
that messages are not displayed but written to the file
{filename}. {filename} must not start with a digit.
*-D* *-D*
-D Debugging. Go to debugging mode when executing the first -D Debugging. Go to debugging mode when executing the first
command from a script. |debug-mode| command from a script. |debug-mode|
@ -706,6 +711,8 @@ accordingly. Vim proceeds in this order:
2. Process the arguments 2. Process the arguments
The options and file names from the command that start Vim are The options and file names from the command that start Vim are
inspected. Buffers are created for all files (but not loaded yet). inspected. Buffers are created for all files (but not loaded yet).
The |-V| argument can be used to display or log what happens next,
useful for debugging the initializations.
3. Execute Ex commands, from environment variables and/or files 3. Execute Ex commands, from environment variables and/or files
An environment variable is read as one Ex command line, where multiple An environment variable is read as one Ex command line, where multiple

View File

@ -1,4 +1,4 @@
*todo.txt* For Vim version 7.0aa. Last change: 2005 May 25 *todo.txt* For Vim version 7.0aa. Last change: 2005 May 31
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -30,28 +30,18 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
*known-bugs* *known-bugs*
-------------------- Known bugs and current work ----------------------- -------------------- Known bugs and current work -----------------------
GTK: Hang for "gvim </tmp/tt >&/tmp/ttt". Ready to read char from stdin but
it's never read.
Namsh also has a problem with a hang, coming from the added char_avail() call.
Temporary fix: check "gui.starting".
Make option like 'verbose' that writes output into a file? Should make it
possible to see what's happening without messing up the display.
Errors when compiling with Cygwin (Thomas).
":sort n" sort on decimal number (skipping white space)
":sort x" sort on hex number
":sort o" sort on octal number
Docs: doesn't work well together with :global.
split(): splitting into chars doesn't work.
":qtag" command: make list of matching tags and use like quickfix list. ":qtag" command: make list of matching tags and use like quickfix list.
This changes the stack of quickfix lists. Make another list and use ":qnext", This changes the stack of quickfix lists. Make another list and use ":qnext",
":qprev", etc.? Do allow other commands for quickfix list, such as quickfix ":qprev", etc.? Do allow other commands for quickfix list, such as quickfix
window. window.
Win32: Balloon text can't contain line break.
Hints for multiline tooltips from Alexei Alexandrov (2005 Mar 26)
Patch from Sergey Khorev, 2005 Apr 11
Add has("balloon_multiline")
Patch in if_cscope.c also in 6.3? (Froloff)
Mac unicode patch (Da Woon Jung): Mac unicode patch (Da Woon Jung):
- selecting proportional font breaks display - selecting proportional font breaks display
- UTF-8 text causes display problems. Font replacement causes this. - UTF-8 text causes display problems. Font replacement causes this.
@ -72,11 +62,6 @@ autoload:
helpfile doc/myscript.txt helpfile doc/myscript.txt
For the "helpfile" item ":helptags" is run. For the "helpfile" item ":helptags" is run.
Win32: Balloon text can't contain line break.
Hints for multiline tooltips from Alexei Alexandrov (2005 Mar 26)
Patch from Sergey Khorev, 2005 Apr 11
Add has("balloon_multiline")
Patch to alternate fold highlighting. (Anthony Iano-Fletcher, 2005 May 12) Patch to alternate fold highlighting. (Anthony Iano-Fletcher, 2005 May 12)
More levels? More levels?
@ -121,7 +106,7 @@ PLANNED FOR VERSION 7.0:
add word to private dict: wrong and OK (in popup menu for evim) add word to private dict: wrong and OK (in popup menu for evim)
:spell good <word> zg :spell good <word> zg
:spell wrong <word> zw :spell wrong <word> zw
- Update option window for 'spell' and 'spelllang'. - Update option window for 'verbosefile', 'spell' and 'spelllang'.
- Distribution: Need wordlists for many languages; "language pack" - Distribution: Need wordlists for many languages; "language pack"
Put them on the ftp site, ready to download. Include README for Put them on the ftp site, ready to download. Include README for
copyrights. copyrights.

View File

@ -1,4 +1,4 @@
*various.txt* For Vim version 7.0aa. Last change: 2005 Apr 01 *various.txt* For Vim version 7.0aa. Last change: 2005 May 31
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -392,6 +392,8 @@ N *+X11* Unix only: can restore window title |X11|
To stop the messages and commands from being echoed to To stop the messages and commands from being echoed to
the screen, put the commands in a function and call it the screen, put the commands in a function and call it
with ":silent call Function()". with ":silent call Function()".
An alternative is to use the 'verbosefile' option,
this can be used in combination with ":redir".
{not in Vi} {not in Vi}
:redi[r] >> {file} Redirect messages to file {file}. Append if {file} :redi[r] >> {file} Redirect messages to file {file}. Append if {file}
@ -475,6 +477,8 @@ N *+X11* Unix only: can restore window title |X11|
:4verbose set verbose | set verbose :4verbose set verbose | set verbose
< verbose=4 ~ < verbose=4 ~
verbose=0 ~ verbose=0 ~
For logging verbose messages in a file use the
'verbosefile' option.
*K* *K*
K Run a program to lookup the keyword under the K Run a program to lookup the keyword under the

View File

@ -1,4 +1,4 @@
*version7.txt* For Vim version 7.0aa. Last change: 2005 May 22 *version7.txt* For Vim version 7.0aa. Last change: 2005 May 31
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -296,6 +296,7 @@ Options: ~
(idea by Hugo Haas) (idea by Hugo Haas)
'spell' switch spell checking on/off 'spell' switch spell checking on/off
'spelllang' languages to check spelling for 'spelllang' languages to check spelling for
'verbosefile' Log messages in a file.
Ex commands: ~ Ex commands: ~
@ -584,6 +585,10 @@ invalid characters after the register name. |:redir|
":redir @{a-z}>>" appends to register a to z. ":redir @{a-z}>>" appends to register a to z.
The 'verbosefile' option can be used to log messages in a file. Verbose
messages are not displayed then. The "-V{filename}" argument can be used to
log startup messages.
":let g:" lists global variables. ":let g:" lists global variables.
":let b:" lists buffer-local variables. ":let b:" lists buffer-local variables.
":let w:" lists window-local variables. ":let w:" lists window-local variables.

View File

@ -2,7 +2,7 @@
" "
" Language: Logtalk " Language: Logtalk
" Maintainer: Paulo Moura <pmoura@logtalk.org> " Maintainer: Paulo Moura <pmoura@logtalk.org>
" Last Change: April 5, 2005 " Last Change: May 30, 2005
" Quit when a syntax file was already loaded: " Quit when a syntax file was already loaded:
@ -89,14 +89,10 @@ syn region logtalkDir matchgroup=logtalkDirTag start=":- uses(" matchgroup=log
" Logtalk built-in predicates " Logtalk built-in predicates
syn match logtalkBuiltIn "\<current_\(object\|protocol\|category\)\ze(" syn match logtalkBuiltIn "\<\(abolish\|c\(reate\|urrent\)\)_\(object\|protocol\|category\)\ze("
syn match logtalkBuiltIn "\<create_\(object\|protocol\|category\)\ze("
syn match logtalkBuiltIn "\<\(object\|protocol\|category\)_property\ze(" syn match logtalkBuiltIn "\<\(object\|protocol\|category\)_property\ze("
syn match logtalkBuiltIn "\<abolish_\(object\|protocol\|category\)\ze("
syn match logtalkBuiltIn "\<extends_\(object\|protocol\)\ze(" syn match logtalkBuiltIn "\<extends_\(object\|protocol\)\ze("
syn match logtalkBuiltIn "\<imp\(orts_category\|lements_protocol\)\ze(" syn match logtalkBuiltIn "\<imp\(orts_category\|lements_protocol\)\ze("
syn match logtalkBuiltIn "\<\(instantiates\|specializes\)_class\ze(" syn match logtalkBuiltIn "\<\(instantiates\|specializes\)_class\ze("
@ -120,11 +116,9 @@ syn match logtalkBuiltInMethod "\<this\ze("
syn match logtalkBuiltInMethod "\<current_predicate\ze(" syn match logtalkBuiltInMethod "\<current_predicate\ze("
syn match logtalkBuiltInMethod "\<predicate_property\ze(" syn match logtalkBuiltInMethod "\<predicate_property\ze("
syn match logtalkBuiltInMethod "\<abolish\ze(" syn match logtalkBuiltInMethod "\<a\(bolish\|ssert\(a\|z\)\)\ze("
syn match logtalkBuiltInMethod "\<assert\(a\|z\)\ze("
syn match logtalkBuiltInMethod "\<clause\ze(" syn match logtalkBuiltInMethod "\<clause\ze("
syn match logtalkBuiltInMethod "\<retract\ze(" syn match logtalkBuiltInMethod "\<retract\(all\)\?\ze("
syn match logtalkBuiltInMethod "\<retractall\ze("
syn match logtalkBuiltInMethod "\<\(bag\|set\)of\ze(" syn match logtalkBuiltInMethod "\<\(bag\|set\)of\ze("
syn match logtalkBuiltInMethod "\<f\(ind\|or\)all\ze(" syn match logtalkBuiltInMethod "\<f\(ind\|or\)all\ze("
@ -165,10 +159,9 @@ syn match logtalkOperator "\\="
" Term testing " Term testing
syn match logtalkKeyword "\<var\ze(" syn match logtalkKeyword "\<var\ze("
syn match logtalkKeyword "\<atom\ze(" syn match logtalkKeyword "\<atom\(ic\)\?\ze("
syn match logtalkKeyword "\<integer\ze(" syn match logtalkKeyword "\<integer\ze("
syn match logtalkKeyword "\<float\ze(" syn match logtalkKeyword "\<float\ze("
syn match logtalkKeyword "\<atomic\ze("
syn match logtalkKeyword "\<compound\ze(" syn match logtalkKeyword "\<compound\ze("
syn match logtalkKeyword "\<n\(onvar\|umber\)\ze(" syn match logtalkKeyword "\<n\(onvar\|umber\)\ze("
@ -208,8 +201,7 @@ syn match logtalkOperator ">="
" Stream selection and control " Stream selection and control
syn match logtalkKeyword "\<current_\(input\|output\)\ze(" syn match logtalkKeyword "\<\(current\|set\)_\(in\|out\)put\ze("
syn match logtalkKeyword "\<set_\(input\|output\)\ze("
syn match logtalkKeyword "\<open\ze(" syn match logtalkKeyword "\<open\ze("
syn match logtalkKeyword "\<close\ze(" syn match logtalkKeyword "\<close\ze("
syn match logtalkKeyword "\<flush_output\ze(" syn match logtalkKeyword "\<flush_output\ze("
@ -222,22 +214,17 @@ syn match logtalkKeyword "\<set_stream_position\ze("
" Character and byte input/output " Character and byte input/output
syn match logtalkKeyword "\<\(get\|peek\|put\)_\(char\|code\|byte\)\ze(" syn match logtalkKeyword "\<\(get\|p\(eek\|ut\)\)_\(c\(har\|ode\)\|byte\)\ze("
syn match logtalkKeyword "\<nl\ze(" syn match logtalkKeyword "\<nl\ze("
syn match logtalkKeyword "\<nl\>" syn match logtalkKeyword "\<nl\>"
" Term input/output " Term input/output
syn match logtalkKeyword "\<read_term\ze(" syn match logtalkKeyword "\<read\(_term\)\?\ze("
syn match logtalkKeyword "\<read\ze(" syn match logtalkKeyword "\<write\(q\|_\(canonical\|term\)\)\?\ze("
syn match logtalkKeyword "\<write\ze(" syn match logtalkKeyword "\<\(current_\)\?op\ze("
syn match logtalkKeyword "\<writeq\ze(" syn match logtalkKeyword "\<\(current\)\?char_conversion\ze("
syn match logtalkKeyword "\<write_\(canonical\|term\)\ze("
syn match logtalkKeyword "\<op\ze("
syn match logtalkKeyword "\<current_op\ze("
syn match logtalkKeyword "\<char_conversion\ze("
syn match logtalkKeyword "\<current_char_conversion\ze("
" Logic and control " Logic and control
@ -249,10 +236,10 @@ syn match logtalkKeyword "\<repeat\>"
" Atomic term processing " Atomic term processing
syn match logtalkKeyword "\<atom_\(length\|concat\|chars\|codes\)\ze(" syn match logtalkKeyword "\<atom_\(length\|c\(hars\|o\(ncat\|des\)\)\)\ze("
syn match logtalkKeyword "\<sub_atom\ze(" syn match logtalkKeyword "\<sub_atom\ze("
syn match logtalkKeyword "\<char_code\ze(" syn match logtalkKeyword "\<char_code\ze("
syn match logtalkKeyword "\<number_\(chars\|codes\)\ze(" syn match logtalkKeyword "\<number_\(c\(hars\|odes\)\)\ze("
" Implementation defined hooks functions " Implementation defined hooks functions
@ -269,17 +256,14 @@ syn match logtalkOperator "-"
syn match logtalkOperator "\*" syn match logtalkOperator "\*"
syn match logtalkOperator "//" syn match logtalkOperator "//"
syn match logtalkOperator "/" syn match logtalkOperator "/"
syn match logtalkKeyword "\<rem(?=[(])" syn match logtalkKeyword "\<r\(ound\|em\)\ze("
syn match logtalkKeyword "\<rem\>" syn match logtalkKeyword "\<rem\>"
syn match logtalkKeyword "\<mod\ze(" syn match logtalkKeyword "\<mod\ze("
syn match logtalkKeyword "\<mod\>" syn match logtalkKeyword "\<mod\>"
syn match logtalkKeyword "\<abs\ze(" syn match logtalkKeyword "\<abs\ze("
syn match logtalkKeyword "\<sign\ze(" syn match logtalkKeyword "\<sign\ze("
syn match logtalkKeyword "\<float_\(integer\|fractional\)_part\ze(" syn match logtalkKeyword "\<flo\(or\|at\(_\(integer\|fractional\)_part\)\?\)\ze("
syn match logtalkKeyword "\<float\ze("
syn match logtalkKeyword "\<floor\ze("
syn match logtalkKeyword "\<truncate\ze(" syn match logtalkKeyword "\<truncate\ze("
syn match logtalkKeyword "\<round\ze("
syn match logtalkKeyword "\<ceiling\ze(" syn match logtalkKeyword "\<ceiling\ze("
@ -302,33 +286,34 @@ syn match logtalkOperator "\\/"
syn match logtalkOperator "\\" syn match logtalkOperator "\\"
" Logtalk end-of-clause
syn match logtalkOperator "\."
" Logtalk list operator " Logtalk list operator
syn match logtalkOperator "|" syn match logtalkOperator "|"
" Logtalk numbers
syn match logtalkNumber "\<\d\+\>"
syn match logtalkNumber "\<\d\+\.\d\+\>"
syn match logtalkNumber "\<\d\+[eE][-+]\=\d\+\>"
syn match logtalkNumber "\<\d\+\.\d\+[eE][-+]\=\d\+\>"
syn match logtalkNumber "\<0'[0-9a-zA-Z]\>"
syn match logtalkNumber "\<0b[0-1]\+\>"
syn match logtalkNumber "\<0o[0-7]\+\>"
syn match logtalkNumber "\<0x\x\+\>"
" Logtalk end-of-clause
syn match logtalkOperator "\."
" Logtalk comments " Logtalk comments
syn region logtalkBlockComment start="/\*" end="\*/" syn region logtalkBlockComment start="/\*" end="\*/"
syn match logtalkLineComment "%.*" syn match logtalkLineComment "%.*"
" Logtalk numbers
syn match logtalkNumber "\<[0-9]\+\>"
syn match logtalkNumber "\<[0-9]\+\.[0-9]\+\>"
syn match logtalkNumber "\<[0-9]\+\.[0-9]\+[eE][-+][0-9]+\>"
syn match logtalkNumber "\<0'[0-9a-zA-Z]\>"
syn match logtalkNumber "\<0b[0-1]\+\>"
syn match logtalkNumber "\<0o[0-7]\+\>"
syn match logtalkNumber "\<0x[0-9a-fA-F]\+\>"
syn sync ccomment logtalkBlockComment maxlines=50 syn sync ccomment logtalkBlockComment maxlines=50
@ -343,7 +328,7 @@ if version >= 508 || !exists("did_logtalk_syn_inits")
else else
command -nargs=+ HiLink hi def link <args> command -nargs=+ HiLink hi def link <args>
endif endif
HiLink logtalkBlockComment Comment HiLink logtalkBlockComment Comment
HiLink logtalkLineComment Comment HiLink logtalkLineComment Comment

View File

@ -10071,7 +10071,7 @@ f_inputrestore(argvars, rettv)
} }
else if (p_verbose > 1) else if (p_verbose > 1)
{ {
msg((char_u *)_("called inputrestore() more often than inputsave()")); verb_msg((char_u *)_("called inputrestore() more often than inputsave()"));
rettv->vval.v_number = 1; /* Failed */ rettv->vval.v_number = 1; /* Failed */
} }
} }
@ -12786,7 +12786,8 @@ f_split(argvars, rettv)
end = regmatch.startp[0]; end = regmatch.startp[0];
else else
end = str + STRLEN(str); end = str + STRLEN(str);
if (keepempty || end > str || (l->lv_len > 0 && *str != NUL)) if (keepempty || end > str || (l->lv_len > 0 && *str != NUL
&& match && end < regmatch.endp[0]))
{ {
ni = listitem_alloc(); ni = listitem_alloc();
if (ni == NULL) if (ni == NULL)
@ -16930,7 +16931,8 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
if (p_verbose >= 12) if (p_verbose >= 12)
{ {
++no_wait_return; ++no_wait_return;
msg_scroll = TRUE; /* always scroll up, don't overwrite */ verbose_enter_scroll();
smsg((char_u *)_("calling %s"), sourcing_name); smsg((char_u *)_("calling %s"), sourcing_name);
if (p_verbose >= 14) if (p_verbose >= 14)
{ {
@ -16956,7 +16958,8 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
msg_puts((char_u *)")"); msg_puts((char_u *)")");
} }
msg_puts((char_u *)"\n"); /* don't overwrite this either */ msg_puts((char_u *)"\n"); /* don't overwrite this either */
cmdline_row = msg_row;
verbose_leave_scroll();
--no_wait_return; --no_wait_return;
} }
} }
@ -17015,7 +17018,7 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
if (p_verbose >= 12) if (p_verbose >= 12)
{ {
++no_wait_return; ++no_wait_return;
msg_scroll = TRUE; /* always scroll up, don't overwrite */ verbose_enter_scroll();
if (aborting()) if (aborting())
smsg((char_u *)_("%s aborted"), sourcing_name); smsg((char_u *)_("%s aborted"), sourcing_name);
@ -17037,7 +17040,8 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
vim_free(tofree); vim_free(tofree);
} }
msg_puts((char_u *)"\n"); /* don't overwrite this either */ msg_puts((char_u *)"\n"); /* don't overwrite this either */
cmdline_row = msg_row;
verbose_leave_scroll();
--no_wait_return; --no_wait_return;
} }
@ -17053,10 +17057,12 @@ call_user_func(fp, argcount, argvars, rettv, firstline, lastline, selfdict)
if (p_verbose >= 12 && sourcing_name != NULL) if (p_verbose >= 12 && sourcing_name != NULL)
{ {
++no_wait_return; ++no_wait_return;
msg_scroll = TRUE; /* always scroll up, don't overwrite */ verbose_enter_scroll();
smsg((char_u *)_("continuing in %s"), sourcing_name); smsg((char_u *)_("continuing in %s"), sourcing_name);
msg_puts((char_u *)"\n"); /* don't overwrite this either */ msg_puts((char_u *)"\n"); /* don't overwrite this either */
cmdline_row = msg_row;
verbose_leave_scroll();
--no_wait_return; --no_wait_return;
} }

View File

@ -266,6 +266,14 @@ linelen(has_tab)
static char_u *sortbuf; static char_u *sortbuf;
static int sort_ic; /* ignore case */ static int sort_ic; /* ignore case */
static int sort_nr; /* sort on number */
/* Struct to store info to be sorted. */
typedef struct
{
linenr_T lnum; /* line number */
long col_nr; /* column number or number */
} sorti_T;
static int static int
#ifdef __BORLANDC__ #ifdef __BORLANDC__
@ -281,14 +289,19 @@ sort_compare(s1, s2)
const void *s1; const void *s1;
const void *s2; const void *s2;
{ {
lpos_T l1 = *(lpos_T *)s1; sorti_T l1 = *(sorti_T *)s1;
lpos_T l2 = *(lpos_T *)s2; sorti_T l2 = *(sorti_T *)s2;
char_u *s; char_u *s;
/* When sorting numbers "col_nr" is the number, not the column number. */
if (sort_nr)
return l1.col_nr - l2.col_nr;
/* We need to copy one line into "sortbuf", because there is no guarantee /* We need to copy one line into "sortbuf", because there is no guarantee
* that the first pointer becomes invalid when obtaining the second one. */ * that the first pointer becomes invalid when obtaining the second one. */
STRCPY(sortbuf, ml_get(l1.lnum) + l1.col); STRCPY(sortbuf, ml_get(l1.lnum) + l1.col_nr);
s = ml_get(l2.lnum) + l2.col; s = ml_get(l2.lnum) + l2.col_nr;
return sort_ic ? STRICMP(sortbuf, s) : STRCMP(sortbuf, s); return sort_ic ? STRICMP(sortbuf, s) : STRCMP(sortbuf, s);
} }
@ -303,28 +316,39 @@ ex_sort(eap)
int len; int len;
linenr_T lnum; linenr_T lnum;
long maxlen = 0; long maxlen = 0;
lpos_T *nrs; sorti_T *nrs;
size_t count = eap->line2 - eap->line1 + 1; size_t count = eap->line2 - eap->line1 + 1;
int i; size_t i;
char_u *p; char_u *p;
char_u *s; char_u *s;
int unique = FALSE; int unique = FALSE;
long deleted; long deleted;
colnr_T col;
int sort_oct; /* sort on octal number */
int sort_hex; /* sort on hex number */
if (u_save((linenr_T)(eap->line1 - 1), (linenr_T)(eap->line2 + 1)) == FAIL) if (u_save((linenr_T)(eap->line1 - 1), (linenr_T)(eap->line2 + 1)) == FAIL)
return; return;
sortbuf = NULL; sortbuf = NULL;
regmatch.regprog = NULL; regmatch.regprog = NULL;
nrs = (lpos_T *)lalloc((long_u)(count * sizeof(lpos_T)), TRUE); nrs = (sorti_T *)lalloc((long_u)(count * sizeof(sorti_T)), TRUE);
if (nrs == NULL) if (nrs == NULL)
goto theend; goto theend;
sort_ic = sort_nr = sort_oct = sort_hex = 0;
for (p = eap->arg; *p != NUL; ++p) for (p = eap->arg; *p != NUL; ++p)
{ {
if (vim_iswhite(*p)) if (vim_iswhite(*p))
; ;
else if (*p == 'i') else if (*p == 'i')
sort_ic = TRUE; sort_ic = TRUE;
else if (*p == 'n')
sort_nr = 2;
else if (*p == 'o')
sort_oct = 2;
else if (*p == 'x')
sort_hex = 2;
else if (*p == 'u') else if (*p == 'u')
unique = TRUE; unique = TRUE;
else if (*p == '"') /* comment start */ else if (*p == '"') /* comment start */
@ -356,31 +380,60 @@ ex_sort(eap)
} }
} }
/* Can only have one of 'n', 'o' and 'x'. */
if (sort_nr + sort_oct + sort_hex > 2)
{
EMSG(_(e_invarg));
goto theend;
}
/* From here on "sort_nr" is used as a flag for any number sorting. */
sort_nr += sort_oct + sort_hex;
/* /*
* Make an array with all line numbers, so that we don't have to copy all * Make an array with all line numbers. This avoids having to copy all
* the lines into allocated memory. * the lines into allocated memory.
* Also get the longest line length. * When sorting on strings "col_nr" is de offset in the line, for numbers
* sorting it's the number to sort on. This means the pattern matching
* and number conversion only has to be done once per line.
* Also get the longest line length for allocating "sortbuf".
*/ */
for (lnum = eap->line1; lnum <= eap->line2; ++lnum) for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
{ {
nrs[lnum - eap->line1].lnum = lnum;
nrs[lnum - eap->line1].col = 0;
s = ml_get(lnum); s = ml_get(lnum);
if (regmatch.regprog != NULL && vim_regexec(&regmatch, s, 0))
nrs[lnum - eap->line1].col = regmatch.endp[0] - s;
len = STRLEN(s); len = STRLEN(s);
if (maxlen < len) if (maxlen < len)
maxlen = len; maxlen = len;
if (regmatch.regprog != NULL && vim_regexec(&regmatch, s, 0))
col = regmatch.endp[0] - s;
else
col = 0;
if (sort_nr)
{
/* Sorting on number: Store the number itself. */
if (sort_hex)
s = skiptohex(s + col);
else
s = skiptodigit(s + col);
vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
&nrs[lnum - eap->line1].col_nr, NULL);
}
else
/* Store the column to sort at. */
nrs[lnum - eap->line1].col_nr = col;
nrs[lnum - eap->line1].lnum = lnum;
} }
/* Allocate a buffer that can hold the longest line. */
sortbuf = alloc((unsigned)maxlen + 1); sortbuf = alloc((unsigned)maxlen + 1);
if (sortbuf == NULL) if (sortbuf == NULL)
goto theend; goto theend;
/* sort the array of line numbers */ /* sort the array of line numbers */
qsort((void *)nrs, count, sizeof(lpos_T), sort_compare); qsort((void *)nrs, count, sizeof(sorti_T), sort_compare);
/* Insert the lines in the sorted order below the last one. */ /* Insert the lines in the sorted order below the last one. */
lnum = eap->line2; lnum = eap->line2;
@ -392,7 +445,8 @@ ex_sort(eap)
{ {
if (ml_append(lnum++, s, (colnr_T)0, FALSE) == FAIL) if (ml_append(lnum++, s, (colnr_T)0, FALSE) == FAIL)
break; break;
STRCPY(sortbuf, s); if (unique)
STRCPY(sortbuf, s);
} }
} }
@ -403,12 +457,14 @@ ex_sort(eap)
else else
count = 0; count = 0;
/* Adjust marks for deleted (or added) lines and prepare for displaying. */
deleted = count - (lnum - eap->line2); deleted = count - (lnum - eap->line2);
if (deleted > 0) if (deleted > 0)
mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted); mark_adjust(eap->line2 - deleted, eap->line2, (long)MAXLNUM, -deleted);
else if (deleted < 0) else if (deleted < 0)
mark_adjust(eap->line2, MAXLNUM, -deleted, 0L); mark_adjust(eap->line2, MAXLNUM, -deleted, 0L);
changed_lines(eap->line1, 0, eap->line2 + 1, -deleted); changed_lines(eap->line1, 0, eap->line2 + 1, -deleted);
curwin->w_cursor.lnum = eap->line1; curwin->w_cursor.lnum = eap->line1;
beginline(BL_WHITE | BL_FIX); beginline(BL_WHITE | BL_FIX);
@ -1532,11 +1588,15 @@ read_viminfo(file, want_info, want_marks, forceit)
fp = mch_fopen((char *)fname, READBIN); fp = mch_fopen((char *)fname, READBIN);
if (p_verbose > 0) if (p_verbose > 0)
{
verbose_enter();
smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"), smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
fname, fname,
want_info ? _(" info") : "", want_info ? _(" info") : "",
want_marks ? _(" marks") : "", want_marks ? _(" marks") : "",
fp == NULL ? _(" FAILED") : ""); fp == NULL ? _(" FAILED") : "");
verbose_leave();
}
vim_free(fname); vim_free(fname);
if (fp == NULL) if (fp == NULL)
@ -1760,7 +1820,11 @@ write_viminfo(file, forceit)
} }
if (p_verbose > 0) if (p_verbose > 0)
{
verbose_enter();
smsg((char_u *)_("Writing viminfo file \"%s\""), fname); smsg((char_u *)_("Writing viminfo file \"%s\""), fname);
verbose_leave();
}
viminfo_errcnt = 0; viminfo_errcnt = 0;
do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE); do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE);

View File

@ -2467,8 +2467,12 @@ do_in_runtimepath(name, all, callback, cookie)
if (buf != NULL && rtp_copy != NULL) if (buf != NULL && rtp_copy != NULL)
{ {
if (p_verbose > 1) if (p_verbose > 1)
{
verbose_enter();
smsg((char_u *)_("Searching for \"%s\" in \"%s\""), smsg((char_u *)_("Searching for \"%s\" in \"%s\""),
(char *)name, (char *)p_rtp); (char *)name, (char *)p_rtp);
verbose_leave();
}
/* Loop over all entries in 'runtimepath'. */ /* Loop over all entries in 'runtimepath'. */
rtp = rtp_copy; rtp = rtp_copy;
@ -2490,7 +2494,11 @@ do_in_runtimepath(name, all, callback, cookie)
"\t "); "\t ");
if (p_verbose > 2) if (p_verbose > 2)
{
verbose_enter();
smsg((char_u *)_("Searching for \"%s\""), buf); smsg((char_u *)_("Searching for \"%s\""), buf);
verbose_leave();
}
/* Expand wildcards, invoke the callback for each match. */ /* Expand wildcards, invoke the callback for each match. */
if (gen_expand_wildcards(1, &buf, &num_files, &files, if (gen_expand_wildcards(1, &buf, &num_files, &files,
@ -2512,7 +2520,11 @@ do_in_runtimepath(name, all, callback, cookie)
vim_free(buf); vim_free(buf);
vim_free(rtp_copy); vim_free(rtp_copy);
if (p_verbose > 0 && !did_one) if (p_verbose > 0 && !did_one)
{
verbose_enter();
smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name); smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name);
verbose_leave();
}
#ifdef AMIGA #ifdef AMIGA
proc->pr_WindowPtr = save_winptr; proc->pr_WindowPtr = save_winptr;
@ -2759,11 +2771,13 @@ do_source(fname, check_other, is_vimrc)
{ {
if (p_verbose > 0) if (p_verbose > 0)
{ {
verbose_enter();
if (sourcing_name == NULL) if (sourcing_name == NULL)
smsg((char_u *)_("could not source \"%s\""), fname); smsg((char_u *)_("could not source \"%s\""), fname);
else else
smsg((char_u *)_("line %ld: could not source \"%s\""), smsg((char_u *)_("line %ld: could not source \"%s\""),
sourcing_lnum, fname); sourcing_lnum, fname);
verbose_leave();
} }
goto theend; goto theend;
} }
@ -2775,11 +2789,13 @@ do_source(fname, check_other, is_vimrc)
*/ */
if (p_verbose > 1) if (p_verbose > 1)
{ {
verbose_enter();
if (sourcing_name == NULL) if (sourcing_name == NULL)
smsg((char_u *)_("sourcing \"%s\""), fname); smsg((char_u *)_("sourcing \"%s\""), fname);
else else
smsg((char_u *)_("line %ld: sourcing \"%s\""), smsg((char_u *)_("line %ld: sourcing \"%s\""),
sourcing_lnum, fname); sourcing_lnum, fname);
verbose_leave();
} }
if (is_vimrc) if (is_vimrc)
vimrc_found(); vimrc_found();
@ -2961,9 +2977,11 @@ do_source(fname, check_other, is_vimrc)
sourcing_lnum = save_sourcing_lnum; sourcing_lnum = save_sourcing_lnum;
if (p_verbose > 1) if (p_verbose > 1)
{ {
verbose_enter();
smsg((char_u *)_("finished sourcing %s"), fname); smsg((char_u *)_("finished sourcing %s"), fname);
if (sourcing_name != NULL) if (sourcing_name != NULL)
smsg((char_u *)_("continuing in %s"), sourcing_name); smsg((char_u *)_("continuing in %s"), sourcing_name);
verbose_leave();
} }
#ifdef STARTUPTIME #ifdef STARTUPTIME
vim_snprintf(IObuff, IOSIZE, "sourcing %s", fname); vim_snprintf(IObuff, IOSIZE, "sourcing %s", fname);

View File

@ -6132,7 +6132,11 @@ clip_mch_request_selection(VimClipboard *cbd)
/* Got something */ /* Got something */
clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
if (p_verbose > 0) if (p_verbose > 0)
{
verbose_enter();
smsg((char_u *)_("Used CUT_BUFFER0 instead of empty selection")); smsg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
verbose_leave();
}
} }
if (buffer != NULL) if (buffer != NULL)
XFree(buffer); XFree(buffer);

View File

@ -813,6 +813,12 @@ main
case 'V': /* "-V{N}" Verbose level */ case 'V': /* "-V{N}" Verbose level */
/* default is 10: a little bit verbose */ /* default is 10: a little bit verbose */
p_verbose = get_number_arg((char_u *)argv[0], &argv_idx, 10); p_verbose = get_number_arg((char_u *)argv[0], &argv_idx, 10);
if (argv[0][argv_idx] != NUL)
{
set_option_value((char_u *)"verbosefile", 0L,
(char_u *)argv[0] + argv_idx, 0);
argv_idx = STRLEN(argv[0]);
}
break; break;
case 'v': /* "-v" Vi-mode (as if called "vi") */ case 'v': /* "-v" Vi-mode (as if called "vi") */

View File

@ -2259,6 +2259,9 @@ static struct vimoption
{"verbose", "vbs", P_NUM|P_VI_DEF, {"verbose", "vbs", P_NUM|P_VI_DEF,
(char_u *)&p_verbose, PV_NONE, (char_u *)&p_verbose, PV_NONE,
{(char_u *)0L, (char_u *)0L}}, {(char_u *)0L, (char_u *)0L}},
{"verbosefile", "vfile", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
(char_u *)&p_vfile, PV_NONE,
{(char_u *)"", (char_u *)0L}},
{"viewdir", "vdir", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE, {"viewdir", "vdir", P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
#ifdef FEAT_SESSION #ifdef FEAT_SESSION
(char_u *)&p_vdir, PV_NONE, (char_u *)&p_vdir, PV_NONE,
@ -3731,8 +3734,10 @@ do_set(arg, opt_flags)
{ {
if (options[opt_idx].scriptID != 0) if (options[opt_idx].scriptID != 0)
{ {
verbose_enter();
MSG_PUTS(_("\n\tLast set from ")); MSG_PUTS(_("\n\tLast set from "));
MSG_PUTS(get_scriptname(options[opt_idx].scriptID)); MSG_PUTS(get_scriptname(options[opt_idx].scriptID));
verbose_leave();
} }
} }
#endif #endif
@ -5316,6 +5321,14 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
} }
#endif #endif
/* 'verbosefile' */
else if (varp == &p_vfile)
{
verbose_stop();
if (*p_vfile != NUL && verbose_open() == FAIL)
errmsg = e_invarg;
}
#ifdef FEAT_VIMINFO #ifdef FEAT_VIMINFO
/* 'viminfo' */ /* 'viminfo' */
else if (varp == &p_viminfo) else if (varp == &p_viminfo)

View File

@ -804,6 +804,7 @@ static char *(p_ve_values[]) = {"block", "insert", "all", NULL};
# define VE_ALL 4 # define VE_ALL 4
#endif #endif
EXTERN long p_verbose; /* 'verbose' */ EXTERN long p_verbose; /* 'verbose' */
EXTERN char_u *p_vfile; /* 'verbosefile' */
EXTERN int p_warn; /* 'warn' */ EXTERN int p_warn; /* 'warn' */
#ifdef FEAT_CMDL_COMPL #ifdef FEAT_CMDL_COMPL
EXTERN char_u *p_wop; /* 'wildoptions' */ EXTERN char_u *p_wop; /* 'wildoptions' */

View File

@ -54,7 +54,7 @@ void ex_listdo __ARGS((exarg_T *eap));
void ex_compiler __ARGS((exarg_T *eap)); void ex_compiler __ARGS((exarg_T *eap));
void ex_runtime __ARGS((exarg_T *eap)); void ex_runtime __ARGS((exarg_T *eap));
int cmd_runtime __ARGS((char_u *name, int all)); int cmd_runtime __ARGS((char_u *name, int all));
int do_in_runtimepath __ARGS((char_u *name, int all, void (*callback)(char_u *fname, void *cookie), void *cookie)); int do_in_runtimepath __ARGS((char_u *name, int all, void (*callback)(char_u *fname, void *ck), void *cookie));
void ex_options __ARGS((exarg_T *eap)); void ex_options __ARGS((exarg_T *eap));
void ex_source __ARGS((exarg_T *eap)); void ex_source __ARGS((exarg_T *eap));
linenr_T *source_breakpoint __ARGS((void *cookie)); linenr_T *source_breakpoint __ARGS((void *cookie));

View File

@ -1,5 +1,4 @@
/* hashtable.c */ /* hashtable.c */
hashtab_T *hash_create __ARGS((void));
void hash_init __ARGS((hashtab_T *ht)); void hash_init __ARGS((hashtab_T *ht));
void hash_clear __ARGS((hashtab_T *ht)); void hash_clear __ARGS((hashtab_T *ht));
hashitem_T *hash_find __ARGS((hashtab_T *ht, char_u *key)); hashitem_T *hash_find __ARGS((hashtab_T *ht, char_u *key));

View File

@ -3127,8 +3127,8 @@ syntax_clear(buf)
{ {
int i; int i;
curbuf->b_syn_ic = FALSE; /* Use case, by default */ buf->b_syn_ic = FALSE; /* Use case, by default */
curbuf->b_syn_containedin = FALSE; buf->b_syn_containedin = FALSE;
/* free the keywords */ /* free the keywords */
clear_keywtab(&buf->b_keywtab); clear_keywtab(&buf->b_keywtab);

View File

@ -14,7 +14,7 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
test38.out test39.out test40.out test41.out test42.out \ test38.out test39.out test40.out test41.out test42.out \
test43.out test44.out test45.out test46.out test47.out \ test43.out test44.out test45.out test46.out test47.out \
test48.out test49.out test51.out test52.out test53.out \ test48.out test49.out test51.out test52.out test53.out \
test54.out test55.out test56.out test54.out test55.out test56.out test57.out
SCRIPTS_GUI = test16.out SCRIPTS_GUI = test16.out

View File

@ -274,6 +274,8 @@ STARTTEST
:$put =string(split(':aa::bb:', ':', 0)) :$put =string(split(':aa::bb:', ':', 0))
:$put =string(split(':aa::bb:', ':', 1)) :$put =string(split(':aa::bb:', ':', 1))
:$put =string(split('aa,,bb, cc,', ',\s*', 1)) :$put =string(split('aa,,bb, cc,', ',\s*', 1))
:$put =string(split('abc', '\zs'))
:$put =string(split('abc', '\zs', 1))
:" :"
:endfun :endfun
:call Test(1, 2, [3, 4], {5: 6}) " This may take a while :call Test(1, 2, [3, 4], {5: 6}) " This may take a while

View File

@ -1696,7 +1696,13 @@ fill_input_buf(exit_on_error)
#endif #endif
#ifdef FEAT_GUI #ifdef FEAT_GUI
if (gui.in_use) if (gui.in_use
# ifdef NO_CONSOLE_INPUT
/* Don't use the GUI input when the window hasn't been opened yet.
* We get here from ui_inchar() when we should try reading from stdin. */
&& !no_console_input()
# endif
)
{ {
gui_mch_update(); gui_mch_update();
return; return;
@ -2140,7 +2146,7 @@ clip_x11_request_selection(myShell, dpy, cbd)
clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd); clip_yank_selection(MCHAR, buffer, (long)nbytes, cbd);
XFree((void *)buffer); XFree((void *)buffer);
if (p_verbose > 0) if (p_verbose > 0)
MSG(_("Used CUT_BUFFER0 instead of empty selection")); verb_msg((char_u *)_("Used CUT_BUFFER0 instead of empty selection"));
} }
} }