Merge branch 'vim'

Conflicts:
	src/if_ruby.c
This commit is contained in:
Bjorn Winckler
2014-02-22 16:05:17 +01:00
135 changed files with 4316 additions and 1538 deletions
+9
View File
@@ -38,6 +38,15 @@ src/Obj*/pathdef.c
gvimext.dll
gvimext.lib
# Borland C++
bcc.cfg
*.ilc
*.ild
*.ilf
*.ils
*.map
*.tds
# Mac OSX
src/xxd/xxd.dSYM
+80
View File
@@ -2826,3 +2826,83 @@ acbe5414cb7f302f548bc1cbdc1ddb029dbf9094 v7-4-095
ec5d11403c1952b2ed192f28afb6261d0867bb20 v7-4-101
9417f4de27a2a6acfa6b1660ac6ef2b5692e4554 v7-4-102
4db151014f93b7512919e452e6b3f4184758db7b v7-4-103
dd7d1a86b311c11e9c03b7ca95c7b62206bbc7ab v7-4-104
eed95874f30e9d9dad577f2361f2dfed93c5db4d v7-4-105
de9a01851ebd1ce1d225b40c182b6f1e105863a7 v7-4-106
064e2a080e2e158177acc017c318bc953fb7535b v7-4-107
fa31c5b82424373885d2fa55b4f8531ac21baacd v7-4-108
1cdf517067743dc33ebb9c7af8844abd9d9c7863 v7-4-109
6e54d1b3408ca745341b0b219c588c265fa52494 v7-4-110
3fbda56bb2008e2459951f3ad0258ff0500ba07c v7-4-111
af8217e4ed7e28b797c628f067ebfd4433c07326 v7-4-112
0e21e2a38ec6df5c4fe37d639906f56f9f445b96 v7-4-113
6db758f82227989426560c19fdd234b154b54419 v7-4-114
e35c69ad482370b2685bf1360a63fb27ce8b3819 v7-4-115
40aff213baff00d43ea8c1b6a9734ccad63a3921 v7-4-116
805ad8488dc88a575b841589f36c278aaead4e52 v7-4-117
62c720661f81c17348636956c1158639d59e1e9f v7-4-118
2f99966971b0556bc302ec809712f5ba3f030028 v7-4-119
ca0e43bbf8f9e409130d5d1ce29621edbcdff92a v7-4-120
4bf53c1ef37a5023e06f3c6b4f1c24857b4f52a6 v7-4-121
270c62fe685ae943de64e1a4ab295dae6f4ccabe v7-4-122
32e50f85d2c7a56c600a2c36107e56fa9f2952cb v7-4-123
9faba192ea90a32ee137aa42f5027b098931ddb2 v7-4-124
45ef9d2096e82d6a56a58606b6811620a61cb1ba v7-4-125
b14554844756422a39c72e62b8c2391c2d5a2e17 v7-4-126
6f5a7d3943007afc6bc03c445380776e18787f0c v7-4-127
4b92012f6b18f56664c268200fb54f1316495dc5 v7-4-128
1e28c0fad344549665c60c62374e6f511e5aec76 v7-4-129
cf722c09236098ae585840d62eca68dbf8065247 v7-4-130
4b23119cb58473ab70cf1a1204d4d3fad83881ec v7-4-131
1b09d6792520cbe1c94c20f6c833ad57316e75bb v7-4-132
6a28a9cf51537b81da7e9ec3f70fea55e393b345 v7-4-133
0defb460a0ebbc954b0f22267cb06e9d210be43a v7-4-134
1aeb7f4d6527369cf5f9101813ce8f10caf7a869 v7-4-135
3881cd916014605875de128226b83a24d18afe46 v7-4-136
6fdb1d6646b6b256623edb05f9dd770eeacaeb05 v7-4-137
6eb60041548ce42748cd8d7d49bdbf9dd164c967 v7-4-138
c8c80c9d2e2237fedeadfb1c6856c53c7a5e90d2 v7-4-139
505cf1943dc238c2383dcbc37a93fbb136e1f08b v7-4-140
2ca470c6096e3ec7cbbedeb1d0281056b088812b v7-4-141
735b70faac4a54ca9d8ebc2303ba28d5d18017e2 v7-4-142
d11f223f4c753889fa8f974f295c2a0a451c653c v7-4-143
bcf25cc08236c2adc27a4d7d556e11e8ea6ddce2 v7-4-144
1098b7b6e147cdd324ac665340540922c2cdceb3 v7-4-145
ec93f50f1d93c4c279606117a9f3eb37301b051a v7-4-146
d289f2167d702c87493d1934db863df29676e261 v7-4-147
8507bf8874d816a79411bc74df71fa58b557b71d v7-4-148
b43363a7b4c71a7a4e20dc21f4906f4595785983 v7-4-149
15960ebc2ee8539a1f15f660d43df1a502c34829 v7-4-150
ec02e1474bc2bbfd73349e7fedf62ae45f941ad9 v7-4-151
2ace11abcfb59f6e88c3a40aa1d849d335cfd993 v7-4-152
30e300c0b2c1c069d953afb258dba39c50772463 v7-4-153
71837ace77dfdd6c01e0a334314a7c6c713a095c v7-4-154
fa53233519c693591ce60f9270cf259c07d6cc26 v7-4-155
05a5cb0d6b37eb7806eb902a72d8b00dde48bc1c v7-4-156
be61f315eafe5cbadbd00bf7275e004fe09779db v7-4-157
d59544f3022ba0a35af174d1085a321de6d3b9b4 v7-4-158
a95a151402be5155cd89f8758e2e09ca95473ad1 v7-4-159
f29febf858be9c7df896cc86ea89c3da8823b4fb v7-4-160
91f3908748c29b0e8e759ac4cdafc95e536eab9a v7-4-161
477665b4105fa80e3655981790e55fc9babfeed5 v7-4-162
7db84aadd37aaf9d59f8f15dd6783a4e28dcb63c v7-4-163
a01819fb6e2b5c270dac492ab2fe923ea9301651 v7-4-164
c82339d8fdae0d43d51cde5216c979a5c9415bc4 v7-4-165
5d03c374712128077ac4c342aad02120ed98df70 v7-4-166
22387c8eec43ea8b1b704cad49c8f7187e2fd579 v7-4-167
e61a2b709f693eea9108d475b9bab5ed10ac675d v7-4-168
4e3a9dd25d428e7c08ed401afc244972e27e08e6 v7-4-169
8122eab8fcdbbdaac62dfbf7c6458cb3e6f46b04 v7-4-170
beb037a6c2708f539d50840637f70eed0811d93c v7-4-171
391e10afccf6879dcfab8b28cb1587a13eb835c0 v7-4-172
233ad7b960d0fbeb224b383918113b25c74ebe35 v7-4-173
f2c8d86c460d75fec17a0527a2fe93ac7220693e v7-4-174
6b69d8dde19e32909f4ee3a6337e6a2ecfbb6f72 v7-4-175
ae228baaec2c5eda4cd948382c2bab498d1a34cc v7-4-176
df3b0b70d8c1d29817597f45d19bb72755f86bd1 v7-4-177
647e6bb15aa3f864eaf447fe77e3e3ae7e37b134 v7-4-178
d1c8c1d6403485ff0135f0cf5c1ef07272a07173 v7-4-179
b1b8b097539a001043d1f0aac4663d6ee358dee8 v7-4-180
cb5683bcde03796baa7e845fd9a2fcaec3383538 v7-4-181
708a6a5905217736a2a231e36ced82f9535c4954 v7-4-182
1e2bfe4f3e903110f27cb6231f6642e721808837 v7-4-183
+1
View File
@@ -80,6 +80,7 @@ SRC_ALL = \
src/main.aap \
src/testdir/main.aap \
src/testdir/*.in \
src/testdir/sautest/autoload/*.vim \
src/testdir/test[0-9]*.ok \
src/testdir/test49.vim \
src/testdir/test60.vim \
+5 -5
View File
@@ -1,8 +1,8 @@
" ---------------------------------------------------------------------
" getscript.vim
" Author: Charles E. Campbell
" Date: Apr 17, 2013
" Version: 35
" Date: Jan 21, 2014
" Version: 36
" Installing: :help glvs-install
" Usage: :help glvs
"
@@ -15,7 +15,7 @@
if exists("g:loaded_getscript")
finish
endif
let g:loaded_getscript= "v35"
let g:loaded_getscript= "v36"
if &cp
echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
finish
@@ -208,8 +208,8 @@ fun! getscript#GetLatestVimScripts()
let lastline = line("$")
" call Decho("lastline#".lastline)
let firstdir = substitute(&rtp,',.*$','','')
let plugins = split(globpath(firstdir,"plugin/*.vim"),'\n')
let plugins = plugins + split(globpath(firstdir,"AsNeeded/*.vim"),'\n')
let plugins = split(globpath(firstdir,"plugin/**/*.vim"),'\n')
let plugins = plugins + split(globpath(firstdir,"AsNeeded/**/*.vim"),'\n')
let foundscript = 0
" this loop updates the GetLatestVimScripts.dat file
+625 -344
View File
File diff suppressed because it is too large Load Diff
+8 -3
View File
@@ -1,7 +1,7 @@
" netrwSettings.vim: makes netrw settings simpler
" Date: May 03, 2013
" Date: Aug 27, 2013
" Maintainer: Charles E Campbell <drchipNOSPAM at campbellfamily dot biz>
" Version: 14a ASTRO-ONLY
" Version: 14
" Copyright: Copyright (C) 1999-2007 Charles E. Campbell {{{1
" Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
@@ -19,7 +19,7 @@
if exists("g:loaded_netrwSettings") || &cp
finish
endif
let g:loaded_netrwSettings = "v14a"
let g:loaded_netrwSettings = "v14"
if v:version < 700
echohl WarningMsg
echo "***warning*** this version of netrwSettings needs vim 7.0"
@@ -98,6 +98,11 @@ fun! netrwSettings#NetrwSettings()
put = ''
put ='+ Netrw Browser Control'
if exists("g:netrw_altfile")
put = 'let g:netrw_altfile = '.g:netrw_altfile
else
put = 'let g:netrw_altfile = 0'
endif
put = 'let g:netrw_alto = '.g:netrw_alto
put = 'let g:netrw_altv = '.g:netrw_altv
put = 'let g:netrw_banner = '.g:netrw_banner
+71
View File
@@ -0,0 +1,71 @@
" netrw_gitignore#Hide: gitignore-based hiding
" Function returns a string of comma separated patterns convenient for
" assignment to `g:netrw_list_hide` option.
" Function can take additional filenames as arguments, example:
" netrw_gitignore#Hide('custom_gitignore1', 'custom_gitignore2')
"
" Usage examples:
" let g:netrw_list_hide = netrw_gitignore#Hide()
" let g:netrw_list_hide = netrw_gitignore#Hide() . 'more,hide,patterns'
"
" Copyright: Copyright (C) 2013 Bruno Sutic {{{1
" 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_gitignore.vim is provided *as is* and comes with no
" warranty of any kind, either expressed or implied. By using
" this plugin, you agree that in no event will the copyright
" holder be liable for any damages resulting from the use
" of this software.
function! netrw_gitignore#Hide(...)
let additional_files = a:000
let default_files = ['.gitignore', '.git/info/exclude']
" get existing global/system gitignore files
let global_gitignore = expand(substitute(system("git config --global core.excludesfile"), '\n', '', 'g'))
if global_gitignore !=# ''
let default_files = add(default_files, global_gitignore)
endif
let system_gitignore = expand(substitute(system("git config --system core.excludesfile"), '\n', '', 'g'))
if system_gitignore !=# ''
let default_files = add(default_files, system_gitignore)
endif
" append additional files if given as function arguments
if additional_files !=# []
let files = extend(default_files, additional_files)
else
let files = default_files
endif
" keep only existing/readable files
let gitignore_files = []
for file in files
if filereadable(file)
let gitignore_files = add(gitignore_files, file)
endif
endfor
" get contents of gitignore patterns from those files
let gitignore_lines = []
for file in gitignore_files
for line in readfile(file)
" filter empty lines and comments
if line !~# '^#' && line !~# '^$'
let gitignore_lines = add(gitignore_lines, line)
endif
endfor
endfor
" convert gitignore patterns to Netrw/Vim regex patterns
let escaped_lines = []
for line in gitignore_lines
let escaped = line
let escaped = substitute(escaped, '\.', '\\.', 'g')
let escaped = substitute(escaped, '*', '.*', 'g')
let escaped_lines = add(escaped_lines, escaped)
endfor
return join(escaped_lines, ',')
endfunction
+8
View File
@@ -36,6 +36,14 @@ Some attributes (e.g., bold) might be set in the defaults that you want
removed in your color scheme. Use something like "gui=NONE" to remove the
attributes.
In case you want to set 'background' depending on the colorscheme selected,
this autocmd might be useful:
autocmd SourcePre */colors/blue_sky.vim set background=dark
Replace "blue_sky" with the name of the colorscheme.
In case you want to tweak a colorscheme after it was loaded, check out that
ColorScheme autocmd event.
To see which highlight group is used where, find the help for
"highlight-groups" and "group-name".
+4 -4
View File
@@ -25,10 +25,10 @@ CompilerSet errorformat=
\%f:%l:\ %tarning:\ %m,
\%f:%l:\ %m,
\\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
\%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
\%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
\%D%*\\a:\ Entering\ directory\ `%f',
\%X%*\\a:\ Leaving\ directory\ `%f',
\%D%*\\a[%*\\d]:\ Entering\ directory\ [`']%f',
\%X%*\\a[%*\\d]:\ Leaving\ directory\ [`']%f',
\%D%*\\a:\ Entering\ directory\ [`']%f',
\%X%*\\a:\ Leaving\ directory\ [`']%f',
\%DMaking\ %*\\a\ in\ %f
if exists('g:compiler_gcc_ignore_unmatched_lines')
+14 -2
View File
@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 7.4. Last change: 2013 Aug 04
*autocmd.txt* For Vim version 7.4. Last change: 2014 Jan 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -304,6 +304,9 @@ Name triggered by ~
|InsertCharPre| when a character was typed in Insert mode, before
inserting it
|TextChanged| after a change was made to the text in Normal mode
|TextChangedI| after a change was made to the text in Insert mode
|ColorScheme| after loading a color scheme
|RemoteReply| a reply from a server Vim was received
@@ -480,6 +483,12 @@ CmdwinLeave Before leaving the command-line window.
|cmdwin-char|
*ColorScheme*
ColorScheme After loading a color scheme. |:colorscheme|
The pattern is matched against the
colorscheme name. <afile> can be used for the
name of the actual file where this option was
set, and <amatch> for the new colorscheme
name.
*CompleteDone*
CompleteDone After Insert mode completion is done. Either
@@ -553,6 +562,9 @@ FileChangedRO Before making the first change to a read-only
It is not allowed to change to another buffer
here. You can reload the buffer but not edit
another one.
*E881*
If the number of lines changes saving for undo
may fail and the change will be aborted.
*FileChangedShell*
FileChangedShell When Vim notices that the modification time of
a file has changed since editing started.
@@ -731,7 +743,7 @@ QuickFixCmdPost Like QuickFixCmdPre, but after a quickfix
command is run, before jumping to the first
location. For |:cfile| and |:lfile| commands
it is run after error file is read and before
moving to the first error.
moving to the first error.
See |QuickFixCmdPost-example|.
*QuitPre*
QuitPre When using `:quit`, `:wq` or `:qall`, before
+2 -2
View File
@@ -1,4 +1,4 @@
*change.txt* For Vim version 7.4. Last change: 2013 Nov 05
*change.txt* For Vim version 7.4. Last change: 2014 Jan 23
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -824,7 +824,7 @@ either the first or second pattern in parentheses did not match, so either
<
Substitute with an expression *sub-replace-expression*
*sub-replace-\=*
*sub-replace-\=* *s/\=*
When the substitute string starts with "\=" the remainder is interpreted as an
expression. This does not work recursively: a |substitute()| function inside
the expression cannot use "\=" for the substitute string.
+2 -1
View File
@@ -1,4 +1,4 @@
*cmdline.txt* For Vim version 7.4. Last change: 2013 Mar 16
*cmdline.txt* For Vim version 7.4. Last change: 2013 Nov 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -758,6 +758,7 @@ characters have a special meaning. These can also be used in the expression
function expand() |expand()|.
% Is replaced with the current file name. *:_%* *c_%*
# Is replaced with the alternate file name. *:_#* *c_#*
This is remembered for every window.
#n (where n is a number) is replaced with *:_#0* *:_#n*
the file name of buffer n. "#0" is the same as "#". *c_#n*
## Is replaced with all names in the argument list *:_##* *c_##*
+2 -2
View File
@@ -1,4 +1,4 @@
*digraph.txt* For Vim version 7.4. Last change: 2011 Jan 15
*digraph.txt* For Vim version 7.4. Last change: 2013 Dec 12
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -147,7 +147,7 @@ a standard meaning:
Two 2 Hook
Nine 9 Horn
Equals = Cyrillic
Equals = Cyrillic (= used as second char)
Asterisk * Greek
Percent sign % Greek/Cyrillic special
Plus + smalls: Arabic, capitals: Hebrew
+2 -1
View File
@@ -1,4 +1,4 @@
*editing.txt* For Vim version 7.4. Last change: 2013 Aug 03
*editing.txt* For Vim version 7.4. Last change: 2013 Nov 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -38,6 +38,7 @@ If there already was a current file name, then that one becomes the alternate
file name. It can be used with "#" on the command line |:_#| and you can use
the |CTRL-^| command to toggle between the current and the alternate file.
However, the alternate file name is not changed when |:keepalt| is used.
An alternate file name is remembered for each window.
*:keepalt* *:keepa*
:keepalt {cmd} Execute {cmd} while keeping the current alternate file
+19 -9
View File
@@ -1,4 +1,4 @@
*eval.txt* For Vim version 7.4. Last change: 2013 Nov 08
*eval.txt* For Vim version 7.4. Last change: 2014 Feb 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1519,6 +1519,7 @@ v:oldfiles List of file names that is loaded from the |viminfo| file on
startup. These are the files that Vim remembers marks for.
The length of the List is limited by the ' argument of the
'viminfo' option (default is 100).
When the |viminfo| file is not used the List is empty.
Also see |:oldfiles| and |c_#<|.
The List can be modified, but this has no effect on what is
stored in the |viminfo| file later. If you use values other
@@ -1744,7 +1745,7 @@ cscope_connection( [{num} , {dbpath} [, {prepend}]])
cursor( {lnum}, {col} [, {coladd}])
Number move cursor to {lnum}, {col}, {coladd}
cursor( {list}) Number move cursor to position in {list}
deepcopy( {expr}) any make a full copy of {expr}
deepcopy( {expr} [, {noref}]) any make a full copy of {expr}
delete( {fname}) Number delete file {fname}
did_filetype() Number TRUE if FileType autocommand event used
diff_filler( {lnum}) Number diff filler lines about {lnum}
@@ -3200,7 +3201,7 @@ getchar([expr]) *getchar()*
If [expr] is 1, only check if a character is available, it is
not consumed. Return zero if no character available.
Without {expr} and when {expr} is 0 a whole character or
Without [expr] and when [expr] is 0 a whole character or
special key is returned. If it is an 8-bit character, the
result is a number. Use nr2char() to convert it to a String.
Otherwise a String is returned with the encoded character.
@@ -3210,7 +3211,7 @@ getchar([expr]) *getchar()*
String when a modifier (shift, control, alt) was used that is
not included in the character.
When {expr} is 1 only the first byte is returned. For a
When [expr] is 1 only the first byte is returned. For a
one-byte character it is the character itself as a number.
Use nr2char() to convert it to a String.
@@ -3460,7 +3461,7 @@ getregtype([{regname}]) *getregtype()*
"v" for |characterwise| text
"V" for |linewise| text
"<CTRL-V>{width}" for |blockwise-visual| text
0 for an empty or unknown register
"" for an empty or unknown register
<CTRL-V> is one character with value 0x16.
If {regname} is not specified, |v:register| is used.
@@ -4134,6 +4135,8 @@ maparg({name}[, {mode} [, {abbr} [, {dict}]]]) *maparg()*
(|mapmode-ic|)
"sid" The script local ID, used for <sid> mappings
(|<SID>|).
"nowait" Do not wait for other, longer mappings.
(|:map-<nowait>|).
The mappings local to the current buffer are checked first,
then the global mappings.
@@ -4447,6 +4450,9 @@ getpos({expr}) Get the position for {expr}. For possible values of {expr}
it is the offset in screen columns from the start of the
character. E.g., a position within a <Tab> or after the last
character.
Note that for '< and '> Visual mode matters: when it is "V"
(visual line mode) the column of '< is zero and the column of
'> is a large number.
This can be used to save and restore the cursor position: >
let save_cursor = getpos(".")
MoveTheCursorAround
@@ -5270,6 +5276,10 @@ setpos({expr}, {list})
character. E.g., a position within a <Tab> or after the last
character.
Note that for '< and '> changing the line number may result in
the marks to be effectively be swapped, so that '< is always
before '>.
Returns 0 when the position could be set, -1 otherwise.
An error message is given if {expr} is invalid.
@@ -5632,7 +5642,7 @@ strchars({expr}) *strchars()*
strdisplaywidth({expr}[, {col}]) *strdisplaywidth()*
The result is a Number, which is the number of display cells
String {expr} occupies on the screen.
String {expr} occupies on the screen when it starts a {col}.
When {col} is omitted zero is used. Otherwise it is the
screen column where to start. This matters for Tab
characters.
@@ -6634,7 +6644,7 @@ See |:verbose-cmd| for more information.
For the {arguments} see |function-argument|.
*a:firstline* *a:lastline*
*:func-range* *a:firstline* *a:lastline*
When the [range] argument is added, the function is
expected to take care of a range itself. The range is
passed as "a:firstline" and "a:lastline". If [range]
@@ -6643,10 +6653,10 @@ See |:verbose-cmd| for more information.
of each line. See |function-range-example|.
The cursor is still moved to the first line of the
range, as is the case with all Ex commands.
*:func-abort*
When the [abort] argument is added, the function will
abort as soon as an error is detected.
*:func-dict*
When the [dict] argument is added, the function must
be invoked through an entry in a |Dictionary|. The
local variable "self" will then be set to the
+6 -4
View File
@@ -1,4 +1,4 @@
*filetype.txt* For Vim version 7.4. Last change: 2013 May 25
*filetype.txt* For Vim version 7.4. Last change: 2013 Dec 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -447,23 +447,25 @@ g:changelog_new_date_format
%% insert a single '%' character
%d insert the date from above
%u insert the user from above
%p insert result of b:changelog_entry_prefix
%c where to position cursor when done
The default is "%d %u\n\n\t* %c\n\n", which produces
The default is "%d %u\n\n\t* %p%c\n\n", which produces
something like (| is where cursor will be, unless at
the start of the line where it denotes the beginning
of the line) >
|2003-01-14 Full Name <user@host>
|
| * |
| * prefix|
<
g:changelog_new_entry_format
The format used when creating a new entry.
The following table describes special tokens in the
string:
%p insert result of b:changelog_entry_prefix
%c where to position cursor when done
The default is "\t*%c", which produces something
similar to >
| * |
| * prefix|
<
g:changelog_date_entry_search
The search pattern to use when searching for a
+5 -4
View File
@@ -1,4 +1,4 @@
*fold.txt* For Vim version 7.4. Last change: 2010 May 13
*fold.txt* For Vim version 7.4. Last change: 2013 Dec 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -285,9 +285,10 @@ zF Create a fold for [count] lines. Works like "zf".
*zd* *E351*
zd Delete one fold at the cursor. When the cursor is on a folded
line, that fold is deleted. Nested folds are moved one level
up. In Visual mode all folds (partially) in the selected area
are deleted. Careful: This easily deletes more folds than you
expect and there is no undo.
up. In Visual mode one level of all folds (partially) in the
selected area are deleted.
Careful: This easily deletes more folds than you expect and
there is no undo for manual folding.
This only works when 'foldmethod' is "manual" or "marker".
Also see |fold-delete-marker|.
+22 -2
View File
@@ -598,7 +598,6 @@ without limits.
" Default
let g:clojure_maxlines = 100
<
*g:clojure_fuzzy_indent*
*g:clojure_fuzzy_indent_patterns*
*g:clojure_fuzzy_indent_blacklist*
@@ -652,7 +651,6 @@ default list below.
let g:clojure_special_indent_words =
\ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
<
*g:clojure_align_multiline_strings*
Align subsequent lines in multiline strings to the column after the opening
@@ -677,6 +675,28 @@ This option is off by default.
" Default
let g:clojure_align_multiline_strings = 0
<
*g:clojure_align_subforms*
By default, parenthesized compound forms that look like function calls and
whose head subform is on its own line have subsequent subforms indented by
two spaces relative to the opening paren:
>
(foo
bar
baz)
<
Setting this option changes this behavior so that all subforms are aligned to
the same column:
>
(foo
bar
baz)
<
This option is off by default.
>
" Default
let g:clojure_align_subforms = 0
<
FORTRAN *ft-fortran-indent*
+2 -2
View File
@@ -1,4 +1,4 @@
*motion.txt* For Vim version 7.4. Last change: 2013 Jul 17
*motion.txt* For Vim version 7.4. Last change: 2014 Feb 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -343,7 +343,7 @@ gg Goto line [count], default first line, on the first
See also 'startofline' option. {not in Vi}
:[range]go[to] [count] *:go* *:goto* *go*
[count]go Go to {count} byte in the buffer. Default [count] is
[count]go Go to [count] byte in the buffer. Default [count] is
one, start of the file. When giving [range], the
last number in it used as the byte count. End-of-line
characters are counted depending on the current
+3 -3
View File
@@ -1,4 +1,4 @@
*options.txt* For Vim version 7.4. Last change: 2013 Nov 12
*options.txt* For Vim version 7.4. Last change: 2013 Dec 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -992,7 +992,7 @@ A jump table for the options with a short description can be found at |Q_op|.
*'backupdir'* *'bdir'*
'backupdir' 'bdir' string (default for Amiga: ".,t:",
for MS-DOS and Win32: ".,c:/tmp,c:/temp"
for MS-DOS and Win32: ".,$TEMP,c:/tmp,c:/temp"
for Unix: ".,~/tmp,~/")
global
{not in Vi}
@@ -2482,7 +2482,7 @@ A jump table for the options with a short description can be found at |Q_op|.
*'directory'* *'dir'*
'directory' 'dir' string (default for Amiga: ".,t:",
for MS-DOS and Win32: ".,c:\tmp,c:\temp"
for MS-DOS and Win32: ".,$TEMP,c:\tmp,c:\temp"
for Unix: ".,~/tmp,/var/tmp,/tmp")
global
List of directory names for the swap file, separated with commas.
+3 -3
View File
@@ -1,4 +1,4 @@
*pattern.txt* For Vim version 7.4. Last change: 2013 Nov 09
*pattern.txt* For Vim version 7.4. Last change: 2014 Feb 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -192,10 +192,10 @@ affected.
An example of how to search for matches with a pattern and change the match
with another word: >
/foo<CR> find "foo"
c//e change until end of match
c//e<CR> change until end of match
bar<Esc> type replacement
//<CR> go to start of next match
c//e change until end of match
c//e<CR> change until end of match
beep<Esc> type another replacement
etc.
<
+5 -1
View File
@@ -1,4 +1,4 @@
*pi_getscript.txt* For Vim version 7.4. Last change: 2012 Apr 07
*pi_getscript.txt* For Vim version 7.0. Last change: 2013 Nov 29
>
GETSCRIPT REFERENCE MANUAL by Charles E. Campbell
<
@@ -385,6 +385,10 @@ The AutoInstall process will:
==============================================================================
9. GetLatestVimScripts History *getscript-history* *glvs-hist* {{{1
v36 Apr 22, 2013 : * (glts) suggested use of plugin/**/*.vim instead of
plugin/*.vim in globpath() call.
* (Andy Wokula) got warning message when setting
g:loaded_getscriptPlugin
v35 Apr 07, 2012 : * (MengHuan Yu) pointed out that the script url has
changed (somewhat). However, it doesn't work, and
the original one does (under Linux). I'll make it
+196 -44
View File
@@ -1,4 +1,4 @@
*pi_netrw.txt* For Vim version 7.4. Last change: 2013 May 18
*pi_netrw.txt* For Vim version 7.4. Last change: 2014 Jan 21
------------------------------------------------
NETRW REFERENCE MANUAL by Charles E. Campbell
@@ -6,7 +6,7 @@
Author: Charles E. Campbell <NdrOchip@ScampbellPfamily.AbizM>
(remove NOSPAM from Campbell's email first)
Copyright: Copyright (C) 1999-2013 Charles E Campbell *netrw-copyright*
Copyright: Copyright (C) 1999-2014 Charles E Campbell *netrw-copyright*
The VIM LICENSE applies to the files in this package, including
netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and
syntax/netrw.vim. Like anything else that's free, netrw.vim and its
@@ -192,21 +192,22 @@ You may do so by placing the following two lines in your <.vimrc>: >
EXTERNAL APPLICATIONS AND PROTOCOLS *netrw-externapp* {{{2
Protocol Variable Default Value
-------- ---------------- -------------
dav: *g:netrw_dav_cmd* = "cadaver" if cadaver is executable
dav: g:netrw_dav_cmd = "curl -o" elseif curl is available
fetch: *g:netrw_fetch_cmd* = "fetch -o" if fetch is available
ftp: *g:netrw_ftp_cmd* = "ftp"
http: *g:netrw_http_cmd* = "elinks" if elinks is available
http: g:netrw_http_cmd = "links" elseif links is available
http: g:netrw_http_cmd = "curl" elseif curl is available
http: g:netrw_http_cmd = "wget" elseif wget is available
http: g:netrw_http_cmd = "fetch" elseif fetch is available
rcp: *g:netrw_rcp_cmd* = "rcp"
rsync: *g:netrw_rsync_cmd* = "rsync -a"
scp: *g:netrw_scp_cmd* = "scp -q"
sftp: *g:netrw_sftp_cmd* = "sftp"
Protocol Variable Default Value
-------- ---------------- -------------
dav: *g:netrw_dav_cmd* = "cadaver" if cadaver is executable
dav: g:netrw_dav_cmd = "curl -o" elseif curl is available
fetch: *g:netrw_fetch_cmd* = "fetch -o" if fetch is available
ftp: *g:netrw_ftp_cmd* = "ftp"
http: *g:netrw_http_cmd* = "elinks" if elinks is available
http: g:netrw_http_cmd = "links" elseif links is available
http: g:netrw_http_cmd = "curl" elseif curl is available
http: g:netrw_http_cmd = "wget" elseif wget is available
http: g:netrw_http_cmd = "fetch" elseif fetch is available
http: *g:netrw_http_put_cmd* = "curl -T"
rcp: *g:netrw_rcp_cmd* = "rcp"
rsync: *g:netrw_rsync_cmd* = "rsync -a"
scp: *g:netrw_scp_cmd* = "scp -q"
sftp: *g:netrw_sftp_cmd* = "sftp"
*g:netrw_http_xcmd* : the option string for http://... protocols are
specified via this variable and may be independently overridden. By
@@ -223,6 +224,9 @@ EXTERNAL APPLICATIONS AND PROTOCOLS *netrw-externapp* {{{2
let g:netrw_http_xcmd= "-dump >"
< in your .vimrc.
g:netrw_http_put_cmd: this option specifies both the executable and
any needed options. This command does a PUT operation to the url.
READING *netrw-read* *netrw-nread* {{{2
@@ -816,8 +820,7 @@ variables listed below, and may be modified by the user.
------------------------
Option Type Setting Meaning
--------- -------- -------------- ---------------------------
<
netrw_ftp variable =doesn't exist userid set by "user userid"
< netrw_ftp variable =doesn't exist userid set by "user userid"
=0 userid set by "user userid"
=1 userid set by "userid"
NetReadFixup function =doesn't exist no change
@@ -825,17 +828,18 @@ variables listed below, and may be modified by the user.
read via ftp automatically
transformed however they wish
by NetReadFixup()
g:netrw_dav_cmd variable ="cadaver" if cadaver is executable
g:netrw_dav_cmd variable ="curl -o" elseif curl is executable
g:netrw_fetch_cmd variable ="fetch -o" if fetch is available
g:netrw_ftp_cmd variable ="ftp"
g:netrw_http_cmd variable ="fetch -o" if fetch is available
g:netrw_http_cmd variable ="wget -O" else if wget is available
g:netrw_list_cmd variable ="ssh USEPORT HOSTNAME ls -Fa"
g:netrw_rcp_cmd variable ="rcp"
g:netrw_rsync_cmd variable ="rsync -a"
g:netrw_scp_cmd variable ="scp -q"
g:netrw_sftp_cmd variable ="sftp" >
g:netrw_dav_cmd var ="cadaver" if cadaver is executable
g:netrw_dav_cmd var ="curl -o" elseif curl is executable
g:netrw_fetch_cmd var ="fetch -o" if fetch is available
g:netrw_ftp_cmd var ="ftp"
g:netrw_http_cmd var ="fetch -o" if fetch is available
g:netrw_http_cmd var ="wget -O" else if wget is available
g:netrw_http_put_cmd var ="curl -T"
g:netrw_list_cmd var ="ssh USEPORT HOSTNAME ls -Fa"
g:netrw_rcp_cmd var ="rcp"
g:netrw_rsync_cmd var ="rsync -a"
g:netrw_scp_cmd var ="scp -q"
g:netrw_sftp_cmd var ="sftp" >
-------------------------------------------------------------------------
<
*netrw-ftp*
@@ -1097,16 +1101,20 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2
mapping defined before netrw is autoloaded,
then a double clicked leftmouse button will return
to the netrw browser window. See |g:netrw_retmap|.
<s-leftmouse> (gvim only) like mf, will mark files
<s-leftmouse> (gvim only) like mf, will mark files. Dragging
the shifted leftmouse will mark multiple files.
(see |netrw-mf|)
(to disable mouse buttons while browsing: |g:netrw_mousemaps|)
*netrw-quickcom* *netrw-quickcoms*
QUICK REFERENCE: COMMANDS *netrw-explore-cmds* *netrw-browse-cmds* {{{2
:NetrwClean[!] ...........................................|netrw-clean|
:NetrwSettings ...........................................|netrw-settings|
:NetrwClean[!]............................................|netrw-clean|
:NetrwSettings............................................|netrw-settings|
:Ntree....................................................|netrw-ntree|
:Explore[!] [dir] Explore directory of current file......|netrw-explore|
:Hexplore[!] [dir] Horizontal Split & Explore.............|netrw-explore|
:Lexplore [dir] Left Explorer Toggle...................|netrw-explore|
:Nexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
:Pexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
:Rexplore Return to Explorer.....................|netrw-explore|
@@ -1321,6 +1329,17 @@ See |g:netrw_dirhistmax| for how to control the quantity of history stack
slots.
CHANGING TREE TOP *netrw-ntree* *:Ntree*
One may specify a new tree top for tree listings using >
:Ntree [dirname]
Without a "dirname", the current line is used (and any leading depth
information is elided).
With a "dirname", the specified directory name is used.
NETRW CLEAN *netrw-clean* *:NetrwClean*
With :NetrwClean one may easily remove netrw from one's home directory;
@@ -1458,7 +1477,7 @@ Associated setting variable: |g:netrw_localrmdir| |g:netrw_rm_cmd|
*netrw-explore* *netrw-hexplore* *netrw-nexplore* *netrw-pexplore*
*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore*
*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore* *netrw-lexplore*
DIRECTORY EXPLORATION COMMANDS {{{2
:[N]Explore[!] [dir]... Explore directory of current file *:Explore*
@@ -1467,6 +1486,7 @@ DIRECTORY EXPLORATION COMMANDS {{{2
:[N]Sexplore[!] [dir]... Split&Explore current file's directory *:Sexplore*
:Texplore [dir]... Tab & Explore *:Texplore*
:[N]Vexplore[!] [dir]... Vertical Split & Explore *:Vexplore*
:Lexplore [dir]... Left Explorer Toggle *:Lexplore*
Used with :Explore **/pattern : (also see |netrw-starstar|)
:Nexplore............. go to next matching file *:Nexplore*
@@ -1478,6 +1498,9 @@ DIRECTORY EXPLORATION COMMANDS {{{2
window will take over that window. Normally the splitting is taken
horizontally.
:Explore! is like :Explore, but will use vertical splitting.
:Lexplore [dir] toggles an Explorer window on the left hand side
of the current tab It will open a netrw window on the current
directory if [dir] is omitted.
:Sexplore will always split the window before invoking the local-directory
browser. As with Explore, the splitting is normally done
horizontally.
@@ -1486,7 +1509,7 @@ DIRECTORY EXPLORATION COMMANDS {{{2
:Hexplore! [dir] does an :Explore with |:aboveleft| horizontal splitting.
:Vexplore [dir] does an :Explore with |:leftabove| vertical splitting.
:Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting.
:Texplore [dir] does a tabnew before generating the browser window
:Texplore [dir] does a |:tabnew| before generating the browser window
By default, these commands use the current file's directory. However, one may
explicitly provide a directory (path) to use.
@@ -1505,6 +1528,8 @@ windows should have.
of the <2-leftmouse> map (which is only available under gvim and
cooperative terms).
Also see: |g:netrw_alto| |g:netrw_altv| |g:netrw_winsize|
*netrw-star* *netrw-starpat* *netrw-starstar* *netrw-starstarpat*
EXPLORING WITH STARS AND PATTERNS
@@ -1696,9 +1721,36 @@ As a quick shortcut, one may press >
to toggle between hiding files which begin with a period (dot) and not hiding
them.
Associated setting variable: |g:netrw_list_hide| |g:netrw_hide|
Associated setting variables: |g:netrw_list_hide| |g:netrw_hide|
Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh|
*netrw-gitignore*
Netrw provides a helper function 'netrw_gitignore#Hide()' that, when used with
|g:netrw_list_hide| automatically hides all git-ignored files.
'netrw_gitignore#Hide' searches for patterns in the following files:
'./.gitignore'
'./.git/info/exclude'
global gitignore file: `git config --global core.excludesfile`
system gitignore file: `git config --system core.excludesfile`
Files that do not exist, are ignored.
Git-ignore patterns are taken from existing files, and converted to patterns for
hiding files. For example, if you had '*.log' in your '.gitignore' file, it
would be converted to '.*\.log'.
To use this function, simply assign it's output to |g:netrw_list_hide| option.
Example: let g:netrw_list_hide= netrw_gitignore#Hide()
Git-ignored files are hidden in Netrw.
Example: let g:netrw_list_hide= netrw_gitignore#Hide('my_gitignore_file')
Function can take additional files with git-ignore patterns.
Example: g:netrw_list_hide= netrw_gitignore#Hide() . '.*\.swp$'
Combining 'netrw_gitignore#Hide' with custom patterns.
IMPROVING BROWSING *netrw-listhack* *netrw-ssh-hack* {{{2
Especially with the remote directory browser, constantly entering the password
@@ -1778,6 +1830,15 @@ passwords:
http://sial.org/howto/openssh/publickey-auth/
Ssh hints:
Thomer Gil has provided a hint on how to speed up netrw+ssh:
http://thomer.com/howtos/netrw_ssh.html
Alex Young has several hints on speeding ssh up:
http://usevim.com/2012/03/16/editing-remote-files/
LISTING BOOKMARKS AND HISTORY *netrw-qb* *netrw-listbookmark* {{{2
Pressing "qb" (query bookmarks) will list both the bookmarked directories and
@@ -1800,8 +1861,8 @@ directory. Attempts to make a local directory that already exists (as either
a file or a directory) will be detected, reported on, and ignored.
Related topics: |netrw-D|
Associated setting variables: |g:netrw_localmkdir| |g:netrw_mkdir_cmd|
|g:netrw_remote_mkdir|
Associated setting variables: |g:netrw_localmkdir| |g:netrw_mkdir_cmd|
|g:netrw_remote_mkdir| |netrw-%|
MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY *netrw-c* {{{2
@@ -1860,6 +1921,10 @@ like >
<
into $HOME/.vim/after/syntax/netrw.vim .
If the mouse is enabled and works with your vim, you may use <s-leftmouse> to
mark one or more files. You may mark multiple files by dragging the shifted
leftmouse. (see |netrw-mouse|)
*markfilelist* *global_markfilelist* *local_markfilelist*
All marked files are entered onto the global marked file list; there is only
one such list. In addition, every netrw buffer also has its own local marked
@@ -2114,7 +2179,15 @@ your browsing preferences. (see also: |netrw-settings|)
--- -----------
Var Explanation
--- -----------
< *g:netrw_alto* change from above splitting to below splitting
< *g:netrw_altfile* some like |CTRL-^| to return to the last
edited file. Choose that by setting this
parameter to 1.
Others like |CTRL-^| to return to the
netrw browsing buffer. Choose that by setting
this parameter to 0.
default: =0
*g:netrw_alto* change from above splitting to below splitting
by setting this variable (see |netrw-o|)
default: =&sb (see |'sb'|)
@@ -2142,6 +2215,10 @@ your browsing preferences. (see also: |netrw-settings|)
to get vertical splitting instead of
horizontal splitting.
Related topics:
|netrw-cr| |netrw-C|
|g:netrw_alto| |g:netrw_altv|
*g:netrw_browsex_viewer* specify user's preference for a viewer: >
"kfmclient exec"
"gnome-open"
@@ -2303,10 +2380,19 @@ your browsing preferences. (see also: |netrw-settings|)
stamp information and file size)
= 2: wide listing (multiple files in columns)
= 3: tree style listing
*g:netrw_list_hide* comma separated pattern list for hiding files
Patterns are regular expressions (see |regexp|)
Example: let g:netrw_list_hide= '.*\.swp$'
default: ""
There's some special support for git-ignore
files: you may add the output from the helper
function 'netrw_gitignore#Hide() automatically
hiding all gitignored files.
For more details see |netrw-gitignore|.
Examples:
let g:netrw_list_hide= '.*\.swp$'
let g:netrw_list_hide= netrw_gitignore#Hide().'.*\.swp$'
default: ""
*g:netrw_localcopycmd* ="cp" Linux/Unix/MacOS/Cygwin
="copy" Windows
@@ -2551,6 +2637,8 @@ To open a file in netrw's current directory, press "%". This map will
query the user for a new filename; an empty file by that name will be
placed in the netrw's current directory (ie. b:netrw_curdir).
Related topics: |netrw-d|
PREVIEW WINDOW *netrw-p* *netrw-preview* {{{2
@@ -2655,7 +2743,7 @@ One may select a netrw window for editing with the "C" mapping, or by setting
g:netrw_chgwin to the selected window number. Subsequent selection of a file
to edit (|netrw-cr|) will use that window.
Related topics: |netrw-cr|
Related topics: |netrw-cr| |g:netrw_browse_split|
Associated setting variables: |g:netrw_chgwin|
@@ -2988,15 +3076,78 @@ which is loaded automatically at startup (assuming :set nocp).
read/write your file over the network in a separate tab.
To save the file, use >
:tabnext
:set bt=
:w! DBG
< Please send that information to <netrw.vim>'s maintainer, >
< Furthermore, it'd be helpful if you would type >
:Dsep
< after each command you issue, thereby making it easier to
associate which part of the debugging trace is due to which
command.
Please send that information to <netrw.vim>'s maintainer, >
NdrOchip at ScampbellPfamily.AbizM - NOSPAM
<
==============================================================================
12. History *netrw-history* {{{1
v150: Jul 12, 2013 * removed a "keepalt" to allow ":e #" to
return to the netrw directory listing
Jul 13, 2013 * (Jonas Diemer) suggested changing
a <cWORD> to <cfile>.
Jul 21, 2013 * (Yuri Kanivetsky) reported that netrw's
use of mkdir did not produce directories
following umask.
Aug 27, 2013 * introduced |g:netrw_altfile| option
Sep 05, 2013 * s:Strlen() now uses |strdisplaywidth()|
when available, by default
Sep 12, 2013 * (Selyano Baldo) reported that netrw wasn't
opening some directories properly from the
command line.
Nov 09, 2013 * |:Lexplore| introduced
* (Ondrej Platek) reported an issue with
netrw's trees (P15). Fixed.
* (Jorge Solis) reported that "t" in
tree mode caused netrw to forget its
line position.
Dec 05, 2013 * Added <s-leftmouse> file marking
(see |netrw-mf|)
Dec 05, 2013 * (Yasuhiro Matsumoto) Explore should use
strlen() instead s:Strlen() when handling
multibyte chars with strpart()
(ie. strpart() is byte oriented, not
display-width oriented).
Dec 09, 2013 * (Ken Takata) Provided a patch; File sizes
and a portion of timestamps were wrongly
highlighted with the directory color when
setting `:let g:netrw_liststyle=1` on Windows.
* (Paul Domaskis) noted that sometimes
cursorline was activating in non-netrw
windows. All but one setting of cursorline
was done via setl; there was one that was
overlooked. Fixed.
Dec 24, 2013 * (esquifit) asked that netrw allow the
/cygdrive prefix be a user-alterable
parameter.
Jan 02, 2014 * Fixed a problem with netrw-based ballon
evaluation (ie. netrw#NetrwBaloonHelp()
not having been loaded error messages)
Jan 03, 2014 * Fixed a problem with tree listings
* New command installed: |:Ntree|
Jan 06, 2014 * (Ivan Brennan) reported a problem with
|netrw-P|. Fixed.
Jan 06, 2014 * Fixed a problem with |netrw-P| when the
modified file was to be abandoned.
Jan 15, 2014 * (Matteo Cavalleri) reported that when the
banner is suppressed and tree listing is
used, a blank line was left at the top of
the display. Fixed.
Jan 20, 2014 * (Gideon Go) reported that, in tree listing
style, with a previous window open, that
the wrong directory was being used to open
a file. Fixed. (P21)
v149: Apr 18, 2013 * in wide listing format, now have maps for
w and b to move to next/previous file
Apr 26, 2013 * one may now copy files in the same
@@ -3009,7 +3160,8 @@ which is loaded automatically at startup (assuming :set nocp).
May 01, 2013 * :Explore ftp://... wasn't working. Fixed.
May 02, 2013 * introduced |g:netrw_bannerbackslash| as
requested by Paul Domaskis.
May 18, 2013 * More fixes for windows (not cygwin)
Jul 03, 2013 * Explore now avoids splitting when a buffer
will be hidden.
v148: Apr 16, 2013 * changed Netrw's Style menu to allow direct
choice of listing style, hiding style, and
sorting style
+9 -5
View File
@@ -1,4 +1,4 @@
*repeat.txt* For Vim version 7.4. Last change: 2013 Jul 25
*repeat.txt* For Vim version 7.4. Last change: 2014 Feb 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -26,10 +26,14 @@ Chapter 26 of the user manual introduces repeating |usr_26.txt|.
Simple changes can be repeated with the "." command. Without a count, the
count of the last change is used. If you enter a count, it will replace the
last one. If the last change included a specification of a numbered register,
the register number will be incremented. See |redo-register| for an example
how to use this. Note that when repeating a command that used a Visual
selection, the same SIZE of area is used, see |visual-repeat|.
last one. |v:count| and |v:count1| will be set.
If the last change included a specification of a numbered register, the
register number will be incremented. See |redo-register| for an example how
to use this.
Note that when repeating a command that used a Visual selection, the same SIZE
of area is used, see |visual-repeat|.
*@:*
@: Repeat last command-line [count] times.
+2 -2
View File
@@ -1,4 +1,4 @@
*sign.txt* For Vim version 7.4. Last change: 2012 Jul 10
*sign.txt* For Vim version 7.4. Last change: 2013 Nov 17
VIM REFERENCE MANUAL by Gordon Prieur
@@ -173,7 +173,7 @@ REMOVING SIGNS *:sign-unplace* *E159*
Remove the placed sign at the cursor position.
LISTING PLACED SIGNS
LISTING PLACED SIGNS *:sign-place-list*
:sign place file={fname}
List signs placed in file {fname}.
+14
View File
@@ -1844,6 +1844,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
:GnatPretty ft_ada.txt /*:GnatPretty*
:GnatTags ft_ada.txt /*:GnatTags*
:Hexplore pi_netrw.txt /*:Hexplore*
:Lexplore pi_netrw.txt /*:Lexplore*
:Man filetype.txt /*:Man*
:MkVimball pi_vimball.txt /*:MkVimball*
:N editing.txt /*:N*
@@ -1855,6 +1856,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
:Nread pi_netrw.txt /*:Nread*
:Ns pi_netrw.txt /*:Ns*
:Nsource pi_netrw.txt /*:Nsource*
:Ntree pi_netrw.txt /*:Ntree*
:Nw pi_netrw.txt /*:Nw*
:Nwrite pi_netrw.txt /*:Nwrite*
:P various.txt /*:P*
@@ -2231,6 +2233,9 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
:foldopen fold.txt /*:foldopen*
:for eval.txt /*:for*
:fu eval.txt /*:fu*
:func-abort eval.txt /*:func-abort*
:func-dict eval.txt /*:func-dict*
:func-range eval.txt /*:func-range*
:function eval.txt /*:function*
:function-verbose eval.txt /*:function-verbose*
:g repeat.txt /*:g*
@@ -2763,6 +2768,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
:sign-jump sign.txt /*:sign-jump*
:sign-list sign.txt /*:sign-list*
:sign-place sign.txt /*:sign-place*
:sign-place-list sign.txt /*:sign-place-list*
:sign-undefine sign.txt /*:sign-undefine*
:sign-unplace sign.txt /*:sign-unplace*
:sil various.txt /*:sil*
@@ -4345,6 +4351,7 @@ E878 pattern.txt /*E878*
E879 syntax.txt /*E879*
E88 windows.txt /*E88*
E880 if_pyth.txt /*E880*
E881 autocmd.txt /*E881*
E89 message.txt /*E89*
E90 message.txt /*E90*
E91 options.txt /*E91*
@@ -5935,6 +5942,7 @@ g:ada_standard_types ft_ada.txt /*g:ada_standard_types*
g:ada_with_gnat_project_files ft_ada.txt /*g:ada_with_gnat_project_files*
g:ada_withuse_ordinary ft_ada.txt /*g:ada_withuse_ordinary*
g:clojure_align_multiline_strings indent.txt /*g:clojure_align_multiline_strings*
g:clojure_align_subforms indent.txt /*g:clojure_align_subforms*
g:clojure_fuzzy_indent indent.txt /*g:clojure_fuzzy_indent*
g:clojure_fuzzy_indent_blacklist indent.txt /*g:clojure_fuzzy_indent_blacklist*
g:clojure_fuzzy_indent_patterns indent.txt /*g:clojure_fuzzy_indent_patterns*
@@ -5983,6 +5991,7 @@ g:html_use_css syntax.txt /*g:html_use_css*
g:html_use_encoding syntax.txt /*g:html_use_encoding*
g:html_use_xhtml syntax.txt /*g:html_use_xhtml*
g:html_whole_filler syntax.txt /*g:html_whole_filler*
g:netrw_altfile pi_netrw.txt /*g:netrw_altfile*
g:netrw_alto pi_netrw.txt /*g:netrw_alto*
g:netrw_altv pi_netrw.txt /*g:netrw_altv*
g:netrw_banner pi_netrw.txt /*g:netrw_banner*
@@ -6017,6 +6026,7 @@ g:netrw_glob_escape pi_netrw.txt /*g:netrw_glob_escape*
g:netrw_hide pi_netrw.txt /*g:netrw_hide*
g:netrw_home pi_netrw.txt /*g:netrw_home*
g:netrw_http_cmd pi_netrw.txt /*g:netrw_http_cmd*
g:netrw_http_put_cmd pi_netrw.txt /*g:netrw_http_put_cmd*
g:netrw_http_xcmd pi_netrw.txt /*g:netrw_http_xcmd*
g:netrw_ignorenetrc pi_netrw.txt /*g:netrw_ignorenetrc*
g:netrw_keepdir pi_netrw.txt /*g:netrw_keepdir*
@@ -7074,6 +7084,7 @@ netrw-gd pi_netrw.txt /*netrw-gd*
netrw-getftype pi_netrw.txt /*netrw-getftype*
netrw-gf pi_netrw.txt /*netrw-gf*
netrw-gh pi_netrw.txt /*netrw-gh*
netrw-gitignore pi_netrw.txt /*netrw-gitignore*
netrw-gp pi_netrw.txt /*netrw-gp*
netrw-gx pi_netrw.txt /*netrw-gx*
netrw-handler pi_netrw.txt /*netrw-handler*
@@ -7088,6 +7099,7 @@ netrw-incompatible pi_netrw.txt /*netrw-incompatible*
netrw-internal-variables pi_netrw.txt /*netrw-internal-variables*
netrw-intro-browse pi_netrw.txt /*netrw-intro-browse*
netrw-leftmouse pi_netrw.txt /*netrw-leftmouse*
netrw-lexplore pi_netrw.txt /*netrw-lexplore*
netrw-list pi_netrw.txt /*netrw-list*
netrw-listbookmark pi_netrw.txt /*netrw-listbookmark*
netrw-listhack pi_netrw.txt /*netrw-listhack*
@@ -7118,6 +7130,7 @@ netrw-netrc pi_netrw.txt /*netrw-netrc*
netrw-nexplore pi_netrw.txt /*netrw-nexplore*
netrw-noload pi_netrw.txt /*netrw-noload*
netrw-nread pi_netrw.txt /*netrw-nread*
netrw-ntree pi_netrw.txt /*netrw-ntree*
netrw-nwrite pi_netrw.txt /*netrw-nwrite*
netrw-o pi_netrw.txt /*netrw-o*
netrw-options pi_netrw.txt /*netrw-options*
@@ -7674,6 +7687,7 @@ s/\2 change.txt /*s\/\\2*
s/\3 change.txt /*s\/\\3*
s/\9 change.txt /*s\/\\9*
s/\<CR> change.txt /*s\/\\<CR>*
s/\= change.txt /*s\/\\=*
s/\E change.txt /*s\/\\E*
s/\L change.txt /*s\/\\L*
s/\U change.txt /*s\/\\U*
+147 -61
View File
@@ -1,4 +1,4 @@
*todo.txt* For Vim version 7.4. Last change: 2013 Nov 14
*todo.txt* For Vim version 7.4. Last change: 2014 Feb 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -34,96 +34,133 @@ not be repeated below, unless there is extra information.
*known-bugs*
-------------------- Known bugs and current work -----------------------
Patch From Lech Lorens doesn't quite work:
Problem: When using ":'<,'>del" errors may be given for the visual line
numbers being out of range.
Solution: Reset Visual mode in ":del". (Lech Lorens)
Files: src/ex_docmd.c
When 'paste' is changed with 'pastetoggle', the ruler doesn't reflect this
right away. (Samuel Ferencik, 2010 Dec 7)
Patch to fix that status line isn't redrawn when 'pastetoggle' is set.
(Nobuhiro Takasaki, 2014 Feb 11)
Using \1 in pattern goes one line too far. (Bohr Shaw, 2013 Sep 5)
Column is OK. "/\v(^.+\n)\1/e" (John Little, Sep 5)
Also, matches start of 2nd line, not the whole line.
NFA regexp doesn't handle backreference correctly. (Ryuichi Hayashida, 2013
Oct 10)
Error for incomplete help argument. (John Beckett, 2013 Sep 12)
Should win_redr_custom() not be allowed to use recursively?
(Yasuhiro Matsumoto, 2013 Aug 15)
NFA engine combining character mismatch. (glts, 2013 Aug 27)
Remark Dominique, Aug 27
Regexp problems:
- NFA regexp doesn't count tab matches correctly. (Urtica Dioica / gaultheria
Shallon, 2013 Nov 18)
- After patch 7.4.100 there is still a difference between NFA and old engine.
25 a's with pattern \v^(aa+)\1+$ (Urtica Dioica, 2013 Nov 21) Also: 9 a's
with pattern \v^(a{-2,})\1+$ (Nov 23)
- NFA engine combining character mismatch. (glts, 2013 Aug 27)
Remark from Dominique, Aug 27
- Issue 164: freeze on regexp search.
- NFA problem with non-greedy match and branches. (Ingo Karkat, 2013 Nov 29)
- Ignorecase not handled properly for multi-byte characters. (Axel Bender,
2013 Dec 11)
- Using \@> and \?. (Brett Stahlman, 2013 Dec 21) Remark from Marcin Szamotulski
Remark from Brett 2014 Jan 6 and 7.
- Bug with back references. (Lech Lorens, 2014 Feb 3)
- Bug when using \>. (Ramel, 2014 Feb 2)
Problem that a previous silent ":throw" causes a following try/catch not to
work. (ZyX, 2013 Sep 28)
Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
":cd C:\Windows\System32\drivers\etc*" does not work, even though the
directory exists. (Sergio Gallelli, 2013 Dec 29)
Issue 164: freeze on regexp search.
Patch 7.4.085 breaks Visual insert in some situations. (Issue 193)
Patch by Christian Brabandt, 2014 Jan 16.
Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
Update for Clojure ftplugin. (Sung Pae). Await discussion about formatting in
ftplugins.
Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
Patch to support slices in Python vim.List. (ZyX, 2013 Oct 20)
Patch to make "J" set '[ and '] marks. (Christian Brabandt, 2013 Dec 11)
Any compatibility problems?
Patch to support iterator on Python vim.options. (ZyX, 2013 Nov 2)
Patch to add :S modifier for excaping the current file name.
(ZyX, 2013 Nov 30) Update Dec 5.
Patch to make Dictionary.update() work without arguments.
(ZyX, 2013 Oct 19)
Patch for Cobol ftplugin. (ZyX, 2013 Oct 20)
Await response from maintainer.
Include systemverilog file? Two votes yes.
Issu 197: ]P doesn't paste over Visual selection. With patch from Christian
Brabandt, Feb 6.
Problem with 'spellsuggest' file, only works for some words.
(Cesar Romani, 2013 Aug 20) Depends on file name? (Aug 24)
Additional remark by glts: the suggested words are marked bad?
8 non-ASCII font names don't work. Need to convert from 'encoding' and use
the wide functions. Patch by Ken Takata, 2013 Dec 22.
Update 2014 Jan 6.
Syntax highlighting slow (hangs) in SASS file. (Niek Bosch, 2013 Aug 21)
Patch for mksession. (Nobuhiro Takasaki, 2014 Jan 31)
Also fixes another problem (following email)
Adding "~" to 'cdpath' doesn't work for completion? (Davido, 2013 Aug 19)
Crash with ":%s/\n//g" on long file. (Aidan Marlin, 2014 Jan 15)
Christian Brabandt: patch to run this into a join. (2014 Jan 18)
Suggestion to not save replaced line for undo: Yukihiro Nakadaira, 2014 Jan
25.
Add digraph for Rouble: =P. What's the Unicode?
Issue 174: Detect Mason files.
Phpcomplete.vim update. (Complex, 2014 Jan 15)
PHP syntax is extremely slow. (Anhad Jai Singh, 2014 Jan 19)
Can we make ":unlet $VAR" use unsetenv() to delete the env var?
What for systems that don't have unsetenv()?
spec ftplugin: patch from Igor Gnatenko, 2014 Jan 26.
Include if maintainers don't respond.
Patch to make has() check for Vim version and patch at the same time.
(Marc Weber, 2013 Jun 7)
Regression on pach 7.4.034. (Ingo Karkat, 2013 Nov 20)
Patch to include smack support (Linux security library). (Jose Bollo, 2014 Jan
14) Update Jan 15.
Tag list, as used for :tjump, does not unescape regexp. (Gary Johnson, 2014 Jan
6) With patch in another message.
VMS: Select() doesn't work properly, typing ESC may hang Vim. Use sys$qiow
instead. (Samuel Ferencik, 2013 Sep 28)
Series of patches for NL vs NUL handling. (ZyX, 2013 Nov 3, Nov 9)
Patch to add flag to shortmess to avoid giving completion messages.
(Shougo Matsu, 2014 Jan 6, update Jan 11)
Patch to add v:completed_item. (Shougo Matsu, 2013 Nov 29).
Patch to make test 100 work on MS-Windows. (Taro Muraoka, 2013 Dec 12)
Patch to define macros for hardcoded values. (Elias Diem, 2013 Dec 14)
Perl: support for Activestate perl 5.18: Issue 170.
Several syntax file match "^\s*" which may get underlined if that's in the
highlight group. Add a "\zs" after it?
Patch to fix temp directories for Windows, so that it works without tweaking.
Issue 28.
Go through more coverity reports.
Include Haiku port? (Adrien Destugues, Siarzhuk Zharski, 2013 Oct 24)
Updated spec ftplugin. (Matěj Cepl, 2013 Oct 16)
Patch to make ColorScheme autocommand match with the colorscheme name instead
of the buffer name. (Christian Brabandt, 2013 Sep 25)
Patch to right-align signs. (James Kolb (email james), 2013 Sep 23)
Patch to handle integer overflow. (Aaron Burrow, 2013 Dec 12)
With "$" in 'cpoptions' the popup menu isn't fully drawn. (Matti Niemenmaa,
2013 Sep 5)
"gUgn" cannot be repeated, while "dgn" can. (Dimitar Dimitrov)
Patch by Christian Brabandt (2013 Aug 12)
Also notes by Christian Wellenbrock, Nov 13.
Several Win32 functions are not using Unicode.
Patches to fix this. (Ken Takata, 2013 Aug 9)
Patch to add item in 'listchars' to repeat first character. (Nathaniel Braun,
pragm, 2013 Oct 13)
@@ -132,27 +169,56 @@ Undo message is not always properly displayed. Patch by Ken Takata, 2013 oct
/[b-a] gives error E16, should probably be E769.
7 Windows XP: When using "ClearType" for text smoothing, a column of yellow
pixels remains when typing spaces in front of a "D" ('guifont' set to
"lucida_console:h8").
Patch by Thomas Tuegel, also for GTK, 2013 Nov 24
:help gives example for z?, but it does not work. m? and t? do work.
Python: Extended funcrefs: use func_T* structure in place of char_u* function
names. (ZyX, 2013 Jul 15, update Sep 22, 24, 28)
names.
(ZyX, 2013 Jul 15, update Sep 22, 24, 28; Update 2013 Dec 15, 2014 Jan 6)
Also fixes Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)
Patch to add funcref to Lua. (Luis Carvalho, 2013 Sep 4)
With tests: Sep 5.
Patch to fix that on suckless Terminal mousewheel up does not work.
(Ralph Eastwood, 2013 Nov 25)
Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
Patch to make external commands work with multi-byte characters on Win32 when
'encoding' differs from the active codepage. (Yasuhiro Matsumoto, 2013 Aug 5)
Checking runtime scripts: Thilo Six, 2012 Jun 6.
When evaluating expression in backticks, autoload doesn't work.
(Andy Wokula, 2013 Dec 14)
Using <nr>ifoobar<esc> can slow down Vim. Patch by Christian Brabandt, 2013
Dec 13.
Fold can't be opened after ":move". (Ein Brown)
Patch from Christian Brabandt doesn't fix it completely.
Patch from Christian Brabandt to preserve upper case marks when wiping out a
buffer. (2013 Dec 9)
Patch for drag&drop reordering of GUI tab pages reordering.
(Ken Takata, 2013 Nov 22, second one, also by Masamichi Abe)
":sign-jump" uses first window in buffer instead of current window.
Patch by James McCoy, 2013 Nov 22.
GTK: problem with 'L' in 'guioptions' changing the window width.
(Aaron Cornelius, 2012 Feb 6)
Patch to add option that tells whether small deletes go into the numbered
registers. (Aryeh Leib Taurog, 2013 Nov 18)
Win32: use different args for SearchPath()? (Yasuhiro Matsumoto, 2009 Jan 30)
Also fixes wrong result from executable().
Update from Ken Takata, 2014 Jan 10.
Javascript file where indent gets stuck on: GalaxyMaster, 2012 May 3.
The BufUnload event is triggered when re-using the empty buffer.
@@ -163,6 +229,10 @@ The CompleteDone autocommand needs some info passed to it:
- The word that was selected (empty if abandoned complete)
- Type of completion: tag, omnifunc, user func.
Patch to allow more types in remote_expr(). (Lech Lorens, 2014 Jan 5)
Doesn't work for string in list. Other way to pass all types of variables
reliably?
Using ":call foo#d.f()" doesn't autoload the "foo.vim" file.
That is, calling a dictionary function on an autoloaded dict.
Works OK for echo, just not for ":call" and ":call call()". (Ted, 2011 Mar
@@ -177,6 +247,15 @@ Or should we add a more general mechanism, like lambda functions?
Problem caused by patch 7.3.638: window->open does not update window
correctly. Issue 91.
Patch to add {lhs} to :mapclear: clear all maps starting with {lhs}.
(Christian Brabandt, 2013 Dec 9)
The garbage collector may use too much stack. Make set_ref_in_item()
iterative instead of recursive. Test program by Marc Weber (2013 Dec 10)
Exception caused by argument of return is not caught by try/catch.
(David Barnett, 2013 Nov 19)
8 'backupdir' and 'directory' should use $TMPDIR, $TMP and/or $TEMP when
defined.
Issue 28.
@@ -243,8 +322,18 @@ a reboot.
MS-Windows: Crash opening very long file name starting with "\\".
(Christian Brock, 2012 Jun 29)
Patch to have text objects defined by arbitrary single characters. (Daniel
Thau, 2013 Nov 20, 2014 Jan 29, 2014 Jan 31)
Ben Fritz: problem with 'selection' set to "exclusive".
Patch to select the next or previous text object if there isn't one under the
cursor. (Daniel Thau, 2013 Nov 20)
patch to add "combine" flag to syntax commands. (so8res, 2012 Dec 6)
Bug caused by patch 7.3.1288? Issue 183.
I can't reproduce it.
Syntax update problem in one buffer opened in two windows, bottom window is
not correctly updated. (Paul Harris, 2012 Feb 27)
@@ -370,6 +459,8 @@ Patch to add digraph() function. (Christian Brabandt, 2013 Aug 22, update Aug
Patch for input method status. (Hirohito Higashi, 2012 Apr 18)
Update Vim app icon (for Gnome). (Jakub Steiner, 2013 Dec 6)
Patch to use .png icons for the toolbar on MS-Windows. (Martin Gieseking, 2013
Apr 18)
@@ -388,8 +479,6 @@ And one for gui_x11.txt.
finddir() has the same problem. (Yukihiro Nakadaira, 2012 Jan 10)
Requires a rewrite of the file_file_in_path code.
Problem with l: dictionary being locked in a function. (ZyX, 2011 Jul 21)
Should use has("browsefilter") in ftplugins. Requires patch 7.3.593.
Update for vim2html.pl. (Tyru, 2013 Feb 22)
@@ -471,8 +560,6 @@ When using a Vim server, a # in the path causes an error message.
Setting $HOME on MS-Windows is not very well documented. Suggestion by Ben
Fritz (2011 Oct 27).
Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)
Bug: Windows 7 64 bit system freezes when 'clipboard' set to "unnamed" and
doing ":g/test/d". Putting every delete on the clipboard? (Robert Chan, 2011
Jun 17)
@@ -516,6 +603,8 @@ following "redir" command gives an error for not being able to access s:foo.
When setqflist() uses a filename that triggers a BufReadCmd autocommand Vim
doesn't jump to the correct line with :cfirst. (ZyX, 2011 Sep 18)
Behavior of i" and a" text objects isn't logical. (Ben Fritz, 2013 Nov 19)
7 Make "ga" show the digraph for a character, if it exists.
Patch from Christian Brabandt, 2011 Aug 19.
@@ -656,7 +745,7 @@ Assume the system converts between the actual encoding of the filesystem to
the system encoding (usually utf-8).
Patch to add GUI colors to the terminal, when it supports it. (ZyX, 2013 Jan
26)
26, update 2013 Dec 14)
Problem producing tags file when hebrew.frx is present. It has a BOM.
Results in E670. (Tony Mechelynck, 2010 May 2)
@@ -694,9 +783,6 @@ C-indenting: A matching { in a comment is ignored, but intermediate { are not
checked to be in a comment. Implement FM_SKIPCOMM flag of findmatchlimit().
Issue 46.
When 'paste' is changed with 'pastetoggle', the ruler doesn't reflect this
right away. (Samuel Ferencik, 2010 Dec 7)
Mac with X11: clipboard doesn't work properly. (Raf, 2010 Aug 16)
Using CompilerSet doesn't record where an option was set from. E.g., in the
@@ -934,8 +1020,6 @@ system when 'encoding' is "utf-8".
Win32 GUI: last message from startup doesn't show up when there is an echoerr
command. (Cyril Slobin, 2009 Mar 13)
Win32: use different args for SearchPath()? (Yasuhiro Matsumoto, 2009 Jan 30)
Win32: completion of file name ":e c:\!test" results in ":e c:\\!test", which
does not work. (Nieko Maatjes, 2009 Jan 8, Ingo Karkat, 2009 Jan 22)
@@ -1399,6 +1483,10 @@ Does the conversion in the other direction work when 'fileencodings' is set
properly?
Add a few features to xxd. (Vadim Vygonets, 2013 Nov 11)
Patches: 2013 Nov 19
1: Add -e: little endian hexdump
2: Add -o: add offset to displayed position
3: Change displayed file position width to 8 chars
Cursor displayed in the wrong position when using 'numberwidth'. (James Vega,
2007 Jun 21)
@@ -1555,6 +1643,9 @@ Completing with 'wildmenu' and using <Up> and <Down> to move through directory
tree stops unexpectedly when using ":cd " and entering a directory that
doesn't contain other directories.
Default for 'background' is wrong when using xterm with 256 colors.
Table with estimates from Matteo Cavalleri, 2014 Jan 10.
Setting 'background' resets the Normal background color:
highlight Normal ctermbg=DarkGray
set background=dark
@@ -1960,8 +2051,6 @@ GTK+ GUI known bugs:
Win32 GUI known bugs:
- Win32: tearoff menu window should have a scrollbar when it's taller than
the screen.
8 non-ASCII font names don't work. Need to convert from 'encoding' and use
the wide functions.
8 On Windows 98 the unicows library is needed to support functions with UCS2
file names. Can we load unicows.dll dynamically?
8 The -P argument doesn't work very well with many MDI applications.
@@ -1969,9 +2058,6 @@ Win32 GUI known bugs:
Tutorial: http://win32assembly.online.fr/tut32.html
8 In eval.c, io.h is included when MSWIN32 is defined. Shouldn't this be
WIN32? Or can including io.h be moved to vim.h? (Dan Sharp)
7 Windows XP: When using "ClearType" for text smoothing, a column of yellow
pixels remains when typing spaces in front of a "D" ('guifont' set to
"lucida_console:h8").
6 Win32 GUI: With "-u NONE -U NONE" and doing "CTRL-W v" "CTRL-W o", the ":"
of ":only" is highlighted like the cursor. (Lipelis)
8 When 'encoding' is "utf-8", should use 'guifont' for both normal and wide
+22 -2
View File
@@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 7.4. Last change: 2013 Feb 20
*usr_41.txt* For Vim version 7.4. Last change: 2014 Jan 10
VIM USER MANUAL - by Bram Moolenaar
@@ -595,13 +595,17 @@ String manipulation: *string-functions*
matchlist() like matchstr() and also return submatches
stridx() first index of a short string in a long string
strridx() last index of a short string in a long string
strlen() length of a string
strlen() length of a string in bytes
strchars() length of a string in characters
strwidth() size of string when displayed
strdisplaywidth() size of string when displayed, deals with tabs
substitute() substitute a pattern match with a string
submatch() get a specific match in ":s" and substitute()
strpart() get part of a string
expand() expand special keywords
iconv() convert text from one encoding to another
byteidx() byte index of a character in a string
byteidxcomp() like byteidx() but count composing characters
repeat() repeat a string multiple times
eval() evaluate a string expression
@@ -656,6 +660,9 @@ Floating point computation: *float-functions*
ceil() round up
floor() round down
trunc() remove value after decimal point
fmod() remainder of division
exp() exponential
log() natural logarithm (logarithm to base e)
log10() logarithm to base 10
pow() value of x to the exponent y
sqrt() square root
@@ -675,6 +682,7 @@ Other computation: *bitwise-function*
invert() bitwise invert
or() bitwise OR
xor() bitwise XOR
sha256() SHA-256 hash
Variables: *var-functions*
type() type of a variable
@@ -697,11 +705,15 @@ Cursor and mark position: *cursor-functions* *mark-functions*
wincol() window column number of the cursor
winline() window line number of the cursor
cursor() position the cursor at a line/column
screencol() get screen column of the cursor
screenrow() get screen row of the cursor
getpos() get position of cursor, mark, etc.
setpos() set position of cursor, mark, etc.
byte2line() get line number at a specific byte count
line2byte() byte count at a specific line
diff_filler() get the number of filler lines above a line
screenattr() get attribute at a screen line/row
screenchar() get character code at a screen line/row
Working with text in the current buffer: *text-functions*
getline() get a line or list of lines from the buffer
@@ -883,14 +895,22 @@ Various: *various-functions*
libcall() call a function in an external library
libcallnr() idem, returning a number
undofile() get the name of the undo file
undotree() return the state of the undo tree
getreg() get contents of a register
getregtype() get type of a register
setreg() set contents and type of a register
shiftwidth() effective value of 'shiftwidth'
taglist() get list of matching tags
tagfiles() get a list of tags files
luaeval() evaluate Lua expression
mzeval() evaluate |MzScheme| expression
py3eval() evaluate Python expression (|+python3|)
pyeval() evaluate Python expression (|+python|)
==============================================================================
*41.7* Defining a function
+2 -2
View File
@@ -1,4 +1,4 @@
*version7.txt* For Vim version 7.4. Last change: 2013 Sep 03
*version7.txt* For Vim version 7.4. Last change: 2013 Nov 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -7190,7 +7190,7 @@ More encryption *new-more-encryption*
---------------
Support for Blowfish encryption. Added the 'cryptmethod' option.
Mostly by Moshin Ahmed.
Mostly by Mohsin Ahmed.
Also encrypt the text in the swap file and the undo file.
+7 -1
View File
@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2013 Nov 13
" Last Change: 2014 Feb 11
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -106,6 +106,9 @@ au BufNewFile,BufRead *.run setf ampl
" Ant
au BufNewFile,BufRead build.xml setf ant
" Arduino
au BufNewFile,BufRead *.ino,*.pde setf arduino
" Apache style config file
au BufNewFile,BufRead proftpd.conf* call s:StarSetf('apachestyle')
@@ -2240,6 +2243,9 @@ au BufNewFile,BufRead *.v setf verilog
" Verilog-AMS HDL
au BufNewFile,BufRead *.va,*.vams setf verilogams
" SystemVerilog
au BufNewFile,BufRead *.sv setf systemverilog
" VHDL
au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl
au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl')
+14 -17
View File
@@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: generic Changelog file
" Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2012-08-23
" Latest Revision: 2014-01-10
" Variables:
" g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) -
" description: the timeformat used in ChangeLog entries.
@@ -122,12 +122,12 @@ if &filetype == 'changelog'
" Format used for new date entries.
if !exists('g:changelog_new_date_format')
let g:changelog_new_date_format = "%d %u\n\n\t* %c\n\n"
let g:changelog_new_date_format = "%d %u\n\n\t* %p%c\n\n"
endif
" Format used for new entries to current date entry.
if !exists('g:changelog_new_entry_format')
let g:changelog_new_entry_format = "\t* %c"
let g:changelog_new_entry_format = "\t* %p%c"
endif
" Regular expression used to find a given date entry.
@@ -143,16 +143,16 @@ if &filetype == 'changelog'
" Substitutes specific items in new date-entry formats and search strings.
" Can be done with substitute of course, but unclean, and need \@! then.
function! s:substitute_items(str, date, user)
function! s:substitute_items(str, date, user, prefix)
let str = a:str
let middles = {'%': '%', 'd': a:date, 'u': a:user, 'c': '{cursor}'}
let middles = {'%': '%', 'd': a:date, 'u': a:user, 'p': a:prefix, 'c': '{cursor}'}
let i = stridx(str, '%')
while i != -1
let inc = 0
if has_key(middles, str[i + 1])
let mid = middles[str[i + 1]]
let str = strpart(str, 0, i) . mid . strpart(str, i + 2)
let inc = strlen(mid)
let inc = strlen(mid) - 1
endif
let i = stridx(str, '%', i + 1 + inc)
endwhile
@@ -171,7 +171,7 @@ if &filetype == 'changelog'
endfunction
" Internal function to create a new entry in the ChangeLog.
function! s:new_changelog_entry()
function! s:new_changelog_entry(prefix)
" Deal with 'paste' option.
let save_paste = &paste
let &paste = 1
@@ -179,7 +179,7 @@ if &filetype == 'changelog'
" Look for an entry for today by our user.
let date = strftime(g:changelog_dateformat)
let search = s:substitute_items(g:changelog_date_entry_search, date,
\ s:username())
\ s:username(), a:prefix)
if search(search) > 0
" Ok, now we look for the end of the date entry, and add an entry.
call cursor(nextnonblank(line('.') + 1), 1)
@@ -188,7 +188,7 @@ if &filetype == 'changelog'
else
let p = line('.')
endif
let ls = split(s:substitute_items(g:changelog_new_entry_format, '', ''),
let ls = split(s:substitute_items(g:changelog_new_entry_format, '', '', a:prefix),
\ '\n')
call append(p, ls)
call cursor(p + 1, 1)
@@ -198,7 +198,7 @@ if &filetype == 'changelog'
" No entry today, so create a date-user header and insert an entry.
let todays_entry = s:substitute_items(g:changelog_new_date_format,
\ date, s:username())
\ date, s:username(), a:prefix)
" Make sure we have a cursor positioning.
if stridx(todays_entry, '{cursor}') == -1
let todays_entry = todays_entry . '{cursor}'
@@ -206,7 +206,7 @@ if &filetype == 'changelog'
" Now do the work.
call append(0, split(todays_entry, '\n'))
" Remove empty lines at end of file.
if remove_empty
$-/^\s*$/-1,$delete
@@ -223,8 +223,8 @@ if &filetype == 'changelog'
endfunction
if exists(":NewChangelogEntry") != 2
noremap <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry()<CR>
command! -nargs=0 NewChangelogEntry call s:new_changelog_entry()
noremap <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry('')<CR>
command! -nargs=0 NewChangelogEntry call s:new_changelog_entry('')
endif
let b:undo_ftplugin = "setl com< fo< et< ai<"
@@ -277,10 +277,7 @@ else
if exists('b:changelog_entry_prefix')
let prefix = call(b:changelog_entry_prefix, [])
else
let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "") . ':'
endif
if !empty(prefix)
let prefix = ' ' . prefix
let prefix = substitute(strpart(expand('%:p'), strlen(path)), '^/\+', "", "")
endif
let buf = bufnr(changelog)
+6 -5
View File
@@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: cobol
" Author: Tim Pope <vimNOSPAM@tpope.info>
" $Id: cobol.vim,v 1.1 2007/05/05 17:24:38 vimboss Exp $
" Last Update: By ZyX: use shiftwidth()
" Insert mode mappings: <C-T> <C-D> <Tab>
" Normal mode mappings: < > << >> [[ ]] [] ][
@@ -113,7 +113,7 @@ endfunction
function! s:increase(...)
let lnum = '.'
let sw = &shiftwidth
let sw = shiftwidth()
let i = a:0 ? a:1 : indent(lnum)
if i >= 11
return sw - (i - 11) % sw
@@ -128,7 +128,7 @@ endfunction
function! s:decrease(...)
let lnum = '.'
let sw = &shiftwidth
let sw = shiftwidth()
let i = indent(a:0 ? a:1 : lnum)
if i >= 11 + sw
return 1 + (i + 12) % sw
@@ -147,7 +147,7 @@ function! CobolIndentBlock(shift)
let head = strpart(getline('.'),0,7)
let tail = strpart(getline('.'),7)
let indent = match(tail,'[^ ]')
let sw = &shiftwidth
let sw = shiftwidth()
let shift = a:shift
if shift > 0
if indent < 4
@@ -221,7 +221,8 @@ endfunction
function! s:Tab()
if (strpart(getline('.'),0,col('.')-1) =~ '^\s*$' && &sta)
return s:IncreaseIndent()
elseif &sts == &sw && &sts != 8 && &et
" &softtabstop < 0: &softtabstop follows &shiftwidth
elseif (&sts < 0 || &sts == shiftwidth()) && &sts != 8 && &et
return s:repeat(" ",s:increase(col('.')-1))
else
return "\<Tab>"
+2 -2
View File
@@ -3,7 +3,7 @@
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
" Former Maintainers: Michael Piefel <piefel@informatik.hu-berlin.de>
" Stefano Zacchiroli <zack@debian.org>
" Last Change: 2012-01-31
" Last Change: 2014-01-31
" License: Vim License
" URL: http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/debchangelog.vim
@@ -152,7 +152,7 @@ function CloseBug()
endfunction
function Distribution(dist)
call setline(1, substitute(getline(1), ") [[:lower:] ]*;", ") " . a:dist . ";", ""))
call setline(1, substitute(getline(1), ') *\%(UNRELEASED\|\l\+\);', ") " . a:dist . ";", ""))
endfunction
function Urgency(urg)
+15
View File
@@ -0,0 +1,15 @@
" Vim filetype plugin
" Language: Java properties file
" Maintainer: David Bürgin <676c7473@gmail.com>
" Last Change: 2013-11-19
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
setlocal formatoptions-=t
setlocal comments=:#,:!
setlocal commentstring=#\ %s
let b:undo_ftplugin = "setl cms< com< fo<"
+18 -18
View File
@@ -1,7 +1,7 @@
" Vim filetype plugin file
" Language: python
" Maintainer: Johannes Zellner <johannes@zellner.org>
" Last Change: 2013 Sep 25
" Last Change: 2014 Feb 09
" Last Change By Johannes: Wed, 21 Apr 2004 13:13:08 CEST
if exists("b:did_ftplugin") | finish | endif
@@ -11,11 +11,11 @@ set cpo&vim
setlocal cinkeys-=0#
setlocal indentkeys-=0#
setlocal include=\s*\\(from\\\|import\\)
setlocal include=^\\s*\\(from\\\|import\\)
setlocal includeexpr=substitute(v:fname,'\\.','/','g')
setlocal suffixesadd=.py
setlocal comments-=:%
setlocal commentstring=#%s
setlocal comments=b:#,fb:-
setlocal commentstring=#\ %s
setlocal omnifunc=pythoncomplete#Complete
@@ -26,21 +26,21 @@ nnoremap <silent> <buffer> [[ :call <SID>Python_jump('?^\(class\\|def\)')<cr>
nnoremap <silent> <buffer> ]m :call <SID>Python_jump('/^\s*\(class\\|def\)')<cr>
nnoremap <silent> <buffer> [m :call <SID>Python_jump('?^\s*\(class\\|def\)')<cr>
if exists('*<SID>Python_jump') | finish | endif
if !exists('*<SID>Python_jump')
fun! <SID>Python_jump(motion) range
let cnt = v:count1
let save = @/ " save last search pattern
mark '
while cnt > 0
silent! exe a:motion
let cnt = cnt - 1
endwhile
call histdel('/', -1)
let @/ = save " restore last search pattern
endfun
endif
fun! <SID>Python_jump(motion) range
let cnt = v:count1
let save = @/ " save last search pattern
mark '
while cnt > 0
silent! exe a:motion
let cnt = cnt - 1
endwhile
call histdel('/', -1)
let @/ = save " restore last search pattern
endfun
if has("gui_win32") && !exists("b:browsefilter")
if has("browsefilter") && !exists("b:browsefilter")
let b:browsefilter = "Python Files (*.py)\t*.py\n" .
\ "All Files (*.*)\t*.*\n"
endif
+36
View File
@@ -0,0 +1,36 @@
" Vim filetype plugin file
" Language: Windows Registry export with regedit (*.reg)
" Maintainer: Cade Forester <ahx2323@gmail.com>
" Latest Revision: 2014-01-09
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
let b:undo_ftplugin =
\ 'let b:browsefilter = "" | ' .
\ 'setlocal ' .
\ 'comments< '.
\ 'commentstring< ' .
\ 'formatoptions< '
if has( 'gui_win32' )
\ && !exists( 'b:browsefilter' )
let b:browsefilter =
\ 'registry files (*.reg)\t*.reg\n' .
\ 'All files (*.*)\t*.*\n'
endif
setlocal comments=:;
setlocal commentstring=;\ %s
setlocal formatoptions-=t
setlocal formatoptions+=croql
let &cpo = s:cpo_save
unlet s:cpo_save
+11
View File
@@ -0,0 +1,11 @@
" Vim filetype plugin file
" Language: SystemVerilog
" Maintainer: kocha <kocha.lsifrontend@gmail.com>
" Last Change: 12-Aug-2013.
if exists("b:did_ftplugin")
finish
endif
" Behaves just like Verilog
runtime! ftplugin/verilog.vim
+6 -2
View File
@@ -6,7 +6,7 @@
" Maintainer: Sung Pae <self@sungpae.com>
" URL: https://github.com/guns/vim-clojure-static
" License: Same as Vim
" Last Change: 08 September 2013
" Last Change: 16 December 2013
" TODO: Indenting after multibyte characters is broken:
" (let [Δ (if foo
@@ -53,6 +53,10 @@ if exists("*searchpairpos")
let g:clojure_align_multiline_strings = 0
endif
if !exists('g:clojure_align_subforms')
let g:clojure_align_subforms = 0
endif
function! s:SynIdName()
return synIDattr(synID(line("."), col("."), 0), "name")
endfunction
@@ -284,7 +288,7 @@ if exists("*searchpairpos")
call search('\v\_s', 'cW')
call search('\v\S', 'W')
if paren[0] < line(".")
return paren[1] + &shiftwidth - 1
return paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)
endif
call search('\v\S', 'bW')
+2 -2
View File
@@ -3,7 +3,7 @@
" Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr>
" URL: http://www.2072productions.com/vim/indent/php.vim
" Home: https://github.com/2072/PHP-Indenting-for-VIm
" Last Change: 2013 August 7th
" Last Change: 2014 Jan 21
" Version: 1.39
"
"
@@ -642,7 +642,7 @@ function! GetPhpIndent()
if previous_line =~ '^\s*}\|;\s*}'.endline " XXX
call cursor(last_line_num, 1)
call search('}\|;\s*}'.endline, 'W')
call search('}\|;\s*}'.endline, 'cW')
let oldLastLine = last_line_num
let last_line_num = searchpair('{', '', '}', 'bW', 'Skippmatch()')
+13 -2
View File
@@ -1,7 +1,8 @@
" Vim indent file
" Language: Shell Script
" Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2010-01-06
" Maintainer: Peter Aronoff <telemachus@arpinum.org>
" Original Author: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2013-11-28
if exists("b:did_indent")
finish
@@ -77,6 +78,8 @@ function! GetShIndent()
let line = getline(v:lnum)
if line =~ '^\s*\%(then\|do\|else\|elif\|fi\|done\)\>' || line =~ '^\s*}'
let ind -= s:indent_value('default')
elseif line =~ '^\s*esac\>' && s:is_case_empty(getline(v:lnum - 1))
let ind -= s:indent_value('default')
elseif line =~ '^\s*esac\>'
let ind -= (s:is_case_label(pine, lnum) && s:is_case_ended(pine) ?
\ 0 : s:indent_value('case-statements')) +
@@ -154,5 +157,13 @@ function! s:is_case_ended(line)
return s:is_case_break(a:line) || a:line =~ ';[;&]\s*\%(#.*\)\=$'
endfunction
function! s:is_case_empty(line)
if a:line =~ '^\s*$' || a:line =~ '^\s*#'
return s:is_case_empty(getline(v:lnum - 1))
else
return a:line =~ '^\s*case\>'
endif
endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
+230
View File
@@ -0,0 +1,230 @@
" Vim indent file
" Language: SystemVerilog
" Maintainer: kocha <kocha.lsifrontend@gmail.com>
" Last Change: 12-Aug-2013.
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
setlocal indentexpr=SystemVerilogIndent()
setlocal indentkeys=!^F,o,O,0),0},=begin,=end,=join,=endcase,=join_any,=join_none
setlocal indentkeys+==endmodule,=endfunction,=endtask,=endspecify
setlocal indentkeys+==endclass,=endpackage,=endsequence,=endclocking
setlocal indentkeys+==endinterface,=endgroup,=endprogram,=endproperty,=endchecker
setlocal indentkeys+==`else,=`endif
" Only define the function once.
if exists("*SystemVerilogIndent")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
function SystemVerilogIndent()
if exists('b:systemverilog_indent_width')
let offset = b:systemverilog_indent_width
else
let offset = &sw
endif
if exists('b:systemverilog_indent_modules')
let indent_modules = offset
else
let indent_modules = 0
endif
" Find a non-blank line above the current line.
let lnum = prevnonblank(v:lnum - 1)
" At the start of the file use zero indent.
if lnum == 0
return 0
endif
let lnum2 = prevnonblank(lnum - 1)
let curr_line = getline(v:lnum)
let last_line = getline(lnum)
let last_line2 = getline(lnum2)
let ind = indent(lnum)
let ind2 = indent(lnum - 1)
let offset_comment1 = 1
" Define the condition of an open statement
" Exclude the match of //, /* or */
let sv_openstat = '\(\<or\>\|\([*/]\)\@<![*(,{><+-/%^&|!=?:]\([*/]\)\@!\)'
" Define the condition when the statement ends with a one-line comment
let sv_comment = '\(//.*\|/\*.*\*/\s*\)'
if exists('b:verilog_indent_verbose')
let vverb_str = 'INDENT VERBOSE:'
let vverb = 1
else
let vverb = 0
endif
" Indent accoding to last line
" End of multiple-line comment
if last_line =~ '\*/\s*$' && last_line !~ '/\*.\{-}\*/'
let ind = ind - offset_comment1
if vverb
echo vverb_str "De-indent after a multiple-line comment."
endif
" Indent after if/else/for/case/always/initial/specify/fork blocks
elseif last_line =~ '`\@<!\<\(if\|else\)\>' ||
\ last_line =~ '^\s*\<\(for\|case\%[[zx]]\|do\|foreach\|randcase\)\>' ||
\ last_line =~ '^\s*\<\(always\|always_comb\|always_ff\|always_latch\)\>' ||
\ last_line =~ '^\s*\<\(initial\|specify\|fork\|final\)\>'
if last_line !~ '\(;\|\<end\>\)\s*' . sv_comment . '*$' ||
\ last_line =~ '\(//\|/\*\).*\(;\|\<end\>\)\s*' . sv_comment . '*$'
let ind = ind + offset
if vverb | echo vverb_str "Indent after a block statement." | endif
endif
" Indent after function/task/class/package/sequence/clocking/
" interface/covergroup/property/checkerprogram blocks
elseif last_line =~ '^\s*\<\(function\|task\|class\|package\)\>' ||
\ last_line =~ '^\s*\<\(sequence\|clocking\|interface\)\>' ||
\ last_line =~ '^\s*\(\w\+\s*:\)\=\s*\<covergroup\>' ||
\ last_line =~ '^\s*\<\(property\|checker\|program\)\>'
if last_line !~ '\<end\>\s*' . sv_comment . '*$' ||
\ last_line =~ '\(//\|/\*\).*\(;\|\<end\>\)\s*' . sv_comment . '*$'
let ind = ind + offset
if vverb
echo vverb_str "Indent after function/task/class block statement."
endif
endif
" Indent after module/function/task/specify/fork blocks
elseif last_line =~ '^\s*\(\<extern\>\s*\)\=\<module\>'
let ind = ind + indent_modules
if vverb && indent_modules
echo vverb_str "Indent after module statement."
endif
if last_line =~ '[(,]\s*' . sv_comment . '*$' &&
\ last_line !~ '\(//\|/\*\).*[(,]\s*' . sv_comment . '*$'
let ind = ind + offset
if vverb
echo vverb_str "Indent after a multiple-line module statement."
endif
endif
" Indent after a 'begin' statement
elseif last_line =~ '\(\<begin\>\)\(\s*:\s*\w\+\)*' . sv_comment . '*$' &&
\ last_line !~ '\(//\|/\*\).*\(\<begin\>\)' &&
\ ( last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$' ||
\ last_line2 =~ '^\s*[^=!]\+\s*:\s*' . sv_comment . '*$' )
let ind = ind + offset
if vverb | echo vverb_str "Indent after begin statement." | endif
" Indent after a '{' or a '('
elseif last_line =~ '[{(]' . sv_comment . '*$' &&
\ last_line !~ '\(//\|/\*\).*[{(]' &&
\ ( last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$' ||
\ last_line2 =~ '^\s*[^=!]\+\s*:\s*' . sv_comment . '*$' )
let ind = ind + offset
if vverb | echo vverb_str "Indent after begin statement." | endif
" De-indent for the end of one-line block
elseif ( last_line !~ '\<begin\>' ||
\ last_line =~ '\(//\|/\*\).*\<begin\>' ) &&
\ last_line2 =~ '\<\(`\@<!if\|`\@<!else\|for\|always\|initial\|do\|foreach\|final\)\>.*' .
\ sv_comment . '*$' &&
\ last_line2 !~ '\(//\|/\*\).*\<\(`\@<!if\|`\@<!else\|for\|always\|initial\|do\|foreach\|final\)\>' &&
\ last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$' &&
\ ( last_line2 !~ '\<begin\>' ||
\ last_line2 =~ '\(//\|/\*\).*\<begin\>' )
let ind = ind - offset
if vverb
echo vverb_str "De-indent after the end of one-line statement."
endif
" Multiple-line statement (including case statement)
" Open statement
" Ident the first open line
elseif last_line =~ sv_openstat . '\s*' . sv_comment . '*$' &&
\ last_line !~ '\(//\|/\*\).*' . sv_openstat . '\s*$' &&
\ last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$'
let ind = ind + offset
if vverb | echo vverb_str "Indent after an open statement." | endif
" Close statement
" De-indent for an optional close parenthesis and a semicolon, and only
" if there exists precedent non-whitespace char
elseif last_line =~ ')*\s*;\s*' . sv_comment . '*$' &&
\ last_line !~ '^\s*)*\s*;\s*' . sv_comment . '*$' &&
\ last_line !~ '\(//\|/\*\).*\S)*\s*;\s*' . sv_comment . '*$' &&
\ ( last_line2 =~ sv_openstat . '\s*' . sv_comment . '*$' &&
\ last_line2 !~ ';\s*//.*$') &&
\ last_line2 !~ '^\s*' . sv_comment . '$'
let ind = ind - offset
if vverb | echo vverb_str "De-indent after a close statement." | endif
" `ifdef and `else
elseif last_line =~ '^\s*`\<\(ifdef\|else\)\>'
let ind = ind + offset
if vverb
echo vverb_str "Indent after a `ifdef or `else statement."
endif
endif
" Re-indent current line
" De-indent on the end of the block
" join/end/endcase/endfunction/endtask/endspecify
if curr_line =~ '^\s*\<\(join\|join_any\|join_none\|\|end\|endcase\|while\)\>' ||
\ curr_line =~ '^\s*\<\(endfunction\|endtask\|endspecify\|endclass\)\>' ||
\ curr_line =~ '^\s*\<\(endpackage\|endsequence\|endclocking\|endinterface\)\>' ||
\ curr_line =~ '^\s*\<\(endgroup\|endproperty\|endchecker\|endprogram\)\>' ||
\ curr_line =~ '^\s*}'
let ind = ind - offset
if vverb | echo vverb_str "De-indent the end of a block." | endif
elseif curr_line =~ '^\s*\<endmodule\>'
let ind = ind - indent_modules
if vverb && indent_modules
echo vverb_str "De-indent the end of a module."
endif
" De-indent on a stand-alone 'begin'
elseif curr_line =~ '^\s*\<begin\>'
if last_line !~ '^\s*\<\(function\|task\|specify\|module\|class\|package\)\>' ||
\ last_line !~ '^\s*\<\(sequence\|clocking\|interface\|covergroup\)\>' ||
\ last_line !~ '^\s*\<\(property\|checker\|program\)\>' &&
\ last_line !~ '^\s*\()*\s*;\|)\+\)\s*' . sv_comment . '*$' &&
\ ( last_line =~
\ '\<\(`\@<!if\|`\@<!else\|for\|case\%[[zx]]\|always\|initial\|do\|foreach\|randcase\|final\)\>' ||
\ last_line =~ ')\s*' . sv_comment . '*$' ||
\ last_line =~ sv_openstat . '\s*' . sv_comment . '*$' )
let ind = ind - offset
if vverb
echo vverb_str "De-indent a stand alone begin statement."
endif
endif
" De-indent after the end of multiple-line statement
elseif curr_line =~ '^\s*)' &&
\ ( last_line =~ sv_openstat . '\s*' . sv_comment . '*$' ||
\ last_line !~ sv_openstat . '\s*' . sv_comment . '*$' &&
\ last_line2 =~ sv_openstat . '\s*' . sv_comment . '*$' )
let ind = ind - offset
if vverb
echo vverb_str "De-indent the end of a multiple statement."
endif
" De-indent `else and `endif
elseif curr_line =~ '^\s*`\<\(else\|endif\)\>'
let ind = ind - offset
if vverb | echo vverb_str "De-indent `else and `endif statement." | endif
endif
" Return the indention
return ind
endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:sw=2
+6 -3
View File
@@ -1,7 +1,7 @@
" ---------------------------------------------------------------------
" getscriptPlugin.vim
" Author: Charles E. Campbell
" Date: Jan 07, 2008
" Date: Nov 29, 2013
" Installing: :help glvs-install
" Usage: :help glvs
"
@@ -13,13 +13,16 @@
" Initialization: {{{1
" if you're sourcing this file, surely you can't be
" expecting vim to be in its vi-compatible mode
if &cp || exists("g:loaded_getscriptPlugin")
if exists("g:loaded_getscriptPlugin")
finish
endif
if &cp
if &verbose
echo "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
endif
finish
endif
let g:loaded_getscriptPlugin = "v35"
let g:loaded_getscriptPlugin = "v36"
let s:keepcpo = &cpo
set cpo&vim
+52 -29
View File
@@ -1,9 +1,9 @@
" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
" PLUGIN SECTION
" Date: Apr 30, 2013
" Date: Dec 31, 2013
" Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
" Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{1
" Copyright: Copyright (C) 1999-2013 Charles E. Campbell {{{1
" 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,
@@ -20,27 +20,33 @@
if &cp || exists("g:loaded_netrwPlugin")
finish
endif
"DechoTabOn
let g:loaded_netrwPlugin = "v149"
let g:loaded_netrwPlugin = "v150"
if v:version < 702
echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
echohl WarningMsg
echo "***warning*** you need vim version 7.2 for this version of netrw"
echohl None
finish
endif
if v:version < 703 || (v:version == 703 && !has("patch465"))
echohl WarningMsg
echo "***warning*** this version of netrw needs vim 7.3.465 or later"
echohl Normal
finish
endif
let s:keepcpo = &cpo
set cpo&vim
"DechoTabOn
"DechoRemOn
" ---------------------------------------------------------------------
" Public Interface: {{{1
" Local Browsing: {{{2
" Local Browsing Autocmds: {{{2
augroup FileExplorer
au!
" SEE Benzinger problem...
au BufEnter * sil! call s:LocalBrowse(expand("<amatch>"))
au VimEnter * sil! call s:VimEnter(expand("<amatch>"))
au BufEnter * sil call s:LocalBrowse(expand("<amatch>"))
au VimEnter * sil call s:VimEnter(expand("<amatch>"))
if has("win32") || has("win95") || has("win64") || has("win16")
au BufEnter .* sil! call s:LocalBrowse(expand("<amatch>"))
au BufEnter .* sil call s:LocalBrowse(expand("<amatch>"))
endif
augroup END
@@ -50,8 +56,8 @@ augroup Network
au BufReadCmd file://* call netrw#FileUrlRead(expand("<amatch>"))
au BufReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
au FileReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>"))
au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
au BufWriteCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
au FileWriteCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
try
au SourceCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>"))
catch /^Vim\%((\a\+)\)\=:E216/
@@ -64,8 +70,9 @@ com! -count=1 -nargs=* Nread call netrw#NetrwSavePosn()<bar>call netrw#NetRead(
com! -range=% -nargs=* Nwrite call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
com! -nargs=* NetUserPass call NetUserPass(<f-args>)
com! -nargs=* Nsource call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
com! -nargs=? Ntree call netrw#NetrwSetTreetop(<q-args>)
" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
" Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{2
com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
@@ -73,6 +80,7 @@ com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<cou
com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>)
com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>)
com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>)
com! -nargs=* -bar -complete=dir Lexplore call netrw#Lexplore(<q-args>)
" Commands: NetrwSettings {{{2
com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings()
@@ -83,46 +91,61 @@ if !exists("g:netrw_nogx") && maparg('gx','n') == ""
if !hasmapto('<Plug>NetrwBrowseX')
nmap <unique> gx <Plug>NetrwBrowseX
endif
nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cfile>"),0)<cr>
endif
" ---------------------------------------------------------------------
" LocalBrowse: {{{2
" LocalBrowse: invokes netrw#LocalBrowseCheck() on directory buffers {{{2
fun! s:LocalBrowse(dirname)
" unfortunate interaction -- debugging calls can't be used here;
" the BufEnter event causes triggering when attempts to write to
" Unfortunate interaction -- only DechoMsg debugging calls can be safely used here.
" Otherwise, the BufEnter event gets triggered when attempts to write to
" the DBG buffer are made.
if !exists("s:vimentered")
" If s:vimentered doesn't exist, then the VimEnter event hasn't fired. It will,
" and so s:VimEnter() will then be calling this routine, but this time with s:vimentered defined.
" call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered doesn't exist)")
" call Dret("s:LocalBrowse")
return
endif
" call Decho("s:LocalBrowse(dirname<".a:dirname.">){")
" echomsg "dirname<".a:dirname.">"
" call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered=".s:vimentered.")")
if has("amiga")
" The check against '' is made for the Amiga, where the empty
" string is the current directory and not checking would break
" things such as the help command.
" call Decho("(LocalBrowse) dirname<".a:dirname."> (amiga)")
" call Decho("(LocalBrowse) dirname<".a:dirname."> (isdirectory, amiga)")
if a:dirname != '' && isdirectory(a:dirname)
sil! call netrw#LocalBrowseCheck(a:dirname)
endif
elseif isdirectory(a:dirname)
" echomsg "dirname<".dirname."> isdir"
" call Decho("(LocalBrowse) dirname<".a:dirname."> (not amiga)")
" call Decho("(LocalBrowse) dirname<".a:dirname."> (isdirectory, not amiga)")
sil! call netrw#LocalBrowseCheck(a:dirname)
else
" not a directory, ignore it
" call Decho("(LocalBrowse) dirname<".a:dirname."> not a directory, ignoring...")
endif
" not a directory, ignore it
" call Decho("|return s:LocalBrowse }")
" call Dret("s:LocalBrowse")
endfun
" ---------------------------------------------------------------------
" s:VimEnter: {{{2
" s:VimEnter: after all vim startup stuff is done, this function is called. {{{2
" Its purpose: to look over all windows and run s:LocalBrowse() on
" them, which checks if they're directories and will create a directory
" listing when appropriate.
" It also sets s:vimentered, letting s:LocalBrowse() know that s:VimEnter()
" has already been called.
fun! s:VimEnter(dirname)
" call Decho("VimEnter(dirname<".a:dirname.">){")
" call Dfunc("s:VimEnter(dirname<".a:dirname.">) expand(%)<".expand("%").">")
let curwin = winnr()
let s:vimentered = 1
windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
windo call s:LocalBrowse(expand("%:p"))
exe curwin."wincmd w"
" call Decho("|return VimEnter }")
" call Dret("s:VimEnter")
endfun
" ---------------------------------------------------------------------
+2 -2
View File
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: xa 6502 cross assembler
" Maintainer: Clemens Kirchgatterer <clemens@thf.ath.cx>
" Last Change: 2003 May 03
" Maintainer: Clemens Kirchgatterer <clemens@1541.org>
" Last Change: 2014 Jan 05
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
+61
View File
@@ -0,0 +1,61 @@
" Vim syntax file
" Language: Arduino
" Maintainer: Johannes Hoff <johannes@johanneshoff.com>
" Last Change: 2011 June 3
" License: VIM license (:help license, replace vim by arduino.vim)
" Syntax highlighting like in the Arduino IDE
" Keywords extracted from <arduino>/build/shared/lib/keywords.txt (arduino
" version 0021)
" Thanks to Rik, Erik Nomitch, Adam Obeng and Graeme Cross for helpful feedback!
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" Read the C syntax to start with
if version < 600
so <sfile>:p:h/cpp.vim
else
runtime! syntax/cpp.vim
endif
syn keyword arduinoConstant HIGH LOW INPUT OUTPUT
syn keyword arduinoConstant DEC BIN HEX OCT BYTE
syn keyword arduinoConstant PI HALF_PI TWO_PI
syn keyword arduinoConstant LSBFIRST MSBFIRST
syn keyword arduinoConstant CHANGE FALLING RISING
syn keyword arduinoConstant SERIAL DISPLAY
syn keyword arduinoConstant DEFAULT EXTERNAL INTERNAL INTERNAL1V1 INTERNAL2V56
syn keyword arduinoStdFunc abs acos asin atan atan2 ceil constrain
syn keyword arduinoStdFunc cos degrees exp floor log
syn keyword arduinoStdFunc map max min pow radians
syn keyword arduinoStdFunc round sin sq sqrt tan
syn keyword arduinoStdFunc randomSeed random
syn keyword arduinoFunc analogReference analogRead analogWrite
syn keyword arduinoFunc attachInterrupt detachInterrupt interrupts noInterrupts
syn keyword arduinoFunc lowByte highByte bitRead bitWrite bitSet bitClear
syn keyword arduinoFunc millis micros delay delayMicroseconds
syn keyword arduinoFunc pinMode digitalWrite digitalRead
syn keyword arduinoFunc tone noTone pulseIn shiftOut
syn keyword arduinoMethod setup loop
syn keyword arduinoMethod begin end available read flush print println write peek
syn keyword arduinoType boolean byte word String
syn keyword arduinoModule Serial Serial1 Serial2 Serial3
hi def link arduinoType Type
hi def link arduinoConstant Constant
hi def link arduinoStdFunc Function
hi def link arduinoFunc Function
hi def link arduinoMethod Function
hi def link arduinoModule Identifier
+6 -2
View File
@@ -3,7 +3,7 @@
" Maintainer: Erik Wognsen <erik.wognsen@gmail.com>
" Previous maintainer:
" Kevin Dahlhausen <kdahlhaus@yahoo.com>
" Last Change: 2012 Apr 09
" Last Change: 2014 Feb 04
" Thanks to Ori Avtalion for feedback on the comment markers!
@@ -93,7 +93,11 @@ syn match asmCond "\.endif"
syn match asmMacro "\.macro"
syn match asmMacro "\.endm"
syn match asmDirective "\.[a-z][a-z]\+"
" Assembler directives start with a '.' and may contain upper case (e.g.,
" .ABORT), numbers (e.g., .p2align), dash (e.g., .app-file) and underscore in
" CFI directives (e.g., .cfi_startproc). This will also match labels starting
" with '.', including the GCC auto-generated '.L' labels.
syn match asmDirective "\.[A-Za-z][0-9A-Za-z-_]*"
syn case match
File diff suppressed because one or more lines are too long
+46 -31
View File
@@ -6,7 +6,7 @@
" Nikolai Weibull (Add CSS2 support)
" Maintainer: Jules Wang <w.jq0722@gmail.com>
" URL: https://github.com/JulesWang/css.vim
" Last Change: 2013 Sep 24
" Last Change: 2013 Nov.27
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
@@ -58,7 +58,8 @@ syn match cssSelectorOp2 "[~|^$*]\?=" contained
syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ
" .class and #id
syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+" contains=cssClassNameDot
syn match cssClassNameDot contained '\.'
try
syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*"
@@ -74,13 +75,14 @@ syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)" cont
syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)" contains=cssUnitDecorators
syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)" contains=cssUnitDecorators
syn match cssIncludeKeyword /@\(-[a-z]+-\)\=\(media\|keyframes\|import\|charset\|namespace\|page\)/ contained
" @media
syn match cssMedia "@media\>" nextgroup=cssMediaQuery,cssMediaBlock skipwhite skipnl
syn match cssMediaQuery /\(only\|not\)\=\s*[a-z]*\(\s\|,\)\@=\(\(\s\+and\)\=\s\+(.\{-})\)*/ contained skipwhite skipnl contains=cssMediaProp,cssValueLength,cssMediaKeyword,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType nextgroup=cssMediaBlock,cssMediaComma
syn region cssInclude start=/@media\>/ end=/\ze{/ skipwhite skipnl contains=cssMediaProp,cssValueLength,cssMediaKeyword,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType,cssIncludeKeyword,cssMediaComma,cssComment nextgroup=cssMediaBlock
syn keyword cssMediaType contained screen print aural braille embossed handheld projection tty tv speech all contained skipwhite skipnl
syn keyword cssMediaKeyword only not and contained
syn region cssMediaBlock transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition,cssTagName,cssClassName,cssIdentifier,cssPseudoClass,cssSelectorOp,cssSelectorOp2,cssAttributeSelector fold
syn match cssMediaComma "," nextgroup=cssMediaQuery skipwhite skipnl contained
syn match cssMediaComma "," skipwhite skipnl contained
" Reference: http://www.w3.org/TR/css3-mediaqueries/
syn keyword cssMediaProp contained width height orientation scan grid
@@ -91,21 +93,25 @@ syn match cssMediaProp contained /\(\(max\|min\)-\)\=\(height\|width\|resolution
syn keyword cssMediaAttr contained portrait landscape progressive interlace
" @page
syn match cssPage "@page\>" nextgroup=cssPagePseudo,cssDefinition skipwhite skipnl
syn match cssPagePseudo /:\(left\|right\|first\|\)/ nextgroup=cssDefinition contained skipwhite skipnl
syn match cssPageHeaderProp /@\(\(top\|left\|right\|bottom\)-\(left\|center\|right\|middle\|bottom\)\)\(-corner\)\=/ contained
syn keyword cssPageProp content size contained
" http://www.w3.org/TR/css3-page/
syn match cssPage "@page\>[^{]*{\@=" contains=cssPagePseudo,cssIncludeKeyword nextgroup=cssPageWrap transparent skipwhite skipnl
syn match cssPagePseudo /:\(left\|right\|first\|blank\)/ contained skipwhite skipnl
syn region cssPageWrap contained transparent matchgroup=cssBraces start="{" end="}" contains=cssPageMargin,cssPageProp,cssAttrRegion,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition,cssHacks
syn match cssPageMargin /@\(\(top\|left\|right\|bottom\)-\(left\|center\|right\|middle\|bottom\)\)\(-corner\)\=/ contained nextgroup=cssDefinition skipwhite skipnl
syn keyword cssPageProp contained content size
" http://www.w3.org/TR/CSS2/page.html#break-inside
syn keyword cssPageProp contained orphans widows
" @keyframe
syn match cssKeyFrame "@\(-[a-z]*-\)\=keyframes\>\(\s*\<\S*\>\)\=" nextgroup=cssKeyFrameBlock contains=cssVendor skipwhite skipnl
syn region cssKeyFrameBlock contained transparent matchgroup=cssBraces start="{" end="}" contains=cssKeyFrameSelector,cssDefinition
syn match cssKeyFrameSelector /\(\d*%\|from\|to\)\=/ contained skipwhite skipnl
" http://www.w3.org/TR/css3-animations/#keyframes
syn match cssKeyFrame "@\(-[a-z]+-\)\=keyframes\>[^{]*{\@=" nextgroup=cssKeyFrameWrap contains=cssVendor,cssIncludeKeyword skipwhite skipnl transparent
syn region cssKeyFrameWrap contained transparent matchgroup=cssBraces start="{" end="}" contains=cssKeyFrameSelector
syn match cssKeyFrameSelector /\(\d*%\|from\|to\)\=/ contained skipwhite skipnl nextgroup=cssDefinition
" @import
syn region cssInclude start=/@import\>/ end=/\ze;/ contains=cssComment,cssURL,cssUnicodeEscape,cssMediaQuery,cssStringQ,cssStringQQ,cssIncludeKeyword
syn region cssInclude start=/@charset\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
syn region cssInclude start=/@namespace\>/ end=/\ze;/ contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
syn match cssIncludeKeyword /\(@import\|@charset\|@namespace\)/ contained
syn region cssInclude start=/@import\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword,cssURL,cssMediaProp,cssValueLength,cssMediaKeyword,cssValueInteger,cssMediaAttr,cssVendor,cssMediaType
syn region cssInclude start=/@charset\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
syn region cssInclude start=/@namespace\>/ end=/\ze;/ transparent contains=cssStringQ,cssStringQQ,cssUnicodeEscape,cssComment,cssIncludeKeyword
" @font-face
" http://www.w3.org/TR/css3-fonts/#at-font-face-rule
@@ -179,7 +185,7 @@ syn keyword cssCommonAttr contained top bottom center stretch hidden visible
"------------------------------------------------
" CSS Animations
" http://www.w3.org/TR/css3-animations/
syn match cssAnimationProp contained "\<animation\(-\(delay\|direction\|duration\|fill-mode\|name\|play-state\|timing-function\)\)\=\>"
syn match cssAnimationProp contained "\<animation\(-\(delay\|direction\|duration\|fill-mode\|name\|play-state\|timing-function\|iteration-count\)\)\=\>"
" animation-direction attributes
syn keyword cssAnimationAttr contained alternate reverse
@@ -215,7 +221,7 @@ syn match cssBorderProp contained "\<box-decoration-break\>"
syn match cssBorderProp contained "\<box-shadow\>"
" border-image attributes
syn keyword cssBorderAttr contained stretch repeat round space fill
syn keyword cssBorderAttr contained stretch round space fill
" border-style attributes
syn keyword cssBorderAttr contained dotted dashed solid double groove ridge inset outset
@@ -230,7 +236,7 @@ syn keyword cssBorderAttr contained clone slice
syn match cssBoxProp contained "\<padding\(-\(top\|right\|bottom\|left\)\)\=\>"
syn match cssBoxProp contained "\<margin\(-\(top\|right\|bottom\|left\)\)\=\>"
syn match cssBoxProp contained "\<overflow\(-\(x\|y\|style\)\)\=\>"
syn match cssBoxProp contained "\<rotation\(-point\)=\>"
syn match cssBoxProp contained "\<rotation\(-point\)\=\>"
syn keyword cssBoxAttr contained visible hidden scroll auto
syn match cssBoxAttr contained "\<no-\(display\|content\)\>"
@@ -289,13 +295,26 @@ syn keyword cssFontAttr contained bold bolder lighter
syn match cssFontProp contained "\<font-smooth\>"
syn match cssFontAttr contained "\<\(subpixel-\)\=\antialiased\>"
" CSS Multi-column Layout Module
" http://www.w3.org/TR/css3-multicol/
syn match cssMultiColumnProp contained "\<break-\(after\|before\|inside\)\>"
syn match cssMultiColumnProp contained "\<column-\(count\|fill\|gap\|rule\(-\(color\|style\|width\)\)\=\|span\|width\)\>"
syn keyword cssMultiColumnProp contained columns
syn keyword cssMultiColumnAttr contained balance medium
syn keyword cssMultiColumnAttr contained always avoid left right page column
syn match cssMultiColumnAttr contained "\<avoid-\(page\|column\)\>"
" http://www.w3.org/TR/css3-break/#page-break
syn match cssMultiColumnProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
" TODO find following items in w3c docs.
syn keyword cssGeneratedContentProp contained quotes crop
syn match cssGeneratedContentProp contained "\<counter-\(reset\|increment\)\>"
syn match cssGeneratedContentProp contained "\<move-to\>"
syn match cssGeneratedContentProp contained "\<page-policy\>"
syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>"
syn match cssGridProp contained "\<grid-\(columns\|rows\)\>"
syn match cssHyerlinkProp contained "\<target\(-\(name\|new\|position\)\)\=\>"
@@ -307,8 +326,6 @@ syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic
syn keyword cssListAttr contained disc circle square hebrew armenian georgian
syn keyword cssListAttr contained inside outside
syn match cssMultiColumnProp contained "\<column\(-\(\break-\(after\|before\)\|count\|gap\|rule\(-\(color\|style\|width\)\)\=\)\|span\|width\)\=\>"
syn keyword cssPositioningProp contained bottom clear clip display float left
syn keyword cssPositioningProp contained position right top visibility
syn match cssPositioningProp contained "\<z-index\>"
@@ -319,8 +336,6 @@ syn match cssPositioningAttr contained "\<list-item\>"
syn match cssPositioningAttr contained "\<inline\(-\(block\|box\|table\)\)\=\>"
syn keyword cssPositioningAttr contained static relative absolute fixed
syn match cssPrintProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
syn keyword cssPrintProp contained orphans widows
syn keyword cssPrintAttr contained landscape portrait crop cross always avoid
syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>"
@@ -394,7 +409,7 @@ syn keyword cssUIAttr contained both horizontal vertical
syn match cssUIProp contained "\<text-overflow\>"
syn keyword cssUIAttr contained clip ellipsis
" Already highlighted Props: font content
" Already highlighted Props: font content
"------------------------------------------------
" Webkit/iOS specific attributes
syn match cssUIAttr contained '\(preserve-3d\)'
@@ -456,8 +471,8 @@ syn match cssPseudoClassId contained "\<\(input-\)\=placeholder\>"
syn region cssComment start="/\*" end="\*/" contains=@Spell fold
syn match cssUnicodeEscape "\\\x\{1,6}\s\?"
syn match cssSpecialCharQQ +\\"+ contained
syn match cssSpecialCharQ +\\'+ contained
syn match cssSpecialCharQQ +\\\\\|\\"+ contained
syn match cssSpecialCharQ +\\\\\|\\'+ contained
syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ
syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ
@@ -478,11 +493,11 @@ syntax match cssNoise contained /\(:\|;\|\/\)/
" Attr Enhance
" Some keywords are both Prop and Attr, so we have to handle them
syn region cssAttrRegion start=/:/ end=/;/ contained keepend contains=css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssTransitionHackProp,cssAttrComma,cssNoise
syn region cssAttrRegion start=/:/ end=/;/ contained keepend contains=css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise
" Hack for transition
" The 'transition' Prop has Props after ':'.
syn region cssAttrRegion start=/transition\s*:/ end=/;/ contained keepend contains=css.*Prop,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssTransitionHackProp,cssAttrComma,cssNoise
syn region cssAttrRegion start=/transition\s*:/ end=/;/ contained keepend contains=css.*Prop,css.*Attr,cssColor,cssImportant,cssValue.*,cssFunction,cssString.*,cssURL,cssComment,cssUnicodeEscape,cssVendor,cssError,cssAttrComma,cssNoise
if main_syntax == "css"
@@ -593,7 +608,6 @@ if version >= 508 || !exists("did_css_syn_inits")
HiLink cssBraces Function
HiLink cssBraceError Error
HiLink cssError Error
HiLink cssInclude Include
HiLink cssUnicodeEscape Special
HiLink cssStringQQ String
HiLink cssStringQ String
@@ -606,7 +620,7 @@ if version >= 508 || !exists("did_css_syn_inits")
HiLink cssMediaAttr cssAttr
HiLink cssPage atKeyword
HiLink cssPagePseudo PreProc
HiLink cssPageHeaderProp PreProc
HiLink cssPageMargin atKeyword
HiLink cssPageProp cssProp
HiLink cssKeyFrame atKeyword
HiLink cssKeyFrameSelector Constant
@@ -616,6 +630,7 @@ if version >= 508 || !exists("did_css_syn_inits")
HiLink cssFontDescriptorAttr cssAttr
HiLink cssUnicodeRange Constant
HiLink cssClassName Function
HiLink cssClassNameDot Function
HiLink cssProp StorageClass
HiLink cssAttr Constant
HiLink cssUnitDecorators Number
+2 -2
View File
@@ -3,7 +3,7 @@
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
" Wichert Akkerman <wakkerma@debian.org>
" Last Change: 2013 May 05
" Last Change: 2014 Jan 20
" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debchangelog.vim
" Standard syntax initialization
@@ -19,7 +19,7 @@ syn case ignore
" Define some common expressions we can use later on
syn match debchangelogName contained "^[[:alnum:]][[:alnum:].+-]\+ "
syn match debchangelogUrgency contained "; urgency=\(low\|medium\|high\|critical\|emergency\)\( \S.*\)\="
syn match debchangelogTarget contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(lucid|precise|quantal|raring|saucy)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
syn match debchangelogTarget contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(lucid|precise|quantal|saucy|trusty)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
syn match debchangelogVersion contained "(.\{-})"
syn match debchangelogCloses contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
syn match debchangelogLP contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*"
+2 -2
View File
@@ -3,7 +3,7 @@
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
" Former Maintainers: Gerfried Fuchs <alfie@ist.org>
" Wichert Akkerman <wakkerma@debian.org>
" Last Change: 2013 May 05
" Last Change: 2013 Oct 28
" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debcontrol.vim
" Standard syntax initialization
@@ -24,7 +24,7 @@ syn match debControlComma ", *"
syn match debControlSpace " "
" Define some common expressions we can use later on
syn match debcontrolArchitecture contained "\%(all\|linux-any\|\%(any-\)\=\%(alpha\|amd64\|arm\%(e[bl]\|hf\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\)\|hurd-\%(i386\|any\)\|kfreebsd-\%(i386\|amd64\|any\)\|knetbsd-\%(i386\|any\)\|kopensolaris-\%(i386\|any\)\|netbsd-\%(alpha\|i386\|any\)\|any\)"
syn match debcontrolArchitecture contained "\%(all\|linux-any\|\%(any-\)\=\%(alpha\|amd64\|arm\%(e[bl]\|hf\|64\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\%(spe\)\=\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\)\|x32\|hurd-\%(i386\|any\)\|kfreebsd-\%(i386\|amd64\|any\)\|knetbsd-\%(i386\|any\)\|kopensolaris-\%(i386\|any\)\|netbsd-\%(alpha\|i386\|any\)\|any\)"
syn match debcontrolMultiArch contained "\%(no\|foreign\|allowed\|same\)"
syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
+2 -2
View File
@@ -2,7 +2,7 @@
" Language: Debian sources.list
" Maintainer: Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
" Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
" Last Change: 2013 May 05
" Last Change: 2014 Jan 20
" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debsources.vim
" Standard syntax initialization
@@ -23,7 +23,7 @@ syn match debsourcesComment /#.*/ contains=@Spell
" Match uri's
syn match debsourcesUri +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' <>"]\++
syn match debsourcesDistrKeyword +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|raring\|saucy\)\([-[:alnum:]_./]*\)+
syn match debsourcesDistrKeyword +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|saucy\|trusty\)\([-[:alnum:]_./]*\)+
" Associate our matches and regions with pretty colours
hi def link debsourcesLine Error
+2 -3
View File
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Vim help file
" Maintainer: Bram Moolenaar (Bram@vim.org)
" Last Change: 2013 Sep 05
" Last Change: 2013 Nov 17
" Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax")
@@ -153,7 +153,7 @@ syn sync minlines=40
" Define the default highlighting.
" Only used when an item doesn't have highlighting yet
hi def link helpIgnore Ignore
hi def link helpHyperTextJump Subtitle
hi def link helpHyperTextJump Identifier
hi def link helpBar Ignore
hi def link helpBacktick Ignore
hi def link helpStar Ignore
@@ -168,7 +168,6 @@ hi def link helpOption Type
hi def link helpNotVi Special
hi def link helpSpecial Special
hi def link helpNote Todo
hi def link Subtitle Identifier
hi def link helpComment Comment
hi def link helpConstant Constant
+3 -2
View File
@@ -19,11 +19,12 @@ syn cluster NetrwTreeGroup contains=netrwDir,netrwSymLink,netrwExe
syn match netrwPlain "\(\S\+ \)*\S\+" contains=@NoSpell
syn match netrwSpecial "\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)" contains=netrwClassify,@NoSpell
syn match netrwDir "\.\{1,2}/" contains=netrwClassify,@NoSpell
syn match netrwDir "\%(\S\+ \)*\S\+/" contains=netrwClassify,@NoSpell
"syn match netrwDir "\%(\S\+ \)*\S\+/" contains=netrwClassify,@NoSpell
syn match netrwDir "\%(\S\+ \)*\S\+/\ze\%(\s\{2,}\|$\)" contains=netrwClassify,@NoSpell
syn match netrwSizeDate "\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s" skipwhite contains=netrwDateSep,@NoSpell nextgroup=netrwTime
syn match netrwSymLink "\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)" contains=netrwClassify,@NoSpell
syn match netrwExe "\%(\S\+ \)*\S*[^~]\*\ze\%(\s\{2,}\|$\)" contains=netrwClassify,@NoSpell
syn match netrwTreeBar "^\%([-+|] \)\+" contains=netrwTreeBarSpace nextgroup=@netrwTreeGroup
syn match netrwTreeBar "^\%([-+|] \)\+" contains=netrwTreeBarSpace nextgroup=@netrwTreeGroup
syn match netrwTreeBarSpace " " contained
syn match netrwClassify "[*=|@/]\ze\%(\s\{2,}\|$\)" contained
+2 -2
View File
@@ -1,7 +1,7 @@
" Vim syntax file
" Language: reStructuredText documentation format
" Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2013-06-03
" Latest Revision: 2013-11-26
if exists("b:current_syntax")
finish
@@ -152,7 +152,7 @@ for code in g:rst_syntax_code_list
exe 'syn region rstDirective'.code.' matchgroup=rstDirective fold '
\.'start=#\%(sourcecode\|code\%(-block\)\=\)::\s\+'.code.'\s*$# '
\.'skip=#^$# '
\.'end=#^\s\@!# contains=@NoSpell,@rst'.code
\.'end=#^\s\@!# contains=@NoSpell,@rst'.code.' keepend'
exe 'syn cluster rstDirectives add=rstDirective'.code
endfor
+101
View File
@@ -0,0 +1,101 @@
" Vim syntax file
" Language: SystemVerilog
" Maintainer: kocha <kocha.lsifrontend@gmail.com>
" Last Change: 12-Aug-2013.
" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" Read in Verilog syntax files
if version < 600
so <sfile>:p:h/verilog.vim
else
runtime! syntax/verilog.vim
unlet b:current_syntax
endif
" IEEE1800-2005
syn keyword systemverilogStatement always_comb always_ff always_latch
syn keyword systemverilogStatement class endclass new
syn keyword systemverilogStatement virtual local const protected
syn keyword systemverilogStatement package endpackage
syn keyword systemverilogStatement rand randc constraint randomize
syn keyword systemverilogStatement with inside dist
syn keyword systemverilogStatement sequence endsequence randsequence
syn keyword systemverilogStatement srandom
syn keyword systemverilogStatement logic bit byte
syn keyword systemverilogStatement int longint shortint
syn keyword systemverilogStatement struct packed
syn keyword systemverilogStatement final
syn keyword systemverilogStatement import export
syn keyword systemverilogStatement context pure
syn keyword systemverilogStatement void shortreal chandle string
syn keyword systemverilogStatement clocking endclocking iff
syn keyword systemverilogStatement interface endinterface modport
syn keyword systemverilogStatement cover covergroup coverpoint endgroup
syn keyword systemverilogStatement property endproperty
syn keyword systemverilogStatement program endprogram
syn keyword systemverilogStatement bins binsof illegal_bins ignore_bins
syn keyword systemverilogStatement alias matches solve static assert
syn keyword systemverilogStatement assume super before expect bind
syn keyword systemverilogStatement extends null tagged extern this
syn keyword systemverilogStatement first_match throughout timeprecision
syn keyword systemverilogStatement timeunit type union
syn keyword systemverilogStatement uwire var cross ref wait_order intersect
syn keyword systemverilogStatement wildcard within
syn keyword systemverilogTypeDef typedef enum
syn keyword systemverilogConditional randcase
syn keyword systemverilogConditional unique priority
syn keyword systemverilogRepeat return break continue
syn keyword systemverilogRepeat do foreach
syn keyword systemverilogLabel join_any join_none forkjoin
" IEEE1800-2009 add
syn keyword systemverilogStatement checker endchecker
syn keyword systemverilogStatement accept_on reject_on
syn keyword systemverilogStatement sync_accept_on sync_reject_on
syn keyword systemverilogStatement eventually nexttime until until_with
syn keyword systemverilogStatement s_always s_eventually s_nexttime s_until s_until_with
syn keyword systemverilogStatement let untyped
syn keyword systemverilogStatement strong weak
syn keyword systemverilogStatement restrict global implies
syn keyword systemverilogConditional unique0
" IEEE1800-2012 add
syn keyword systemverilogStatement implements
syn keyword systemverilogStatement interconnect soft nettype
" Define the default highlighting.
if version >= 508 || !exists("did_systemverilog_syn_inits")
if version < 508
let did_systemverilog_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif
" The default highlighting.
HiLink systemverilogStatement Statement
HiLink systemverilogTypeDef TypeDef
HiLink systemverilogConditional Conditional
HiLink systemverilogRepeat Repeat
HiLink systemverilogLabel Label
HiLink systemverilogGlobal Define
HiLink systemverilogNumber Number
delcommand HiLink
endif
let b:current_syntax = "systemverilog"
" vim: ts=8
+2 -2
View File
@@ -55,8 +55,8 @@ NOTE: The cursor keys should also work. But using hjkl you will be able to
2. Type: :q! <ENTER>.
This exits the editor, DISCARDING any changes you have made.
3. When you see the shell prompt, type the command that got you into this
tutor. That would be: vimtutor <ENTER>
3. Get back here by executing the command that got you into this tutor. That
might be: vimtutor <ENTER>
4. If you have these steps memorized and are confident, execute steps
1 through 3 to exit and re-enter the editor.
+3 -2
View File
@@ -1,7 +1,7 @@
" An example for a vimrc file.
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last change: 2011 Apr 15
" Last change: 2014 Feb 05
"
" To use it, copy it to
" for Unix and OS/2: ~/.vimrc
@@ -24,7 +24,8 @@ set backspace=indent,eol,start
if has("vms")
set nobackup " do not keep a backup file, use versions instead
else
set backup " keep a backup file
set backup " keep a backup file (restore to previous version)
set undofile " keep an undo file (undo changes after closing)
endif
set history=50 " keep 50 lines of command line history
set ruler " show the cursor position all the time
+1 -1
View File
@@ -419,7 +419,7 @@ CPUARG = -$(CPUNR)
ALIGNARG = -a$(ALIGN)
#
!if ("$(DEBUG)"=="yes")
DEFINES=$(DEFINES) -DDEBUG
DEFINES=$(DEFINES) -DDEBUG -D_DEBUG
!endif
#
!if ("$(OLE)"=="yes")
+3 -3
View File
@@ -1,6 +1,6 @@
#
# Makefile for VIM on Win32, using Cygnus gcc
# Last updated by Dan Sharp. Last Change: 2013 Sep 19
# Last updated by Dan Sharp. Last Change: 2013 Dec 11
#
# Also read INSTALLpc.txt!
#
@@ -155,7 +155,7 @@ endif
ifeq (yes, $(DYNAMIC_PERL))
DEFINES += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
else
EXTRA_LIBS += $(PERL)/lib/CORE/perl$(PERL_VER).lib
EXTRA_LIBS += -L$(PERL)/lib/CORE -lperl$(PERL_VER)
endif
endif
@@ -272,7 +272,7 @@ ifeq (yes, $(DYNAMIC_RUBY))
DEFINES += -DDYNAMIC_RUBY -DDYNAMIC_RUBY_DLL=\"$(RUBY_INSTALL_NAME).dll\"
DEFINES += -DDYNAMIC_RUBY_VER=$(RUBY_VER)
else
EXTRA_LIBS += $(RUBY)/lib/$(RUBY_INSTALL_NAME).lib
EXTRA_LIBS += $(RUBY)/lib/$(RUBY_INSTALL_NAME)
endif
endif
+5 -3
View File
@@ -359,6 +359,7 @@ WINDRES_CC = $(CC)
CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
EXTRA_LIBS =
ifdef GETTEXT
DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
@@ -377,9 +378,10 @@ endif
endif
ifdef PERL
CFLAGS += -I$(PERLLIBS) -DFEAT_PERL -L$(PERLLIBS)
CFLAGS += -I$(PERLLIBS) -DFEAT_PERL
ifeq (yes, $(DYNAMIC_PERL))
CFLAGS += -DDYNAMIC_PERL -DDYNAMIC_PERL_DLL=\"perl$(PERL_VER).dll\"
EXTRA_LIBS += -L$(PERLLIBS) -lperl$(PERL_VER)
endif
endif
@@ -596,7 +598,7 @@ ifdef XPM
ifeq (yes, $(GUI))
OBJ += $(OUTDIR)/xpm_w32.o
# You'll need libXpm.a from http://gnuwin32.sf.net
LIB += -L $(XPM)/lib -lXpm
LIB += -L$(XPM)/lib -lXpm
endif
endif
@@ -632,7 +634,7 @@ endif
ifdef PERL
ifeq (no, $(DYNAMIC_PERL))
LIB += -lperl$(PERL_VER)
LIB += -L$(PERLLIBS) -lperl$(PERL_VER)
endif
endif
+8
View File
@@ -424,6 +424,9 @@ MSVCVER = 11.0
!if "$(_NMAKE_VER)" == "11.00.60610.1"
MSVCVER = 11.0
!endif
!if "$(_NMAKE_VER)" == "11.00.61030.0"
MSVCVER = 11.0
!endif
!if "$(_NMAKE_VER)" == "12.00.21005.1"
MSVCVER = 12.0
!endif
@@ -825,7 +828,12 @@ PERL_INCDIR = $(PERL)\Lib$(PERL_ARCH)\Core
PERL_LIB = $(PERL_INCDIR)\perl.lib
!else
PERL_DLL = perl$(PERL_VER).dll
!if exist($(PERL_INCDIR)\perl$(PERL_VER).lib)
PERL_LIB = $(PERL_INCDIR)\perl$(PERL_VER).lib
!else
# For ActivePerl 5.18 and later
PERL_LIB = $(PERL_INCDIR)\libperl$(PERL_VER).a
!endif
!endif
CFLAGS = $(CFLAGS) -DFEAT_PERL
+1
View File
@@ -2397,6 +2397,7 @@ shadow: runtime pixmaps
../../testdir/*.in \
../../testdir/*.vim \
../../testdir/python* \
../../testdir/sautest \
../../testdir/test83-tags? \
../../testdir/*.ok .
+20 -20
View File
@@ -6,7 +6,7 @@
* Do ":help credits" in Vim to see a list of people who contributed.
* See README.txt for an overview of the Vim source code.
*
* Blowfish encryption for Vim; in Blowfish output feedback mode.
* Blowfish encryption for Vim; in Blowfish cipher feedback mode.
* Contributed by Mohsin Ahmed, http://www.cs.albany.edu/~mosh
* Based on http://www.schneier.com/blowfish.html by Bruce Schneier.
*/
@@ -19,7 +19,7 @@
#define BF_BLOCK 8
#define BF_BLOCK_MASK 7
#define BF_OFB_LEN (8*(BF_BLOCK))
#define BF_CFB_LEN (8*(BF_BLOCK))
typedef union {
UINT32_T ul[2];
@@ -554,42 +554,42 @@ bf_self_test()
return err > 0 ? FAIL : OK;
}
/* Output feedback mode. */
/* Cipher feedback mode. */
static int randbyte_offset = 0;
static int update_offset = 0;
static char_u ofb_buffer[BF_OFB_LEN]; /* 64 bytes */
static char_u cfb_buffer[BF_CFB_LEN]; /* 64 bytes */
/*
* Initialize with seed "iv[iv_len]".
*/
void
bf_ofb_init(iv, iv_len)
bf_cfb_init(iv, iv_len)
char_u *iv;
int iv_len;
{
int i, mi;
randbyte_offset = update_offset = 0;
vim_memset(ofb_buffer, 0, BF_OFB_LEN);
vim_memset(cfb_buffer, 0, BF_CFB_LEN);
if (iv_len > 0)
{
mi = iv_len > BF_OFB_LEN ? iv_len : BF_OFB_LEN;
mi = iv_len > BF_CFB_LEN ? iv_len : BF_CFB_LEN;
for (i = 0; i < mi; i++)
ofb_buffer[i % BF_OFB_LEN] ^= iv[i % iv_len];
cfb_buffer[i % BF_CFB_LEN] ^= iv[i % iv_len];
}
}
#define BF_OFB_UPDATE(c) { \
ofb_buffer[update_offset] ^= (char_u)c; \
if (++update_offset == BF_OFB_LEN) \
#define BF_CFB_UPDATE(c) { \
cfb_buffer[update_offset] ^= (char_u)c; \
if (++update_offset == BF_CFB_LEN) \
update_offset = 0; \
}
#define BF_RANBYTE(t) { \
if ((randbyte_offset & BF_BLOCK_MASK) == 0) \
bf_e_cblock(&ofb_buffer[randbyte_offset]); \
t = ofb_buffer[randbyte_offset]; \
if (++randbyte_offset == BF_OFB_LEN) \
bf_e_cblock(&cfb_buffer[randbyte_offset]); \
t = cfb_buffer[randbyte_offset]; \
if (++randbyte_offset == BF_CFB_LEN) \
randbyte_offset = 0; \
}
@@ -610,7 +610,7 @@ bf_crypt_encode(from, len, to)
{
ztemp = from[i];
BF_RANBYTE(t);
BF_OFB_UPDATE(ztemp);
BF_CFB_UPDATE(ztemp);
to[i] = t ^ ztemp;
}
}
@@ -630,7 +630,7 @@ bf_crypt_decode(ptr, len)
{
BF_RANBYTE(t);
*p ^= t;
BF_OFB_UPDATE(*p);
BF_CFB_UPDATE(*p);
}
}
@@ -646,13 +646,13 @@ bf_crypt_init_keys(passwd)
for (p = passwd; *p != NUL; ++p)
{
BF_OFB_UPDATE(*p);
BF_CFB_UPDATE(*p);
}
}
static int save_randbyte_offset;
static int save_update_offset;
static char_u save_ofb_buffer[BF_OFB_LEN];
static char_u save_cfb_buffer[BF_CFB_LEN];
static UINT32_T save_pax[18];
static UINT32_T save_sbx[4][256];
@@ -665,7 +665,7 @@ bf_crypt_save()
{
save_randbyte_offset = randbyte_offset;
save_update_offset = update_offset;
mch_memmove(save_ofb_buffer, ofb_buffer, BF_OFB_LEN);
mch_memmove(save_cfb_buffer, cfb_buffer, BF_CFB_LEN);
mch_memmove(save_pax, pax, 4 * 18);
mch_memmove(save_sbx, sbx, 4 * 4 * 256);
}
@@ -679,7 +679,7 @@ bf_crypt_restore()
{
randbyte_offset = save_randbyte_offset;
update_offset = save_update_offset;
mch_memmove(ofb_buffer, save_ofb_buffer, BF_OFB_LEN);
mch_memmove(cfb_buffer, save_cfb_buffer, BF_CFB_LEN);
mch_memmove(pax, save_pax, 4 * 18);
mch_memmove(sbx, save_sbx, 4 * 4 * 256);
}
+54 -26
View File
@@ -998,6 +998,50 @@ do_bufdel(command, arg, addr_count, start_bnr, end_bnr, forceit)
#if defined(FEAT_LISTCMDS) || defined(FEAT_PYTHON) \
|| defined(FEAT_PYTHON3) || defined(PROTO)
static int empty_curbuf __ARGS((int close_others, int forceit, int action));
/*
* Make the current buffer empty.
* Used when it is wiped out and it's the last buffer.
*/
static int
empty_curbuf(close_others, forceit, action)
int close_others;
int forceit;
int action;
{
int retval;
buf_T *buf = curbuf;
if (action == DOBUF_UNLOAD)
{
EMSG(_("E90: Cannot unload last buffer"));
return FAIL;
}
if (close_others)
{
/* Close any other windows on this buffer, then make it empty. */
#ifdef FEAT_WINDOWS
close_windows(buf, TRUE);
#endif
}
setpcmark();
retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
forceit ? ECMD_FORCEIT : 0, curwin);
/*
* do_ecmd() may create a new buffer, then we have to delete
* the old one. But do_ecmd() may have done that already, check
* if the buffer still exists.
*/
if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
close_buffer(NULL, buf, action, FALSE);
if (!close_others)
need_fileinfo = FALSE;
return retval;
}
/*
* Implementation of the commands for the buffer list.
*
@@ -1118,7 +1162,6 @@ do_buffer(action, start, dir, count, forceit)
if (unload)
{
int forward;
int retval;
/* When unloading or deleting a buffer that's already unloaded and
* unlisted: fail silently. */
@@ -1159,30 +1202,7 @@ do_buffer(action, start, dir, count, forceit)
if (bp->b_p_bl && bp != buf)
break;
if (bp == NULL && buf == curbuf)
{
if (action == DOBUF_UNLOAD)
{
EMSG(_("E90: Cannot unload last buffer"));
return FAIL;
}
/* Close any other windows on this buffer, then make it empty. */
#ifdef FEAT_WINDOWS
close_windows(buf, TRUE);
#endif
setpcmark();
retval = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE,
forceit ? ECMD_FORCEIT : 0, curwin);
/*
* do_ecmd() may create a new buffer, then we have to delete
* the old one. But do_ecmd() may have done that already, check
* if the buffer still exists.
*/
if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
close_buffer(NULL, buf, action, FALSE);
return retval;
}
return empty_curbuf(TRUE, forceit, action);
#ifdef FEAT_WINDOWS
/*
@@ -1216,7 +1236,8 @@ do_buffer(action, start, dir, count, forceit)
/*
* Deleting the current buffer: Need to find another buffer to go to.
* There must be another, otherwise it would have been handled above.
* There should be another, otherwise it would have been handled
* above. However, autocommands may have deleted all buffers.
* First use au_new_curbuf, if it is valid.
* Then prefer the buffer we most recently visited.
* Else try to find one that is loaded, after the current buffer,
@@ -1315,6 +1336,13 @@ do_buffer(action, start, dir, count, forceit)
}
}
if (buf == NULL)
{
/* Autocommands must have wiped out all other buffers. Only option
* now is to make the current buffer empty. */
return empty_curbuf(FALSE, forceit, action);
}
/*
* make buf current buffer
*/
+10
View File
@@ -816,9 +816,19 @@ if test "$enable_mzschemeinterp" = "yes"; then
AC_MSG_CHECKING(for mzscheme_base.c)
if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
MZSCHEME_EXTRA="mzscheme_base.c"
MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
MZSCHEME_MOD="++lib scheme/base"
else
if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
MZSCHEME_EXTRA="mzscheme_base.c"
MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
MZSCHEME_MOD="++lib scheme/base"
else
if test -f "${SCHEME_COLLECTS}collects/racket/base.rkt" ; then
MZSCHEME_EXTRA="mzscheme_base.c"
MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/raco ctool"
MZSCHEME_MOD=""
fi
fi
fi
if test "X$MZSCHEME_EXTRA" != "X" ; then
+81 -72
View File
@@ -1566,87 +1566,89 @@ ins_redraw(ready)
int conceal_update_lines = FALSE;
#endif
if (!char_avail())
{
if (char_avail())
return;
#if defined(FEAT_AUTOCMD) || defined(FEAT_CONCEAL)
/* Trigger CursorMoved if the cursor moved. Not when the popup menu is
* visible, the command might delete it. */
if (ready && (
/* Trigger CursorMoved if the cursor moved. Not when the popup menu is
* visible, the command might delete it. */
if (ready && (
# ifdef FEAT_AUTOCMD
has_cursormovedI()
has_cursormovedI()
# endif
# if defined(FEAT_AUTOCMD) && defined(FEAT_CONCEAL)
||
||
# endif
# ifdef FEAT_CONCEAL
curwin->w_p_cole > 0
curwin->w_p_cole > 0
# endif
)
&& !equalpos(last_cursormoved, curwin->w_cursor)
)
&& !equalpos(last_cursormoved, curwin->w_cursor)
# ifdef FEAT_INS_EXPAND
&& !pum_visible()
# endif
)
{
# ifdef FEAT_SYN_HL
/* Need to update the screen first, to make sure syntax
* highlighting is correct after making a change (e.g., inserting
* a "(". The autocommand may also require a redraw, so it's done
* again below, unfortunately. */
if (syntax_present(curwin) && must_redraw)
update_screen(0);
# endif
# ifdef FEAT_AUTOCMD
if (has_cursormovedI())
apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf);
# endif
# ifdef FEAT_CONCEAL
if (curwin->w_p_cole > 0)
{
conceal_old_cursor_line = last_cursormoved.lnum;
conceal_new_cursor_line = curwin->w_cursor.lnum;
conceal_update_lines = TRUE;
}
# endif
last_cursormoved = curwin->w_cursor;
}
#endif
#ifdef FEAT_AUTOCMD
/* Trigger TextChangedI if b_changedtick differs. */
if (ready && has_textchangedI()
&& last_changedtick != curbuf->b_changedtick
# ifdef FEAT_INS_EXPAND
&& !pum_visible()
# endif
)
{
# ifdef FEAT_SYN_HL
/* Need to update the screen first, to make sure syntax
* highlighting is correct after making a change (e.g., inserting
* a "(". The autocommand may also require a redraw, so it's done
* again below, unfortunately. */
if (syntax_present(curwin) && must_redraw)
update_screen(0);
# endif
# ifdef FEAT_AUTOCMD
if (has_cursormovedI())
apply_autocmds(EVENT_CURSORMOVEDI, NULL, NULL, FALSE, curbuf);
# endif
# ifdef FEAT_CONCEAL
if (curwin->w_p_cole > 0)
{
conceal_old_cursor_line = last_cursormoved.lnum;
conceal_new_cursor_line = curwin->w_cursor.lnum;
conceal_update_lines = TRUE;
}
# endif
last_cursormoved = curwin->w_cursor;
}
#endif
#ifdef FEAT_AUTOCMD
/* Trigger TextChangedI if b_changedtick differs. */
if (!ready && has_textchangedI()
&& last_changedtick != curbuf->b_changedtick
# ifdef FEAT_INS_EXPAND
&& !pum_visible()
# endif
)
{
if (last_changedtick_buf == curbuf)
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
last_changedtick_buf = curbuf;
last_changedtick = curbuf->b_changedtick;
}
#endif
if (must_redraw)
update_screen(0);
else if (clear_cmdline || redraw_cmdline)
showmode(); /* clear cmdline and show mode */
# if defined(FEAT_CONCEAL)
if ((conceal_update_lines
&& (conceal_old_cursor_line != conceal_new_cursor_line
|| conceal_cursor_line(curwin)))
|| need_cursor_line_redraw)
{
if (conceal_old_cursor_line != conceal_new_cursor_line)
update_single_line(curwin, conceal_old_cursor_line);
update_single_line(curwin, conceal_new_cursor_line == 0
? curwin->w_cursor.lnum : conceal_new_cursor_line);
curwin->w_valid &= ~VALID_CROW;
}
# endif
showruler(FALSE);
setcursor();
emsg_on_display = FALSE; /* may remove error message now */
)
{
if (last_changedtick_buf == curbuf)
apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
last_changedtick_buf = curbuf;
last_changedtick = curbuf->b_changedtick;
}
#endif
if (must_redraw)
update_screen(0);
else if (clear_cmdline || redraw_cmdline)
showmode(); /* clear cmdline and show mode */
# if defined(FEAT_CONCEAL)
if ((conceal_update_lines
&& (conceal_old_cursor_line != conceal_new_cursor_line
|| conceal_cursor_line(curwin)))
|| need_cursor_line_redraw)
{
if (conceal_old_cursor_line != conceal_new_cursor_line)
update_single_line(curwin, conceal_old_cursor_line);
update_single_line(curwin, conceal_new_cursor_line == 0
? curwin->w_cursor.lnum : conceal_new_cursor_line);
curwin->w_valid &= ~VALID_CROW;
}
# endif
showruler(FALSE);
setcursor();
emsg_on_display = FALSE; /* may remove error message now */
}
/*
@@ -4193,6 +4195,7 @@ ins_compl_get_exp(ini)
char_u *dict = NULL;
int dict_f = 0;
compl_T *old_match;
int set_match_pos;
if (!compl_started)
{
@@ -4211,6 +4214,7 @@ ins_compl_get_exp(ini)
for (;;)
{
found_new_match = FAIL;
set_match_pos = FALSE;
/* For ^N/^P pick a new entry from e_cpt if compl_started is off,
* or if found_all says this entry is done. For ^X^L only use the
@@ -4230,6 +4234,10 @@ ins_compl_get_exp(ini)
dec(&first_match_pos);
last_match_pos = first_match_pos;
type = 0;
/* Remember the first match so that the loop stops when we
* wrap and come back there a second time. */
set_match_pos = TRUE;
}
else if (vim_strchr((char_u *)"buwU", *e_cpt) != NULL
&& (ins_buf = ins_compl_next_buf(ins_buf, *e_cpt)) != curbuf)
@@ -4394,7 +4402,7 @@ ins_compl_get_exp(ini)
if (ins_buf->b_p_inf)
p_scs = FALSE;
/* buffers other than curbuf are scanned from the beginning or the
/* Buffers other than curbuf are scanned from the beginning or the
* end but never from the middle, thus setting nowrapscan in this
* buffers is a good idea, on the other hand, we always set
* wrapscan for curbuf to avoid missing matches -- Acevedo,Webb */
@@ -4421,12 +4429,13 @@ ins_compl_get_exp(ini)
compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
RE_LAST, (linenr_T)0, NULL);
--msg_silent;
if (!compl_started)
if (!compl_started || set_match_pos)
{
/* set "compl_started" even on fail */
compl_started = TRUE;
first_match_pos = *pos;
last_match_pos = *pos;
set_match_pos = FALSE;
}
else if (first_match_pos.lnum == last_match_pos.lnum
&& first_match_pos.col == last_match_pos.col)
+83 -64
View File
@@ -125,9 +125,6 @@ static dictitem_T globvars_var; /* variable used for g: */
*/
static hashtab_T compat_hashtab;
/* When using exists() don't auto-load a script. */
static int no_autoload = FALSE;
/*
* When recursively copying lists and dicts we need to remember which ones we
* have done to avoid endless recursiveness. This unique ID is used for that.
@@ -156,6 +153,11 @@ static int echo_attr = 0; /* attributes used for ":echo" */
/* Values for trans_function_name() argument: */
#define TFN_INT 1 /* internal function name OK */
#define TFN_QUIET 2 /* no error messages */
#define TFN_NO_AUTOLOAD 4 /* do not use script autoloading */
/* Values for get_lval() flags argument: */
#define GLV_QUIET TFN_QUIET /* no error messages */
#define GLV_NO_AUTOLOAD TFN_NO_AUTOLOAD /* do not use script autoloading */
/*
* Structure to hold info for a user function.
@@ -390,7 +392,7 @@ static void list_func_vars __ARGS((int *first));
static char_u *list_arg_vars __ARGS((exarg_T *eap, char_u *arg, int *first));
static char_u *ex_let_one __ARGS((char_u *arg, typval_T *tv, int copy, char_u *endchars, char_u *op));
static int check_changedtick __ARGS((char_u *arg));
static char_u *get_lval __ARGS((char_u *name, typval_T *rettv, lval_T *lp, int unlet, int skip, int quiet, int fne_flags));
static char_u *get_lval __ARGS((char_u *name, typval_T *rettv, lval_T *lp, int unlet, int skip, int flags, int fne_flags));
static void clear_lval __ARGS((lval_T *lp));
static void set_var_lval __ARGS((lval_T *lp, char_u *endp, typval_T *rettv, int copy, char_u *op));
static int tv_op __ARGS((typval_T *tv1, typval_T *tv2, char_u *op));
@@ -445,7 +447,7 @@ static int string2float __ARGS((char_u *text, float_T *value));
#endif
static int get_env_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
static int find_internal_func __ARGS((char_u *name));
static char_u *deref_func_name __ARGS((char_u *name, int *lenp));
static char_u *deref_func_name __ARGS((char_u *name, int *lenp, int no_autoload));
static int get_func_tv __ARGS((char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
static int call_func __ARGS((char_u *funcname, int len, typval_T *rettv, int argcount, typval_T *argvars, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
static void emsg_funcname __ARGS((char *ermsg, char_u *name));
@@ -770,7 +772,7 @@ static char_u *find_name_end __ARGS((char_u *arg, char_u **expr_start, char_u **
static char_u * make_expanded_name __ARGS((char_u *in_start, char_u *expr_start, char_u *expr_end, char_u *in_end));
static int eval_isnamec __ARGS((int c));
static int eval_isnamec1 __ARGS((int c));
static int get_var_tv __ARGS((char_u *name, int len, typval_T *rettv, int verbose));
static int get_var_tv __ARGS((char_u *name, int len, typval_T *rettv, int verbose, int no_autoload));
static int handle_subscript __ARGS((char_u **arg, typval_T *rettv, int evaluate, int verbose));
static typval_T *alloc_tv __ARGS((void));
static typval_T *alloc_string_tv __ARGS((char_u *string));
@@ -781,8 +783,8 @@ static linenr_T get_tv_lnum_buf __ARGS((typval_T *argvars, buf_T *buf));
static char_u *get_tv_string __ARGS((typval_T *varp));
static char_u *get_tv_string_buf __ARGS((typval_T *varp, char_u *buf));
static char_u *get_tv_string_buf_chk __ARGS((typval_T *varp, char_u *buf));
static dictitem_T *find_var __ARGS((char_u *name, hashtab_T **htp));
static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, int htname, char_u *varname, int writing));
static dictitem_T *find_var __ARGS((char_u *name, hashtab_T **htp, int no_autoload));
static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, int htname, char_u *varname, int no_autoload));
static hashtab_T *find_var_ht __ARGS((char_u *name, char_u **varname));
static void vars_clear_ext __ARGS((hashtab_T *ht, int free_val));
static void delete_var __ARGS((hashtab_T *ht, hashitem_T *hi));
@@ -1059,7 +1061,7 @@ var_redir_start(name, append)
ga_init2(&redir_ga, (int)sizeof(char), 500);
/* Parse the variable name (can be a dict or list entry). */
redir_endp = get_lval(redir_varname, NULL, redir_lval, FALSE, FALSE, FALSE,
redir_endp = get_lval(redir_varname, NULL, redir_lval, FALSE, FALSE, 0,
FNE_CHECK_START);
if (redir_endp == NULL || redir_lval->ll_name == NULL || *redir_endp != NUL)
{
@@ -1150,7 +1152,7 @@ var_redir_stop()
/* Call get_lval() again, if it's inside a Dict or List it may
* have changed. */
redir_endp = get_lval(redir_varname, NULL, redir_lval,
FALSE, FALSE, FALSE, FNE_CHECK_START);
FALSE, FALSE, 0, FNE_CHECK_START);
if (redir_endp != NULL && redir_lval->ll_name != NULL)
set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)".");
clear_lval(redir_lval);
@@ -2239,7 +2241,7 @@ list_arg_vars(eap, arg, first)
{
if (tofree != NULL)
name = tofree;
if (get_var_tv(name, len, &tv, TRUE) == FAIL)
if (get_var_tv(name, len, &tv, TRUE, FALSE) == FAIL)
error = TRUE;
else
{
@@ -2474,7 +2476,7 @@ ex_let_one(arg, tv, copy, endchars, op)
{
lval_T lv;
p = get_lval(arg, tv, &lv, FALSE, FALSE, FALSE, FNE_CHECK_START);
p = get_lval(arg, tv, &lv, FALSE, FALSE, 0, FNE_CHECK_START);
if (p != NULL && lv.ll_name != NULL)
{
if (endchars != NULL && vim_strchr(endchars, *skipwhite(p)) == NULL)
@@ -2519,18 +2521,22 @@ check_changedtick(arg)
* "unlet" is TRUE for ":unlet": slightly different behavior when something is
* wrong; must end in space or cmd separator.
*
* flags:
* GLV_QUIET: do not give error messages
* GLV_NO_AUTOLOAD: do not use script autoloading
*
* Returns a pointer to just after the name, including indexes.
* When an evaluation error occurs "lp->ll_name" is NULL;
* Returns NULL for a parsing error. Still need to free items in "lp"!
*/
static char_u *
get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
get_lval(name, rettv, lp, unlet, skip, flags, fne_flags)
char_u *name;
typval_T *rettv;
lval_T *lp;
int unlet;
int skip;
int quiet; /* don't give error messages */
int flags; /* GLV_ values */
int fne_flags; /* flags for find_name_end() */
{
char_u *p;
@@ -2544,6 +2550,7 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
char_u *key = NULL;
int len;
hashtab_T *ht;
int quiet = flags & GLV_QUIET;
/* Clear everything in "lp". */
vim_memset(lp, 0, sizeof(lval_T));
@@ -2591,7 +2598,7 @@ get_lval(name, rettv, lp, unlet, skip, quiet, fne_flags)
cc = *p;
*p = NUL;
v = find_var(lp->ll_name, &ht);
v = find_var(lp->ll_name, &ht, flags & GLV_NO_AUTOLOAD);
if (v == NULL && !quiet)
EMSG2(_(e_undefvar), lp->ll_name);
*p = cc;
@@ -2904,7 +2911,7 @@ set_var_lval(lp, endp, rettv, copy, op)
/* handle +=, -= and .= */
if (get_var_tv(lp->ll_name, (int)STRLEN(lp->ll_name),
&tv, TRUE) == OK)
&tv, TRUE, FALSE) == OK)
{
if (tv_op(&tv, rettv, op) == OK)
set_var(lp->ll_name, &tv, FALSE);
@@ -3425,7 +3432,7 @@ ex_call(eap)
/* If it is the name of a variable of type VAR_FUNC use its contents. */
len = (int)STRLEN(tofree);
name = deref_func_name(tofree, &len);
name = deref_func_name(tofree, &len, FALSE);
/* Skip white space to allow ":call func ()". Not good, but required for
* backward compatibility. */
@@ -3556,7 +3563,7 @@ ex_unletlock(eap, argstart, deep)
do
{
/* Parse the name and find the end. */
name_end = get_lval(arg, NULL, &lv, TRUE, eap->skip || error, FALSE,
name_end = get_lval(arg, NULL, &lv, TRUE, eap->skip || error, 0,
FNE_CHECK_START);
if (lv.ll_name == NULL)
error = TRUE; /* error but continue parsing */
@@ -3709,7 +3716,7 @@ do_lock_var(lp, name_end, deep, lock)
ret = FAIL;
else
{
di = find_var(lp->ll_name, NULL);
di = find_var(lp->ll_name, NULL, TRUE);
if (di == NULL)
ret = FAIL;
else
@@ -5152,7 +5159,7 @@ eval7(arg, rettv, evaluate, want_string)
{
/* If "s" is the name of a variable of type VAR_FUNC
* use its contents. */
s = deref_func_name(s, &len);
s = deref_func_name(s, &len, !evaluate);
/* Invoke the function. */
ret = get_func_tv(s, len, rettv, arg,
@@ -5179,7 +5186,7 @@ eval7(arg, rettv, evaluate, want_string)
}
}
else if (evaluate)
ret = get_var_tv(s, len, rettv, TRUE);
ret = get_var_tv(s, len, rettv, TRUE, FALSE);
else
ret = OK;
}
@@ -6419,6 +6426,16 @@ list_insert_tv(l, tv, item)
if (ni == NULL)
return FAIL;
copy_tv(tv, &ni->li_tv);
list_insert(l, ni, item);
return OK;
}
void
list_insert(l, ni, item)
list_T *l;
listitem_T *ni;
listitem_T *item;
{
if (item == NULL)
/* Append new item at end of list. */
list_append(l, ni);
@@ -6440,7 +6457,6 @@ list_insert_tv(l, tv, item)
item->li_prev = ni;
++l->lv_len;
}
return OK;
}
/*
@@ -8276,16 +8292,17 @@ find_internal_func(name)
* name it contains, otherwise return "name".
*/
static char_u *
deref_func_name(name, lenp)
deref_func_name(name, lenp, no_autoload)
char_u *name;
int *lenp;
int no_autoload;
{
dictitem_T *v;
int cc;
cc = name[*lenp];
name[*lenp] = NUL;
v = find_var(name, NULL);
v = find_var(name, NULL, no_autoload);
name[*lenp] = cc;
if (v != NULL && v->di_tv.v_type == VAR_FUNC)
{
@@ -10040,8 +10057,6 @@ f_exists(argvars, rettv)
int n = FALSE;
int len = 0;
no_autoload = TRUE;
p = get_tv_string(&argvars[0]);
if (*p == '$') /* environment variable */
{
@@ -10092,7 +10107,7 @@ f_exists(argvars, rettv)
{
if (tofree != NULL)
name = tofree;
n = (get_var_tv(name, len, &tv, FALSE) == OK);
n = (get_var_tv(name, len, &tv, FALSE, TRUE) == OK);
if (n)
{
/* handle d.key, l[idx], f(expr) */
@@ -10108,8 +10123,6 @@ f_exists(argvars, rettv)
}
rettv->vval.v_number = n;
no_autoload = FALSE;
}
#ifdef FEAT_FLOAT
@@ -11120,6 +11133,8 @@ get_buffer_lines(buf, start, end, retlist, rettv)
{
char_u *p;
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
if (retlist && rettv_list_alloc(rettv) == FAIL)
return;
@@ -11132,8 +11147,6 @@ get_buffer_lines(buf, start, end, retlist, rettv)
p = ml_get_buf(buf, start, FALSE);
else
p = (char_u *)"";
rettv->v_type = VAR_STRING;
rettv->vval.v_string = vim_strsave(p);
}
else
@@ -13364,8 +13377,8 @@ f_islocked(argvars, rettv)
dictitem_T *di;
rettv->vval.v_number = -1;
end = get_lval(get_tv_string(&argvars[0]), NULL, &lv, FALSE, FALSE, FALSE,
FNE_CHECK_START);
end = get_lval(get_tv_string(&argvars[0]), NULL, &lv, FALSE, FALSE,
GLV_NO_AUTOLOAD, FNE_CHECK_START);
if (end != NULL && lv.ll_name != NULL)
{
if (*end != NUL)
@@ -13378,7 +13391,7 @@ f_islocked(argvars, rettv)
rettv->vval.v_number = 1; /* always locked */
else
{
di = find_var(lv.ll_name, NULL);
di = find_var(lv.ll_name, NULL, TRUE);
if (di != NULL)
{
/* Consider a variable locked when:
@@ -14161,8 +14174,8 @@ f_matcharg(argvars, rettv)
}
else
{
list_append_string(rettv->vval.v_list, NUL, -1);
list_append_string(rettv->vval.v_list, NUL, -1);
list_append_string(rettv->vval.v_list, NULL, -1);
list_append_string(rettv->vval.v_list, NULL, -1);
}
}
#endif
@@ -19802,11 +19815,12 @@ set_cmdarg(eap, oldarg)
* Return OK or FAIL.
*/
static int
get_var_tv(name, len, rettv, verbose)
get_var_tv(name, len, rettv, verbose, no_autoload)
char_u *name;
int len; /* length of "name" */
typval_T *rettv; /* NULL when only checking existence */
int verbose; /* may give error message */
int no_autoload; /* do not use script autoloading */
{
int ret = OK;
typval_T *tv = NULL;
@@ -19833,7 +19847,7 @@ get_var_tv(name, len, rettv, verbose)
*/
else
{
v = find_var(name, NULL);
v = find_var(name, NULL, no_autoload);
if (v != NULL)
tv = &v->di_tv;
}
@@ -20235,9 +20249,10 @@ get_tv_string_buf_chk(varp, buf)
* hashtab_T used.
*/
static dictitem_T *
find_var(name, htp)
find_var(name, htp, no_autoload)
char_u *name;
hashtab_T **htp;
int no_autoload;
{
char_u *varname;
hashtab_T *ht;
@@ -20247,7 +20262,7 @@ find_var(name, htp)
*htp = ht;
if (ht == NULL)
return NULL;
return find_var_in_ht(ht, *name, varname, htp != NULL);
return find_var_in_ht(ht, *name, varname, no_autoload || htp != NULL);
}
/*
@@ -20255,11 +20270,11 @@ find_var(name, htp)
* Returns NULL if not found.
*/
static dictitem_T *
find_var_in_ht(ht, htname, varname, writing)
find_var_in_ht(ht, htname, varname, no_autoload)
hashtab_T *ht;
int htname;
char_u *varname;
int writing;
int no_autoload;
{
hashitem_T *hi;
@@ -20291,7 +20306,7 @@ find_var_in_ht(ht, htname, varname, writing)
* worked find the variable again. Don't auto-load a script if it was
* loaded already, otherwise it would be loaded every time when
* checking if a function name is a Funcref variable. */
if (ht == &globvarht && !writing)
if (ht == &globvarht && !no_autoload)
{
/* Note: script_autoload() may make "hi" invalid. It must either
* be obtained again or not used. */
@@ -20371,7 +20386,7 @@ get_var_value(name)
{
dictitem_T *v;
v = find_var(name, NULL);
v = find_var(name, NULL, FALSE);
if (v == NULL)
return NULL;
return get_tv_string(&v->di_tv);
@@ -21700,7 +21715,7 @@ ex_function(eap)
*/
if (fudi.fd_dict == NULL)
{
v = find_var(name, &ht);
v = find_var(name, &ht, FALSE);
if (v != NULL && v->di_tv.v_type == VAR_FUNC)
{
emsg_funcname(N_("E707: Function name conflicts with variable: %s"),
@@ -21858,8 +21873,9 @@ ret_free:
* Also handles a Funcref in a List or Dictionary.
* Returns the function name in allocated memory, or NULL for failure.
* flags:
* TFN_INT: internal function name OK
* TFN_QUIET: be quiet
* TFN_INT: internal function name OK
* TFN_QUIET: be quiet
* TFN_NO_AUTOLOAD: do not use script autoloading
* Advances "pp" to just after the function name (if no error).
*/
static char_u *
@@ -21897,7 +21913,8 @@ trans_function_name(pp, skip, flags, fdp)
if (lead > 2)
start += lead;
end = get_lval(start, NULL, &lv, FALSE, skip, flags & TFN_QUIET,
/* Note that TFN_ flags use the same values as GLV_ flags. */
end = get_lval(start, NULL, &lv, FALSE, skip, flags,
lead > 2 ? 0 : FNE_CHECK_START);
if (end == start)
{
@@ -21959,14 +21976,14 @@ trans_function_name(pp, skip, flags, fdp)
if (lv.ll_exp_name != NULL)
{
len = (int)STRLEN(lv.ll_exp_name);
name = deref_func_name(lv.ll_exp_name, &len);
name = deref_func_name(lv.ll_exp_name, &len, flags & TFN_NO_AUTOLOAD);
if (name == lv.ll_exp_name)
name = NULL;
}
else
{
len = (int)(end - *pp);
name = deref_func_name(*pp, &len);
name = deref_func_name(*pp, &len, flags & TFN_NO_AUTOLOAD);
if (name == *pp)
name = NULL;
}
@@ -22174,7 +22191,8 @@ function_exists(name)
char_u *p;
int n = FALSE;
p = trans_function_name(&nm, FALSE, TFN_INT|TFN_QUIET, NULL);
p = trans_function_name(&nm, FALSE, TFN_INT|TFN_QUIET|TFN_NO_AUTOLOAD,
NULL);
nm = skipwhite(nm);
/* Only accept "funcname", "funcname ", "funcname (..." and
@@ -22421,10 +22439,6 @@ script_autoload(name, reload)
int ret = FALSE;
int i;
/* Return quickly when autoload disabled. */
if (no_autoload)
return FALSE;
/* If there is no '#' after name[0] there is no package name. */
p = vim_strchr(name, AUTOLOAD_CHAR);
if (p == NULL || p == name)
@@ -24379,7 +24393,7 @@ do_string_sub(str, pat, sub, flags)
garray_T ga;
char_u *ret;
char_u *save_cpo;
int zero_width;
char_u *zero_width = NULL;
/* Make 'cpoptions' empty, so that the 'l' flag doesn't work here */
save_cpo = p_cpo;
@@ -24396,6 +24410,19 @@ do_string_sub(str, pat, sub, flags)
tail = str;
while (vim_regexec_nl(&regmatch, str, (colnr_T)(tail - str)))
{
/* Skip empty match except for first match. */
if (regmatch.startp[0] == regmatch.endp[0])
{
if (zero_width == regmatch.startp[0])
{
/* avoid getting stuck on a match with an empty string */
*((char_u *)ga.ga_data + ga.ga_len) = *tail++;
++ga.ga_len;
continue;
}
zero_width = regmatch.startp[0];
}
/*
* Get some space for a temporary buffer to do the substitution
* into. It will contain:
@@ -24418,17 +24445,9 @@ do_string_sub(str, pat, sub, flags)
(void)vim_regsub(&regmatch, sub, (char_u *)ga.ga_data
+ ga.ga_len + i, TRUE, TRUE, FALSE);
ga.ga_len += i + sublen - 1;
zero_width = (tail == regmatch.endp[0]
|| regmatch.startp[0] == regmatch.endp[0]);
tail = regmatch.endp[0];
if (*tail == NUL)
break;
if (zero_width)
{
/* avoid getting stuck on a match with an empty string */
*((char_u *)ga.ga_data + ga.ga_len) = *tail++;
++ga.ga_len;
}
if (!do_all)
break;
}
+7 -3
View File
@@ -5936,14 +5936,18 @@ find_help_tags(arg, num_matches, matches, keep_lang)
"?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
"/\\?", "/\\z(\\)", "\\=", ":s\\=",
"[count]", "[quotex]", "[range]",
"[pattern]", "\\|", "\\%$"};
"[pattern]", "\\|", "\\%$",
"s/\\~", "s/\\U", "s/\\L",
"s/\\1", "s/\\2", "s/\\3", "s/\\9"};
static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
"/star", "/\\\\star", "quotestar", "starstar",
"cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
"?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
"/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
"\\[count]", "\\[quotex]", "\\[range]",
"\\[pattern]", "\\\\bar", "/\\\\%\\$"};
"\\[pattern]", "\\\\bar", "/\\\\%\\$",
"s/\\\\\\~", "s/\\\\U", "s/\\\\L",
"s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
int flags;
d = IObuff; /* assume IObuff is long enough! */
@@ -5982,7 +5986,7 @@ find_help_tags(arg, num_matches, matches, keep_lang)
/* Replace:
* "[:...:]" with "\[:...:]"
* "[++...]" with "\[++...]"
* "\{" with "\\{"
* "\{" with "\\{" -- matching "} \}"
*/
if ((arg[0] == '[' && (arg[1] == ':'
|| (arg[1] == '+' && arg[2] == '+')))
+12 -5
View File
@@ -3268,7 +3268,11 @@ set_one_cmd_context(xp, buff)
++p;
/* for python 3.x: ":py3*" commands completion */
if (cmd[0] == 'p' && cmd[1] == 'y' && p == cmd + 2 && *p == '3')
{
++p;
while (ASCII_ISALPHA(*p) || *p == '*')
++p;
}
len = (int)(p - cmd);
if (len == 0)
@@ -8069,6 +8073,8 @@ ex_syncbind(eap)
{
#ifdef FEAT_SCROLLBIND
win_T *wp;
win_T *save_curwin = curwin;
buf_T *save_curbuf = curbuf;
long topline;
long y;
linenr_T old_linenr = curwin->w_cursor.lnum;
@@ -8100,13 +8106,13 @@ ex_syncbind(eap)
/*
* set all scrollbind windows to the same topline
* Set all scrollbind windows to the same topline.
*/
wp = curwin;
for (curwin = firstwin; curwin; curwin = curwin->w_next)
{
if (curwin->w_p_scb)
{
curbuf = curwin->w_buffer;
y = topline - curwin->w_topline;
if (y > 0)
scrollup(y, TRUE);
@@ -8120,7 +8126,8 @@ ex_syncbind(eap)
#endif
}
}
curwin = wp;
curwin = save_curwin;
curbuf = save_curbuf;
if (curwin->w_p_scb)
{
did_syncbind = TRUE;
@@ -8240,6 +8247,7 @@ post_chdir(local)
int local;
{
vim_free(curwin->w_localdir);
curwin->w_localdir = NULL;
if (local)
{
/* If still in global directory, need to remember current
@@ -8256,7 +8264,6 @@ post_chdir(local)
* name. */
vim_free(globaldir);
globaldir = NULL;
curwin->w_localdir = NULL;
}
shorten_fnames(TRUE);
@@ -8383,7 +8390,7 @@ ex_sleep(eap)
{
n = W_WINROW(curwin) + curwin->w_wrow - msg_scrolled;
if (n >= 0)
windgoto((int)n, curwin->w_wcol);
windgoto((int)n, W_WINCOL(curwin) + curwin->w_wcol);
}
len = eap->line2;
+83 -49
View File
@@ -320,6 +320,17 @@ free_msglist(l)
}
}
/*
* Free global "*msg_list" and the messages it contains, then set "*msg_list"
* to NULL.
*/
void
free_global_msglist()
{
free_msglist(*msg_list);
*msg_list = NULL;
}
/*
* Throw the message specified in the call to cause_errthrow() above as an
* error exception. If cstack is NULL, postpone the throw until do_cmdline()
@@ -410,66 +421,41 @@ do_intthrow(cstack)
return TRUE;
}
/*
* Throw a new exception. Return FAIL when out of memory or it was tried to
* throw an illegal user exception. "value" is the exception string for a user
* or interrupt exception, or points to a message list in case of an error
* exception.
* Get an exception message that is to be stored in current_exception->value.
*/
static int
throw_exception(value, type, cmdname)
char_u *
get_exception_string(value, type, cmdname, should_free)
void *value;
int type;
char_u *cmdname;
int *should_free;
{
except_T *excp;
char_u *p, *mesg, *val;
char_u *ret, *mesg;
int cmdlen;
/*
* Disallow faking Interrupt or error exceptions as user exceptions. They
* would be treated differently from real interrupt or error exceptions when
* no active try block is found, see do_cmdline().
*/
if (type == ET_USER)
{
if (STRNCMP((char_u *)value, "Vim", 3) == 0 &&
(((char_u *)value)[3] == NUL || ((char_u *)value)[3] == ':' ||
((char_u *)value)[3] == '('))
{
EMSG(_("E608: Cannot :throw exceptions with 'Vim' prefix"));
goto fail;
}
}
excp = (except_T *)alloc((unsigned)sizeof(except_T));
if (excp == NULL)
goto nomem;
char_u *p, *val;
if (type == ET_ERROR)
{
/* Store the original message and prefix the exception value with
* "Vim:" or, if a command name is given, "Vim(cmdname):". */
excp->messages = (struct msglist *)value;
mesg = excp->messages->throw_msg;
*should_free = FALSE;
mesg = ((struct msglist *)value)->throw_msg;
if (cmdname != NULL && *cmdname != NUL)
{
cmdlen = (int)STRLEN(cmdname);
excp->value = vim_strnsave((char_u *)"Vim(",
ret = vim_strnsave((char_u *)"Vim(",
4 + cmdlen + 2 + (int)STRLEN(mesg));
if (excp->value == NULL)
goto nomem;
STRCPY(&excp->value[4], cmdname);
STRCPY(&excp->value[4 + cmdlen], "):");
val = excp->value + 4 + cmdlen + 2;
if (ret == NULL)
return ret;
STRCPY(&ret[4], cmdname);
STRCPY(&ret[4 + cmdlen], "):");
val = ret + 4 + cmdlen + 2;
}
else
{
excp->value = vim_strnsave((char_u *)"Vim:", 4 + (int)STRLEN(mesg));
if (excp->value == NULL)
goto nomem;
val = excp->value + 4;
ret = vim_strnsave((char_u *)"Vim:", 4 + (int)STRLEN(mesg));
if (ret == NULL)
return ret;
val = ret + 4;
}
/* msg_add_fname may have been used to prefix the message with a file
@@ -506,14 +492,65 @@ throw_exception(value, type, cmdname)
}
}
else
excp->value = value;
{
*should_free = FALSE;
ret = (char_u *) value;
}
return ret;
}
/*
* Throw a new exception. Return FAIL when out of memory or it was tried to
* throw an illegal user exception. "value" is the exception string for a
* user or interrupt exception, or points to a message list in case of an
* error exception.
*/
static int
throw_exception(value, type, cmdname)
void *value;
int type;
char_u *cmdname;
{
except_T *excp;
int should_free;
/*
* Disallow faking Interrupt or error exceptions as user exceptions. They
* would be treated differently from real interrupt or error exceptions
* when no active try block is found, see do_cmdline().
*/
if (type == ET_USER)
{
if (STRNCMP((char_u *)value, "Vim", 3) == 0
&& (((char_u *)value)[3] == NUL || ((char_u *)value)[3] == ':'
|| ((char_u *)value)[3] == '('))
{
EMSG(_("E608: Cannot :throw exceptions with 'Vim' prefix"));
goto fail;
}
}
excp = (except_T *)alloc((unsigned)sizeof(except_T));
if (excp == NULL)
goto nomem;
if (type == ET_ERROR)
/* Store the original message and prefix the exception value with
* "Vim:" or, if a command name is given, "Vim(cmdname):". */
excp->messages = (struct msglist *)value;
excp->value = get_exception_string(value, type, cmdname, &should_free);
if (excp->value == NULL && should_free)
goto nomem;
excp->type = type;
excp->throw_name = vim_strsave(sourcing_name == NULL
? (char_u *)"" : sourcing_name);
if (excp->throw_name == NULL)
{
if (type == ET_ERROR)
if (should_free)
vim_free(excp->value);
goto nomem;
}
@@ -2033,10 +2070,7 @@ leave_cleanup(csp)
/* If an error was about to be converted to an exception when
* enter_cleanup() was called, free the message list. */
if (msg_list != NULL)
{
free_msglist(*msg_list);
*msg_list = NULL;
}
free_global_msglist();
}
/*
+9 -6
View File
@@ -2973,7 +2973,7 @@ check_for_cryptkey(cryptkey, ptr, sizep, filesizep, newfile, fname, did_ask)
else
{
bf_key_init(cryptkey, ptr + CRYPT_MAGIC_LEN, salt_len);
bf_ofb_init(ptr + CRYPT_MAGIC_LEN + salt_len, seed_len);
bf_cfb_init(ptr + CRYPT_MAGIC_LEN + salt_len, seed_len);
}
/* Remove magic number from the text */
@@ -3025,7 +3025,7 @@ prepare_crypt_read(fp)
if (fread(buffer, salt_len + seed_len, 1, fp) != 1)
return FAIL;
bf_key_init(curbuf->b_p_key, buffer, salt_len);
bf_ofb_init(buffer + salt_len, seed_len);
bf_cfb_init(buffer + salt_len, seed_len);
}
return OK;
}
@@ -3064,7 +3064,7 @@ prepare_crypt_write(buf, lenp)
seed = salt + salt_len;
sha2_seed(salt, salt_len, seed, seed_len);
bf_key_init(buf->b_p_key, salt, salt_len);
bf_ofb_init(seed, seed_len);
bf_cfb_init(seed, seed_len);
}
}
*lenp = CRYPT_MAGIC_LEN + salt_len + seed_len;
@@ -9368,7 +9368,9 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
*/
if (fname_io == NULL)
{
if (fname != NULL && *fname != NUL)
if (event == EVENT_COLORSCHEME)
autocmd_fname = NULL;
else if (fname != NULL && *fname != NUL)
autocmd_fname = fname;
else if (buf != NULL)
autocmd_fname = buf->b_ffname;
@@ -9421,14 +9423,15 @@ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
else
{
sfname = vim_strsave(fname);
/* Don't try expanding FileType, Syntax, FuncUndefined, WindowID or
* QuickFixCmd* */
/* Don't try expanding FileType, Syntax, FuncUndefined, WindowID,
* ColorScheme or QuickFixCmd* */
if (event == EVENT_FILETYPE
|| event == EVENT_SYNTAX
|| event == EVENT_FUNCUNDEFINED
|| event == EVENT_REMOTEREPLY
|| event == EVENT_SPELLFILEMISSING
|| event == EVENT_QUICKFIXCMDPRE
|| event == EVENT_COLORSCHEME
|| event == EVENT_QUICKFIXCMDPOST)
fname = vim_strsave(fname);
else
+104 -59
View File
@@ -40,13 +40,13 @@
#define MINIMAL_SIZE 20 /* minimal size for b_str */
static struct buffheader redobuff = {{NULL, {NUL}}, NULL, 0, 0};
static struct buffheader old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
static buffheader_T redobuff = {{NULL, {NUL}}, NULL, 0, 0};
static buffheader_T old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
#if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
static struct buffheader save_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
static struct buffheader save_old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
static buffheader_T save_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
static buffheader_T save_old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
#endif
static struct buffheader recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
static buffheader_T recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
static int typeahead_char = 0; /* typeahead char that's not flushed */
@@ -112,11 +112,12 @@ static char_u noremapbuf_init[TYPELEN_INIT]; /* initial typebuf.tb_noremap */
static int last_recorded_len = 0; /* number of last recorded chars */
static char_u *get_buffcont __ARGS((struct buffheader *, int));
static void add_buff __ARGS((struct buffheader *, char_u *, long n));
static void add_num_buff __ARGS((struct buffheader *, long));
static void add_char_buff __ARGS((struct buffheader *, int));
static int read_stuff __ARGS((int advance));
static char_u *get_buffcont __ARGS((buffheader_T *, int));
static void add_buff __ARGS((buffheader_T *, char_u *, long n));
static void add_num_buff __ARGS((buffheader_T *, long));
static void add_char_buff __ARGS((buffheader_T *, int));
static int read_readbuffers __ARGS((int advance));
static int read_readbuf __ARGS((buffheader_T *buf, int advance));
static void start_stuff __ARGS((void));
static int read_redo __ARGS((int, int));
static void copy_redo __ARGS((int));
@@ -137,9 +138,9 @@ static char_u *eval_map_expr __ARGS((char_u *str, int c));
*/
void
free_buff(buf)
struct buffheader *buf;
buffheader_T *buf;
{
struct buffblock *p, *np;
buffblock_T *p, *np;
for (p = buf->bh_first.b_next; p != NULL; p = np)
{
@@ -155,14 +156,14 @@ free_buff(buf)
*/
static char_u *
get_buffcont(buffer, dozero)
struct buffheader *buffer;
buffheader_T *buffer;
int dozero; /* count == zero is not an error */
{
long_u count = 0;
char_u *p = NULL;
char_u *p2;
char_u *str;
struct buffblock *bp;
buffblock_T *bp;
/* compute the total length of the string */
for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
@@ -230,11 +231,11 @@ get_inserted()
*/
static void
add_buff(buf, s, slen)
struct buffheader *buf;
buffheader_T *buf;
char_u *s;
long slen; /* length of "s" or -1 */
{
struct buffblock *p;
buffblock_T *p;
long_u len;
if (slen < 0)
@@ -270,7 +271,7 @@ add_buff(buf, s, slen)
len = MINIMAL_SIZE;
else
len = slen;
p = (struct buffblock *)lalloc((long_u)(sizeof(struct buffblock) + len),
p = (buffblock_T *)lalloc((long_u)(sizeof(buffblock_T) + len),
TRUE);
if (p == NULL)
return; /* no space, just forget it */
@@ -289,7 +290,7 @@ add_buff(buf, s, slen)
*/
static void
add_num_buff(buf, n)
struct buffheader *buf;
buffheader_T *buf;
long n;
{
char_u number[32];
@@ -304,7 +305,7 @@ add_num_buff(buf, n)
*/
static void
add_char_buff(buf, c)
struct buffheader *buf;
buffheader_T *buf;
int c;
{
#ifdef FEAT_MBYTE
@@ -354,46 +355,71 @@ add_char_buff(buf, c)
#endif
}
/* First read ahead buffer. Used for translated commands. */
static buffheader_T readbuf1 = {{NULL, {NUL}}, NULL, 0, 0};
/* Second read ahead buffer. Used for redo. */
static buffheader_T readbuf2 = {{NULL, {NUL}}, NULL, 0, 0};
/*
* Get one byte from the stuff buffer.
* Get one byte from the read buffers. Use readbuf1 one first, use readbuf2
* if that one is empty.
* If advance == TRUE go to the next char.
* No translation is done K_SPECIAL and CSI are escaped.
*/
static int
read_stuff(advance)
read_readbuffers(advance)
int advance;
{
char_u c;
struct buffblock *curr;
int c;
if (stuffbuff.bh_first.b_next == NULL) /* buffer is empty */
c = read_readbuf(&readbuf1, advance);
if (c == NUL)
c = read_readbuf(&readbuf2, advance);
return c;
}
static int
read_readbuf(buf, advance)
buffheader_T *buf;
int advance;
{
char_u c;
buffblock_T *curr;
if (buf->bh_first.b_next == NULL) /* buffer is empty */
return NUL;
curr = stuffbuff.bh_first.b_next;
c = curr->b_str[stuffbuff.bh_index];
curr = buf->bh_first.b_next;
c = curr->b_str[buf->bh_index];
if (advance)
{
if (curr->b_str[++stuffbuff.bh_index] == NUL)
if (curr->b_str[++buf->bh_index] == NUL)
{
stuffbuff.bh_first.b_next = curr->b_next;
buf->bh_first.b_next = curr->b_next;
vim_free(curr);
stuffbuff.bh_index = 0;
buf->bh_index = 0;
}
}
return c;
}
/*
* Prepare the stuff buffer for reading (if it contains something).
* Prepare the read buffers for reading (if they contain something).
*/
static void
start_stuff()
{
if (stuffbuff.bh_first.b_next != NULL)
if (readbuf1.bh_first.b_next != NULL)
{
stuffbuff.bh_curr = &(stuffbuff.bh_first);
stuffbuff.bh_space = 0;
readbuf1.bh_curr = &(readbuf1.bh_first);
readbuf1.bh_space = 0;
}
if (readbuf2.bh_first.b_next != NULL)
{
readbuf2.bh_curr = &(readbuf2.bh_first);
readbuf2.bh_space = 0;
}
}
@@ -403,7 +429,18 @@ start_stuff()
int
stuff_empty()
{
return (stuffbuff.bh_first.b_next == NULL);
return (readbuf1.bh_first.b_next == NULL
&& readbuf2.bh_first.b_next == NULL);
}
/*
* Return TRUE if readbuf1 is empty. There may still be redo characters in
* redbuf2.
*/
int
readbuf1_empty()
{
return (readbuf1.bh_first.b_next == NULL);
}
/*
@@ -428,7 +465,7 @@ flush_buffers(flush_typeahead)
init_typebuf();
start_stuff();
while (read_stuff(TRUE) != NUL)
while (read_readbuffers(TRUE) != NUL)
;
if (flush_typeahead) /* remove all typeahead */
@@ -483,7 +520,7 @@ CancelRedo()
redobuff = old_redobuff;
old_redobuff.bh_first.b_next = NULL;
start_stuff();
while (read_stuff(TRUE) != NUL)
while (read_readbuffers(TRUE) != NUL)
;
}
}
@@ -638,7 +675,7 @@ AppendNumberToRedobuff(n)
stuffReadbuff(s)
char_u *s;
{
add_buff(&stuffbuff, s, -1L);
add_buff(&readbuf1, s, -1L);
}
void
@@ -646,7 +683,7 @@ stuffReadbuffLen(s, len)
char_u *s;
long len;
{
add_buff(&stuffbuff, s, len);
add_buff(&readbuf1, s, len);
}
#if defined(FEAT_EVAL) || defined(PROTO)
@@ -692,7 +729,7 @@ stuffReadbuffSpec(s)
stuffcharReadbuff(c)
int c;
{
add_char_buff(&stuffbuff, c);
add_char_buff(&readbuf1, c);
}
/*
@@ -702,7 +739,7 @@ stuffcharReadbuff(c)
stuffnumReadbuff(n)
long n;
{
add_num_buff(&stuffbuff, n);
add_num_buff(&readbuf1, n);
}
/*
@@ -718,13 +755,13 @@ read_redo(init, old_redo)
int init;
int old_redo;
{
static struct buffblock *bp;
static char_u *p;
int c;
static buffblock_T *bp;
static char_u *p;
int c;
#ifdef FEAT_MBYTE
int n;
char_u buf[MB_MAXBYTES + 1];
int i;
int n;
char_u buf[MB_MAXBYTES + 1];
int i;
#endif
if (init)
@@ -795,11 +832,11 @@ copy_redo(old_redo)
int c;
while ((c = read_redo(FALSE, old_redo)) != NUL)
stuffcharReadbuff(c);
add_char_buff(&readbuf2, c);
}
/*
* Stuff the redo buffer into the stuffbuff.
* Stuff the redo buffer into readbuf2.
* Insert the redo count into the command.
* If "old_redo" is TRUE, the last but one command is repeated
* instead of the last command (inserting text). This is used for
@@ -823,13 +860,13 @@ start_redo(count, old_redo)
/* copy the buffer name, if present */
if (c == '"')
{
add_buff(&stuffbuff, (char_u *)"\"", 1L);
add_buff(&readbuf2, (char_u *)"\"", 1L);
c = read_redo(FALSE, old_redo);
/* if a numbered buffer is used, increment the number */
if (c >= '1' && c < '9')
++c;
add_char_buff(&stuffbuff, c);
add_char_buff(&readbuf2, c);
c = read_redo(FALSE, old_redo);
}
@@ -850,18 +887,18 @@ start_redo(count, old_redo)
{
while (VIM_ISDIGIT(c)) /* skip "old" count */
c = read_redo(FALSE, old_redo);
add_num_buff(&stuffbuff, count);
add_num_buff(&readbuf2, count);
}
/* copy from the redo buffer into the stuff buffer */
add_char_buff(&stuffbuff, c);
add_char_buff(&readbuf2, c);
copy_redo(old_redo);
return OK;
}
/*
* Repeat the last insert (R, o, O, a, A, i or I command) by stuffing
* the redo buffer into the stuffbuff.
* the redo buffer into readbuf2.
* return FAIL for failure, OK otherwise
*/
int
@@ -879,7 +916,7 @@ start_redo_ins()
if (vim_strchr((char_u *)"AaIiRrOo", c) != NULL)
{
if (c == 'O' || c == 'o')
stuffReadbuff(NL_STR);
add_buff(&readbuf2, NL_STR, -1L);
break;
}
}
@@ -1360,8 +1397,10 @@ save_typeahead(tp)
tp->old_mod_mask = old_mod_mask;
old_char = -1;
tp->save_stuffbuff = stuffbuff;
stuffbuff.bh_first.b_next = NULL;
tp->save_readbuf1 = readbuf1;
readbuf1.bh_first.b_next = NULL;
tp->save_readbuf2 = readbuf2;
readbuf2.bh_first.b_next = NULL;
# ifdef USE_INPUT_BUF
tp->save_inputbuf = get_input_buf();
# endif
@@ -1384,8 +1423,10 @@ restore_typeahead(tp)
old_char = tp->old_char;
old_mod_mask = tp->old_mod_mask;
free_buff(&stuffbuff);
stuffbuff = tp->save_stuffbuff;
free_buff(&readbuf1);
readbuf1 = tp->save_readbuf1;
free_buff(&readbuf2);
readbuf2 = tp->save_readbuf2;
# ifdef USE_INPUT_BUF
set_input_buf(tp->save_inputbuf);
# endif
@@ -1992,7 +2033,7 @@ vgetorpeek(advance)
typeahead_char = 0;
}
else
c = read_stuff(advance);
c = read_readbuffers(advance);
if (c != NUL && !got_int)
{
if (advance)
@@ -2261,6 +2302,10 @@ vgetorpeek(advance)
msg_row = Rows - 1;
msg_clr_eos(); /* clear ruler */
}
#ifdef FEAT_WINDOWS
status_redraw_all();
redraw_statuslines();
#endif
showmode();
setcursor();
continue;
-5
View File
@@ -981,11 +981,6 @@ EXTERN int RedrawingDisabled INIT(= 0);
EXTERN int readonlymode INIT(= FALSE); /* Set to TRUE for "view" */
EXTERN int recoverymode INIT(= FALSE); /* Set to TRUE for "-r" option */
EXTERN struct buffheader stuffbuff /* stuff buffer */
#ifdef DO_INIT
= {{NULL, {NUL}}, NULL, 0, 0}
#endif
;
EXTERN typebuf_T typebuf /* typeahead buffer */
#ifdef DO_INIT
= {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}
+43 -11
View File
@@ -14,7 +14,8 @@
#define IN_PERL_FILE /* don't include if_perl.pro from proto.h */
/*
* Currently 32-bit version of ActivePerl is built with VC6.
* Currently 32-bit version of ActivePerl is built with VC6 (or MinGW since
* ActivePerl 5.18).
* (http://community.activestate.com/faq/windows-compilers-perl-modules)
* It means that time_t should be 32-bit. However the default size of
* time_t is 64-bit since VC8. So we have to define _USE_32BIT_TIME_T.
@@ -23,8 +24,31 @@
# define _USE_32BIT_TIME_T
#endif
/*
* Prevent including winsock.h. perl.h tries to detect whether winsock.h is
* already included before including winsock2.h, because winsock2.h isn't
* compatible with winsock.h. However the detection doesn't work with some
* versions of MinGW. If WIN32_LEAN_AND_MEAN is defined, windows.h will not
* include winsock.h.
*/
#ifdef WIN32
# define WIN32_LEAN_AND_MEAN
#endif
#include "vim.h"
/* Work around for perl-5.18.
* Don't include "perl\lib\CORE\inline.h" for now,
* include it after Perl_sv_free2 is defined. */
#ifdef DYNAMIC_PERL
# define PERL_NO_INLINE_FUNCTIONS
#endif
/* Work around for using MSVC and ActivePerl 5.18. */
#ifdef _MSC_VER
# define __inline__ __inline
#endif
#include <EXTERN.h>
#include <perl.h>
#include <XSUB.h>
@@ -81,10 +105,6 @@
# define PERL5101_OR_LATER
#endif
#if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
# define PERL5180_OR_LATER
#endif
#ifndef pTHX
# define pTHX void
# define pTHX_
@@ -145,11 +165,9 @@ typedef int perl_key;
# define perl_free dll_perl_free
# define Perl_get_context dll_Perl_get_context
# define Perl_croak dll_Perl_croak
# ifndef PERL5180_OR_LATER
# ifdef PERL5101_OR_LATER
# define Perl_croak_xs_usage dll_Perl_croak_xs_usage
# endif
# endif
# ifndef PROTO
# define Perl_croak_nocontext dll_Perl_croak_nocontext
# define Perl_call_argv dll_Perl_call_argv
@@ -262,10 +280,13 @@ static int (*perl_run)(PerlInterpreter*);
static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
static void* (*Perl_get_context)(void);
static void (*Perl_croak)(pTHX_ const char*, ...);
#ifndef PERL5180_OR_LATER
#ifdef PERL5101_OR_LATER
/* Perl-5.18 has a different Perl_croak_xs_usage signature. */
# if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
static void (*Perl_croak_xs_usage)(const CV *const, const char *const params);
# else
static void (*Perl_croak_xs_usage)(pTHX_ const CV *const, const char *const params);
#endif
# endif
#endif
static void (*Perl_croak_nocontext)(const char*, ...);
static I32 (*Perl_dowantarray)(pTHX);
@@ -337,7 +358,12 @@ static SV** (*Perl_TSv_ptr)(register PerlInterpreter*);
static XPV** (*Perl_TXpv_ptr)(register PerlInterpreter*);
static STRLEN* (*Perl_Tna_ptr)(register PerlInterpreter*);
#else
/* Perl-5.18 has a different Perl_sv_free2 signature. */
# if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
static void (*Perl_sv_free2)(pTHX_ SV*, const U32);
# else
static void (*Perl_sv_free2)(pTHX_ SV*);
# endif
static void (*Perl_sys_init)(int* argc, char*** argv);
static void (*Perl_sys_term)(void);
static void (*Perl_call_list)(pTHX_ I32, AV*);
@@ -384,10 +410,8 @@ static struct {
{"perl_parse", (PERL_PROC*)&perl_parse},
{"Perl_get_context", (PERL_PROC*)&Perl_get_context},
{"Perl_croak", (PERL_PROC*)&Perl_croak},
#ifndef PERL5180_OR_LATER
#ifdef PERL5101_OR_LATER
{"Perl_croak_xs_usage", (PERL_PROC*)&Perl_croak_xs_usage},
#endif
#endif
{"Perl_croak_nocontext", (PERL_PROC*)&Perl_croak_nocontext},
{"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray},
@@ -492,6 +516,14 @@ static struct {
{"", NULL},
};
/* Work around for perl-5.18.
* The definitions of S_SvREFCNT_inc and S_SvREFCNT_dec are needed, so include
* "perl\lib\CORE\inline.h", after Perl_sv_free2 is defined.
* The linker won't complain about undefined __impl_Perl_sv_free2. */
#if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
# include <inline.h>
#endif
/*
* Make all runtime-links of perl.
*
+512 -198
View File
@@ -13,6 +13,11 @@
* Common code for if_python.c and if_python3.c.
*/
#ifdef __BORLANDC__
/* Disable Warning W8060: Possibly incorrect assignment in function ... */
# pragma warn -8060
#endif
static char_u e_py_systemexit[] = "E880: Can't handle SystemExit of %s exception in vim";
#if PY_VERSION_HEX < 0x02050000
@@ -31,8 +36,9 @@ static const char *vim_special_path = "_vim_path_";
#define PyErr_SET_STRING(exc, str) PyErr_SetString(exc, _(str))
#define PyErr_SetVim(str) PyErr_SetString(VimError, str)
#define PyErr_SET_VIM(str) PyErr_SET_STRING(VimError, str)
#define PyErr_FORMAT(exc, str, tail) PyErr_Format(exc, _(str), tail)
#define PyErr_VIM_FORMAT(str, tail) PyErr_FORMAT(VimError, str, tail)
#define PyErr_FORMAT(exc, str, arg) PyErr_Format(exc, _(str), arg)
#define PyErr_FORMAT2(exc, str, arg1, arg2) PyErr_Format(exc, _(str), arg1,arg2)
#define PyErr_VIM_FORMAT(str, arg) PyErr_FORMAT(VimError, str, arg)
#define Py_TYPE_NAME(obj) (obj->ob_type->tp_name == NULL \
? "(NULL)" \
@@ -558,23 +564,40 @@ VimTryEnd(void)
/* Keyboard interrupt should be preferred over anything else */
if (got_int)
{
if (current_exception != NULL)
if (did_throw)
discard_current_exception();
else
need_rethrow = did_throw = FALSE;
got_int = FALSE;
PyErr_SetNone(PyExc_KeyboardInterrupt);
return -1;
}
else if (msg_list != NULL && *msg_list != NULL)
{
int should_free;
char_u *msg;
msg = get_exception_string(*msg_list, ET_ERROR, NULL, &should_free);
if (msg == NULL)
{
PyErr_NoMemory();
return -1;
}
PyErr_SetVim((char *) msg);
free_global_msglist();
if (should_free)
vim_free(msg);
return -1;
}
else if (!did_throw)
return (PyErr_Occurred() ? -1 : 0);
/* Python exception is preferred over vim one; unlikely to occur though */
else if (PyErr_Occurred())
{
if (current_exception != NULL)
discard_current_exception();
else
need_rethrow = did_throw = FALSE;
discard_current_exception();
return -1;
}
/* Finally transform VimL exception to python one */
@@ -1594,8 +1617,9 @@ _DictionaryItem(DictionaryObject *self, PyObject *args, int flags)
}
else if (flags & DICT_FLAG_RETURN_BOOL)
{
Py_INCREF(Py_True);
return Py_True;
ret = Py_True;
Py_INCREF(ret);
return ret;
}
di = dict_lookup(hi);
@@ -1895,11 +1919,17 @@ DictionaryUpdate(DictionaryObject *self, PyObject *args, PyObject *kwargs)
}
else
{
PyObject *obj;
PyObject *obj = NULL;
if (!PyArg_ParseTuple(args, "O", &obj))
if (!PyArg_ParseTuple(args, "|O", &obj))
return NULL;
if (obj == NULL)
{
Py_INCREF(Py_None);
return Py_None;
}
if (PyObject_HasAttrString(obj, "keys"))
return DictionaryUpdate(self, NULL, obj);
else
@@ -2081,8 +2111,6 @@ static struct PyMethodDef DictionaryMethods[] = {
};
static PyTypeObject ListType;
static PySequenceMethods ListAsSeq;
static PyMappingMethods ListAsMapping;
typedef struct
{
@@ -2226,7 +2254,7 @@ ListLength(ListObject *self)
}
static PyObject *
ListItem(ListObject *self, Py_ssize_t index)
ListIndex(ListObject *self, Py_ssize_t index)
{
listitem_T *li;
@@ -2246,53 +2274,389 @@ ListItem(ListObject *self, Py_ssize_t index)
return ConvertToPyObject(&li->li_tv);
}
#define PROC_RANGE \
if (last < 0) {\
if (last < -size) \
last = 0; \
else \
last += size; \
} \
if (first < 0) \
first = 0; \
if (first > size) \
first = size; \
if (last > size) \
last = size;
static PyObject *
ListSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last)
ListSlice(ListObject *self, Py_ssize_t first, Py_ssize_t step,
Py_ssize_t slicelen)
{
PyInt i;
PyInt size = ListLength(self);
PyInt n;
PyObject *list;
int reversed = 0;
PROC_RANGE
if (first >= last)
first = last;
if (step == 0)
{
PyErr_SET_STRING(PyExc_ValueError, N_("slice step cannot be zero"));
return NULL;
}
n = last-first;
list = PyList_New(n);
list = PyList_New(slicelen);
if (list == NULL)
return NULL;
for (i = 0; i < n; ++i)
for (i = 0; i < slicelen; ++i)
{
PyObject *item = ListItem(self, first + i);
PyObject *item;
item = ListIndex(self, first + i*step);
if (item == NULL)
{
Py_DECREF(list);
return NULL;
}
PyList_SET_ITEM(list, ((reversed)?(n-i-1):(i)), item);
PyList_SET_ITEM(list, i, item);
}
return list;
}
static PyObject *
ListItem(ListObject *self, PyObject* idx)
{
#if PY_MAJOR_VERSION < 3
if (PyInt_Check(idx))
{
long _idx = PyInt_AsLong(idx);
return ListIndex(self, _idx);
}
else
#endif
if (PyLong_Check(idx))
{
long _idx = PyLong_AsLong(idx);
return ListIndex(self, _idx);
}
else if (PySlice_Check(idx))
{
Py_ssize_t start, stop, step, slicelen;
if (PySlice_GetIndicesEx((PySliceObject *)idx, ListLength(self),
&start, &stop, &step, &slicelen) < 0)
return NULL;
return ListSlice(self, start, step, slicelen);
}
else
{
RAISE_INVALID_INDEX_TYPE(idx);
return NULL;
}
}
static void
list_restore(Py_ssize_t numadded, Py_ssize_t numreplaced, Py_ssize_t slicelen,
list_T *l, listitem_T **lis, listitem_T *lastaddedli)
{
while (numreplaced--)
{
list_insert(l, lis[numreplaced], lis[slicelen + numreplaced]);
listitem_remove(l, lis[slicelen + numreplaced]);
}
while (numadded--)
{
listitem_T *next;
next = lastaddedli->li_prev;
listitem_remove(l, lastaddedli);
lastaddedli = next;
}
}
static int
ListAssSlice(ListObject *self, Py_ssize_t first,
Py_ssize_t step, Py_ssize_t slicelen, PyObject *obj)
{
PyObject *iterator;
PyObject *item;
listitem_T *li;
listitem_T *lastaddedli = NULL;
listitem_T *next;
typval_T v;
list_T *l = self->list;
PyInt i;
PyInt j;
PyInt numreplaced = 0;
PyInt numadded = 0;
PyInt size;
listitem_T **lis = NULL;
size = ListLength(self);
if (l->lv_lock)
{
RAISE_LOCKED_LIST;
return -1;
}
if (step == 0)
{
PyErr_SET_STRING(PyExc_ValueError, N_("slice step cannot be zero"));
return -1;
}
if (step != 1 && slicelen == 0)
{
/* Nothing to do. Only error out if obj has some items. */
int ret = 0;
if (obj == NULL)
return 0;
if (!(iterator = PyObject_GetIter(obj)))
return -1;
if ((item = PyIter_Next(iterator)))
{
PyErr_FORMAT(PyExc_ValueError,
N_("attempt to assign sequence of size greater then %d "
"to extended slice"), 0);
Py_DECREF(item);
ret = -1;
}
Py_DECREF(iterator);
return ret;
}
if (obj != NULL)
/* XXX May allocate zero bytes. */
if (!(lis = PyMem_New(listitem_T *, slicelen * 2)))
{
PyErr_NoMemory();
return -1;
}
if (first == size)
li = NULL;
else
{
li = list_find(l, (long) first);
if (li == NULL)
{
PyErr_VIM_FORMAT(N_("internal error: no vim list item %d"),
(int)first);
if (obj != NULL)
PyMem_Free(lis);
return -1;
}
i = slicelen;
while (i-- && li != NULL)
{
j = step;
next = li;
if (step > 0)
while (next != NULL && ((next = next->li_next) != NULL) && --j);
else
while (next != NULL && ((next = next->li_prev) != NULL) && ++j);
if (obj == NULL)
listitem_remove(l, li);
else
lis[slicelen - i - 1] = li;
li = next;
}
if (li == NULL && i != -1)
{
PyErr_SET_VIM(N_("internal error: not enough list items"));
if (obj != NULL)
PyMem_Free(lis);
return -1;
}
}
if (obj == NULL)
return 0;
if (!(iterator = PyObject_GetIter(obj)))
{
PyMem_Free(lis);
return -1;
}
i = 0;
while ((item = PyIter_Next(iterator)))
{
if (ConvertFromPyObject(item, &v) == -1)
{
Py_DECREF(iterator);
Py_DECREF(item);
PyMem_Free(lis);
return -1;
}
Py_DECREF(item);
if (list_insert_tv(l, &v, numreplaced < slicelen
? lis[numreplaced]
: li) == FAIL)
{
clear_tv(&v);
PyErr_SET_VIM(N_("internal error: failed to add item to list"));
list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
PyMem_Free(lis);
return -1;
}
if (numreplaced < slicelen)
{
lis[slicelen + numreplaced] = lis[numreplaced]->li_prev;
list_remove(l, lis[numreplaced], lis[numreplaced]);
numreplaced++;
}
else
{
if (li)
lastaddedli = li->li_prev;
else
lastaddedli = l->lv_last;
numadded++;
}
clear_tv(&v);
if (step != 1 && i >= slicelen)
{
Py_DECREF(iterator);
PyErr_FORMAT(PyExc_ValueError,
N_("attempt to assign sequence of size greater then %d "
"to extended slice"), (int) slicelen);
list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
PyMem_Free(lis);
return -1;
}
++i;
}
Py_DECREF(iterator);
if (step != 1 && i != slicelen)
{
PyErr_FORMAT2(PyExc_ValueError,
N_("attempt to assign sequence of size %d to extended slice "
"of size %d"), (int) i, (int) slicelen);
list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
PyMem_Free(lis);
return -1;
}
if (PyErr_Occurred())
{
list_restore(numadded, numreplaced, slicelen, l, lis, lastaddedli);
PyMem_Free(lis);
return -1;
}
for (i = 0; i < numreplaced; i++)
listitem_free(lis[i]);
if (step == 1)
for (i = numreplaced; i < slicelen; i++)
listitem_remove(l, lis[i]);
PyMem_Free(lis);
return 0;
}
static int
ListAssIndex(ListObject *self, Py_ssize_t index, PyObject *obj)
{
typval_T tv;
list_T *l = self->list;
listitem_T *li;
Py_ssize_t length = ListLength(self);
if (l->lv_lock)
{
RAISE_LOCKED_LIST;
return -1;
}
if (index > length || (index == length && obj == NULL))
{
PyErr_SET_STRING(PyExc_IndexError, N_("list index out of range"));
return -1;
}
if (obj == NULL)
{
li = list_find(l, (long) index);
list_remove(l, li, li);
clear_tv(&li->li_tv);
vim_free(li);
return 0;
}
if (ConvertFromPyObject(obj, &tv) == -1)
return -1;
if (index == length)
{
if (list_append_tv(l, &tv) == FAIL)
{
clear_tv(&tv);
PyErr_SET_VIM(N_("failed to add item to list"));
return -1;
}
}
else
{
li = list_find(l, (long) index);
clear_tv(&li->li_tv);
copy_tv(&tv, &li->li_tv);
clear_tv(&tv);
}
return 0;
}
static Py_ssize_t
ListAssItem(ListObject *self, PyObject *idx, PyObject *obj)
{
#if PY_MAJOR_VERSION < 3
if (PyInt_Check(idx))
{
long _idx = PyInt_AsLong(idx);
return ListAssIndex(self, _idx, obj);
}
else
#endif
if (PyLong_Check(idx))
{
long _idx = PyLong_AsLong(idx);
return ListAssIndex(self, _idx, obj);
}
else if (PySlice_Check(idx))
{
Py_ssize_t start, stop, step, slicelen;
if (PySlice_GetIndicesEx((PySliceObject *)idx, ListLength(self),
&start, &stop, &step, &slicelen) < 0)
return -1;
return ListAssSlice(self, start, step, slicelen,
obj);
}
else
{
RAISE_INVALID_INDEX_TYPE(idx);
return -1;
}
}
static PyObject *
ListConcatInPlace(ListObject *self, PyObject *obj)
{
list_T *l = self->list;
PyObject *lookup_dict;
if (l->lv_lock)
{
RAISE_LOCKED_LIST;
return NULL;
}
if (!(lookup_dict = PyDict_New()))
return NULL;
if (list_py_concat(l, obj, lookup_dict) == -1)
{
Py_DECREF(lookup_dict);
return NULL;
}
Py_DECREF(lookup_dict);
Py_INCREF(self);
return (PyObject *)(self);
}
typedef struct
{
listwatch_T lw;
@@ -2343,156 +2707,6 @@ ListIter(ListObject *self)
NULL, NULL);
}
static int
ListAssItem(ListObject *self, Py_ssize_t index, PyObject *obj)
{
typval_T tv;
list_T *l = self->list;
listitem_T *li;
Py_ssize_t length = ListLength(self);
if (l->lv_lock)
{
RAISE_LOCKED_LIST;
return -1;
}
if (index > length || (index == length && obj == NULL))
{
PyErr_SET_STRING(PyExc_IndexError, N_("list index out of range"));
return -1;
}
if (obj == NULL)
{
li = list_find(l, (long) index);
list_remove(l, li, li);
clear_tv(&li->li_tv);
vim_free(li);
return 0;
}
if (ConvertFromPyObject(obj, &tv) == -1)
return -1;
if (index == length)
{
if (list_append_tv(l, &tv) == FAIL)
{
clear_tv(&tv);
PyErr_SET_VIM(N_("failed to add item to list"));
return -1;
}
}
else
{
li = list_find(l, (long) index);
clear_tv(&li->li_tv);
copy_tv(&tv, &li->li_tv);
clear_tv(&tv);
}
return 0;
}
static int
ListAssSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj)
{
PyInt size = ListLength(self);
PyObject *iterator;
PyObject *item;
listitem_T *li;
listitem_T *next;
typval_T v;
list_T *l = self->list;
PyInt i;
if (l->lv_lock)
{
RAISE_LOCKED_LIST;
return -1;
}
PROC_RANGE
if (first == size)
li = NULL;
else
{
li = list_find(l, (long) first);
if (li == NULL)
{
PyErr_VIM_FORMAT(N_("internal error: no vim list item %d"),
(int)first);
return -1;
}
if (last > first)
{
i = last - first;
while (i-- && li != NULL)
{
next = li->li_next;
listitem_remove(l, li);
li = next;
}
}
}
if (obj == NULL)
return 0;
if (!(iterator = PyObject_GetIter(obj)))
return -1;
while ((item = PyIter_Next(iterator)))
{
if (ConvertFromPyObject(item, &v) == -1)
{
Py_DECREF(iterator);
Py_DECREF(item);
return -1;
}
Py_DECREF(item);
if (list_insert_tv(l, &v, li) == FAIL)
{
clear_tv(&v);
PyErr_SET_VIM(N_("internal error: failed to add item to list"));
return -1;
}
clear_tv(&v);
}
Py_DECREF(iterator);
if (PyErr_Occurred())
return -1;
return 0;
}
static PyObject *
ListConcatInPlace(ListObject *self, PyObject *obj)
{
list_T *l = self->list;
PyObject *lookup_dict;
if (l->lv_lock)
{
RAISE_LOCKED_LIST;
return NULL;
}
if (!(lookup_dict = PyDict_New()))
return NULL;
if (list_py_concat(l, obj, lookup_dict) == -1)
{
Py_DECREF(lookup_dict);
return NULL;
}
Py_DECREF(lookup_dict);
Py_INCREF(self);
return (PyObject *)(self);
}
static char *ListAttrs[] = {
"locked",
NULL
@@ -2540,6 +2754,25 @@ ListSetattr(ListObject *self, char *name, PyObject *valObject)
}
}
static PySequenceMethods ListAsSeq = {
(lenfunc) ListLength, /* sq_length, len(x) */
(binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
0, /* RangeRepeat, sq_repeat, x*n */
(PyIntArgFunc) ListIndex, /* sq_item, x[i] */
0, /* was_sq_slice, x[i:j] */
(PyIntObjArgProc) ListAssIndex, /* sq_as_item, x[i]=v */
0, /* was_sq_ass_slice, x[i:j]=v */
0, /* sq_contains */
(binaryfunc) ListConcatInPlace,/* sq_inplace_concat */
0, /* sq_inplace_repeat */
};
static PyMappingMethods ListAsMapping = {
/* mp_length */ (lenfunc) ListLength,
/* mp_subscript */ (binaryfunc) ListItem,
/* mp_ass_subscript */ (objobjargproc) ListAssItem,
};
static struct PyMethodDef ListMethods[] = {
{"extend", (PyCFunction)ListConcatInPlace, METH_O, ""},
{"__dir__", (PyCFunction)ListDir, METH_NOARGS, ""},
@@ -2718,10 +2951,10 @@ typedef int (*checkfun)(void *);
typedef struct
{
PyObject_HEAD
int opt_type;
void *from;
checkfun Check;
PyObject *fromObj;
int opt_type;
void *from;
checkfun Check;
PyObject *fromObj;
} OptionsObject;
static int
@@ -2840,6 +3073,69 @@ OptionsItem(OptionsObject *self, PyObject *keyObject)
}
}
static int
OptionsContains(OptionsObject *self, PyObject *keyObject)
{
char_u *key;
PyObject *todecref;
if (!(key = StringToChars(keyObject, &todecref)))
return -1;
if (*key == NUL)
{
Py_XDECREF(todecref);
return 0;
}
if (get_option_value_strict(key, NULL, NULL, self->opt_type, NULL))
{
Py_XDECREF(todecref);
return 1;
}
else
{
Py_XDECREF(todecref);
return 0;
}
}
typedef struct
{
void *lastoption;
int opt_type;
} optiterinfo_T;
static PyObject *
OptionsIterNext(optiterinfo_T **oii)
{
char_u *name;
if ((name = option_iter_next(&((*oii)->lastoption), (*oii)->opt_type)))
return PyString_FromString((char *)name);
return NULL;
}
static PyObject *
OptionsIter(OptionsObject *self)
{
optiterinfo_T *oii;
if (!(oii = PyMem_New(optiterinfo_T, 1)))
{
PyErr_NoMemory();
return NULL;
}
oii->opt_type = self->opt_type;
oii->lastoption = NULL;
return IterNew(oii,
(destructorfun) PyMem_Free, (nextfun) OptionsIterNext,
NULL, NULL);
}
static int
set_option_value_err(char_u *key, int numval, char_u *stringval, int opt_flags)
{
@@ -2983,11 +3279,14 @@ OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject)
else
{
char_u *val;
PyObject *todecref;
PyObject *todecref2;
if ((val = StringToChars(valObject, &todecref)))
if ((val = StringToChars(valObject, &todecref2)))
{
ret = set_option_value_for(key, 0, val, opt_flags,
self->opt_type, self->from);
Py_XDECREF(todecref2);
}
else
ret = -1;
}
@@ -2997,6 +3296,19 @@ OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject)
return ret;
}
static PySequenceMethods OptionsAsSeq = {
0, /* sq_length */
0, /* sq_concat */
0, /* sq_repeat */
0, /* sq_item */
0, /* sq_slice */
0, /* sq_ass_item */
0, /* sq_ass_slice */
(objobjproc) OptionsContains, /* sq_contains */
0, /* sq_inplace_concat */
0, /* sq_inplace_repeat */
};
static PyMappingMethods OptionsAsMapping = {
(lenfunc) NULL,
(binaryfunc) OptionsItem,
@@ -5887,8 +6199,10 @@ init_structs(void)
vim_memset(&OptionsType, 0, sizeof(OptionsType));
OptionsType.tp_name = "vim.options";
OptionsType.tp_basicsize = sizeof(OptionsObject);
OptionsType.tp_as_sequence = &OptionsAsSeq;
OptionsType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
OptionsType.tp_doc = "object for manipulating options";
OptionsType.tp_iter = (getiterfunc)OptionsIter;
OptionsType.tp_as_mapping = &OptionsAsMapping;
OptionsType.tp_dealloc = (destructor)OptionsDestructor;
OptionsType.tp_traverse = (traverseproc)OptionsTraverse;
+8 -15
View File
@@ -200,6 +200,7 @@ struct PyMethodDef { Py_ssize_t a; };
# define PyTuple_Size dll_PyTuple_Size
# define PyTuple_GetItem dll_PyTuple_GetItem
# define PyTuple_Type (*dll_PyTuple_Type)
# define PySlice_GetIndicesEx dll_PySlice_GetIndicesEx
# define PyImport_ImportModule dll_PyImport_ImportModule
# define PyDict_New dll_PyDict_New
# define PyDict_GetItemString dll_PyDict_GetItemString
@@ -245,6 +246,7 @@ struct PyMethodDef { Py_ssize_t a; };
# define PySys_GetObject dll_PySys_GetObject
# define PySys_SetArgv dll_PySys_SetArgv
# define PyType_Type (*dll_PyType_Type)
# define PySlice_Type (*dll_PySlice_Type)
# define PyType_Ready (*dll_PyType_Ready)
# define PyType_GenericAlloc dll_PyType_GenericAlloc
# define Py_BuildValue dll_Py_BuildValue
@@ -345,6 +347,9 @@ static PyObject*(*dll_PySequence_Fast)(PyObject *, const char *);
static PyInt(*dll_PyTuple_Size)(PyObject *);
static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt);
static PyTypeObject* dll_PyTuple_Type;
static int (*dll_PySlice_GetIndicesEx)(PySliceObject *r, PyInt length,
PyInt *start, PyInt *stop, PyInt *step,
PyInt *slicelen);
static PyObject*(*dll_PyImport_ImportModule)(const char *);
static PyObject*(*dll_PyDict_New)(void);
static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
@@ -386,6 +391,7 @@ static int(*dll_PySys_SetObject)(char *, PyObject *);
static PyObject *(*dll_PySys_GetObject)(char *);
static int(*dll_PySys_SetArgv)(int, char **);
static PyTypeObject* dll_PyType_Type;
static PyTypeObject* dll_PySlice_Type;
static int (*dll_PyType_Ready)(PyTypeObject *type);
static PyObject* (*dll_PyType_GenericAlloc)(PyTypeObject *type, PyInt nitems);
static PyObject*(*dll_Py_BuildValue)(char *, ...);
@@ -525,6 +531,7 @@ static struct
{"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem},
{"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size},
{"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type},
{"PySlice_GetIndicesEx", (PYTHON_PROC*)&dll_PySlice_GetIndicesEx},
{"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule},
{"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString},
{"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
@@ -566,6 +573,7 @@ static struct
{"PySys_GetObject", (PYTHON_PROC*)&dll_PySys_GetObject},
{"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
{"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
{"PySlice_Type", (PYTHON_PROC*)&dll_PySlice_Type},
{"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
{"PyType_GenericAlloc", (PYTHON_PROC*)&dll_PyType_GenericAlloc},
{"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
@@ -1476,21 +1484,6 @@ DictionaryGetattr(PyObject *self, char *name)
return Py_FindMethod(DictionaryMethods, self, name);
}
static PySequenceMethods ListAsSeq = {
(PyInquiry) ListLength,
(binaryfunc) 0,
(PyIntArgFunc) 0,
(PyIntArgFunc) ListItem,
(PyIntIntArgFunc) ListSlice,
(PyIntObjArgProc) ListAssItem,
(PyIntIntObjArgProc) ListAssSlice,
(objobjproc) 0,
#if PY_MAJOR_VERSION >= 2
(binaryfunc) ListConcatInPlace,
0,
#endif
};
static PyObject *
ListGetattr(PyObject *self, char *name)
{
+10 -76
View File
@@ -97,6 +97,9 @@
#define Py_ssize_t_fmt "n"
#define Py_bytes_fmt "y"
#define PyIntArgFunc ssizeargfunc
#define PyIntObjArgProc ssizeobjargproc
#if defined(DYNAMIC_PYTHON3) || defined(PROTO)
# ifndef WIN3264
@@ -291,8 +294,9 @@ static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
static int (*py3_PyMapping_Check)(PyObject *);
static PyObject* (*py3_PyMapping_Keys)(PyObject *);
static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
Py_ssize_t *slicelen);
static PyObject* (*py3_PyErr_NoMemory)(void);
static void (*py3_Py_Finalize)(void);
static void (*py3_PyErr_SetString)(PyObject *, const char *);
@@ -1186,7 +1190,7 @@ BufferSubscript(PyObject *self, PyObject* idx)
if (CheckBuffer((BufferObject *) self))
return NULL;
if (PySlice_GetIndicesEx((PyObject *)idx,
if (PySlice_GetIndicesEx((PySliceObject *)idx,
(Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
&start, &stop,
&step, &slicelen) < 0)
@@ -1218,7 +1222,7 @@ BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
if (CheckBuffer((BufferObject *) self))
return -1;
if (PySlice_GetIndicesEx((PyObject *)idx,
if (PySlice_GetIndicesEx((PySliceObject *)idx,
(Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
&start, &stop,
&step, &slicelen) < 0)
@@ -1302,7 +1306,7 @@ RangeSubscript(PyObject *self, PyObject* idx)
{
Py_ssize_t start, stop, step, slicelen;
if (PySlice_GetIndicesEx((PyObject *)idx,
if (PySlice_GetIndicesEx((PySliceObject *)idx,
((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
&start, &stop,
&step, &slicelen) < 0)
@@ -1329,7 +1333,7 @@ RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
{
Py_ssize_t start, stop, step, slicelen;
if (PySlice_GetIndicesEx((PyObject *)idx,
if (PySlice_GetIndicesEx((PySliceObject *)idx,
((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
&start, &stop,
&step, &slicelen) < 0)
@@ -1478,76 +1482,6 @@ DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
/* List object - Definitions
*/
static PySequenceMethods ListAsSeq = {
(lenfunc) ListLength, /* sq_length, len(x) */
(binaryfunc) 0, /* RangeConcat, sq_concat, x+y */
(ssizeargfunc) 0, /* RangeRepeat, sq_repeat, x*n */
(ssizeargfunc) ListItem, /* sq_item, x[i] */
(void *) 0, /* was_sq_slice, x[i:j] */
(ssizeobjargproc) ListAssItem, /* sq_as_item, x[i]=v */
(void *) 0, /* was_sq_ass_slice, x[i:j]=v */
0, /* sq_contains */
(binaryfunc) ListConcatInPlace,/* sq_inplace_concat */
0, /* sq_inplace_repeat */
};
static PyObject *ListSubscript(PyObject *, PyObject *);
static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
static PyMappingMethods ListAsMapping = {
/* mp_length */ (lenfunc) ListLength,
/* mp_subscript */ (binaryfunc) ListSubscript,
/* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
};
static PyObject *
ListSubscript(PyObject *self, PyObject* idx)
{
if (PyLong_Check(idx))
{
long _idx = PyLong_AsLong(idx);
return ListItem((ListObject *)(self), _idx);
}
else if (PySlice_Check(idx))
{
Py_ssize_t start, stop, step, slicelen;
if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
&start, &stop, &step, &slicelen) < 0)
return NULL;
return ListSlice((ListObject *)(self), start, stop);
}
else
{
RAISE_INVALID_INDEX_TYPE(idx);
return NULL;
}
}
static Py_ssize_t
ListAsSubscript(PyObject *self, PyObject *idx, PyObject *obj)
{
if (PyLong_Check(idx))
{
long _idx = PyLong_AsLong(idx);
return ListAssItem((ListObject *)(self), _idx, obj);
}
else if (PySlice_Check(idx))
{
Py_ssize_t start, stop, step, slicelen;
if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
&start, &stop, &step, &slicelen) < 0)
return -1;
return ListAssSlice((ListObject *)(self), start, stop, obj);
}
else
{
RAISE_INVALID_INDEX_TYPE(idx);
return -1;
}
}
static PyObject *
ListGetattro(PyObject *self, PyObject *nameobj)
{
+20
View File
@@ -96,6 +96,12 @@
# define rb_num2int rb_num2int_stub
#endif
# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 21
/* Ruby 2.1 adds new GC called RGenGC and RARRAY_PTR uses
* rb_gc_writebarrier_unprotect_promoted if USE_RGENGC */
# define rb_gc_writebarrier_unprotect_promoted rb_gc_writebarrier_unprotect_promoted_stub
# endif
#ifdef FEAT_GUI_MACVIM
# include <Ruby/ruby.h>
#else
@@ -381,6 +387,10 @@ static VALUE (*dll_rb_require) (const char*);
static void* (*ruby_process_options)(int, char**);
# endif
# if defined(USE_RGENGC) && USE_RGENGC
static void (*dll_rb_gc_writebarrier_unprotect_promoted)(VALUE);
# endif
# if defined(RUBY19_OR_LATER) && !defined(PROTO)
SIGNED_VALUE rb_num2long_stub(VALUE x)
{
@@ -414,6 +424,13 @@ VALUE rb_num2ulong(VALUE x)
# endif
# endif
# if defined(USE_RGENGC) && USE_RGENGC
void rb_gc_writebarrier_unprotect_promoted_stub(VALUE obj)
{
return dll_rb_gc_writebarrier_unprotect_promoted(obj);
}
# endif
static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
/*
@@ -528,6 +545,9 @@ static struct
{"rb_ia64_bsp", (RUBY_PROC*)&dll_rb_ia64_bsp},
# endif
{"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
# endif
# if defined(USE_RGENGC) && USE_RGENGC
{"rb_gc_writebarrier_unprotect_promoted", (RUBY_PROC*)&dll_rb_gc_writebarrier_unprotect_promoted},
# endif
{"", NULL},
};
+6 -1
View File
@@ -718,6 +718,11 @@ vim_main2(int argc UNUSED, char **argv UNUSED)
TIME_MSG("reading viminfo");
}
#endif
#ifdef FEAT_EVAL
/* It's better to make v:oldfiles an empty list than NULL. */
if (get_vim_var_list(VV_OLDFILES) == NULL)
set_vim_var_list(VV_OLDFILES, list_alloc());
#endif
#ifdef FEAT_QUICKFIX
/*
@@ -1105,7 +1110,7 @@ main_loop(cmdwin, noexmode)
/* Setup to catch a terminating error from the X server. Just ignore
* it, restore the state and continue. This might not always work
* properly, but at least we don't exit unexpectedly when the X server
* exists while Vim is running in a console. */
* exits while Vim is running in a console. */
if (!cmdwin && !noexmode && SETJMP(x_jump_env))
{
State = NORMAL;
+10 -2
View File
@@ -83,10 +83,18 @@
# ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN
# endif
# include <windows.h>
# if defined(FEAT_GUI) || defined(FEAT_XCLIPBOARD)
# include <X11/Xwindows.h>
# define WINBYTE wBYTE
# else
# include <windows.h>
# define WINBYTE BYTE
# endif
# ifdef WIN32
# undef WIN32 /* Some windows.h define WIN32, we don't want that here. */
# endif
#else
# define WINBYTE BYTE
#endif
#if (defined(WIN3264) || defined(WIN32UNIX)) && !defined(__MINGW32__)
@@ -698,7 +706,7 @@ codepage_invalid:
/* enc_dbcs is set by setting 'fileencoding'. It becomes a Windows
* CodePage identifier, which we can pass directly in to Windows
* API */
n = IsDBCSLeadByteEx(enc_dbcs, (BYTE)i) ? 2 : 1;
n = IsDBCSLeadByteEx(enc_dbcs, (WINBYTE)i) ? 2 : 1;
#else
# if defined(MACOS) || defined(__amigaos4__)
/*
+5 -2
View File
@@ -841,8 +841,11 @@ ml_close_all(del_file)
for (buf = firstbuf; buf != NULL; buf = buf->b_next)
ml_close(buf, del_file && ((buf->b_flags & BF_PRESERVED) == 0
|| vim_strchr(p_cpo, CPO_PRESERVE) == NULL));
#ifdef FEAT_SPELL
spell_delete_wordlist(); /* delete the internal wordlist */
#endif
#ifdef TEMPDIRNAMES
vim_deltempdir(); /* delete created temp directory */
vim_deltempdir(); /* delete created temp directory */
#endif
}
@@ -4911,7 +4914,7 @@ ml_crypt_prepare(mfp, offset, reading)
* block for the salt. */
vim_snprintf((char *)salt, sizeof(salt), "%ld", (long)offset);
bf_key_init(key, salt, (int)STRLEN(salt));
bf_ofb_init(seed, MF_SEED_LEN);
bf_cfb_init(seed, MF_SEED_LEN);
}
}
+4 -4
View File
@@ -487,7 +487,7 @@ get_cursor_rel_lnum(wp, lnum)
{
while (lnum > cursor)
{
(void)hasFolding(lnum, &lnum, NULL);
(void)hasFoldingWin(wp, lnum, &lnum, NULL, TRUE, NULL);
/* if lnum and cursor are in the same fold,
* now lnum <= cursor */
if (lnum > cursor)
@@ -499,7 +499,7 @@ get_cursor_rel_lnum(wp, lnum)
{
while (lnum < cursor)
{
(void)hasFolding(lnum, NULL, &lnum);
(void)hasFoldingWin(wp, lnum, NULL, &lnum, TRUE, NULL);
/* if lnum and cursor are in the same fold,
* now lnum >= cursor */
if (lnum < cursor)
@@ -4701,8 +4701,8 @@ vim_findfile_init(path, filename, stopdirs, level, free_visited, find_what,
else
{
char_u *p = gettail(search_ctx->ffsc_fix_path);
char_u *wc_path = NUL;
char_u *temp = NUL;
char_u *wc_path = NULL;
char_u *temp = NULL;
int len = 0;
if (p > search_ctx->ffsc_fix_path)
+5
View File
@@ -2101,6 +2101,9 @@ scroll_cursor_halfway(atend)
int used;
lineoff_T loff;
lineoff_T boff;
#ifdef FEAT_DIFF
linenr_T old_topline = curwin->w_topline;
#endif
loff.lnum = boff.lnum = curwin->w_cursor.lnum;
#ifdef FEAT_FOLDING
@@ -2156,6 +2159,8 @@ scroll_cursor_halfway(atend)
curwin->w_topline = topline;
#ifdef FEAT_DIFF
curwin->w_topfill = topfill;
if (old_topline > curwin->w_topline + curwin->w_height)
curwin->w_botfill = FALSE;
check_topfill(curwin, FALSE);
#endif
curwin->w_valid &= ~(VALID_WROW|VALID_CROW|VALID_BOTLINE|VALID_BOTLINE_AP);
+16 -14
View File
@@ -655,8 +655,8 @@ normal_cmd(oap, toplevel)
#ifdef FEAT_EVAL
/* Set v:count here, when called from main() and not a stuffed
* command, so that v:count can be used in an expression mapping
* when there is no count. */
if (toplevel && stuff_empty())
* when there is no count. Do set it for redo. */
if (toplevel && readbuf1_empty())
set_vcount_ca(&ca, &set_prevcount);
#endif
@@ -736,8 +736,8 @@ getcount:
#ifdef FEAT_EVAL
/* Set v:count here, when called from main() and not a stuffed
* command, so that v:count can be used in an expression mapping
* right after the count. */
if (toplevel && stuff_empty())
* right after the count. Do set it for redo. */
if (toplevel && readbuf1_empty())
set_vcount_ca(&ca, &set_prevcount);
#endif
if (ctrl_w)
@@ -819,8 +819,9 @@ getcount:
#ifdef FEAT_EVAL
/*
* Only set v:count when called from main() and not a stuffed command.
* Do set it for redo.
*/
if (toplevel && stuff_empty())
if (toplevel && readbuf1_empty())
set_vcount(ca.count0, ca.count1, set_prevcount);
#endif
@@ -962,11 +963,8 @@ getcount:
#ifdef FEAT_CMDL_INFO
need_flushbuf |= add_to_showcmd(ca.nchar);
#endif
/* For "gn" from redo, need to get one more char to determine the
* operator */
if (ca.nchar == 'r' || ca.nchar == '\'' || ca.nchar == '`'
|| ca.nchar == Ctrl_BSL
|| ((ca.nchar == 'n' || ca.nchar == 'N') && !stuff_empty()))
|| ca.nchar == Ctrl_BSL)
{
cp = &ca.extra_char; /* need to get a third character */
if (ca.nchar != 'r')
@@ -1797,10 +1795,9 @@ do_pending_operator(cap, old_col, gui_yank)
* otherwise it might be the second char of the operator. */
if (cap->cmdchar == 'g' && (cap->nchar == 'n'
|| cap->nchar == 'N'))
/* "gn" and "gN" are a bit different */
prep_redo(oap->regname, 0L, NUL, cap->cmdchar, cap->nchar,
get_op_char(oap->op_type),
get_extra_op_char(oap->op_type));
prep_redo(oap->regname, cap->count0,
get_op_char(oap->op_type), get_extra_op_char(oap->op_type),
oap->motion_force, cap->cmdchar, cap->nchar);
else if (cap->cmdchar != ':')
prep_redo(oap->regname, 0L, NUL, 'v',
get_op_char(oap->op_type),
@@ -4030,6 +4027,8 @@ add_to_showcmd(c)
#endif
p = transchar(c);
if (*p == ' ')
STRCPY(p, "<20>");
old_len = (int)STRLEN(showcmd_buf);
extra_len = (int)STRLEN(p);
overflow = old_len + extra_len - SHOWCMD_COLS;
@@ -4651,7 +4650,10 @@ nv_screengo(oap, dir, dist)
}
#endif
coladvance(curwin->w_curswant);
if (virtual_active() && atend)
coladvance(MAXCOL);
else
coladvance(curwin->w_curswant);
#if defined(FEAT_LINEBREAK) || defined(FEAT_MBYTE)
if (curwin->w_cursor.col > 0 && curwin->w_p_wrap)
+13 -1
View File
@@ -4452,6 +4452,12 @@ do_join(count, insert_space, save_undo, use_formatoptions)
for (t = 0; t < count; ++t)
{
curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
if (t == 0)
{
/* Set the '[ mark. */
curwin->w_buffer->b_op_start.lnum = curwin->w_cursor.lnum;
curwin->w_buffer->b_op_start.col = (colnr_T)STRLEN(curr);
}
#if defined(FEAT_COMMENTS) || defined(PROTO)
if (remove_comments)
{
@@ -4568,6 +4574,10 @@ do_join(count, insert_space, save_undo, use_formatoptions)
}
ml_replace(curwin->w_cursor.lnum, newp, FALSE);
/* Set the '] mark. */
curwin->w_buffer->b_op_end.lnum = curwin->w_cursor.lnum;
curwin->w_buffer->b_op_end.col = (colnr_T)STRLEN(newp);
/* Only report the change in the first line here, del_lines() will report
* the deleted line. */
changed_lines(curwin->w_cursor.lnum, currsize,
@@ -6240,7 +6250,9 @@ get_reg_type(regname, reglen)
regname = may_get_selection(regname);
#endif
/* Should we check for a valid name? */
if (regname != NUL && !valid_yank_reg(regname, FALSE))
return MAUTO;
get_yank_register(regname, FALSE);
if (y_current->y_array != NULL)
+65 -2
View File
@@ -8999,7 +8999,7 @@ get_option_value(name, numval, stringval, opt_flags)
}
#endif
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
/*
* Returns the option attributes and its value. Unlike the above function it
* will return either global value or local value of the option depending on
@@ -9012,7 +9012,8 @@ get_option_value(name, numval, stringval, opt_flags)
* opt_type). Uses
*
* Returned flags:
* 0 hidden or unknown option
* 0 hidden or unknown option, also option that does not have requested
* type (see SREQ_* in vim.h)
* see SOPT_* in vim.h for other flags
*
* Possible opt_type values: see SREQ_* in vim.h
@@ -9135,6 +9136,68 @@ get_option_value_strict(name, numval, stringval, opt_type, from)
return r;
}
/*
* Iterate over options. First argument is a pointer to a pointer to a structure
* inside options[] array, second is option type like in the above function.
*
* If first argument points to NULL it is assumed that iteration just started
* and caller needs the very first value.
* If first argument points to the end marker function returns NULL and sets
* first argument to NULL.
*
* Returns full option name for current option on each call.
*/
char_u *
option_iter_next(option, opt_type)
void **option;
int opt_type;
{
struct vimoption *ret = NULL;
do
{
if (*option == NULL)
*option = (void *) options;
else if (((struct vimoption *) (*option))->fullname == NULL)
{
*option = NULL;
return NULL;
}
else
*option = (void *) (((struct vimoption *) (*option)) + 1);
ret = ((struct vimoption *) (*option));
/* Hidden option */
if (ret->var == NULL)
{
ret = NULL;
continue;
}
switch (opt_type)
{
case SREQ_GLOBAL:
if (!(ret->indir == PV_NONE || ret->indir & PV_BOTH))
ret = NULL;
break;
case SREQ_BUF:
if (!(ret->indir & PV_BUF))
ret = NULL;
break;
case SREQ_WIN:
if (!(ret->indir & PV_WIN))
ret = NULL;
break;
default:
EMSG2(_(e_intern2), "option_iter_next()");
return NULL;
}
}
while (ret == NULL);
return (char_u *)ret->fullname;
}
#endif
/*
+2 -2
View File
@@ -31,9 +31,9 @@
# define DFLT_EFM "%A%p^,%C%%CC-%t-%m,%Cat line number %l in file %f,%f|%l| %m"
# else /* Unix, probably */
# ifdef EBCDIC
#define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
#define DFLT_EFM "%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory %*[`']%f',%X%*\\a[%*\\d]: Leaving directory %*[`']%f',%DMaking %*\\a in %f,%f|%l| %m"
# else
#define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
#define DFLT_EFM "%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory %*[`']%f',%X%*\\a[%*\\d]: Leaving directory %*[`']%f',%D%*\\a: Entering directory %*[`']%f',%X%*\\a: Leaving directory %*[`']%f',%DMaking %*\\a in %f,%f|%l| %m"
# endif
# endif
# endif
+2 -2
View File
@@ -109,7 +109,7 @@
#endif
#ifndef DFLT_BDIR
# define DFLT_BDIR ".,c:\\tmp,c:\\temp" /* default for 'backupdir' */
# define DFLT_BDIR ".,$TEMP,c:\\tmp,c:\\temp" /* default for 'backupdir' */
#endif
#ifndef DFLT_VDIR
@@ -117,7 +117,7 @@
#endif
#ifndef DFLT_DIR
# define DFLT_DIR ".,c:\\tmp,c:\\temp" /* default for 'directory' */
# define DFLT_DIR ".,$TEMP,c:\\tmp,c:\\temp" /* default for 'directory' */
#endif
#define DFLT_ERRORFILE "errors.err"
+19 -6
View File
@@ -498,7 +498,7 @@ slash_adjust(p)
}
}
#if (_MSC_VER >= 1300)
#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__MINGW32__)
# define OPEN_OH_ARGTYPE intptr_t
#else
# define OPEN_OH_ARGTYPE long
@@ -617,8 +617,22 @@ vim_stat(const char *name, struct stat *stp)
p = buf + strlen(buf);
if (p > buf)
mb_ptr_back(buf, p);
/* Remove trailing '\\' except root path. */
if (p > buf && (*p == '\\' || *p == '/') && p[-1] != ':')
*p = NUL;
if ((buf[0] == '\\' && buf[1] == '\\') || (buf[0] == '/' && buf[1] == '/'))
{
/* UNC root path must be followed by '\\'. */
p = vim_strpbrk(buf + 2, "\\/");
if (p != NULL)
{
p = vim_strpbrk(p + 1, "\\/");
if (p == NULL)
STRCAT(buf, "\\");
}
}
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage
# ifdef __BORLANDC__
@@ -634,7 +648,7 @@ vim_stat(const char *name, struct stat *stp)
{
n = wstat_symlink_aware(wp, (struct _stat *)stp);
vim_free(wp);
if (n >= 0)
if (n >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
return n;
/* Retry with non-wide function (for Windows 98). Can't use
* GetLastError() here and it's unclear what errno gets set to if
@@ -801,8 +815,8 @@ mch_chdir(char *path)
{
n = _wchdir(p);
vim_free(p);
if (n == 0)
return 0;
if (n == 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
return n;
/* Retry with non-wide function (for Windows 98). */
}
}
@@ -1928,8 +1942,7 @@ mch_resolve_shortcut(char_u *fname)
shortcut_errorw:
vim_free(p);
if (hr == S_OK)
goto shortcut_end;
goto shortcut_end;
}
}
/* Retry with non-wide function (for Windows 98). */
+3 -12
View File
@@ -168,7 +168,7 @@ typedef int waitstatus;
static pid_t wait4pid __ARGS((pid_t, waitstatus *));
static int WaitForChar __ARGS((long));
#if defined(__BEOS__)
#if defined(__BEOS__) || defined(VMS)
int RealWaitForChar __ARGS((int, long, int *));
#else
static int RealWaitForChar __ARGS((int, long, int *));
@@ -435,7 +435,6 @@ mch_inchar(buf, maxlen, wtime, tb_change_cnt)
/* Process the queued netbeans messages. */
netbeans_parse_messages();
#endif
#ifndef VMS /* VMS: must try reading, WaitForChar() does nothing. */
/*
* We want to be interrupted by the winch signal
* or by an event on the monitored file descriptors.
@@ -446,7 +445,6 @@ mch_inchar(buf, maxlen, wtime, tb_change_cnt)
handle_resize();
return 0;
}
#endif
/* If input was put directly in typeahead buffer bail out here. */
if (typebuf_changed(tb_change_cnt))
@@ -5061,6 +5059,7 @@ WaitForChar(msec)
return avail;
}
#ifndef VMS
/*
* Wait "msec" msec until a character is available from file descriptor "fd".
* "msec" == 0 will check for characters once.
@@ -5360,13 +5359,7 @@ select_eintr:
}
# endif
# ifdef OLD_VMS
/* Old VMS as v6.2 and older have broken select(). It waits more than
* required. Should not be used */
ret = 0;
# else
ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
# endif
# ifdef EINTR
if (ret == -1 && errno == EINTR)
{
@@ -5488,8 +5481,6 @@ select_eintr:
return (ret > 0);
}
#ifndef VMS
#ifndef NO_EXPANDPATH
/*
* Expand a path into all matching files and/or directories. Handles "*",
@@ -6012,7 +6003,7 @@ mch_expand_wildcards(num_pat, pat, num_file, file, flags)
{
/* If there is a NUL, set did_find_nul, else set check_spaces */
buffer[len] = NUL;
if (len && (int)STRLEN(buffer) < (int)len - 1)
if (len && (int)STRLEN(buffer) < (int)len)
did_find_nul = TRUE;
else
check_spaces = TRUE;
+2
View File
@@ -225,6 +225,8 @@
# include <starlet.h>
# include <socket.h>
# include <lib$routines.h>
# include <libdef.h>
# include <libdtdef.h>
# ifdef FEAT_GUI_GTK
# include "gui_gtk_vms.h"
+106
View File
@@ -11,6 +11,23 @@
#include "vim.h"
/* define _generic_64 for use in time functions */
#ifndef VAX
# include <gen64def.h>
#else
/* based on Alpha's gen64def.h; the file is absent on VAX */
typedef struct _generic_64 {
# pragma __nomember_alignment
__union { /* You can treat me as... */
/* long long is not available on VAXen */
/* unsigned __int64 gen64$q_quadword; ...a single 64-bit value, or */
unsigned int gen64$l_longword [2]; /* ...two 32-bit values, or */
unsigned short int gen64$w_word [4]; /* ...four 16-bit values */
} gen64$r_quad_overlay;
} GENERIC_64;
#endif
typedef struct
{
char class;
@@ -669,3 +686,92 @@ vms_remove_version(void * fname)
}
return ;
}
struct typeahead_st {
unsigned short numchars;
unsigned char firstchar;
unsigned char reserved0;
unsigned long reserved1;
} typeahead;
/*
* Wait "msec" msec until a character is available from file descriptor "fd".
* "msec" == 0 will check for characters once.
* "msec" == -1 will block until a character is available.
*/
int
RealWaitForChar(fd, msec, check_for_gpm)
int fd UNUSED; /* always read from iochan */
long msec;
int *check_for_gpm UNUSED;
{
int status;
struct _generic_64 time_curr;
struct _generic_64 time_diff;
struct _generic_64 time_out;
unsigned int convert_operation = LIB$K_DELTA_SECONDS_F;
float sec = (float) msec / 1000;
/* make sure the iochan is set */
if (!iochan)
get_tty();
if (msec > 0) {
/* time-out specified; convert it to absolute time */
/* get current time (number of 100ns ticks since the VMS Epoch) */
status = sys$gettim(&time_curr);
if (status != SS$_NORMAL)
return 0; /* error */
/* construct the delta time */
status = lib$cvtf_to_internal_time(
&convert_operation, &sec, &time_diff);
if (status != LIB$_NORMAL)
return 0; /* error */
/* add them up */
status = lib$add_times(
&time_curr,
&time_diff,
&time_out);
if (status != LIB$_NORMAL)
return 0; /* error */
}
while (TRUE) {
/* select() */
status = sys$qiow(0, iochan, IO$_SENSEMODE | IO$M_TYPEAHDCNT, iosb,
0, 0, &typeahead, 8, 0, 0, 0, 0);
if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL)
return 0; /* error */
if (typeahead.numchars)
return 1; /* ready to read */
/* there's nothing to read; what now? */
if (msec == 0) {
/* immediate time-out; return impatiently */
return 0;
}
else if (msec < 0) {
/* no time-out; wait on indefinitely */
continue;
}
else {
/* time-out needs to be checked */
status = sys$gettim(&time_curr);
if (status != SS$_NORMAL)
return 0; /* error */
status = lib$sub_times(
&time_out,
&time_curr,
&time_diff);
if (status != LIB$_NORMAL)
return 0; /* error, incl. time_diff < 0 (i.e. time-out) */
/* otherwise wait some more */
}
}
}
+234 -65
View File
@@ -232,6 +232,94 @@ static int suppress_winsize = 1; /* don't fiddle with console */
static char_u *exe_path = NULL;
static BOOL win8_or_later = FALSE;
/*
* Version of ReadConsoleInput() that works with IME.
* Works around problems on Windows 8.
*/
static BOOL
read_console_input(
HANDLE hInput,
INPUT_RECORD *lpBuffer,
DWORD nLength,
LPDWORD lpEvents)
{
enum
{
IRSIZE = 10
};
static INPUT_RECORD s_irCache[IRSIZE];
static DWORD s_dwIndex = 0;
static DWORD s_dwMax = 0;
DWORD dwEvents;
int head;
int tail;
int i;
if (!win8_or_later)
{
if (nLength == -1)
return PeekConsoleInput(hInput, lpBuffer, 1, lpEvents);
return ReadConsoleInput(hInput, lpBuffer, 1, &dwEvents);
}
if (s_dwMax == 0)
{
if (nLength == -1)
return PeekConsoleInput(hInput, lpBuffer, 1, lpEvents);
if (!ReadConsoleInput(hInput, s_irCache, IRSIZE, &dwEvents))
return FALSE;
s_dwIndex = 0;
s_dwMax = dwEvents;
if (dwEvents == 0)
{
*lpEvents = 0;
return TRUE;
}
if (s_dwMax > 1)
{
head = 0;
tail = s_dwMax - 1;
while (head != tail)
{
if (s_irCache[head].EventType == WINDOW_BUFFER_SIZE_EVENT
&& s_irCache[head + 1].EventType
== WINDOW_BUFFER_SIZE_EVENT)
{
/* Remove duplicate event to avoid flicker. */
for (i = head; i < tail; ++i)
s_irCache[i] = s_irCache[i + 1];
--tail;
continue;
}
head++;
}
s_dwMax = tail + 1;
}
}
*lpBuffer = s_irCache[s_dwIndex];
if (nLength != -1 && ++s_dwIndex >= s_dwMax)
s_dwMax = 0;
*lpEvents = 1;
return TRUE;
}
/*
* Version of PeekConsoleInput() that works with IME.
*/
static BOOL
peek_console_input(
HANDLE hInput,
INPUT_RECORD *lpBuffer,
DWORD nLength,
LPDWORD lpEvents)
{
return read_console_input(hInput, lpBuffer, -1, lpEvents);
}
static void
get_exe_name(void)
{
@@ -516,10 +604,10 @@ static PSETHANDLEINFORMATION pSetHandleInformation;
static BOOL
win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
{
BOOL bResult;
LUID luid;
HANDLE hToken;
TOKEN_PRIVILEGES tokenPrivileges;
BOOL bResult;
LUID luid;
HANDLE hToken;
TOKEN_PRIVILEGES tokenPrivileges;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
@@ -563,6 +651,10 @@ PlatformId(void)
g_PlatformId = ovi.dwPlatformId;
if ((ovi.dwMajorVersion == 6 && ovi.dwMinorVersion >= 2)
|| ovi.dwMajorVersion > 6)
win8_or_later = TRUE;
#ifdef HAVE_ACL
/*
* Load the ADVAPI runtime if we are on anything
@@ -1117,7 +1209,7 @@ decode_mouse_event(
INPUT_RECORD ir;
MOUSE_EVENT_RECORD* pmer2 = &ir.Event.MouseEvent;
PeekConsoleInput(g_hConIn, &ir, 1, &cRecords);
peek_console_input(g_hConIn, &ir, 1, &cRecords);
if (cRecords == 0 || ir.EventType != MOUSE_EVENT
|| !(pmer2->dwButtonState & LEFT_RIGHT))
@@ -1126,7 +1218,7 @@ decode_mouse_event(
{
if (pmer2->dwEventFlags != MOUSE_MOVED)
{
ReadConsoleInput(g_hConIn, &ir, 1, &cRecords);
read_console_input(g_hConIn, &ir, 1, &cRecords);
return decode_mouse_event(pmer2);
}
@@ -1134,10 +1226,10 @@ decode_mouse_event(
s_yOldMouse == pmer2->dwMousePosition.Y)
{
/* throw away spurious mouse move */
ReadConsoleInput(g_hConIn, &ir, 1, &cRecords);
read_console_input(g_hConIn, &ir, 1, &cRecords);
/* are there any more mouse events in queue? */
PeekConsoleInput(g_hConIn, &ir, 1, &cRecords);
peek_console_input(g_hConIn, &ir, 1, &cRecords);
if (cRecords==0 || ir.EventType != MOUSE_EVENT)
break;
@@ -1374,7 +1466,7 @@ WaitForChar(long msec)
}
cRecords = 0;
PeekConsoleInput(g_hConIn, &ir, 1, &cRecords);
peek_console_input(g_hConIn, &ir, 1, &cRecords);
#ifdef FEAT_MBYTE_IME
if (State & CMDLINE && msg_row == Rows - 1)
@@ -1405,7 +1497,7 @@ WaitForChar(long msec)
if (ir.Event.KeyEvent.uChar.UnicodeChar == 0
&& ir.Event.KeyEvent.wVirtualKeyCode == 13)
{
ReadConsoleInput(g_hConIn, &ir, 1, &cRecords);
read_console_input(g_hConIn, &ir, 1, &cRecords);
continue;
}
#endif
@@ -1414,7 +1506,7 @@ WaitForChar(long msec)
return TRUE;
}
ReadConsoleInput(g_hConIn, &ir, 1, &cRecords);
read_console_input(g_hConIn, &ir, 1, &cRecords);
if (ir.EventType == FOCUS_EVENT)
handle_focus_event(ir);
@@ -1484,7 +1576,7 @@ tgetch(int *pmodifiers, char_u *pch2)
return 0;
# endif
#endif
if (ReadConsoleInput(g_hConIn, &ir, 1, &cRecords) == 0)
if (read_console_input(g_hConIn, &ir, 1, &cRecords) == 0)
{
if (did_create_conin)
read_error_exit();
@@ -2509,7 +2601,7 @@ fname_casew(
WCHAR *porig, *porigPrev;
int flen;
WIN32_FIND_DATAW fb;
HANDLE hFind;
HANDLE hFind = INVALID_HANDLE_VALUE;
int c;
int slen;
@@ -2528,8 +2620,8 @@ fname_casew(
/* copy leading drive letter */
*ptrue++ = *porig++;
*ptrue++ = *porig++;
*ptrue = NUL; /* in case nothing follows */
}
*ptrue = NUL; /* in case nothing follows */
while (*porig != NUL)
{
@@ -2673,8 +2765,8 @@ fname_case(
/* copy leading drive letter */
*ptrue++ = *porig++;
*ptrue++ = *porig++;
*ptrue = NUL; /* in case nothing follows */
}
*ptrue = NUL; /* in case nothing follows */
while (*porig != NUL)
{
@@ -2768,6 +2860,28 @@ mch_get_user_name(
char szUserName[256 + 1]; /* UNLEN is 256 */
DWORD cch = sizeof szUserName;
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
WCHAR wszUserName[256 + 1]; /* UNLEN is 256 */
DWORD wcch = sizeof(wszUserName) / sizeof(WCHAR);
if (GetUserNameW(wszUserName, &wcch))
{
char_u *p = utf16_to_enc(wszUserName, NULL);
if (p != NULL)
{
vim_strncpy(s, p, len - 1);
vim_free(p);
return OK;
}
}
else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
return FAIL;
/* Retry with non-wide function (for Windows 98). */
}
#endif
if (GetUserName(szUserName, &cch))
{
vim_strncpy(s, szUserName, len - 1);
@@ -2788,6 +2902,28 @@ mch_get_host_name(
{
DWORD cch = len;
#ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
WCHAR wszHostName[256 + 1];
DWORD wcch = sizeof(wszHostName) / sizeof(WCHAR);
if (GetComputerNameW(wszHostName, &wcch))
{
char_u *p = utf16_to_enc(wszHostName, NULL);
if (p != NULL)
{
vim_strncpy(s, p, len - 1);
vim_free(p);
return;
}
}
else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
return;
/* Retry with non-wide function (for Windows 98). */
}
#endif
if (!GetComputerName(s, &cch))
vim_strncpy(s, "PC (Win32 Vim)", len - 1);
}
@@ -2834,6 +2970,8 @@ mch_dirname(
return OK;
}
}
else if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
return FAIL;
/* Retry with non-wide function (for Windows 98). */
}
#endif
@@ -2850,11 +2988,8 @@ mch_getperm(char_u *name)
struct stat st;
int n;
if (name[0] == '\\' && name[1] == '\\')
/* UNC path */
return (long)win32_getattrs(name);
n = mch_stat(name, &st);
return n == 0 ? (long)st.st_mode : -1L;
return n == 0 ? (long)(unsigned short)st.st_mode : -1L;
}
@@ -2877,7 +3012,7 @@ mch_setperm(char_u *name, long perm)
{
n = _wchmod(p, perm);
vim_free(p);
if (n == -1 && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
if (n == -1 && g_PlatformId == VER_PLATFORM_WIN32_NT)
return FAIL;
/* Retry with non-wide function (for Windows 98). */
}
@@ -3788,6 +3923,50 @@ mch_set_winsize_now(void)
}
#endif /* FEAT_GUI_W32 */
static BOOL
vim_create_process(
char *cmd,
BOOL inherit_handles,
DWORD flags,
STARTUPINFO *si,
PROCESS_INFORMATION *pi)
{
# ifdef FEAT_MBYTE
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
WCHAR *wcmd = enc_to_utf16(cmd, NULL);
if (wcmd != NULL)
{
BOOL ret;
ret = CreateProcessW(
NULL, /* Executable name */
wcmd, /* Command to execute */
NULL, /* Process security attributes */
NULL, /* Thread security attributes */
inherit_handles, /* Inherit handles */
flags, /* Creation flags */
NULL, /* Environment */
NULL, /* Current directory */
(LPSTARTUPINFOW)si, /* Startup information */
pi); /* Process information */
vim_free(wcmd);
return ret;
}
}
#endif
return CreateProcess(
NULL, /* Executable name */
cmd, /* Command to execute */
NULL, /* Process security attributes */
NULL, /* Thread security attributes */
inherit_handles, /* Inherit handles */
flags, /* Creation flags */
NULL, /* Environment */
NULL, /* Current directory */
si, /* Startup information */
pi); /* Process information */
}
#if defined(FEAT_GUI_W32) || defined(PROTO)
@@ -3834,18 +4013,8 @@ mch_system_classic(char *cmd, int options)
cmd += 3;
/* Now, run the command */
CreateProcess(NULL, /* Executable name */
cmd, /* Command to execute */
NULL, /* Process security attributes */
NULL, /* Thread security attributes */
FALSE, /* Inherit handles */
CREATE_DEFAULT_ERROR_MODE | /* Creation flags */
CREATE_NEW_CONSOLE,
NULL, /* Environment */
NULL, /* Current directory */
&si, /* Startup information */
&pi); /* Process information */
vim_create_process(cmd, FALSE,
CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, &si, &pi);
/* Wait for the command to terminate before continuing */
if (g_PlatformId != VER_PLATFORM_WIN32s)
@@ -4177,22 +4346,11 @@ mch_system_piped(char *cmd, int options)
p = cmd;
}
/* Now, run the command */
CreateProcess(NULL, /* Executable name */
p, /* Command to execute */
NULL, /* Process security attributes */
NULL, /* Thread security attributes */
// this command can be litigious, handle inheritance was
// deactivated for pending temp file, but, if we deactivate
// it, the pipes don't work for some reason.
TRUE, /* Inherit handles, first deactivated,
* but needed */
CREATE_DEFAULT_ERROR_MODE, /* Creation flags */
NULL, /* Environment */
NULL, /* Current directory */
&si, /* Startup information */
&pi); /* Process information */
/* Now, run the command.
* About "Inherit handles" being TRUE: this command can be litigious,
* handle inheritance was deactivated for pending temp file, but, if we
* deactivate it, the pipes don't work for some reason. */
vim_create_process(p, TRUE, CREATE_DEFAULT_ERROR_MODE, &si, &pi);
if (p != cmd)
vim_free(p);
@@ -4219,10 +4377,10 @@ mch_system_piped(char *cmd, int options)
{
MSG msg;
if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
pDispatchMessage(&msg);
}
/* write pipe information in the window */
@@ -4410,7 +4568,25 @@ mch_system(char *cmd, int options)
}
#else
# define mch_system(c, o) system(c)
# ifdef FEAT_MBYTE
static int
mch_system(char *cmd, int options)
{
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
{
WCHAR *wcmd = enc_to_utf16(cmd, NULL);
if (wcmd != NULL)
{
int ret = _wsystem(wcmd);
vim_free(wcmd);
return ret;
}
}
return system(cmd);
}
# else
# define mch_system(c, o) system(c)
# endif
#endif
@@ -4495,6 +4671,7 @@ mch_call_shell(
DWORD flags = CREATE_NEW_CONSOLE;
char_u *p;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
si.lpReserved = NULL;
si.lpDesktop = NULL;
@@ -4578,16 +4755,7 @@ mch_call_shell(
* inherit our handles which causes unpleasant dangling swap
* files if we exit before the spawned process
*/
if (CreateProcess(NULL, // Executable name
newcmd, // Command to execute
NULL, // Process security attributes
NULL, // Thread security attributes
FALSE, // Inherit handles
flags, // Creation flags
NULL, // Environment
NULL, // Current directory
&si, // Startup information
&pi)) // Process information
if (vim_create_process(newcmd, FALSE, flags, &si, &pi))
x = 0;
else
{
@@ -4600,9 +4768,9 @@ mch_call_shell(
if (newcmd != cmdbase)
vim_free(newcmd);
if (si.hStdInput != NULL)
if (si.dwFlags == STARTF_USESTDHANDLES && si.hStdInput != NULL)
{
/* Close the handle to \\.\NUL */
/* Close the handle to \\.\NUL created above. */
CloseHandle(si.hStdInput);
}
/* Close the handles to the subprocess, so that it goes away */
@@ -5886,7 +6054,7 @@ mch_open(char *name, int flags, int mode)
{
f = _wopen(wn, flags, mode);
vim_free(wn);
if (f >= 0)
if (f >= 0 || g_PlatformId == VER_PLATFORM_WIN32_NT)
return f;
/* Retry with non-wide function (for Windows 98). Can't use
* GetLastError() here and it's unclear what errno gets set to if
@@ -5937,7 +6105,7 @@ mch_fopen(char *name, char *mode)
_set_fmode(oldMode);
# endif
if (f != NULL)
if (f != NULL || g_PlatformId == VER_PLATFORM_WIN32_NT)
return f;
/* Retry with non-wide function (for Windows 98). Can't use
* GetLastError() here and it's unclear what errno gets set to if
@@ -6272,6 +6440,7 @@ get_cmd_argsW(char ***argvp)
while (i > 0)
free(argv[--i]);
free(argv);
argv = NULL;
argc = 0;
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
/* blowfish.c */
void bf_key_init __ARGS((char_u *password, char_u *salt, int salt_len));
void bf_ofb_init __ARGS((char_u *iv, int iv_len));
void bf_cfb_init __ARGS((char_u *iv, int iv_len));
void bf_crypt_encode __ARGS((char_u *from, size_t len, char_u *to));
void bf_crypt_decode __ARGS((char_u *ptr, long len));
void bf_crypt_init_keys __ARGS((char_u *passwd));
+1
View File
@@ -60,6 +60,7 @@ int list_append_dict __ARGS((list_T *list, dict_T *dict));
int list_append_string __ARGS((list_T *l, char_u *str, int len));
int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
void list_insert __ARGS((list_T *l, listitem_T *ni, listitem_T *item));
int garbage_collect __ARGS((void));
void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
void set_ref_in_list __ARGS((list_T *l, int copyID));
+2
View File
@@ -4,8 +4,10 @@ void update_force_abort __ARGS((void));
int should_abort __ARGS((int retcode));
int aborted_in_try __ARGS((void));
int cause_errthrow __ARGS((char_u *mesg, int severe, int *ignore));
void free_global_msglist __ARGS((void));
void do_errthrow __ARGS((struct condstack *cstack, char_u *cmdname));
int do_intthrow __ARGS((struct condstack *cstack));
char_u *get_exception_string __ARGS((void *value, int type, char_u *cmdname, int *should_free));
void discard_current_exception __ARGS((void));
void report_make_pending __ARGS((int pending, void *value));
void report_resume_pending __ARGS((int pending, void *value));
+2 -1
View File
@@ -1,8 +1,9 @@
/* getchar.c */
void free_buff __ARGS((struct buffheader *buf));
void free_buff __ARGS((buffheader_T *buf));
char_u *get_recorded __ARGS((void));
char_u *get_inserted __ARGS((void));
int stuff_empty __ARGS((void));
int readbuf1_empty __ARGS((void));
void typeahead_noflush __ARGS((int c));
void flush_buffers __ARGS((int flush_typeahead));
void ResetRedobuff __ARGS((void));
+1
View File
@@ -23,6 +23,7 @@ char_u *check_colorcolumn __ARGS((win_T *wp));
char_u *check_stl_option __ARGS((char_u *s));
int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
int get_option_value_strict __ARGS((char_u *name, long *numval, char_u **stringval, int opt_type, void *from));
char_u *option_iter_next __ARGS((void **option, int opt_type));
char_u *set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
char_u *get_term_code __ARGS((char_u *tname));
char_u *get_highlight_default __ARGS((void));
+1
View File
@@ -3,6 +3,7 @@ int spell_check __ARGS((win_T *wp, char_u *ptr, hlf_T *attrp, int *capcol, int d
int spell_move_to __ARGS((win_T *wp, int dir, int allwords, int curline, hlf_T *attrp));
void spell_cat_line __ARGS((char_u *buf, char_u *line, int maxlen));
char_u *did_set_spelllang __ARGS((win_T *wp));
void spell_delete_wordlist __ARGS((void));
void spell_free_all __ARGS((void));
void spell_reload __ARGS((void));
int spell_check_msm __ARGS((void));
+13 -2
View File
@@ -239,7 +239,9 @@ static int nfa_classcodes[] = {
NFA_UPPER, NFA_NUPPER
};
static char_u e_nul_found[] = N_("E865: (NFA) Regexp end encountered prematurely");
static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
static char_u e_ill_char_class[] = N_("E877: (NFA regexp) Invalid character class: %ld");
/* NFA regexp \ze operator encountered. */
static int nfa_has_zend;
@@ -1137,7 +1139,7 @@ nfa_regatom()
switch (c)
{
case NUL:
EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely"));
EMSG_RET_FAIL(_(e_nul_found));
case Magic('^'):
EMIT(NFA_BOL);
@@ -1160,6 +1162,9 @@ nfa_regatom()
case Magic('_'):
c = no_Magic(getchr());
if (c == NUL)
EMSG_RET_FAIL(_(e_nul_found));
if (c == '^') /* "\_^" is start-of-line */
{
EMIT(NFA_BOL);
@@ -1216,6 +1221,12 @@ nfa_regatom()
p = vim_strchr(classchars, no_Magic(c));
if (p == NULL)
{
if (extra == NFA_ADD_NL)
{
EMSGN(_(e_ill_char_class), c);
rc_did_emsg = TRUE;
return FAIL;
}
EMSGN("INTERNAL: Unknown character class char: %ld", c);
return FAIL;
}
@@ -4733,7 +4744,7 @@ check_char_class(class, c)
default:
/* should not be here :P */
EMSGN("E877: (NFA regexp) Invalid character class: %ld", class);
EMSGN(_(e_ill_char_class), class);
return FAIL;
}
return FAIL;

Some files were not shown because too many files have changed in this diff Show More