diff options
-rw-r--r-- | runtime/doc/eval.txt | 13 | ||||
-rw-r--r-- | runtime/doc/gui.txt | 15 | ||||
-rw-r--r-- | runtime/doc/insert.txt | 200 | ||||
-rw-r--r-- | runtime/doc/map.txt | 13 | ||||
-rw-r--r-- | runtime/doc/options.txt | 4 | ||||
-rw-r--r-- | runtime/doc/tags | 4 | ||||
-rw-r--r-- | runtime/macmap.vim | 118 | ||||
-rw-r--r-- | runtime/syntax/cs.vim | 17 | ||||
-rw-r--r-- | runtime/syntax/python.vim | 8 | ||||
-rw-r--r-- | runtime/syntax/vrml.vim | 8 | ||||
-rw-r--r-- | src/ex_docmd.c | 35 | ||||
-rw-r--r-- | src/getchar.c | 17 | ||||
-rw-r--r-- | src/gui.c | 10 | ||||
-rw-r--r-- | src/if_ole.cpp | 2 | ||||
-rw-r--r-- | src/option.c | 2 | ||||
-rw-r--r-- | src/proto/term.pro | 2 | ||||
-rw-r--r-- | src/quickfix.c | 70 | ||||
-rw-r--r-- | src/spell.c | 4 | ||||
-rw-r--r-- | src/term.c | 7 | ||||
-rw-r--r-- | src/version.h | 6 | ||||
-rw-r--r-- | src/window.c | 9 |
21 files changed, 332 insertions, 232 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 4ba9cae54..ff2d3812e 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 7.0g. Last change: 2006 May 01 +*eval.txt* For Vim version 7.0g. Last change: 2006 May 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -2345,9 +2345,14 @@ exists({expr}) The result is a Number, which is non-zero if {expr} is < There must be no space between the symbol (&/$/*/#) and the name. Trailing characters that can't be part of the name are often - ignored, but don't depend on it. - Note that the argument must be a string, not the name of the - variable itself! For example: > + ignored, but don't depend on it, it may change in the future! + Example: > + exists("*strftime()") +< This currently works, but it should really be: > + exists("*strftime") + +< Note that the argument must be a string, not the name of the + variable itself. For example: > exists(bufcount) < This doesn't check for existence of the "bufcount" variable, but gets the value of "bufcount", and checks if that exists. diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt index fe09d8038..56a1ff5c0 100644 --- a/runtime/doc/gui.txt +++ b/runtime/doc/gui.txt @@ -1,4 +1,4 @@ -*gui.txt* For Vim version 7.0g. Last change: 2006 Apr 02 +*gui.txt* For Vim version 7.0g. Last change: 2006 May 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -588,12 +588,21 @@ The ":set ic" will not be echoed when using this menu. Messages from the executed command are still given though. To shut them up too, add a ":silent" in the executed command: > :menu <silent> Search.Header :exe ":silent normal /Header\r"<CR> -< +"<silent>" may also appear just after "<special>" or "<script>". + + *:menu-<special>* *:menu-special* +Define a menu with <> notation for special keys, even though the "<" flag +may appear in 'cpoptions'. This is useful if the side effect of setting +'cpoptions' is not desired. Example: > + :menu <special> Search.Header /Header<CR> +"<special>" must appear as the very first argument to the ":menu" command or +just after "<silent>" or "<script>". + *:menu-<script>* *:menu-script* The "to" part of the menu will be inspected for mappings. If you don't want this, use the ":noremenu" command (or the similar one for a specific mode). If you do want to use script-local mappings, add "<script>" as the very first -argument to the ":menu" command or after "<silent>". +argument to the ":menu" command or just after "<silent>" or "<special>". *menu-priority* You can give a priority to a menu. Menus with a higher priority go more to diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt index 8257838d1..48d455023 100644 --- a/runtime/doc/insert.txt +++ b/runtime/doc/insert.txt @@ -1,4 +1,4 @@ -*insert.txt* For Vim version 7.0g. Last change: 2006 May 01 +*insert.txt* For Vim version 7.0g. Last change: 2006 May 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -919,6 +919,8 @@ Completion is done by a function that can be defined by the user with the See below for how the function is called and an example |complete-functions|. For remarks about specific filetypes see |compl-omni-filetypes|. +More completion scripts will appear, check www.vim.org. Currently there is a +first version for C++. *i_CTRL-X_CTRL-O* CTRL-X CTRL-O Guess what kind of item is in front of the cursor and @@ -1272,32 +1274,21 @@ run |:make| command to detect formatting problems. HTML flavor *html-flavor* -Default HTML completion depends on filetype. For HTML files it is HTML -4.01 Transitional (&ft=='html'), for XHTML it is XHTML 1.0 Strict -(&ft=='xhtml'). +The default HTML completion depends on the filetype. For HTML files it is +HTML 4.01 Transitional ('filetype' is "html"), for XHTML it is XHTML 1.0 +Strict ('filetype' is "xhtml"). -These are not the only HTML versions. To use another data file and still -have benefits of custom completion for class, style, etc. attributes set -b:html_omni_flavor variable. Example (in .vimrc or filetype plugin -file): > +When doing completion outside of any other tag you will have possibility to +choose DOCTYPE and the appropriate data file will be loaded and used for all +next completions. - let g:html_omni_flavor = 'xhtml10s' +More about format of data file in |xml-omni-datafile|. Some of the data files +may be found on the Vim website (|www|). -(Completion data file for HTML 4.01 Strict is also provided by Vim -distribution.) - -Data for HTML completion will be read from 'autoload/xml/html10s.vim' file -located somewhere in 'runtimepath'. - -Note: HTML completion files are also located in 'autoload/xml' -directory. - -More about format of data file in |xml-omni-datafile|. Some of data -files may in future be found on vim-online site (|www|). - -Note that b:html_omni_flavor may point to file with any XML data. This -makes possible to mix PHP (|ft-php-omni|) completion with whatever XML -dialect (assuming you have data file for it). +Note that b:html_omni_flavor may point to a file with any XML data. This +makes possible to mix PHP (|ft-php-omni|) completion with any XML dialect +(assuming you have data file for it). Without setting that variable XHTML 1.0 +Strict will be used. JAVASCRIPT *ft-javascript-omni* @@ -1486,86 +1477,100 @@ PHP code and SQL code at the same time. XML *ft-xml-omni* -Vim 7 provides mechanism to context aware completion of XML files. It depends -on special |xml-omni-datafile| and two commands: |:XMLns| and |:XMLent|. -Features are: +Vim 7 provides a mechanism for context aware completion of XML files. It +depends on a special |xml-omni-datafile| and two commands: |:XMLns| and +|:XMLent|. Features are: -- after "<" complete tag name depending on context (no div suggest - inside of an a tag) -- inside of tag complete proper attributes (no width attribute for an - a tag) -- when attribute has limited number of possible values help to complete +- after "<" complete the tag name, depending on context +- inside of a tag complete proper attributes +- when an attribute has a limited number of possible values help to complete them -- complete names of entities (defined in |xml-omni-datafile| and in current - file with "<!ENTITY" declarations +- complete names of entities (defined in |xml-omni-datafile| and in the + current file with "<!ENTITY" declarations) - when used after "</" CTRL-X CTRL-O will close the last opened tag Format of XML data file *xml-omni-datafile* -Vim distribution provides two data files as examples (xhtml10s.vim, xsl.vim) - -XML data files are stored in "autoload/xml" directory in 'runtimepath'. They -have meaningful name which will be used in commands. It should be unique name -which will not create conflicts in future. For example name xhtml10s.vim means -it is data file for XHTML 1.0 Strict. +XML data files are stored in the "autoload/xml" directory in 'runtimepath'. +Vim distribution provides examples of data files in the +"$VIMRUNTIME/autoload/xml" directory. They have a meaningful name which will +be used in commands. It should be a unique name which will not create +conflicts. For example, the name xhtml10s.vim means it is the data file for +XHTML 1.0 Strict. -File contains one variable with fixed name: g:xmldata_xhtml10s . It is -compound from two parts: +Each file contains a variable with a name like g:xmldata_xhtml10s . It is +a compound from two parts: -1. "g:xmldata_" general prefix -2. "xhtml10s" name of file and name of described XML dialect +1. "g:xmldata_" general prefix, constant for all data files +2. "xhtml10s" the name of the file and the name of the described XML + dialect; it will be used as an argument for the |:XMLns| + command Part two must be exactly the same as name of file. -Variable is data structure in form of |Dictionary|. Keys are tag names and -values are two element |List|. First element of List is also List with names -of possible children, second element is |Dictionary| with names of attributes -as keys and possible values of attributes as values. Example: > - - let g:xmldata_crippledhtml = { - \ "html": - \ [ ["body", "head"], {"id": [], "xmlns": ["http://www.w3.org/1999/xhtml"], - \ "lang": [], "xml:lang": [], "dir": ["ltr", "rtl"]}], - \ "script": - \ [ [], {"id": [], "charset": [], "type": ["text/javascript"], "src": [], - \ "defer": ["BOOL"], "xml:space": ["preserve"]}], - \ "meta": - \ [ [], {"id": [], "http-equiv": [], "name": [], "content": [], "scheme": - \ [], "lang": [], "xml:lang": [], "dir": ["ltr", "rtl"]}] - \ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"]}, +The variable is a |Dictionary|. Keys are tag names and each value is a two +element |List|. The first element of the List is also a List with the names +of possible children. The second element is a |Dictionary| with the names of +attributes as keys and the possible values of attributes as values. Example: > + + let g:xmldata_crippled = { + \ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"], + \ 'vimxmlroot': ['tag1'], + \ 'tag1': + \ [ ['childoftag1a', 'childoftag1b'], {'attroftag1a': [], + \ 'attroftag1b': ['valueofattr1', 'valueofattr2']}], + \ 'childoftag1a': + \ [ [], {'attrofchild': ['attrofchild']}], + \ 'childoftag1b': + \ [ ['childoftag1a'], {'attrofchild': []}], \ "vimxmltaginfo": { - \ 'meta': ['/>', '']}, - \ "vimxmlattrinfo": { - \ 'http-equiv': ['ContentType', '']} - -This example should be put in "autoload/xml/crippledhtml.vim" file. - -In example are visible four special elements: - -1. "vimxmlentities" - special key with List containing entities of this XML + \ 'tag1': ['Menu info', 'Long information visible in preview window']}, + \ 'vimxmlattrinfo': { + \ 'attrofchild': ['Menu info', 'Long information visible in preview window']}} + +This example would be put in the "autoload/xml/crippled.vim" file and could +help to write this file: > + + <tag1 attroftag1b="valueofattr1"> + <childoftag1a attrofchild> + & < + </childoftag1a> + <childoftag1b attrofchild="5"> + <childoftag1a> + > ' " + </childoftag1a> + </childoftag1b> + </tag1> + +In the example four special elements are visible: + +1. "vimxmlentities" - a special key with List containing entities of this XML dialect. -2. "BOOL" - value of attribute key showing if attribute should be inserted - bare ("defer" vs. 'defer="'). It can be the only element of List of - attribute values. -3. "vimxmltaginfo" - special key with dictionary containing as key tag names, - as value two element List for additional menu info and long description. -4. "vimxmlattrinfo" - special key with dictionary containing as key attribute - names, as value two element List for additional menu info and long +2. If the list containing possible values of attributes has one element and + this element is equal to the name of the attribute this attribute will be + treated as boolean and inserted as 'attrname' and not as 'attrname="' +3. "vimxmltaginfo" - a special key with a Dictionary containing tag + names as keys and two element List as values, for additional menu info and + the long description. +4. "vimxmlattrinfo" - special key with Dictionary containing attribute names + as keys and two element List as values, for additional menu info and long description. -Note: Tag names in data file MUST not contain namespace description. Check -xsl.vim for example. +Note: Tag names in the data file MUST not contain a namespace description. +Check xsl.vim for an example. +Note: All data and functions are publicly available as global +variables/functions and can be used for personal editing functions. DTD -> Vim *dtd2vim* -On |www| is script |dtd2vim| which parses DTD and creates XML data file +On |www| is the script |dtd2vim| which parses DTD and creates an XML data file for Vim XML omni completion. dtd2vim: http://www.vim.org/scripts/script.php?script_id=1462 -Check there and beginning of file for details of usage. -Script requires perl and: +Check the beginning of that file for usage details. +The script requires perl and: perlSGML: http://savannah.nongnu.org/projects/perlsgml @@ -1574,12 +1579,12 @@ Commands :XMLns {name} [{namespace}] *:XMLns* -Vim has to know which data file should be used and with which namespace. For -loading of data file and connecting data with prope namespace use |:XMLns| -command. First (obligatory) argument is name of data (xhtml10s, xsl). Second -argument is code of namespace (h, xsl). When used without second argument -dialect will be used as default - without namespace declaration. For example -to use XML completion in .xsl files: > +Vim has to know which data file should be used and with which namespace. For +loading of the data file and connecting data with the proper namespace use +|:XMLns| command. The first (obligatory) argument is the name of the data +(xhtml10s, xsl). The second argument is the code of namespace (h, xsl). When +used without a second argument the dialect will be used as default - without +namespace declaration. For example to use XML completion in .xsl files: > :XMLns xhtml10s :XMLns xsl xsl @@ -1587,32 +1592,31 @@ to use XML completion in .xsl files: > :XMLent {name} *:XMLent* -By default entities will be completed from data file of default -namespace. XMLent command should be used in case when there is no -default namespace: > +By default entities will be completed from the data file of the default +namespace. The XMLent command should be used in case when there is no default +namespace: > :XMLent xhtml10s Usage -While used in situation (after declarations from previous part, | is +While used in this situation (after declarations from previous part, | is cursor position): > <| -Will complete to appropriate XHTML tag, and in this situation: > +Will complete to an appropriate XHTML tag, and in this situation: > <xsl:| -Will complete to appropriate XSL tag. +Will complete to an appropriate XSL tag. -File xmlcomplete.vim provides through |autoload| mechanism -GetLastOpenTag function which can be used in XML files to get name of -last open tag with (b:unaryTagsStack has to be defined): > - - :echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack") +The script xmlcomplete.vim, provided through the |autoload| mechanism, +has the xmlcomplete#GetLastOpenTag() function which can be used in XML files +to get the name of the last open tag (b:unaryTagsStack has to be defined): > + :echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack") diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt index 23af8b564..34bee7443 100644 --- a/runtime/doc/map.txt +++ b/runtime/doc/map.txt @@ -1,4 +1,4 @@ -*map.txt* For Vim version 7.0g. Last change: 2006 Apr 30 +*map.txt* For Vim version 7.0g. Last change: 2006 May 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -157,8 +157,9 @@ type "a", then "bar" will get inserted. 1.2 SPECIAL ARGUMENTS *:map-arguments* -"<buffer>", "<silent>", "<script>", "<expr>" and "<unique>" can be used in any -order. They must appear right after the command, before any other arguments. +"<buffer>", "<silent>", "<special>", "<script>", "<expr>" and "<unique>" can +be used in any order. They must appear right after the command, before any +other arguments. *:map-local* *:map-<buffer>* *E224* *E225* If the first argument to one of these commands is "<buffer>" it will apply to @@ -185,6 +186,12 @@ Prompts will still be given, e.g., for inputdialog(). Using "<silent>" for an abbreviation is possible, but will cause redrawing of the command line to fail. + *:map-<special>* *:map-special* +Define a mapping with <> notation for special keys, even though the "<" flag +may appear in 'cpoptions'. This is useful if the side effect of setting +'cpoptions' is not desired. Example: > + :map <special> <F12> /Header<CR> +< *:map-<script>* *:map-script* If the first argument to one of these commands is "<script>" and it is used to define a new mapping or abbreviation, the mapping will only remap characters diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 271ae8784..37e440f20 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 7.0g. Last change: 2006 May 02 +*options.txt* For Vim version 7.0g. Last change: 2006 May 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -4792,6 +4792,8 @@ A jump table for the options with a short description can be found at |Q_op|. completion with CTRL-X CTRL-O. |i_CTRL-X_CTRL-O| See |complete-functions| for an explanation of how the function is invoked and what it should return. + This option is usually set by a filetype plugin. + |:filetype-plugin-on| *'operatorfunc'* *'opfunc'* diff --git a/runtime/doc/tags b/runtime/doc/tags index f3060936b..5b6025d28 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -2273,6 +2273,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME* :map-<expr> map.txt /*:map-<expr>* :map-<script> map.txt /*:map-<script>* :map-<silent> map.txt /*:map-<silent>* +:map-<special> map.txt /*:map-<special>* :map-<unique> map.txt /*:map-<unique>* :map-alt-keys map.txt /*:map-alt-keys* :map-arguments map.txt /*:map-arguments* @@ -2283,6 +2284,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME* :map-operator map.txt /*:map-operator* :map-script map.txt /*:map-script* :map-silent map.txt /*:map-silent* +:map-special map.txt /*:map-special* :map-special-chars map.txt /*:map-special-chars* :map-special-keys map.txt /*:map-special-keys* :map-undo map.txt /*:map-undo* @@ -2301,10 +2303,12 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME* :menu gui.txt /*:menu* :menu-<script> gui.txt /*:menu-<script>* :menu-<silent> gui.txt /*:menu-<silent>* +:menu-<special> gui.txt /*:menu-<special>* :menu-disable gui.txt /*:menu-disable* :menu-enable gui.txt /*:menu-enable* :menu-script gui.txt /*:menu-script* :menu-silent gui.txt /*:menu-silent* +:menu-special gui.txt /*:menu-special* :menut mlang.txt /*:menut* :menutrans mlang.txt /*:menutrans* :menutranslate mlang.txt /*:menutranslate* diff --git a/runtime/macmap.vim b/runtime/macmap.vim index 1717d99c9..dc76f15f9 100644 --- a/runtime/macmap.vim +++ b/runtime/macmap.vim @@ -4,80 +4,72 @@ " " Define Mac-standard keyboard shortcuts. -" Save and restore compatible mode. -let s:save_cpo = &cpo -set cpo&vim +" We don't change 'cpoptions' here, because it would not be set properly when +" a .vimrc file is found later. Thus don't use line continuation and use +" <special> in mappings. -nnoremap <D-n> :confirm enew<CR> -vmap <D-n> <Esc><D-n>gv -imap <D-n> <C-O><D-n> -cmap <D-n> <C-C><D-n> -omap <D-n> <Esc><D-n> +nnoremap <special> <D-n> :confirm enew<CR> +vmap <special> <D-n> <Esc><D-n>gv +imap <special> <D-n> <C-O><D-n> +cmap <special> <D-n> <C-C><D-n> +omap <special> <D-n> <Esc><D-n> -nnoremap <D-o> :browse confirm e<CR> -vmap <D-o> <Esc><D-o>gv -imap <D-o> <C-O><D-o> -cmap <D-o> <C-C><D-o> -omap <D-o> <Esc><D-o> +nnoremap <special> <D-o> :browse confirm e<CR> +vmap <special> <D-o> <Esc><D-o>gv +imap <special> <D-o> <C-O><D-o> +cmap <special> <D-o> <C-C><D-o> +omap <special> <D-o> <Esc><D-o> -nnoremap <silent> <D-w> :if winheight(2) < 0 <Bar> - \ confirm enew <Bar> - \ else <Bar> - \ confirm close <Bar> - \ endif<CR> -vmap <D-w> <Esc><D-w>gv -imap <D-w> <C-O><D-w> -cmap <D-w> <C-C><D-w> -omap <D-w> <Esc><D-w> +nnoremap <silent> <special> <D-w> :if winheight(2) < 0 <Bar> confirm enew <Bar> else <Bar> confirm close <Bar> endif<CR> +vmap <special> <D-w> <Esc><D-w>gv +imap <special> <D-w> <C-O><D-w> +cmap <special> <D-w> <C-C><D-w> +omap <special> <D-w> <Esc><D-w> -nnoremap <silent> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar> - \ else<Bar>confirm w<Bar>endif<CR> -vmap <D-s> <Esc><D-s>gv -imap <D-s> <C-O><D-s> -cmap <D-s> <C-C><D-s> -omap <D-s> <Esc><D-s> +nnoremap <silent> <special> <D-s> :if expand("%") == ""<Bar>browse confirm w<Bar> else<Bar>confirm w<Bar>endif<CR> +vmap <special> <D-s> <Esc><D-s>gv +imap <special> <D-s> <C-O><D-s> +cmap <special> <D-s> <C-C><D-s> +omap <special> <D-s> <Esc><D-s> -nnoremap <D-S-s> :browse confirm saveas<CR> -vmap <D-S-s> <Esc><D-s>gv -imap <D-S-s> <C-O><D-s> -cmap <D-S-s> <C-C><D-s> -omap <D-S-s> <Esc><D-s> +nnoremap <special> <D-S-s> :browse confirm saveas<CR> +vmap <special> <D-S-s> <Esc><D-s>gv +imap <special> <D-S-s> <C-O><D-s> +cmap <special> <D-S-s> <C-C><D-s> +omap <special> <D-S-s> <Esc><D-s> " From the Edit menu of SimpleText: -nnoremap <D-z> u -vmap <D-z> <Esc><D-z>gv -imap <D-z> <C-O><D-z> -cmap <D-z> <C-C><D-z> -omap <D-z> <Esc><D-z> +nnoremap <special> <D-z> u +vmap <special> <D-z> <Esc><D-z>gv +imap <special> <D-z> <C-O><D-z> +cmap <special> <D-z> <C-C><D-z> +omap <special> <D-z> <Esc><D-z> -vnoremap <D-x> "+x +vnoremap <special> <D-x> "+x -vnoremap <D-c> "+y +vnoremap <special> <D-c> "+y -cnoremap <D-c> <C-Y> +cnoremap <special> <D-c> <C-Y> -nnoremap <D-v> "+gP -cnoremap <D-v> <C-R>+ -execute 'vnoremap <script> <D-v>' paste#paste_cmd['v'] -execute 'inoremap <script> <D-v>' paste#paste_cmd['i'] +nnoremap <special> <D-v> "+gP +cnoremap <special> <D-v> <C-R>+ +execute 'vnoremap <script> <special> <D-v>' paste#paste_cmd['v'] +execute 'inoremap <script> <special> <D-v>' paste#paste_cmd['i'] -nnoremap <silent> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar> - \ else<Bar>exe ":norm ggVG"<Bar>endif<CR> -vmap <D-a> <Esc><D-a> -imap <D-a> <Esc><D-a> -cmap <D-a> <C-C><D-a> -omap <D-a> <Esc><D-a> +nnoremap <silent> <special> <D-a> :if &slm != ""<Bar>exe ":norm gggH<C-O>G"<Bar> else<Bar>exe ":norm ggVG"<Bar>endif<CR> +vmap <special> <D-a> <Esc><D-a> +imap <special> <D-a> <Esc><D-a> +cmap <special> <D-a> <C-C><D-a> +omap <special> <D-a> <Esc><D-a> -nnoremap <D-f> / -vmap <D-f> <Esc><D-f> -imap <D-f> <Esc><D-f> -cmap <D-f> <C-C><D-f> -omap <D-f> <Esc><D-f> +nnoremap <special> <D-f> / +vmap <special> <D-f> <Esc><D-f> +imap <special> <D-f> <Esc><D-f> +cmap <special> <D-f> <C-C><D-f> +omap <special> <D-f> <Esc><D-f> -nnoremap <D-g> n -vmap <D-g> <Esc><D-g> -imap <D-g> <C-O><D-g> -cmap <D-g> <C-C><D-g> -omap <D-g> <Esc><D-g> - -let &cpo = s:save_cpo +nnoremap <special> <D-g> n +vmap <special> <D-g> <Esc><D-g> +imap <special> <D-g> <C-O><D-g> +cmap <special> <D-g> <C-C><D-g> +omap <special> <D-g> <Esc><D-g> diff --git a/runtime/syntax/cs.vim b/runtime/syntax/cs.vim index 6a61ed261..8b63e48b0 100644 --- a/runtime/syntax/cs.vim +++ b/runtime/syntax/cs.vim @@ -1,7 +1,8 @@ " Vim syntax file " Language: C# -" Maintainer: Johannes Zellner <johannes@zellner.org> -" Last Change: Mo, 24 Apr 2006 10:11:07 CEST +" Maintainer: Anduin Withers <awithers@anduin.com> +" Former Maintainer: Johannes Zellner <johannes@zellner.org> +" Last Change: Sun Apr 30 19:26:18 PDT 2006 " Filenames: *.cs " $Id$ " @@ -38,11 +39,16 @@ syn keyword csException try catch finally throw " TODO: syn keyword csUnspecifiedStatement as base checked event fixed in is lock new operator out params ref sizeof stackalloc this typeof unchecked unsafe using " TODO: -syn keyword csUnsupportedStatement get set add remove value +syn keyword csUnsupportedStatement add remove value " TODO: syn keyword csUnspecifiedKeyword explicit implicit +" Contextual Keywords +syn match csContextualStatement /\<yield[[:space:]\n]\+\(return\|break\)/me=s+5 +syn match csContextualStatement /\<partial[[:space:]\n]\+\(class\|struct\|interface\)/me=s+7 +syn match csContextualStatement /\<\(get\|set\)[[:space:]\n]*{/me=s+3 +syn match csContextualStatement /\<where\>[^:]\+:/me=s+5 " Comments " @@ -79,8 +85,10 @@ hi def link xmlRegion Comment " [1] 9.5 Pre-processing directives syn region csPreCondit - \ start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\|region\|endregion\)" + \ start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\)" \ skip="\\$" end="$" contains=csComment keepend +syn region csRegion matchgroup=csPreCondit start="^\s*#\s*region.*$" + \ end="^\s*#\s*endregion" transparent fold contains=TOP @@ -115,6 +123,7 @@ hi def link csException Exception hi def link csUnspecifiedStatement Statement hi def link csUnsupportedStatement Statement hi def link csUnspecifiedKeyword Keyword +hi def link csContextualStatement Statement hi def link csOperatorError Error hi def link csTodo Todo diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim index 52873e977..2e387421d 100644 --- a/runtime/syntax/python.vim +++ b/runtime/syntax/python.vim @@ -52,6 +52,9 @@ syn keyword pythonPreCondit import from as syn match pythonComment "#.*$" contains=pythonTodo syn keyword pythonTodo TODO FIXME XXX contained +" Decorators (new in Python 2.4) +syn match pythonDecorator "@" display nextgroup=pythonFunction skipwhite + " strings syn region pythonString matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape syn region pythonString matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape @@ -85,6 +88,8 @@ endif if exists("python_highlight_builtins") " builtin functions, types and objects, not really part of the syntax + syn keyword pythonBuiltin True False bool enumerate set frozenset help + syn keyword pythonBuiltin reversed sorted sum syn keyword pythonBuiltin Ellipsis None NotImplemented __import__ abs syn keyword pythonBuiltin apply buffer callable chr classmethod cmp syn keyword pythonBuiltin coerce compile complex delattr dict dir divmod @@ -110,6 +115,8 @@ if exists("python_highlight_exceptions") syn keyword pythonException StandardError StopIteration SyntaxError syn keyword pythonException SyntaxWarning SystemError SystemExit TabError syn keyword pythonException TypeError UnboundLocalError UnicodeError + syn keyword pythonException UnicodeEncodeError UnicodeDecodeError + syn keyword pythonException UnicodeTranslateError syn keyword pythonException UserWarning ValueError Warning WindowsError syn keyword pythonException ZeroDivisionError endif @@ -151,6 +158,7 @@ if version >= 508 || !exists("did_python_syn_inits") HiLink pythonPreCondit PreCondit HiLink pythonComment Comment HiLink pythonTodo Todo + HiLink pythonDecorator Define if exists("python_highlight_numbers") HiLink pythonNumber Number endif diff --git a/runtime/syntax/vrml.vim b/runtime/syntax/vrml.vim index 651a39b91..44814aad8 100644 --- a/runtime/syntax/vrml.vim +++ b/runtime/syntax/vrml.vim @@ -1,9 +1,9 @@ " Vim syntax file " Language: VRML97 " Modified from: VRML 1.0C by David Brown <dbrown@cgs.c4.gmeds.com> -" Maintainer: Gregory Seidman <gseidman@acm.org> -" URL: http://www.cs.brown.edu/~gss/vim/syntax/vrml.vim -" Last change: 2003 May 11 +" Maintainer: vacancy! +" Former Maintainer: Gregory Seidman <gsslist+vim@anthropohedron.net> +" Last change: 2006 May 03 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded @@ -195,7 +195,7 @@ syn sync minlines=1 if version >= 600 "FOLDS! syn sync fromstart - setlocal foldmethod=syntax + "setlocal foldmethod=syntax syn region braceFold start="{" end="}" transparent fold contains=TOP syn region bracketFold start="\[" end="]" transparent fold contains=TOP syn region VRMLString start=+"+ skip=+\\\\\|\\"+ end=+"+ fold contains=VRMLSpecial,VRMLjScriptString diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 5891f83f5..368d65c77 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -4999,7 +4999,7 @@ uc_add_command(name, name_len, rep, argt, def, flags, compl, compl_arg, force) char_u *rep_buf = NULL; garray_T *gap; - replace_termcodes(rep, &rep_buf, FALSE, FALSE); + replace_termcodes(rep, &rep_buf, FALSE, FALSE, FALSE); if (rep_buf == NULL) { /* Can't replace termcodes - try using the string as is */ @@ -9855,29 +9855,12 @@ makeopens(fd, dirnow) return FAIL; /* - * Wipe out an empty unnamed buffer we started in. - */ - if (put_line(fd, "if exists('s:wipebuf')") == FAIL) - return FAIL; - if (put_line(fd, " exe 'bwipe ' . s:wipebuf") == FAIL) - return FAIL; - if (put_line(fd, "endif") == FAIL) - return FAIL; - if (put_line(fd, "unlet! s:wipebuf") == FAIL) - return FAIL; - - /* * Restore window sizes again after jumping around in windows, because * the current window has a minimum size while others may not. */ if (nr > 1 && ses_winsizes(fd, restore_size) == FAIL) return FAIL; - /* Re-apply 'winheight', 'winwidth' and 'shortmess'. */ - if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s", - p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL) - return FAIL; - /* Don't continue in another tab page when doing only the current one * or when at the last tab page. */ if (!(ssop_flags & SSOP_TABPAGES) || curtab->tp_next == NULL) @@ -9893,6 +9876,22 @@ makeopens(fd, dirnow) return FAIL; } + /* + * Wipe out an empty unnamed buffer we started in. + */ + if (put_line(fd, "if exists('s:wipebuf')") == FAIL) + return FAIL; + if (put_line(fd, " exe 'bwipe ' . s:wipebuf") == FAIL) + return FAIL; + if (put_line(fd, "endif") == FAIL) + return FAIL; + if (put_line(fd, "unlet! s:wipebuf") == FAIL) + return FAIL; + + /* Re-apply 'winheight', 'winwidth' and 'shortmess'. */ + if (fprintf(fd, "set winheight=%ld winwidth=%ld shortmess=%s", + p_wh, p_wiw, p_shm) < 0 || put_eol(fd) == FAIL) + return FAIL; /* * Lastly, execute the x.vim file if it exists. diff --git a/src/getchar.c b/src/getchar.c index 88e724ff3..7d2cfd786 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -3034,6 +3034,7 @@ do_map(maptype, arg, mode, abbrev) mapblock_T **map_table; int unique = FALSE; int silent = FALSE; + int special = FALSE; #ifdef FEAT_EVAL int expr = FALSE; #endif @@ -3075,6 +3076,16 @@ do_map(maptype, arg, mode, abbrev) continue; } + /* + * Check for "<special>": accept special keys in <> + */ + if (STRNCMP(keys, "<special>", 9) == 0) + { + keys = skipwhite(keys + 9); + special = TRUE; + continue; + } + #ifdef FEAT_EVAL /* * Check for "<script>": remap script-local mappings only @@ -3147,13 +3158,13 @@ do_map(maptype, arg, mode, abbrev) * replace_termcodes() also removes CTRL-Vs and sometimes backslashes. */ if (haskey) - keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE); + keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special); if (hasarg) { if (STRICMP(rhs, "<nop>") == 0) /* "<Nop>" means nothing */ rhs = (char_u *)""; else - rhs = replace_termcodes(rhs, &arg_buf, FALSE, TRUE); + rhs = replace_termcodes(rhs, &arg_buf, FALSE, TRUE, special); } #ifdef FEAT_FKMAP @@ -3819,7 +3830,7 @@ map_to_exists(str, modechars, abbr) char_u *buf; int retval; - rhs = replace_termcodes(str, &buf, FALSE, TRUE); + rhs = replace_termcodes(str, &buf, FALSE, TRUE, FALSE); if (vim_strchr(modechars, 'n') != NULL) mode |= NORMAL; @@ -4544,6 +4544,12 @@ gui_mouse_moved(x, y) if (wp == curwin || wp == NULL) return; /* still in the same old window, or none at all */ +#ifdef FEAT_WINDOWS + /* Ignore position in the tab pages line. */ + if (Y_2_ROW(y) < tabline_height()) + return; +#endif + /* * format a mouse click on status line input * ala gui_send_mouse_event(0, x, y, 0, 0); @@ -4597,7 +4603,11 @@ gui_mouse_correct() /* Don't move the mouse when it's left or right of the Vim window */ if (x < 0 || x > Columns * gui.char_width) return; +# ifdef FEAT_WINDOWS + if (Y_2_ROW(y) >= tabline_height()) +# else if (y >= 0) +# endif wp = xy2win(x, y); if (wp != curwin && wp != NULL) /* If in other than current window */ { diff --git a/src/if_ole.cpp b/src/if_ole.cpp index 59c786a42..45ee335a2 100644 --- a/src/if_ole.cpp +++ b/src/if_ole.cpp @@ -314,7 +314,7 @@ CVim::SendKeys(BSTR keys) } /* Translate key codes like <Esc> */ - str = replace_termcodes((char_u *)buffer, &ptr, FALSE, TRUE); + str = replace_termcodes((char_u *)buffer, &ptr, FALSE, TRUE, FALSE); /* If ptr was set, then a new buffer was allocated, * so we can free the old one. diff --git a/src/option.c b/src/option.c index 8d5dcacb6..1234bac90 100644 --- a/src/option.c +++ b/src/option.c @@ -6420,7 +6420,7 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf, { if (*p_pt) { - (void)replace_termcodes(p_pt, &p, TRUE, TRUE); + (void)replace_termcodes(p_pt, &p, TRUE, TRUE, FALSE); if (p != NULL) { if (new_value_alloced) diff --git a/src/proto/term.pro b/src/proto/term.pro index 7b5374973..9ce594ead 100644 --- a/src/proto/term.pro +++ b/src/proto/term.pro @@ -51,7 +51,7 @@ extern char_u *get_termcode __ARGS((int i)); extern void del_termcode __ARGS((char_u *name)); extern void set_mouse_topline __ARGS((win_T *wp)); extern int check_termcode __ARGS((int max_offset, char_u *buf, int buflen)); -extern char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt)); +extern char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special)); extern int find_term_bykeys __ARGS((char_u *src)); extern void show_termcodes __ARGS((void)); extern int show_one_termcode __ARGS((char_u *name, char_u *code, int printit)); diff --git a/src/quickfix.c b/src/quickfix.c index 4f5fe2480..19e03c4da 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -118,6 +118,7 @@ static void qf_fmt_text __ARGS((char_u *text, char_u *buf, int bufsize)); static void qf_clean_dir_stack __ARGS((struct dir_stack_T **)); #ifdef FEAT_WINDOWS static int qf_win_pos_update __ARGS((qf_info_T *qi, int old_qf_index)); +static int is_qf_win __ARGS((win_T *win, qf_info_T *qi)); static win_T *qf_find_win __ARGS((qf_info_T *qi)); static buf_T *qf_find_buf __ARGS((qf_info_T *qi)); static void qf_update_buffer __ARGS((qf_info_T *qi)); @@ -2199,6 +2200,7 @@ ex_copen(eap) int height; win_T *win; tabpage_T *prevtab = curtab; + buf_T *qf_buf; if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) { @@ -2231,6 +2233,8 @@ ex_copen(eap) win_goto(win); else { + qf_buf = qf_find_buf(qi); + /* The current window becomes the previous window afterwards. */ win = curwin; @@ -2256,13 +2260,21 @@ ex_copen(eap) win->w_llist->qf_refcount++; } - (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE); - /* switch off 'swapfile' */ - set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); - set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", + if (qf_buf != NULL) + /* Use the existing quickfix buffer */ + (void)do_ecmd(qf_buf->b_fnum, NULL, NULL, NULL, ECMD_ONE, + ECMD_HIDE + ECMD_OLDBUF); + else + { + /* Create a new quickfix buffer */ + (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE); + /* switch off 'swapfile' */ + set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL); + set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", OPT_LOCAL); - set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL); - set_option_value((char_u *)"diff", 0L, (char_u *)"", OPT_LOCAL); + set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL); + set_option_value((char_u *)"diff", 0L, (char_u *)"", OPT_LOCAL); + } /* Only set the height when still in the same tab page and there is no * window to the side. */ @@ -2352,7 +2364,31 @@ qf_win_pos_update(qi, old_qf_index) } /* + * Check whether the given window is displaying the specified quickfix/location + * list buffer + */ + static int +is_qf_win(win, qi) + win_T *win; + qf_info_T *qi; +{ + /* + * A window displaying the quickfix buffer will have the w_llist_ref field + * set to NULL. + * A window displaying a location list buffer will have the w_llist_ref + * pointing to the location list. + */ + if (bt_quickfix(win->w_buffer)) + if ((qi == &ql_info && win->w_llist_ref == NULL) + || (qi != &ql_info && win->w_llist_ref == qi)) + return TRUE; + + return FALSE; +} + +/* * Find a window displaying the quickfix/location list 'qi' + * Searches in only the windows opened in the current tab. */ static win_T * qf_find_win(qi) @@ -2360,33 +2396,29 @@ qf_find_win(qi) { win_T *win; - /* - * When searching for the quickfix buffer, find a window - * with w_llist_ref set to NULL. - * When searching for the location list buffer, find a window - * with w_llist_ref pointing to the supplied location list. - */ FOR_ALL_WINDOWS(win) - if (bt_quickfix(win->w_buffer)) - if ((qi == &ql_info && win->w_llist_ref == NULL) - || (qi != &ql_info && win->w_llist_ref == qi)) - break; + if (is_qf_win(win, qi)) + break; return win; } /* - * Find quickfix buffer. + * Find a quickfix buffer. + * Searches in windows opened in all the tabs. */ static buf_T * qf_find_buf(qi) qf_info_T *qi; { + tabpage_T *tp; win_T *win; - win = qf_find_win(qi); + FOR_ALL_TAB_WINDOWS(tp, win) + if (is_qf_win(win, qi)) + return win->w_buffer; - return (win != NULL) ? win->w_buffer: NULL; + return NULL; } /* diff --git a/src/spell.c b/src/spell.c index 5e3750005..757efc6ac 100644 --- a/src/spell.c +++ b/src/spell.c @@ -7031,7 +7031,7 @@ spell_read_wordfile(spin, fname) continue; /* empty or blank line */ rline[l] = NUL; - /* Convert from "=encoding={encoding}" to 'encoding' when needed. */ + /* Convert from "/encoding={encoding}" to 'encoding' when needed. */ vim_free(pc); #ifdef FEAT_MBYTE if (spin->si_conv.vc_type != CONV_NONE) @@ -7069,7 +7069,7 @@ spell_read_wordfile(spin, fname) char_u *enc; /* Setup for conversion to 'encoding'. */ - line += 10; + line += 9; enc = enc_canonize(line); if (enc != NULL && !spin->si_ascii && convert_setup(&spin->si_conv, enc, diff --git a/src/term.c b/src/term.c index 99dc1b0c9..7597c93bd 100644 --- a/src/term.c +++ b/src/term.c @@ -4945,12 +4945,13 @@ check_termcode(max_offset, buf, buflen) * nothing). When 'cpoptions' does not contain 'B', a backslash can be used * instead of a CTRL-V. */ - char_u * -replace_termcodes(from, bufp, from_part, do_lt) + char_u * +replace_termcodes(from, bufp, from_part, do_lt, special) char_u *from; char_u **bufp; int from_part; int do_lt; /* also translate <lt> */ + int special; /* always accept <key> notation */ { int i; int slen; @@ -4963,7 +4964,7 @@ replace_termcodes(from, bufp, from_part, do_lt) char_u *result; /* buffer for resulting string */ do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL); - do_special = (vim_strchr(p_cpo, CPO_SPECI) == NULL); + do_special = (vim_strchr(p_cpo, CPO_SPECI) == NULL) || special; do_key_code = (vim_strchr(p_cpo, CPO_KEYCODE) == NULL); /* diff --git a/src/version.h b/src/version.h index d37c326db..f1c2dc5aa 100644 --- a/src/version.h +++ b/src/version.h @@ -35,6 +35,6 @@ */ #define VIM_VERSION_NODOT "vim70g" #define VIM_VERSION_SHORT "7.0g" -#define VIM_VERSION_MEDIUM "7.0g-01 BETA" -#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0g01 BETA (2006 May 2)" -#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0g01 BETA (2006 May 2, compiled " +#define VIM_VERSION_MEDIUM "7.0g02 BETA" +#define VIM_VERSION_LONG "VIM - Vi IMproved 7.0g02 BETA (2006 May 3)" +#define VIM_VERSION_LONG_DATE "VIM - Vi IMproved 7.0g02 BETA (2006 May 3, compiled " diff --git a/src/window.c b/src/window.c index 09c638e0c..cbcdd4eb9 100644 --- a/src/window.c +++ b/src/window.c @@ -5195,6 +5195,7 @@ win_new_height(wp, height) int sline, line_size; int space; int did_below = FALSE; + int old_height = wp->w_height; #define FRACTION_MULT 16384L /* Don't want a negative height. Happens when splitting a tiny window. @@ -5238,9 +5239,15 @@ win_new_height(wp, height) } else { - space = height; + space = height - 1; + while (lnum > 1) { + /* When using "~" lines stop when at the old topline, don't + * scroll down. */ + if (did_below && height < old_height && lnum <= wp->w_topline) + sline = 0; + space -= line_size; if (space > 0 && sline <= 0 && !did_below) { |