mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
updated for version 7.0128
This commit is contained in:
parent
0fa313a718
commit
8b59de9f2f
@ -1,4 +1,4 @@
|
|||||||
*index.txt* For Vim version 7.0aa. Last change: 2005 Jul 29
|
*index.txt* For Vim version 7.0aa. Last change: 2005 Aug 11
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -152,11 +152,13 @@ commands in CTRL-X submode *i_CTRL-X_index*
|
|||||||
|i_CTRL-X_CTRL-N| CTRL-X CTRL-N next completion
|
|i_CTRL-X_CTRL-N| CTRL-X CTRL-N next completion
|
||||||
|i_CTRL-X_CTRL-O| CTRL-X CTRL-O occult completion
|
|i_CTRL-X_CTRL-O| CTRL-X CTRL-O occult completion
|
||||||
|i_CTRL-X_CTRL-P| CTRL-X CTRL-P previous completion
|
|i_CTRL-X_CTRL-P| CTRL-X CTRL-P previous completion
|
||||||
|
|i_CTRL-X_CTRL-S| CTRL-X CTRL-S spelling suggestions
|
||||||
|i_CTRL-X_CTRL-T| CTRL-X CTRL-T complete identifiers from thesaurus
|
|i_CTRL-X_CTRL-T| CTRL-X CTRL-T complete identifiers from thesaurus
|
||||||
|i_CTRL-X_CTRL-Y| CTRL-X CTRL-Y scroll down
|
|i_CTRL-X_CTRL-Y| CTRL-X CTRL-Y scroll down
|
||||||
|i_CTRL-X_CTRL-U| CTRL-X CTRL-U complete with 'completefunc'
|
|i_CTRL-X_CTRL-U| CTRL-X CTRL-U complete with 'completefunc'
|
||||||
|i_CTRL-X_CTRL-V| CTRL-X CTRL-V complete like in : command line
|
|i_CTRL-X_CTRL-V| CTRL-X CTRL-V complete like in : command line
|
||||||
|i_CTRL-X_CTRL-]| CTRL-X CTRL-] complete tags
|
|i_CTRL-X_CTRL-]| CTRL-X CTRL-] complete tags
|
||||||
|
|i_CTRL-X_s| CTRL-X s spelling suggestions
|
||||||
{not available when compiled without the +insert_expand feature}
|
{not available when compiled without the +insert_expand feature}
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
@ -1,8 +1,16 @@
|
|||||||
" NetrwFileHandlers: contains various extension-based file handlers for
|
" NetrwFileHandlers: contains various extension-based file handlers for
|
||||||
" netrw's browsers' x command ("eXecute launcher")
|
" netrw's browsers' x command ("eXecute launcher")
|
||||||
" Author: Charles E. Campbell, Jr.
|
" Author: Charles E. Campbell, Jr.
|
||||||
" Date: Apr 07, 2005
|
" Date: Aug 08, 2005
|
||||||
" Version: 4a NOT RELEASED
|
" Version: 5a NOT RELEASED
|
||||||
|
" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr.
|
||||||
|
" Permission is hereby granted to use and distribute this code,
|
||||||
|
" with or without modifications, provided that this copyright
|
||||||
|
" notice is copied with it. Like anything else that's free,
|
||||||
|
" netrw.vim is provided *as is* and comes with no
|
||||||
|
" warranty of any kind, either expressed or implied. In no
|
||||||
|
" event will the copyright holder be liable for any damages
|
||||||
|
" resulting from the use of this software.
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" Load Once: {{{1
|
" Load Once: {{{1
|
||||||
@ -11,7 +19,7 @@ if exists("g:loaded_netrwfilehandlers") || &cp
|
|||||||
endif
|
endif
|
||||||
let s:keepcpo= &cpo
|
let s:keepcpo= &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
let g:loaded_netrwfilehandlers= "v4a"
|
let g:loaded_netrwfilehandlers= "v5a"
|
||||||
|
|
||||||
" ---------------------------------------------------------------------
|
" ---------------------------------------------------------------------
|
||||||
" NetrwFileHandler_html: handles html when the user hits "x" when the {{{1
|
" NetrwFileHandler_html: handles html when the user hits "x" when the {{{1
|
||||||
|
220
src/spell.c
220
src/spell.c
@ -478,6 +478,7 @@ typedef struct suggest_S
|
|||||||
#define SCORE_DELDUP 64 /* delete a duplicated character */
|
#define SCORE_DELDUP 64 /* delete a duplicated character */
|
||||||
#define SCORE_INS 96 /* insert a character */
|
#define SCORE_INS 96 /* insert a character */
|
||||||
#define SCORE_INSDUP 66 /* insert a duplicate character */
|
#define SCORE_INSDUP 66 /* insert a duplicate character */
|
||||||
|
#define SCORE_INSCOMP 30 /* insert a composing character */
|
||||||
#define SCORE_NONWORD 103 /* change non-word to word char */
|
#define SCORE_NONWORD 103 /* change non-word to word char */
|
||||||
|
|
||||||
#define SCORE_FILE 30 /* suggestion from a file */
|
#define SCORE_FILE 30 /* suggestion from a file */
|
||||||
@ -646,6 +647,7 @@ static int set_spell_charflags __ARGS((char_u *flags, int cnt, char_u *upp));
|
|||||||
static int set_spell_chartab __ARGS((char_u *fol, char_u *low, char_u *upp));
|
static int set_spell_chartab __ARGS((char_u *fol, char_u *low, char_u *upp));
|
||||||
static void write_spell_chartab __ARGS((FILE *fd));
|
static void write_spell_chartab __ARGS((FILE *fd));
|
||||||
static int spell_casefold __ARGS((char_u *p, int len, char_u *buf, int buflen));
|
static int spell_casefold __ARGS((char_u *p, int len, char_u *buf, int buflen));
|
||||||
|
static int check_need_cap __ARGS((linenr_T lnum, colnr_T col));
|
||||||
static void spell_find_suggest __ARGS((char_u *badptr, suginfo_T *su, int maxcount, int banbadword, int need_cap));
|
static void spell_find_suggest __ARGS((char_u *badptr, suginfo_T *su, int maxcount, int banbadword, int need_cap));
|
||||||
#ifdef FEAT_EVAL
|
#ifdef FEAT_EVAL
|
||||||
static void spell_suggest_expr __ARGS((suginfo_T *su, char_u *expr));
|
static void spell_suggest_expr __ARGS((suginfo_T *su, char_u *expr));
|
||||||
@ -2959,6 +2961,7 @@ badword_captype(word, end)
|
|||||||
char_u *end;
|
char_u *end;
|
||||||
{
|
{
|
||||||
int flags = captype(word, end);
|
int flags = captype(word, end);
|
||||||
|
int c;
|
||||||
int l, u;
|
int l, u;
|
||||||
int first;
|
int first;
|
||||||
char_u *p;
|
char_u *p;
|
||||||
@ -2970,7 +2973,8 @@ badword_captype(word, end)
|
|||||||
first = FALSE;
|
first = FALSE;
|
||||||
for (p = word; p < end; mb_ptr_adv(p))
|
for (p = word; p < end; mb_ptr_adv(p))
|
||||||
{
|
{
|
||||||
if (SPELL_ISUPPER(PTR2CHAR(p)))
|
c = PTR2CHAR(p);
|
||||||
|
if (SPELL_ISUPPER(c))
|
||||||
{
|
{
|
||||||
++u;
|
++u;
|
||||||
if (p == word)
|
if (p == word)
|
||||||
@ -6568,9 +6572,6 @@ spell_suggest()
|
|||||||
suggest_T *stp;
|
suggest_T *stp;
|
||||||
int mouse_used;
|
int mouse_used;
|
||||||
int need_cap;
|
int need_cap;
|
||||||
regmatch_T regmatch;
|
|
||||||
int endcol;
|
|
||||||
char_u *line_copy = NULL;
|
|
||||||
|
|
||||||
/* Find the start of the badly spelled word. */
|
/* Find the start of the badly spelled word. */
|
||||||
if (spell_move_to(FORWARD, TRUE, TRUE) == FAIL
|
if (spell_move_to(FORWARD, TRUE, TRUE) == FAIL
|
||||||
@ -6600,60 +6601,11 @@ spell_suggest()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Get the word and its length. */
|
/* Get the word and its length. */
|
||||||
line = ml_get_curline();
|
|
||||||
|
|
||||||
/* Figure out if the word should be capitalised. */
|
/* Figure out if the word should be capitalised. */
|
||||||
need_cap = FALSE;
|
need_cap = check_need_cap(curwin->w_cursor.lnum, curwin->w_cursor.col);
|
||||||
if (curbuf->b_cap_prog != NULL)
|
|
||||||
{
|
|
||||||
endcol = 0;
|
|
||||||
if ((int)(skipwhite(line) - line) == (int)curwin->w_cursor.col)
|
|
||||||
{
|
|
||||||
/* At start of line, check if previous line is empty or sentence
|
|
||||||
* ends there. */
|
|
||||||
if (curwin->w_cursor.lnum == 1)
|
|
||||||
need_cap = TRUE;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
line = ml_get(curwin->w_cursor.lnum - 1);
|
|
||||||
if (*skipwhite(line) == NUL)
|
|
||||||
need_cap = TRUE;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Append a space in place of the line break. */
|
|
||||||
line_copy = concat_str(line, (char_u *)" ");
|
|
||||||
line = line_copy;
|
|
||||||
endcol = STRLEN(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
endcol = curwin->w_cursor.col;
|
|
||||||
|
|
||||||
if (endcol > 0)
|
|
||||||
{
|
|
||||||
/* Check if sentence ends before the bad word. */
|
|
||||||
regmatch.regprog = curbuf->b_cap_prog;
|
|
||||||
regmatch.rm_ic = FALSE;
|
|
||||||
p = line + endcol;
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
mb_ptr_back(line, p);
|
|
||||||
if (p == line || spell_iswordp_nmw(p))
|
|
||||||
break;
|
|
||||||
if (vim_regexec(®match, p, 0)
|
|
||||||
&& regmatch.endp[0] == line + endcol)
|
|
||||||
{
|
|
||||||
need_cap = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* get the line again, we may have been using the previous one */
|
|
||||||
line = ml_get_curline();
|
line = ml_get_curline();
|
||||||
vim_free(line_copy);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the list of suggestions */
|
/* Get the list of suggestions */
|
||||||
spell_find_suggest(line + curwin->w_cursor.col, &sug, (int)Rows - 2,
|
spell_find_suggest(line + curwin->w_cursor.col, &sug, (int)Rows - 2,
|
||||||
@ -6786,6 +6738,76 @@ spell_suggest()
|
|||||||
spell_find_cleanup(&sug);
|
spell_find_cleanup(&sug);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the word at line "lnum" column "col" is required to start with a
|
||||||
|
* capital. This uses 'spellcapcheck' of the current buffer.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
check_need_cap(lnum, col)
|
||||||
|
linenr_T lnum;
|
||||||
|
colnr_T col;
|
||||||
|
{
|
||||||
|
int need_cap = FALSE;
|
||||||
|
char_u *line;
|
||||||
|
char_u *line_copy = NULL;
|
||||||
|
char_u *p;
|
||||||
|
colnr_T endcol;
|
||||||
|
regmatch_T regmatch;
|
||||||
|
|
||||||
|
if (curbuf->b_cap_prog == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
line = ml_get_curline();
|
||||||
|
endcol = 0;
|
||||||
|
if ((int)(skipwhite(line) - line) >= (int)col)
|
||||||
|
{
|
||||||
|
/* At start of line, check if previous line is empty or sentence
|
||||||
|
* ends there. */
|
||||||
|
if (lnum == 1)
|
||||||
|
need_cap = TRUE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
line = ml_get(lnum - 1);
|
||||||
|
if (*skipwhite(line) == NUL)
|
||||||
|
need_cap = TRUE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Append a space in place of the line break. */
|
||||||
|
line_copy = concat_str(line, (char_u *)" ");
|
||||||
|
line = line_copy;
|
||||||
|
endcol = STRLEN(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
endcol = col;
|
||||||
|
|
||||||
|
if (endcol > 0)
|
||||||
|
{
|
||||||
|
/* Check if sentence ends before the bad word. */
|
||||||
|
regmatch.regprog = curbuf->b_cap_prog;
|
||||||
|
regmatch.rm_ic = FALSE;
|
||||||
|
p = line + endcol;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
mb_ptr_back(line, p);
|
||||||
|
if (p == line || spell_iswordp_nmw(p))
|
||||||
|
break;
|
||||||
|
if (vim_regexec(®match, p, 0)
|
||||||
|
&& regmatch.endp[0] == line + endcol)
|
||||||
|
{
|
||||||
|
need_cap = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vim_free(line_copy);
|
||||||
|
|
||||||
|
return need_cap;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ":spellrepall"
|
* ":spellrepall"
|
||||||
*/
|
*/
|
||||||
@ -6854,17 +6876,18 @@ ex_spellrepall(eap)
|
|||||||
* a list of allocated strings.
|
* a list of allocated strings.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
spell_suggest_list(gap, word, maxcount)
|
spell_suggest_list(gap, word, maxcount, need_cap)
|
||||||
garray_T *gap;
|
garray_T *gap;
|
||||||
char_u *word;
|
char_u *word;
|
||||||
int maxcount; /* maximum nr of suggestions */
|
int maxcount; /* maximum nr of suggestions */
|
||||||
|
int need_cap; /* 'spellcapcheck' matched */
|
||||||
{
|
{
|
||||||
suginfo_T sug;
|
suginfo_T sug;
|
||||||
int i;
|
int i;
|
||||||
suggest_T *stp;
|
suggest_T *stp;
|
||||||
char_u *wcopy;
|
char_u *wcopy;
|
||||||
|
|
||||||
spell_find_suggest(word, &sug, maxcount, FALSE, FALSE);
|
spell_find_suggest(word, &sug, maxcount, FALSE, need_cap);
|
||||||
|
|
||||||
/* Make room in "gap". */
|
/* Make room in "gap". */
|
||||||
ga_init2(gap, sizeof(char_u *), sug.su_ga.ga_len + 1);
|
ga_init2(gap, sizeof(char_u *), sug.su_ga.ga_len + 1);
|
||||||
@ -7732,17 +7755,27 @@ suggest_try_change(su)
|
|||||||
else if (sp->ts_isdiff == DIFF_INSERT
|
else if (sp->ts_isdiff == DIFF_INSERT
|
||||||
&& sp->ts_twordlen > sp->ts_tcharlen)
|
&& sp->ts_twordlen > sp->ts_tcharlen)
|
||||||
{
|
{
|
||||||
/* If the previous character was the same,
|
|
||||||
* thus doubling a character, give a bonus
|
|
||||||
* to the score. */
|
|
||||||
p = tword + sp->ts_twordlen
|
p = tword + sp->ts_twordlen
|
||||||
- sp->ts_tcharlen;
|
- sp->ts_tcharlen;
|
||||||
c = mb_ptr2char(p);
|
c = mb_ptr2char(p);
|
||||||
|
if (enc_utf8 && utf_iscomposing(c))
|
||||||
|
{
|
||||||
|
/* Inserting a composing char doesn't
|
||||||
|
* count that much. */
|
||||||
|
sp->ts_score -= SCORE_INS
|
||||||
|
- SCORE_INSCOMP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* If the previous character was the
|
||||||
|
* same, thus doubling a character,
|
||||||
|
* give a bonus to the score. */
|
||||||
mb_ptr_back(tword, p);
|
mb_ptr_back(tword, p);
|
||||||
if (c == mb_ptr2char(p))
|
if (c == mb_ptr2char(p))
|
||||||
sp->ts_score -= SCORE_INS
|
sp->ts_score -= SCORE_INS
|
||||||
- SCORE_INSDUP;
|
- SCORE_INSDUP;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Starting a new char, reset the length. */
|
/* Starting a new char, reset the length. */
|
||||||
sp->ts_tcharlen = 0;
|
sp->ts_tcharlen = 0;
|
||||||
@ -10547,4 +10580,73 @@ apply_prefixes(slang, word, round, flags, startlnum)
|
|||||||
return lnum;
|
return lnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(FEAT_INS_EXPAND) || defined(PROTO)
|
||||||
|
static int spell_expand_need_cap;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Find start of the word in front of the cursor. We don't check if it is
|
||||||
|
* badly spelled, with completion we can only change the word in front of the
|
||||||
|
* cursor.
|
||||||
|
* Used for Insert mode completion CTRL-X ?.
|
||||||
|
* Returns the column number of the word.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
spell_word_start(startcol)
|
||||||
|
int startcol;
|
||||||
|
{
|
||||||
|
char_u *line;
|
||||||
|
char_u *p;
|
||||||
|
int col = 0;
|
||||||
|
|
||||||
|
if (no_spell_checking())
|
||||||
|
return startcol;
|
||||||
|
|
||||||
|
/* Find a word character before "startcol". */
|
||||||
|
line = ml_get_curline();
|
||||||
|
for (p = line + startcol; p > line; )
|
||||||
|
{
|
||||||
|
mb_ptr_back(line, p);
|
||||||
|
if (spell_iswordp_nmw(p))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Go back to start of the word. */
|
||||||
|
while (p > line)
|
||||||
|
{
|
||||||
|
col = p - line;
|
||||||
|
mb_ptr_back(line, p);
|
||||||
|
if (!spell_iswordp(p, curbuf))
|
||||||
|
break;
|
||||||
|
col = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Need to check for 'spellcapcheck' now, the word is removed before
|
||||||
|
* expand_spelling() is called. Therefore the ugly global variable. */
|
||||||
|
spell_expand_need_cap = check_need_cap(curwin->w_cursor.lnum, col);
|
||||||
|
|
||||||
|
return col;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get list of spelling suggestions.
|
||||||
|
* Used for Insert mode completion CTRL-X ?.
|
||||||
|
* Returns the number of matches. The matches are in "matchp[]", array of
|
||||||
|
* allocated strings.
|
||||||
|
*/
|
||||||
|
/*ARGSUSED*/
|
||||||
|
int
|
||||||
|
expand_spelling(lnum, col, pat, matchp)
|
||||||
|
linenr_T lnum;
|
||||||
|
int col;
|
||||||
|
char_u *pat;
|
||||||
|
char_u ***matchp;
|
||||||
|
{
|
||||||
|
garray_T ga;
|
||||||
|
|
||||||
|
spell_suggest_list(&ga, pat, 100, spell_expand_need_cap);
|
||||||
|
*matchp = ga.ga_data;
|
||||||
|
return ga.ga_len;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* FEAT_SYN_HL */
|
#endif /* FEAT_SYN_HL */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user