mirror of
https://github.com/zoriya/vim.git
synced 2026-01-07 23:03:48 +00:00
Compare commits
116 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c9a949d00 | ||
|
|
529d2d6369 | ||
|
|
2fb9fa19e2 | ||
|
|
9c8c8c5d30 | ||
|
|
a0844a1170 | ||
|
|
f0bdd2f28d | ||
|
|
1d9ff43f58 | ||
|
|
8eded09bf7 | ||
|
|
b1692e2b8f | ||
|
|
af6c131bf7 | ||
|
|
24ff9e33a9 | ||
|
|
27bed20452 | ||
|
|
d8619997c4 | ||
|
|
206f011829 | ||
|
|
f7dc2b5517 | ||
|
|
038e5d4766 | ||
|
|
4064e24a0f | ||
|
|
0858917e43 | ||
|
|
4de6a212f9 | ||
|
|
47b8342abd | ||
|
|
251835e14f | ||
|
|
26df092843 | ||
|
|
581966e832 | ||
|
|
f30caaf08d | ||
|
|
a2aa31a926 | ||
|
|
7d311c52ce | ||
|
|
b1d90a3d77 | ||
|
|
631abc35df | ||
|
|
9feaf6206f | ||
|
|
c86438205b | ||
|
|
45e2bcc275 | ||
|
|
06811f33ce | ||
|
|
403b3cf0a1 | ||
|
|
0e4eebd425 | ||
|
|
f92d8a254a | ||
|
|
92dff1827a | ||
|
|
b8e2305656 | ||
|
|
2d5f38ff10 | ||
|
|
cd981f2e0f | ||
|
|
3b5226121d | ||
|
|
12a0f22340 | ||
|
|
4d504a3e11 | ||
|
|
0a36fece92 | ||
|
|
c467d9b274 | ||
|
|
10395d8d6c | ||
|
|
a1a118b159 | ||
|
|
4f943c09a5 | ||
|
|
f31ecce97e | ||
|
|
767568846b | ||
|
|
dd415a6c5a | ||
|
|
f50eb7882e | ||
|
|
09edc46d01 | ||
|
|
4315f26500 | ||
|
|
fcc3f46735 | ||
|
|
361aa50547 | ||
|
|
8af269186c | ||
|
|
b4d587cbd9 | ||
|
|
4a36bcf0d8 | ||
|
|
8d04317104 | ||
|
|
ac8400d483 | ||
|
|
8822a9c367 | ||
|
|
5395e7afe9 | ||
|
|
1028f4d75e | ||
|
|
063a46ba77 | ||
|
|
14177b77bf | ||
|
|
6d977d6c1c | ||
|
|
ca058dc71f | ||
|
|
6cd3aeee4c | ||
|
|
2cd3696c35 | ||
|
|
32b9201f37 | ||
|
|
9d1685d1cf | ||
|
|
e21b6b2a8d | ||
|
|
b0d5c96133 | ||
|
|
78cf3f0de9 | ||
|
|
a02471e295 | ||
|
|
bd2dc34774 | ||
|
|
4ea924e0a5 | ||
|
|
3a69e1135e | ||
|
|
b1cb35f785 | ||
|
|
438f67a004 | ||
|
|
2fda301469 | ||
|
|
5ec8305ea8 | ||
|
|
5f4c8406a2 | ||
|
|
3f1138e8ae | ||
|
|
4b550b4c50 | ||
|
|
dedd1b0aba | ||
|
|
0bd7b3f4ce | ||
|
|
959a143f2e | ||
|
|
207fd75cac | ||
|
|
7c0daf088e | ||
|
|
36c85b2c46 | ||
|
|
dfb18411cf | ||
|
|
175d0704df | ||
|
|
2cc8738f2f | ||
|
|
c8020ee825 | ||
|
|
910cffbb5e | ||
|
|
893b2d73d1 | ||
|
|
fcf94d3990 | ||
|
|
4ffa07081f | ||
|
|
1d633413e5 | ||
|
|
6b10721fa2 | ||
|
|
7ba0741451 | ||
|
|
b011af9696 | ||
|
|
5d7f9df8fa | ||
|
|
73c61633b6 | ||
|
|
b050c64186 | ||
|
|
c2401d62e0 | ||
|
|
ba2d44f338 | ||
|
|
b95186fd36 | ||
|
|
34b466edfe | ||
|
|
9fee7d4729 | ||
|
|
e88a5f3a2c | ||
|
|
dff54ac7e8 | ||
|
|
174a848b67 | ||
|
|
3678208477 | ||
|
|
c62a644eaf |
13
.gitignore
vendored
13
.gitignore
vendored
@@ -36,6 +36,18 @@ src/Obj*/pathdef.c
|
||||
gvimext.dll
|
||||
gvimext.lib
|
||||
|
||||
# Borland C++
|
||||
bcc.cfg
|
||||
*.ilc
|
||||
*.ild
|
||||
*.ilf
|
||||
*.ils
|
||||
*.map
|
||||
*.tds
|
||||
|
||||
# NetBeans
|
||||
nbproject/*
|
||||
|
||||
# Mac OSX
|
||||
src/xxd/xxd.dSYM
|
||||
|
||||
@@ -46,6 +58,7 @@ src/xxd/xxd.dSYM
|
||||
*.swp
|
||||
*~
|
||||
*.pyc
|
||||
*.log
|
||||
src/po/vim.pot
|
||||
|
||||
# Generated by "make test"
|
||||
|
||||
1
Filelist
1
Filelist
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
runtime/autoload/netrw_gitignore.vim
Normal file
71
runtime/autoload/netrw_gitignore.vim
Normal 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
|
||||
@@ -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".
|
||||
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 Feb 11
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -156,6 +156,9 @@ only after a '.').
|
||||
The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting
|
||||
spaces before and after a multi-byte character |fo-table|.
|
||||
|
||||
The '[ mark is set at the end of the first line that was joined, '] at the end
|
||||
of the resulting line.
|
||||
|
||||
|
||||
==============================================================================
|
||||
2. Delete and insert *delete-insert* *replacing*
|
||||
@@ -824,7 +827,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.
|
||||
|
||||
@@ -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: 2014 Feb 23
|
||||
|
||||
|
||||
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_##*
|
||||
@@ -823,8 +824,8 @@ Note: these are typed literally, they are not special keys!
|
||||
the start of the function.
|
||||
|
||||
*filename-modifiers*
|
||||
*:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs*
|
||||
*%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs*
|
||||
*:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs* *::S*
|
||||
*%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs* *%:S*
|
||||
The file name modifiers can be used after "%", "#", "#n", "<cfile>", "<sfile>",
|
||||
"<afile>" or "<abuf>". They are also used with the |fnamemodify()| function.
|
||||
These are not available when Vim has been compiled without the |+modify_fname|
|
||||
@@ -879,6 +880,10 @@ These modifiers can be given, in this order:
|
||||
:gs?pat?sub?
|
||||
Substitute all occurrences of "pat" with "sub". Otherwise
|
||||
this works like ":s".
|
||||
:S Escape special characters for use with a shell command (see
|
||||
|shellescape()|). Must be the last one. Examples: >
|
||||
:!dir <cfile>:S
|
||||
:call system('chmod +w -- ' . expand('%:S'))
|
||||
|
||||
Examples, when the file name is "src/version.c", current dir
|
||||
"/home/mool/vim": >
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -5418,6 +5428,7 @@ shellescape({string} [, {special}]) *shellescape()*
|
||||
< This results in a directory listing for the file under the
|
||||
cursor. Example of use with |system()|: >
|
||||
:call system("chmod +w -- " . shellescape(expand("%")))
|
||||
< See also |::S|.
|
||||
|
||||
|
||||
shiftwidth() *shiftwidth()*
|
||||
@@ -5632,7 +5643,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.
|
||||
@@ -5900,14 +5911,16 @@ system({expr} [, {input}]) *system()* *E677*
|
||||
passed as stdin to the command. The string is written as-is,
|
||||
you need to take care of using the correct line separators
|
||||
yourself. Pipes are not used.
|
||||
Note: Use |shellescape()| to escape special characters in a
|
||||
command argument. Newlines in {expr} may cause the command to
|
||||
fail. The characters in 'shellquote' and 'shellxquote' may
|
||||
also cause trouble.
|
||||
Note: Use |shellescape()| or |::S| with |expand()| or
|
||||
|fnamemodify()| to escape special characters in a command
|
||||
argument. Newlines in {expr} may cause the command to fail.
|
||||
The characters in 'shellquote' and 'shellxquote' may also
|
||||
cause trouble.
|
||||
This is not to be used for interactive commands.
|
||||
|
||||
The result is a String. Example: >
|
||||
:let files = system("ls " . shellescape(expand('%:h')))
|
||||
:let files = system('ls ' . expand('%:h:S'))
|
||||
|
||||
< To make the result more system-independent, the shell output
|
||||
is filtered to replace <CR> with <NL> for Macintosh, and
|
||||
@@ -6630,7 +6643,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]
|
||||
@@ -6639,10 +6652,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
|
||||
@@ -7447,7 +7460,7 @@ This does NOT work: >
|
||||
for Vim commands, |shellescape()| for |:!| commands.
|
||||
Examples: >
|
||||
:execute "e " . fnameescape(filename)
|
||||
:execute "!ls " . shellescape(expand('%:h'), 1)
|
||||
:execute "!ls " . shellescape(filename, 1)
|
||||
<
|
||||
Note: The executed string may be any command-line, but
|
||||
you cannot start or end a "while", "for" or "if"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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|.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*gui.txt* For Vim version 7.4. Last change: 2013 Jun 12
|
||||
*gui.txt* For Vim version 7.4. Last change: 2014 Mar 08
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -133,6 +133,7 @@ task bar with the 'guiheadroom' option.
|
||||
:winp[os]
|
||||
Display current position of the top left corner of the GUI vim
|
||||
window in pixels. Does not work in all versions.
|
||||
Also see |getwinposx()| and |getwinposy()|.
|
||||
|
||||
:winp[os] {X} {Y} *E466*
|
||||
Put the GUI vim window at the given {X} and {Y} coordinates.
|
||||
@@ -151,8 +152,11 @@ task bar with the 'guiheadroom' option.
|
||||
option.
|
||||
|
||||
If you are running the X Window System, you can get information about the
|
||||
window Vim is running in with this command: >
|
||||
window Vim is running in with these commands: >
|
||||
:!xwininfo -id $WINDOWID
|
||||
:!xprop -id $WINDOWID
|
||||
:execute '!xwininfo -id ' . v:windowid
|
||||
:execute '!xprop -id ' . v:windowid
|
||||
<
|
||||
*gui-IME* *iBus*
|
||||
Input methods for international characters in X that rely on the XIM
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*gui_x11.txt* For Vim version 7.4. Last change: 2011 Sep 14
|
||||
*gui_x11.txt* For Vim version 7.4. Last change: 2014 Mar 08
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -442,7 +442,7 @@ command line argument).
|
||||
*gui-x11-kde*
|
||||
There is no KDE version of Vim. There has been some work on a port using the
|
||||
Qt toolkit, but it never worked properly and it has been abandoned. Work
|
||||
continues on Yzis: www.yzis.org.
|
||||
continues on Yzis: https://github.com/chrizel/Yzis.
|
||||
|
||||
==============================================================================
|
||||
8. Compiling *gui-x11-compiling*
|
||||
|
||||
@@ -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*
|
||||
|
||||
@@ -593,7 +593,7 @@ illogical when compared to other commands.
|
||||
When you have a mapping that contains an Ex command, you need to put a line
|
||||
terminator after it to have it executed. The use of <CR> is recommended for
|
||||
this (see |<>|). Example: >
|
||||
:map _ls :!ls -l %<CR>:echo "the end"<CR>
|
||||
:map _ls :!ls -l %:S<CR>:echo "the end"<CR>
|
||||
|
||||
To avoid mapping of the characters you type in insert or Command-line mode,
|
||||
type a CTRL-V first. The mapping in Insert mode is disabled if the 'paste'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -987,7 +987,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}
|
||||
@@ -2477,7 +2477,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.
|
||||
@@ -4629,7 +4629,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
|
||||
*'lispwords'* *'lw'*
|
||||
'lispwords' 'lw' string (default is very long)
|
||||
global
|
||||
global or local to buffer |global-local|
|
||||
{not in Vi}
|
||||
{not available when compiled without the |+lispindent|
|
||||
feature}
|
||||
@@ -4757,8 +4757,9 @@ A jump table for the options with a short description can be found at |Q_op|.
|
||||
global or local to buffer |global-local|
|
||||
{not in Vi}
|
||||
Program to use for the ":make" command. See |:make_makeprg|.
|
||||
This option may contain '%' and '#' characters, which are expanded to
|
||||
the current and alternate file name. |:_%| |:_#|
|
||||
This option may contain '%' and '#' characters (see |:_%| and |:_#|),
|
||||
which are expanded to the current and alternate file name. Use |::S|
|
||||
to escape file names in case they contain special characters.
|
||||
Environment variables are expanded |:set_env|. See |option-backslash|
|
||||
about including spaces and backslashes.
|
||||
Note that a '|' must be escaped twice: once for ":set" and once for
|
||||
|
||||
@@ -764,6 +764,22 @@ GNU_TOOLS.ZIP package downloadable from http://www.polarhome.com/vim/
|
||||
|
||||
9. VMS related changes *vms-changes*
|
||||
|
||||
Version 7.4
|
||||
- Undo: VMS can not handle more than one dot in the filenames use "dir/name" -> "dir/_un_name"
|
||||
add _un_ at the beginning to keep the extension
|
||||
- correct swap file name wildcard handling
|
||||
- handle iconv usage correctly
|
||||
- do not optimize on vax - otherwise it hangs compiling crypto files
|
||||
- fileio.c fix the comment
|
||||
- correct RealWaitForChar
|
||||
- after 7.4-119 use different functions lib$cvtf_to_internal_time because Alpha and VAX have
|
||||
G_FLOAT but IA64 uses IEEE float otherwise Vim crashes
|
||||
- guard agains crashes that are caused by mixed filenames
|
||||
- [TESTDIR]make_vms.mms changed to see the output files
|
||||
- Improve tests, update known issues
|
||||
- minor compiler warnings fixed
|
||||
- CTAGS 5.8 +regex included
|
||||
|
||||
Version 7.3
|
||||
- CTAGS 5.8 included
|
||||
- VMS compile warnings fixed - floating-point overflow warning corrected on VAX
|
||||
|
||||
@@ -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.
|
||||
<
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -838,7 +838,7 @@ Unfortunately, there is no standard way to run the tests.
|
||||
The alltests.py script seems to be used quite often, that's all.
|
||||
Useful values for the 'makeprg' options therefore are:
|
||||
setlocal makeprg=./alltests.py " Run a testsuite
|
||||
setlocal makeprg=python % " Run a single testcase
|
||||
setlocal makeprg=python\ %:S " Run a single testcase
|
||||
|
||||
Also see http://vim.sourceforge.net/tip_view.php?tip_id=280.
|
||||
|
||||
@@ -1332,7 +1332,7 @@ or: >
|
||||
Here is an alternative from Michael F. Lamb for Unix that filters the errors
|
||||
first: >
|
||||
:setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%#
|
||||
:setl makeprg=javac\ %\ 2>&1\ \\\|\ vim-javac-filter
|
||||
:setl makeprg=javac\ %:S\ 2>&1\ \\\|\ vim-javac-filter
|
||||
|
||||
You need to put the following in "vim-javac-filter" somewhere in your path
|
||||
(e.g., in ~/bin) and make it executable: >
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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}.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*syntax.txt* For Vim version 7.4. Last change: 2013 Aug 22
|
||||
*syntax.txt* For Vim version 7.4. Last change: 2014 Feb 25
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -1281,6 +1281,32 @@ Finally, some vendors support hexadecimal constants. To handle them, add >
|
||||
to your startup file.
|
||||
|
||||
|
||||
EUPHORIA *euphoria3.vim* *euphoria4.vim* *ft-euphoria-syntax*
|
||||
|
||||
Two syntax highlighting files exists for Euphoria. One for Euphoria
|
||||
version 3.1.1, which is the default syntax highlighting file, and one for
|
||||
Euphoria version 4.0.5 or later.
|
||||
|
||||
Euphoria version 3.1.1 (http://www.rapideuphoria.com/) is still necessary
|
||||
for developing applications for the DOS platform, which Euphoria version 4
|
||||
(http://www.openeuphoria.org/) does not support.
|
||||
|
||||
The following file extensions are auto-detected as Euphoria file type:
|
||||
|
||||
*.e, *.eu, *.ew, *.ex, *.exu, *.exw
|
||||
*.E, *.EU, *.EW, *.EX, *.EXU, *.EXW
|
||||
|
||||
To select syntax highlighting file for Euphoria, as well as for
|
||||
auto-detecting the *.e and *.E file extensions as Euphoria file type,
|
||||
add the following line to your startup file: >
|
||||
|
||||
:let filetype_euphoria="euphoria3"
|
||||
|
||||
or
|
||||
|
||||
:let filetype_euphoria="euphoria4"
|
||||
|
||||
|
||||
ERLANG *erlang.vim* *ft-erlang-syntax*
|
||||
|
||||
Erlang is a functional programming language developed by Ericsson. Files with
|
||||
|
||||
@@ -12,6 +12,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
|
||||
% motion.txt /*%*
|
||||
%:. cmdline.txt /*%:.*
|
||||
%:8 cmdline.txt /*%:8*
|
||||
%:S cmdline.txt /*%:S*
|
||||
%:e cmdline.txt /*%:e*
|
||||
%:gs cmdline.txt /*%:gs*
|
||||
%:h cmdline.txt /*%:h*
|
||||
@@ -1788,6 +1789,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
|
||||
:3match pattern.txt /*:3match*
|
||||
::. cmdline.txt /*::.*
|
||||
::8 cmdline.txt /*::8*
|
||||
::S cmdline.txt /*::S*
|
||||
::e cmdline.txt /*::e*
|
||||
::gs cmdline.txt /*::gs*
|
||||
::h cmdline.txt /*::h*
|
||||
@@ -1827,6 +1829,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*
|
||||
@@ -1838,6 +1841,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*
|
||||
@@ -2214,6 +2218,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*
|
||||
@@ -2742,6 +2749,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*
|
||||
@@ -4298,6 +4306,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*
|
||||
@@ -5463,6 +5472,8 @@ errors message.txt /*errors*
|
||||
escape intro.txt /*escape*
|
||||
escape() eval.txt /*escape()*
|
||||
escape-bar version4.txt /*escape-bar*
|
||||
euphoria3.vim syntax.txt /*euphoria3.vim*
|
||||
euphoria4.vim syntax.txt /*euphoria4.vim*
|
||||
eval eval.txt /*eval*
|
||||
eval() eval.txt /*eval()*
|
||||
eval-examples eval.txt /*eval-examples*
|
||||
@@ -5729,6 +5740,7 @@ ft-dosbatch-syntax syntax.txt /*ft-dosbatch-syntax*
|
||||
ft-dtd-syntax syntax.txt /*ft-dtd-syntax*
|
||||
ft-eiffel-syntax syntax.txt /*ft-eiffel-syntax*
|
||||
ft-erlang-syntax syntax.txt /*ft-erlang-syntax*
|
||||
ft-euphoria-syntax syntax.txt /*ft-euphoria-syntax*
|
||||
ft-flexwiki-syntax syntax.txt /*ft-flexwiki-syntax*
|
||||
ft-form-syntax syntax.txt /*ft-form-syntax*
|
||||
ft-fortran-indent indent.txt /*ft-fortran-indent*
|
||||
@@ -5881,6 +5893,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*
|
||||
@@ -5929,6 +5942,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*
|
||||
@@ -5963,6 +5977,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*
|
||||
@@ -6984,6 +6999,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*
|
||||
@@ -6998,6 +7014,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*
|
||||
@@ -7028,6 +7045,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*
|
||||
@@ -7583,6 +7601,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*
|
||||
|
||||
@@ -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 Mar 08
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -34,125 +34,219 @@ 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
|
||||
|
||||
|
||||
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) (Aaron Bohannon, 2014 Feb 13)
|
||||
|
||||
Problem that a previous silent ":throw" causes a following try/catch not to
|
||||
work. (ZyX, 2013 Sep 28)
|
||||
|
||||
Patch for VMS. (Zoltan Arpadffy, 2014 Mar 6)
|
||||
|
||||
Euphoria syntax, Shian Lee, Feb 27
|
||||
|
||||
":cd C:\Windows\System32\drivers\etc*" does not work, even though the
|
||||
directory exists. (Sergio Gallelli, 2013 Dec 29)
|
||||
|
||||
Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
|
||||
|
||||
Issue 164: freeze on regexp search.
|
||||
Can't build Vim with Perl when -Dusethreads is not specified for building
|
||||
perl, and building with --enable-perlinterp=dynamic.
|
||||
Patch by Yasuhiro Matsumoto, 2014 Feb 24.
|
||||
|
||||
Update for Clojure ftplugin. (Sung Pae). Await discussion about formatting in
|
||||
ftplugins.
|
||||
|
||||
Update for phpcomplete.vim. (Complex, 2014 Mar 1)
|
||||
|
||||
Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
|
||||
|
||||
Patch to support slices in Python vim.List. (ZyX, 2013 Oct 20)
|
||||
Using autoconf 2.69 gives a lot of warnings.
|
||||
|
||||
Patch to support iterator on Python vim.options. (ZyX, 2013 Nov 2)
|
||||
Patch to allow for negative index in string. (LCD, 2014 Feb 13)
|
||||
Feb 14 with test. Or does this intentionally not work?
|
||||
|
||||
Patch to make Dictionary.update() work without arguments.
|
||||
(ZyX, 2013 Oct 19)
|
||||
Issue 197: ]P doesn't paste over Visual selection. With patch from Christian
|
||||
Brabandt, Feb 6. Issue 197.
|
||||
|
||||
Patch for Cobol ftplugin. (ZyX, 2013 Oct 20)
|
||||
Await response from maintainer.
|
||||
|
||||
Include systemverilog file? Two votes yes.
|
||||
Make 'lispwords' global-local. (Sung Pae, 2014 Feb 16)
|
||||
|
||||
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)
|
||||
|
||||
Problem with 'errorformat'. Patch by Lcd, 2014 Feb 21. With test.
|
||||
|
||||
Patch for the problem that a mapping where the second byte is 0x80 isn't
|
||||
handled correcly. (Nobuhiro Takasaki, 2014 Feb 11)
|
||||
Update 2014 Mar 8.
|
||||
|
||||
Patch for mksession. (Nobuhiro Takasaki, 2014 Jan 31)
|
||||
Also fixes another problem (following email)
|
||||
|
||||
Patch to use rubyarchhdrdir for Ruby 2.x. (James McCoy, 2014 Feb 24)
|
||||
|
||||
Dynamic Ruby linking issues. Patch by Danek Duvall (2014 Feb 26)
|
||||
and by Yukihiro Nakadaira (2014 Feb 27)
|
||||
|
||||
Patch: Detect grep options for Solaris. (Danek Duvall, 2014 Feb 26)
|
||||
|
||||
Adding "~" to 'cdpath' doesn't work for completion? (Davido, 2013 Aug 19)
|
||||
|
||||
Syntax file for gnuplot. Existing one is very old. (Andrew Rasmussen, 2014
|
||||
Feb 24)
|
||||
|
||||
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?
|
||||
|
||||
Bug: "!ls %" expands parenthesis in %, but not spaces. So this doesn't work
|
||||
either: ':!ls "%"'.
|
||||
Patch by Gary Johnson, 2014 Mar 6.
|
||||
|
||||
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 for XDG base directory support. (Jean François Bignolles, 2014 Mar 4)
|
||||
|
||||
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)
|
||||
Some quickfix messages appear twice. (Gary Johnson, 2014 Feb 16)
|
||||
Patch by Christian Brabandt, 2014 Feb 17.
|
||||
|
||||
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)
|
||||
Patch to add "ntab" item in 'listchars' to repeat first character. (Nathaniel
|
||||
Braun, pragm, 2013 Oct 13) Again 2014 Mar 5.
|
||||
|
||||
Undo message is not always properly displayed. Patch by Ken Takata, 2013 oct
|
||||
3. Doesn't work properly according to Yukihiro Nakadaira.
|
||||
|
||||
/[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 +257,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 +275,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 +350,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 +487,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 +507,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 +588,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 +631,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 +773,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 +811,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 +1048,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)
|
||||
|
||||
@@ -1390,15 +1502,16 @@ Win32: When 'shell' is bash shellescape() doesn't always do the right thing.
|
||||
Depends on 'shellslash', 'shellquote' and 'shellxquote', but shellescape()
|
||||
only takes 'shellslash' into account.
|
||||
|
||||
Pressing the 'pastetoggle' key doesn't update the statusline. (Jan Christoph
|
||||
Ebersbach, 2008 Feb 1)
|
||||
|
||||
Menu item that does "xxd -r" doesn't work when 'fileencoding' is utf-16.
|
||||
Check for this and use iconv? (Edward L. Fox, 2007 Sep 12)
|
||||
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 +1668,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 +2076,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 +2083,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
|
||||
|
||||
@@ -128,7 +128,7 @@ be escaped with a backslash. Example: >
|
||||
You can include special Vim keywords in the command specification. The %
|
||||
character expands to the name of the current file. So if you execute the
|
||||
command: >
|
||||
:set makeprg=make\ %
|
||||
:set makeprg=make\ %:S
|
||||
|
||||
When you are editing main.c, then ":make" executes the following command: >
|
||||
|
||||
@@ -137,7 +137,7 @@ When you are editing main.c, then ":make" executes the following command: >
|
||||
This is not too useful, so you will refine the command a little and use the :r
|
||||
(root) modifier: >
|
||||
|
||||
:set makeprg=make\ %:r.o
|
||||
:set makeprg=make\ %:r:S.o
|
||||
|
||||
Now the command executed is as follows: >
|
||||
|
||||
|
||||
@@ -209,7 +209,7 @@ The ":map" command can be followed by another command. A | character
|
||||
separates the two commands. This also means that a | character can't be used
|
||||
inside a map command. To include one, use <Bar> (five characters). Example:
|
||||
>
|
||||
:map <F8> :write <Bar> !checkin %<CR>
|
||||
:map <F8> :write <Bar> !checkin %:S<CR>
|
||||
|
||||
The same problem applies to the ":unmap" command, with the addition that you
|
||||
have to watch out for trailing white space. These two commands are different:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -311,7 +311,7 @@ redefine what these items do (after the default menus are setup).
|
||||
item with a bitmap. For example, define a new toolbar item with: >
|
||||
|
||||
:tmenu ToolBar.Compile Compile the current file
|
||||
:amenu ToolBar.Compile :!cc % -o %:r<CR>
|
||||
:amenu ToolBar.Compile :!cc %:S -o %:r:S<CR>
|
||||
|
||||
Now you need to create the icon. For MS-Windows it must be in bitmap format,
|
||||
with the name "Compile.bmp". For Unix XPM format is used, the file name is
|
||||
|
||||
@@ -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
|
||||
@@ -7188,7 +7188,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.
|
||||
|
||||
|
||||
@@ -540,7 +540,7 @@ character (and shows it immediately).
|
||||
Added :wnext command. Same as ":write" followed by ":next".
|
||||
|
||||
The ":w!" command always writes, also when the file is write protected. In Vi
|
||||
you would have to do ":!chmod +w %" and ":set noro".
|
||||
you would have to do ":!chmod +w %:S" and ":set noro".
|
||||
|
||||
When 'tildeop' has been set, "~" is an operator (must be followed by a
|
||||
movement command).
|
||||
|
||||
@@ -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 26
|
||||
|
||||
" 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')
|
||||
|
||||
@@ -536,6 +539,20 @@ au BufNewFile,BufRead *enlightenment/*.cfg setf c
|
||||
" Eterm
|
||||
au BufNewFile,BufRead *Eterm/*.cfg setf eterm
|
||||
|
||||
" Euphoria 3 or 4
|
||||
au BufNewFile,BufRead *.eu,*.ew,*.ex,*.exu,*.exw call s:EuphoriaCheck()
|
||||
if has("fname_case")
|
||||
au BufNewFile,BufRead *.EU,*.EW,*.EX,*.EXU,*.EXW call s:EuphoriaCheck()
|
||||
endif
|
||||
|
||||
func! s:EuphoriaCheck()
|
||||
if exists('g:filetype_euphoria')
|
||||
exe 'setf ' . g:filetype_euphoria
|
||||
else
|
||||
setf euphoria3
|
||||
endif
|
||||
endfunc
|
||||
|
||||
" Lynx config files
|
||||
au BufNewFile,BufRead lynx.cfg setf lynx
|
||||
|
||||
@@ -656,22 +673,26 @@ au BufNewFile,BufRead *.ed\(f\|if\|n\|o\) setf edif
|
||||
" Embedix Component Description
|
||||
au BufNewFile,BufRead *.ecd setf ecd
|
||||
|
||||
" Eiffel or Specman
|
||||
" Eiffel or Specman or Euphoria
|
||||
au BufNewFile,BufRead *.e,*.E call s:FTe()
|
||||
|
||||
" Elinks configuration
|
||||
au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf setf elinks
|
||||
|
||||
func! s:FTe()
|
||||
let n = 1
|
||||
while n < 100 && n < line("$")
|
||||
if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
|
||||
setf specman
|
||||
return
|
||||
endif
|
||||
let n = n + 1
|
||||
endwhile
|
||||
setf eiffel
|
||||
if exists('g:filetype_euphoria')
|
||||
exe 'setf ' . g:filetype_euphoria
|
||||
else
|
||||
let n = 1
|
||||
while n < 100 && n < line("$")
|
||||
if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
|
||||
setf specman
|
||||
return
|
||||
endif
|
||||
let n = n + 1
|
||||
endwhile
|
||||
setf eiffel
|
||||
endif
|
||||
endfunc
|
||||
|
||||
" ERicsson LANGuage; Yaws is erlang too
|
||||
@@ -1017,7 +1038,7 @@ au BufNewFile,BufRead *.ldif setf ldif
|
||||
au BufNewFile,BufRead *.ld setf ld
|
||||
|
||||
" Lex
|
||||
au BufNewFile,BufRead *.lex,*.l setf lex
|
||||
au BufNewFile,BufRead *.lex,*.l,*.lxx,*.l++ setf lex
|
||||
|
||||
" Libao
|
||||
au BufNewFile,BufRead */etc/libao.conf,*/.libao setf libao
|
||||
@@ -2240,6 +2261,9 @@ au BufNewFile,BufRead *.v setf verilog
|
||||
" Verilog-AMS HDL
|
||||
au BufNewFile,BufRead *.va,*.vams setf verilogams
|
||||
|
||||
" SystemVerilog
|
||||
au BufNewFile,BufRead *.sv,*.svh setf systemverilog
|
||||
|
||||
" VHDL
|
||||
au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst setf vhdl
|
||||
au BufNewFile,BufRead *.vhdl_[0-9]* call s:StarSetf('vhdl')
|
||||
@@ -2412,7 +2436,7 @@ au BufNewFile,BufRead *.xsd setf xsd
|
||||
au BufNewFile,BufRead *.xsl,*.xslt setf xslt
|
||||
|
||||
" Yacc
|
||||
au BufNewFile,BufRead *.yy setf yacc
|
||||
au BufNewFile,BufRead *.yy,*.yxx,*.y++ setf yacc
|
||||
|
||||
" Yacc or racc
|
||||
au BufNewFile,BufRead *.y call s:FTy()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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
runtime/ftplugin/jproperties.vim
Normal file
15
runtime/ftplugin/jproperties.vim
Normal 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<"
|
||||
@@ -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
runtime/ftplugin/registry.vim
Normal file
36
runtime/ftplugin/registry.vim
Normal 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
|
||||
@@ -1,7 +1,8 @@
|
||||
" Plugin to update the %changelog section of RPM spec files
|
||||
" Filename: spec.vim
|
||||
" Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com>
|
||||
" Last Change: 2012 Mar 07
|
||||
" Maintainer: Igor Gnatenko i.gnatenko.brain@gmail.com
|
||||
" Former Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com> (until March 2014)
|
||||
" Last Change: Sun Mar 2 11:24 MSK 2014 Igor Gnatenko
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
@@ -150,6 +151,10 @@ if !exists("*s:ParseRpmVars")
|
||||
execute a:strline
|
||||
let definestr = "^[ \t]*%define[ \t]\\+" . varname . "[ \t]\\+\\(.*\\)$"
|
||||
let linenum = search(definestr, "bW")
|
||||
if (linenum == 0)
|
||||
let definestr = substitute(definestr, "%define", "%global", "")
|
||||
let linenum = search(definestr, "bW")
|
||||
endif
|
||||
if (linenum != -1)
|
||||
let ret = ret . substitute(getline(linenum), definestr, "\\1", "")
|
||||
else
|
||||
|
||||
11
runtime/ftplugin/systemverilog.vim
Normal file
11
runtime/ftplugin/systemverilog.vim
Normal 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,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')
|
||||
|
||||
@@ -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()')
|
||||
|
||||
|
||||
@@ -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
runtime/indent/systemverilog.vim
Normal file
230
runtime/indent/systemverilog.vim
Normal 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
|
||||
@@ -855,7 +855,7 @@ if has("lispindent")
|
||||
call append("$", "\t(local to buffer)")
|
||||
call <SID>BinOptionL("lisp")
|
||||
call append("$", "lispwords\twords that change how lisp indenting works")
|
||||
call <SID>OptionG("lw", &lw)
|
||||
call <SID>OptionL("lw", &lw)
|
||||
endif
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
" ---------------------------------------------------------------------
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
|
||||
" License: This file can be redistribued and/or modified under the same terms
|
||||
" as Vim itself.
|
||||
" Last Change: 2013-09-16
|
||||
" Last Change: 2014-03-04
|
||||
" Notes: Last synced with apache-2.2.3, version 1.x is no longer supported
|
||||
" TODO: see particular FIXME's scattered through the file
|
||||
" make it really linewise?
|
||||
@@ -157,7 +157,7 @@ syn keyword apacheDeclaration PerlRestartHandler PerlDispatchHandler
|
||||
syn keyword apacheDeclaration PerlFreshRestart PerlSendHeader
|
||||
syn keyword apacheDeclaration php_value php_flag php_admin_value php_admin_flag
|
||||
syn match apacheSection "<\/\=\(Proxy\|ProxyMatch\)[^>]*>" contains=apacheAnything
|
||||
syn keyword apacheDeclaration AllowCONNECT NoProxy ProxyBadHeader ProxyBlock ProxyDomain ProxyErrorOverride ProxyIOBufferSize ProxyMaxForwards ProxyPass ProxyPassReverse ProxyPassReverseCookieDomain ProxyPassReverseCookiePath ProxyPreserveHost ProxyReceiveBufferSize ProxyRemote ProxyRemoteMatch ProxyRequests ProxyTimeout ProxyVia
|
||||
syn keyword apacheDeclaration AllowCONNECT NoProxy ProxyBadHeader ProxyBlock ProxyDomain ProxyErrorOverride ProxyIOBufferSize ProxyMaxForwards ProxyPass ProxyPassMatch ProxyPassReverse ProxyPassReverseCookieDomain ProxyPassReverseCookiePath ProxyPreserveHost ProxyReceiveBufferSize ProxyRemote ProxyRemoteMatch ProxyRequests ProxyTimeout ProxyVia
|
||||
syn keyword apacheDeclaration RewriteBase RewriteCond RewriteEngine RewriteLock RewriteLog RewriteLogLevel RewriteMap RewriteOptions RewriteRule
|
||||
syn keyword apacheOption inherit
|
||||
syn keyword apacheDeclaration BrowserMatch BrowserMatchNoCase SetEnvIf SetEnvIfNoCase
|
||||
|
||||
61
runtime/syntax/arduino.vim
Normal file
61
runtime/syntax/arduino.vim
Normal 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
|
||||
@@ -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
@@ -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<>-<2D>_@][A-Za-z<>-<2D>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
|
||||
|
||||
@@ -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\+\)*"
|
||||
|
||||
@@ -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,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
|
||||
|
||||
135
runtime/syntax/euphoria3.vim
Normal file
135
runtime/syntax/euphoria3.vim
Normal file
@@ -0,0 +1,135 @@
|
||||
" Vim syntax file
|
||||
" Language: Euphoria 3.1.1 - supports DOS - (http://www.rapideuphoria.com/)
|
||||
" Maintainer: Shian Lee
|
||||
" Last Change: 2014 Feb 24 (for Vim 7.4)
|
||||
" Remark: Euphoria has two syntax files, euphoria3.vim and euphoria4.vim;
|
||||
" For details see :help ft-euphoria-syntax
|
||||
|
||||
" Quit if a (custom) syntax file was already loaded (compatible with Vim 5.8):
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Reset compatible-options to Vim default value, just in case:
|
||||
let s:save_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
" Should suffice for very long expressions:
|
||||
syn sync lines=40
|
||||
|
||||
" Euphoria is a case-sensitive language (with only 4 builtin types):
|
||||
syntax case match
|
||||
|
||||
" Keywords/Builtins for Debug - from $EUDIR/bin/keywords.e:
|
||||
syn keyword euphoria3Debug with without trace profile
|
||||
syn keyword euphoria3Debug profile_time warning type_check
|
||||
|
||||
" Keywords (Statments) - from $EUDIR/bin/keywords.e:
|
||||
syn keyword euphoria3Keyword if end then procedure else for return
|
||||
syn keyword euphoria3Keyword do elsif while type constant to and or
|
||||
syn keyword euphoria3Keyword exit function global by not include
|
||||
syn keyword euphoria3Keyword xor
|
||||
|
||||
" Builtins (Identifiers) - from $EUDIR/bin/keywords.e:
|
||||
syn keyword euphoria3Builtin length puts integer sequence position object
|
||||
syn keyword euphoria3Builtin append prepend print printf
|
||||
syn keyword euphoria3Builtin clear_screen floor getc gets get_key
|
||||
syn keyword euphoria3Builtin rand repeat atom compare find match
|
||||
syn keyword euphoria3Builtin time command_line open close getenv
|
||||
syn keyword euphoria3Builtin sqrt sin cos tan log system date remainder
|
||||
syn keyword euphoria3Builtin power machine_func machine_proc abort peek poke
|
||||
syn keyword euphoria3Builtin call sprintf arctan and_bits or_bits xor_bits
|
||||
syn keyword euphoria3Builtin not_bits pixel get_pixel mem_copy mem_set
|
||||
syn keyword euphoria3Builtin c_proc c_func routine_id call_proc call_func
|
||||
syn keyword euphoria3Builtin poke4 peek4s peek4u equal system_exec
|
||||
syn keyword euphoria3Builtin platform task_create task_schedule task_yield
|
||||
syn keyword euphoria3Builtin task_self task_suspend task_list
|
||||
syn keyword euphoria3Builtin task_status task_clock_stop task_clock_start
|
||||
syn keyword euphoria3Builtin find_from match_from
|
||||
" Builtins (Identifiers) shortcuts for length() and print():
|
||||
syn match euphoria3Builtin "\$"
|
||||
syn match euphoria3Builtin "?"
|
||||
|
||||
" Library Identifiers (Function) - from $EUDIR/doc/library.doc:
|
||||
syn keyword euphoria3Library reverse sort custom_sort lower upper
|
||||
syn keyword euphoria3Library wildcard_match wildcard_file arcsin
|
||||
syn keyword euphoria3Library arccos PI flush lock_file unlock_file
|
||||
syn keyword euphoria3Library pretty_print sprint get_bytes prompt_string
|
||||
syn keyword euphoria3Library wait_key get prompt_number value seek where
|
||||
syn keyword euphoria3Library current_dir chdir dir walk_dir allow_break
|
||||
syn keyword euphoria3Library check_break get_mouse mouse_events mouse_pointer
|
||||
syn keyword euphoria3Library tick_rate sleep get_position graphics_mode
|
||||
syn keyword euphoria3Library video_config scroll wrap text_color bk_color
|
||||
syn keyword euphoria3Library palette all_palette get_all_palette read_bitmap
|
||||
syn keyword euphoria3Library save_bitmap get_active_page set_active_page
|
||||
syn keyword euphoria3Library get_display_page set_display_page sound
|
||||
syn keyword euphoria3Library cursor text_rows get_screen_char put_screen_char
|
||||
syn keyword euphoria3Library save_text_image display_text_image draw_line
|
||||
syn keyword euphoria3Library polygon ellipse save_screen save_image display_image
|
||||
syn keyword euphoria3Library dos_interrupt allocate free allocate_low free_low
|
||||
syn keyword euphoria3Library allocate_string register_block unregister_block
|
||||
syn keyword euphoria3Library get_vector set_vector lock_memory int_to_bytes
|
||||
syn keyword euphoria3Library bytes_to_int int_to_bits bits_to_int atom_to_float64
|
||||
syn keyword euphoria3Library atom_to_float32 float64_to_atom float32_to_atom
|
||||
syn keyword euphoria3Library set_rand use_vesa crash_file crash_message
|
||||
syn keyword euphoria3Library crash_routine open_dll define_c_proc define_c_func
|
||||
syn keyword euphoria3Library define_c_var call_back message_box free_console
|
||||
syn keyword euphoria3Library instance
|
||||
|
||||
" Library Identifiers (Function) - from $EUDIR/doc/database.doc:
|
||||
syn keyword euphoria3Library db_create db_open db_select db_close db_create_table
|
||||
syn keyword euphoria3Library db_select_table db_rename_table db_delete_table
|
||||
syn keyword euphoria3Library db_table_list db_table_size db_find_key db_record_key
|
||||
syn keyword euphoria3Library db_record_data db_insert db_delete_record
|
||||
syn keyword euphoria3Library db_replace_data db_compress db_dump db_fatal_id
|
||||
|
||||
" Linux shell comment (#!...):
|
||||
syn match euphoria3Comment "\%^#!.*$"
|
||||
" Comment on one line:
|
||||
syn region euphoria3Comment start=/--/ end=/$/
|
||||
|
||||
" Delimiters and brackets:
|
||||
syn match euphoria3Delimit "[([\])]"
|
||||
syn match euphoria3Delimit "\.\."
|
||||
syn match euphoria3Operator "[{}]"
|
||||
|
||||
" Character constant:
|
||||
syn region euphoria3Char start=/'/ skip=/\\'\|\\\\/ end=/'/ oneline
|
||||
|
||||
" String constant:
|
||||
syn region euphoria3String start=/"/ skip=/\\"\|\\\\/ end=/"/ oneline
|
||||
|
||||
" Hexadecimal integer:
|
||||
syn match euphoria3Number "#[0-9A-F]\+\>"
|
||||
|
||||
" Integer/Floating point without a dot:
|
||||
syn match euphoria3Number "\<\d\+\>"
|
||||
" Floating point with dot:
|
||||
syn match euphoria3Number "\<\d\+\.\d*\>"
|
||||
" Floating point starting with a dot:
|
||||
syn match euphoria3Number "\.\d\+\>"
|
||||
" Boolean constants:
|
||||
syn keyword euphoria3Boolean true TRUE false FALSE
|
||||
|
||||
" Define the default highlighting.
|
||||
" Only used when an item doesn't have highlighting yet:
|
||||
hi def link euphoria3Comment Comment
|
||||
hi def link euphoria3String String
|
||||
hi def link euphoria3Char Character
|
||||
hi def link euphoria3Number Number
|
||||
hi def link euphoria3Boolean Boolean
|
||||
hi def link euphoria3Builtin Identifier
|
||||
hi def link euphoria3Library Function
|
||||
hi def link euphoria3Keyword Statement
|
||||
hi def link euphoria3Operator Statement
|
||||
hi def link euphoria3Debug Debug
|
||||
hi def link euphoria3Delimit Delimiter
|
||||
|
||||
let b:current_syntax = "euphoria3"
|
||||
|
||||
" Restore current compatible-options:
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
|
||||
246
runtime/syntax/euphoria4.vim
Normal file
246
runtime/syntax/euphoria4.vim
Normal file
@@ -0,0 +1,246 @@
|
||||
" Vim syntax file
|
||||
" Language: Euphoria 4.0.5 (http://www.openeuphoria.org/)
|
||||
" Maintainer: Shian Lee
|
||||
" Last Change: 2014 Feb 24 (for Vim 7.4)
|
||||
" Remark: Euphoria has two syntax files, euphoria3.vim and euphoria4.vim;
|
||||
" For details see :help ft-euphoria-syntax
|
||||
|
||||
" Quit if a (custom) syntax file was already loaded (compatible with Vim 5.8):
|
||||
if version < 600
|
||||
syntax clear
|
||||
elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Reset compatible-options to Vim default value, just in case:
|
||||
let s:save_cpo = &cpo
|
||||
set cpo&vim
|
||||
|
||||
" Should suffice for very long strings and expressions:
|
||||
syn sync lines=40
|
||||
|
||||
" Euphoria is a case-sensitive language (with only 4 builtin types):
|
||||
syntax case match
|
||||
|
||||
" Some keywords/Builtins for Debug - from $EUDIR/include/euphoria/keywords.e:
|
||||
syn keyword euphoria4Debug with without trace profile batch check indirect
|
||||
syn keyword euphoria4Debug includes inline warning define
|
||||
|
||||
" Keywords for conditional compilation - from $EUDIR/include/euphoria/keywords.e:
|
||||
syn keyword euphoria4PreProc elsedef elsifdef ifdef
|
||||
|
||||
" Keywords (Statments) - from $EUDIR/include/euphoria/keywords.e:
|
||||
syn keyword euphoria4Keyword and as break by case constant continue do else
|
||||
syn keyword euphoria4Keyword elsif end entry enum exit export
|
||||
syn keyword euphoria4Keyword fallthru for function global goto if include
|
||||
syn keyword euphoria4Keyword label loop namespace not or override procedure
|
||||
syn keyword euphoria4Keyword public retry return routine switch then to type
|
||||
syn keyword euphoria4Keyword until while xor
|
||||
|
||||
" Builtins (Identifiers) - from $EUDIR/include/euphoria/keywords.e:
|
||||
syn keyword euphoria4Builtin abort and_bits append arctan atom c_func c_proc
|
||||
syn keyword euphoria4Builtin call call_func call_proc clear_screen close
|
||||
syn keyword euphoria4Builtin command_line compare cos date delete delete_routine
|
||||
syn keyword euphoria4Builtin equal find floor get_key getc getenv gets hash
|
||||
syn keyword euphoria4Builtin head include_paths insert integer length log
|
||||
syn keyword euphoria4Builtin machine_func machine_proc match mem_copy mem_set
|
||||
syn keyword euphoria4Builtin not_bits object open option_switches or_bits peek
|
||||
syn keyword euphoria4Builtin peek2s peek2u peek4s peek4u peek_string peeks pixel
|
||||
syn keyword euphoria4Builtin platform poke poke2 poke4 position power prepend
|
||||
syn keyword euphoria4Builtin print printf puts rand remainder remove repeat
|
||||
syn keyword euphoria4Builtin replace routine_id sequence sin splice sprintf
|
||||
syn keyword euphoria4Builtin sqrt system system_exec tail tan task_clock_start
|
||||
syn keyword euphoria4Builtin task_clock_stop task_create task_list task_schedule
|
||||
syn keyword euphoria4Builtin task_self task_status task_suspend task_yield time
|
||||
syn keyword euphoria4Builtin xor_bits
|
||||
" Builtins (Identifiers) shortcuts for length() and print():
|
||||
syn match euphoria4Builtin "\$"
|
||||
syn match euphoria4Builtin "?"
|
||||
|
||||
" Library Identifiers (Function) - grep from $EUDIR/include/*:
|
||||
syn keyword euphoria4Library DEP_on SyntaxColor abbreviate_path abs absolute_path
|
||||
syn keyword euphoria4Library accept add add_item all_copyrights all_matches
|
||||
syn keyword euphoria4Library allocate allocate_code allocate_data allocate_low
|
||||
syn keyword euphoria4Library allocate_pointer_array allocate_protect
|
||||
syn keyword euphoria4Library allocate_string allocate_string_pointer_array
|
||||
syn keyword euphoria4Library allocate_wstring allocations allow_break any_key
|
||||
syn keyword euphoria4Library append_lines apply approx arccos arccosh arcsin
|
||||
syn keyword euphoria4Library arcsinh arctanh assert at atan2 atom_to_float32
|
||||
syn keyword euphoria4Library atom_to_float64 attr_to_colors avedev average
|
||||
syn keyword euphoria4Library begins binary_search bind binop_ok bits_to_int
|
||||
syn keyword euphoria4Library bk_color breakup build_commandline build_list
|
||||
syn keyword euphoria4Library bytes_to_int calc_hash calc_primes call_back
|
||||
syn keyword euphoria4Library canon2win canonical canonical_path ceil
|
||||
syn keyword euphoria4Library central_moment chance char_test chdir
|
||||
syn keyword euphoria4Library check_all_blocks check_break check_free_list
|
||||
syn keyword euphoria4Library checksum clear clear_directory close cmd_parse
|
||||
syn keyword euphoria4Library colors_to_attr columnize combine connect
|
||||
syn keyword euphoria4Library console_colors copy copy_file cosh count crash
|
||||
syn keyword euphoria4Library crash_file crash_message crash_routine create
|
||||
syn keyword euphoria4Library create_directory create_file curdir current_dir
|
||||
syn keyword euphoria4Library cursor custom_sort datetime days_in_month
|
||||
syn keyword euphoria4Library days_in_year db_cache_clear db_clear_table db_close
|
||||
syn keyword euphoria4Library db_compress db_connect db_create db_create_table
|
||||
syn keyword euphoria4Library db_current db_current_table db_delete_record
|
||||
syn keyword euphoria4Library db_delete_table db_dump db_fetch_record db_find_key
|
||||
syn keyword euphoria4Library db_get_errors db_get_recid db_insert db_open
|
||||
syn keyword euphoria4Library db_record_data db_record_key db_record_recid
|
||||
syn keyword euphoria4Library db_rename_table db_replace_data db_replace_recid
|
||||
syn keyword euphoria4Library db_select db_select_table db_set_caching
|
||||
syn keyword euphoria4Library db_table_list db_table_size deallocate decanonical
|
||||
syn keyword euphoria4Library decode defaulted_value defaultext define_c_func
|
||||
syn keyword euphoria4Library define_c_proc define_c_var deg2rad delete_file
|
||||
syn keyword euphoria4Library dep_works dequote deserialize diff dir dir_size
|
||||
syn keyword euphoria4Library dirname disk_metrics disk_size display
|
||||
syn keyword euphoria4Library display_text_image dnsquery driveid dump dup emovavg
|
||||
syn keyword euphoria4Library encode ends ensure_in_list ensure_in_range
|
||||
syn keyword euphoria4Library error_code error_message error_no error_string
|
||||
syn keyword euphoria4Library error_to_string escape euphoria_copyright exec
|
||||
syn keyword euphoria4Library exp extract fetch fib file_exists file_length
|
||||
syn keyword euphoria4Library file_timestamp file_type filebase fileext filename
|
||||
syn keyword euphoria4Library filter find_all find_all_but find_any find_each
|
||||
syn keyword euphoria4Library find_nested find_replace find_replace_callback
|
||||
syn keyword euphoria4Library find_replace_limit flags_to_string flatten
|
||||
syn keyword euphoria4Library float32_to_atom float64_to_atom flush for_each
|
||||
syn keyword euphoria4Library format frac free free_code free_console free_low
|
||||
syn keyword euphoria4Library free_pointer_array from_date from_unix gcd geomean
|
||||
syn keyword euphoria4Library get get_bytes get_charsets get_def_lang
|
||||
syn keyword euphoria4Library get_display_page get_dstring get_encoding_properties
|
||||
syn keyword euphoria4Library get_integer16 get_integer32 get_lang_path get_lcid
|
||||
syn keyword euphoria4Library get_mouse get_option get_ovector_size get_pid
|
||||
syn keyword euphoria4Library get_position get_rand get_screen_char get_text
|
||||
syn keyword euphoria4Library get_vector getaddrinfo getmxrr getnsrr graphics_mode
|
||||
syn keyword euphoria4Library harmean has has_console has_match hex_text
|
||||
syn keyword euphoria4Library host_by_addr host_by_name http_get http_post iff
|
||||
syn keyword euphoria4Library iif info init_class init_curdir insertion_sort
|
||||
syn keyword euphoria4Library instance int_to_bits int_to_bytes intdiv
|
||||
syn keyword euphoria4Library is_DEP_supported is_empty is_even is_even_obj
|
||||
syn keyword euphoria4Library is_in_list is_in_range is_inetaddr is_leap_year
|
||||
syn keyword euphoria4Library is_match is_using_DEP is_win_nt join join_path
|
||||
syn keyword euphoria4Library keep_comments keep_newlines key_codes keys keyvalues
|
||||
syn keyword euphoria4Library kill kurtosis lang_load larger_of largest last
|
||||
syn keyword euphoria4Library listen load load_map locate_file lock_file
|
||||
syn keyword euphoria4Library lock_memory log10 lookup lower malloc mapping
|
||||
syn keyword euphoria4Library match_all match_any match_replace matches max
|
||||
syn keyword euphoria4Library maybe_any_key median memory_used merge message_box
|
||||
syn keyword euphoria4Library mid min minsize mod mode money mouse_events
|
||||
syn keyword euphoria4Library mouse_pointer movavg move_file nested_get
|
||||
syn keyword euphoria4Library nested_put new new_extra new_from_kvpairs
|
||||
syn keyword euphoria4Library new_from_string new_time next_prime now now_gmt
|
||||
syn keyword euphoria4Library number open_dll optimize option_spec_to_string
|
||||
syn keyword euphoria4Library or_all pad_head pad_tail pairs parse
|
||||
syn keyword euphoria4Library parse_commandline parse_ip_address parse_querystring
|
||||
syn keyword euphoria4Library parse_url patch pathinfo pathname pcre_copyright
|
||||
syn keyword euphoria4Library peek_end peek_top peek_wstring pivot platform_name
|
||||
syn keyword euphoria4Library poke_string poke_wstring pop powof2 prepare_block
|
||||
syn keyword euphoria4Library pretty_print pretty_sprint prime_list process_lines
|
||||
syn keyword euphoria4Library product project prompt_number prompt_string proper
|
||||
syn keyword euphoria4Library push put put_integer16 put_integer32 put_screen_char
|
||||
syn keyword euphoria4Library quote rad2deg rand_range range raw_frequency read
|
||||
syn keyword euphoria4Library read_bitmap read_file read_lines receive receive_from
|
||||
syn keyword euphoria4Library register_block rehash remove_all remove_directory
|
||||
syn keyword euphoria4Library remove_dups remove_item remove_subseq rename_file
|
||||
syn keyword euphoria4Library repeat_pattern reset retain_all reverse rfind rmatch
|
||||
syn keyword euphoria4Library rnd rnd_1 roll rotate rotate_bits round safe_address
|
||||
syn keyword euphoria4Library sample save_bitmap save_map save_text_image scroll
|
||||
syn keyword euphoria4Library seek select send send_to serialize series
|
||||
syn keyword euphoria4Library service_by_name service_by_port set
|
||||
syn keyword euphoria4Library set_accumulate_summary set_charsets set_colors
|
||||
syn keyword euphoria4Library set_decimal_mark set_def_lang set_default_charsets
|
||||
syn keyword euphoria4Library set_encoding_properties set_keycodes set_lang_path
|
||||
syn keyword euphoria4Library set_option set_rand set_test_abort set_test_verbosity
|
||||
syn keyword euphoria4Library set_vector set_wait_on_summary setenv shift_bits
|
||||
syn keyword euphoria4Library show_block show_help show_tokens shuffle shutdown
|
||||
syn keyword euphoria4Library sign sim_index sinh size skewness sleep slice small
|
||||
syn keyword euphoria4Library smaller_of smallest sort sort_columns sound split
|
||||
syn keyword euphoria4Library split_any split_limit split_path sprint start_time
|
||||
syn keyword euphoria4Library statistics stdev store string_numbers subtract sum
|
||||
syn keyword euphoria4Library sum_central_moments swap tanh task_delay temp_file
|
||||
syn keyword euphoria4Library test_equal test_exec test_fail test_false
|
||||
syn keyword euphoria4Library test_not_equal test_pass test_read test_report
|
||||
syn keyword euphoria4Library test_true test_write text_color text_rows threshold
|
||||
syn keyword euphoria4Library tick_rate to_integer to_number to_string to_unix
|
||||
syn keyword euphoria4Library tokenize_file tokenize_string top transform translate
|
||||
syn keyword euphoria4Library transmute trim trim_head trim_tail trsprintf trunc
|
||||
syn keyword euphoria4Library type_of uname unlock_file unregister_block unsetenv
|
||||
syn keyword euphoria4Library upper use_vesa valid valid_index value values version
|
||||
syn keyword euphoria4Library version_date version_major version_minor version_node
|
||||
syn keyword euphoria4Library version_patch version_revision version_string
|
||||
syn keyword euphoria4Library version_string_long version_string_short version_type
|
||||
syn keyword euphoria4Library video_config vlookup vslice wait_key walk_dir
|
||||
syn keyword euphoria4Library warning_file weeks_day where which_bit wildcard_file
|
||||
syn keyword euphoria4Library wildcard_match wrap write write_file write_lines
|
||||
syn keyword euphoria4Library writef writefln years_day
|
||||
|
||||
" Library Identifiers (Type) - grep from $EUDIR/include/*:
|
||||
syn keyword euphoria4Type ascii_string boolean bordered_address byte_range
|
||||
syn keyword euphoria4Type case_flagset_type color cstring datetime
|
||||
syn keyword euphoria4Type file_number file_position graphics_point
|
||||
syn keyword euphoria4Type integer_array lcid lock_type machine_addr map
|
||||
syn keyword euphoria4Type mixture number_array option_spec
|
||||
syn keyword euphoria4Type page_aligned_address positive_int process regex
|
||||
syn keyword euphoria4Type sequence_array socket stack std_library_address
|
||||
syn keyword euphoria4Type string t_alnum t_alpha t_ascii t_boolean
|
||||
syn keyword euphoria4Type t_bytearray t_cntrl t_consonant t_digit t_display
|
||||
syn keyword euphoria4Type t_graph t_identifier t_lower t_print t_punct
|
||||
syn keyword euphoria4Type t_space t_specword t_text t_upper t_vowel t_xdigit
|
||||
syn keyword euphoria4Type valid_memory_protection_constant valid_wordsize
|
||||
|
||||
" Linux shell comment (#!...):
|
||||
syn match euphoria4Comment "\%^#!.*$"
|
||||
" Single and multilines comments:
|
||||
syn region euphoria4Comment start=/--/ end=/$/
|
||||
syn region euphoria4Comment start="/\*" end="\*/"
|
||||
|
||||
" Delimiters and brackets:
|
||||
syn match euphoria4Delimit "[([\])]"
|
||||
syn match euphoria4Delimit "\.\."
|
||||
syn match euphoria4Delimit ":"
|
||||
syn match euphoria4Operator "[{}]"
|
||||
|
||||
" Character constant:
|
||||
syn region euphoria4Char start=/'/ skip=/\\'\|\\\\/ end=/'/ oneline
|
||||
|
||||
" Single and multiline string constant:
|
||||
syn region euphoria4String start=/"\|b"\|x"/ skip=/\\"\|\\\\/ end=/"/ oneline
|
||||
syn region euphoria4String start=/`/ end=/`/
|
||||
syn region euphoria4String start=/"""/ end=/"""/
|
||||
|
||||
" Binary/Octal/Decimal/Hexadecimal integer:
|
||||
syn match euphoria4Number "\<0b[01_]\+\>"
|
||||
syn match euphoria4Number "\<0t[0-7_]\+\>"
|
||||
syn match euphoria4Number "\<0d[0-9_]\+\>"
|
||||
syn match euphoria4Number "\<0x[0-9A-Fa-f_]\+\>"
|
||||
syn match euphoria4Number "#[0-9A-Fa-f_]\+\>"
|
||||
|
||||
" Integer/Floating point without a dot:
|
||||
syn match euphoria4Number "\<\d\+\>"
|
||||
" Floating point with dot:
|
||||
syn match euphoria4Number "\<\d\+\.\d*\>"
|
||||
" Floating point starting with a dot:
|
||||
syn match euphoria4Number "\.\d\+\>"
|
||||
" Boolean constants:
|
||||
syn keyword euphoria4Boolean true TRUE false FALSE
|
||||
|
||||
" Define the default highlighting.
|
||||
" Only used when an item doesn't have highlighting yet:
|
||||
hi def link euphoria4Comment Comment
|
||||
hi def link euphoria4String String
|
||||
hi def link euphoria4Char Character
|
||||
hi def link euphoria4Number Number
|
||||
hi def link euphoria4Boolean Boolean
|
||||
hi def link euphoria4Builtin Identifier
|
||||
hi def link euphoria4Library Function
|
||||
hi def link euphoria4Type Type
|
||||
hi def link euphoria4Keyword Statement
|
||||
hi def link euphoria4Operator Statement
|
||||
hi def link euphoria4Debug Debug
|
||||
hi def link euphoria4Delimit Delimiter
|
||||
hi def link euphoria4PreProc PreProc
|
||||
|
||||
let b:current_syntax = "euphoria4"
|
||||
|
||||
" Restore current compatible-options:
|
||||
let &cpo = s:save_cpo
|
||||
unlet s:save_cpo
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim syntax file
|
||||
" Language: Vim help file
|
||||
" Maintainer: Bram Moolenaar (Bram@vim.org)
|
||||
" Last Change: 2013 Sep 05
|
||||
" Last Change: 2014 Feb 12
|
||||
|
||||
" Quit when a (custom) syntax file was already loaded
|
||||
if exists("b:current_syntax")
|
||||
@@ -40,7 +40,7 @@ endif
|
||||
syn match helpNormal "|.*====*|"
|
||||
syn match helpNormal "|||"
|
||||
syn match helpNormal ":|vim:|" " for :help modeline
|
||||
syn match helpVim "Vim version [0-9.a-z]\+"
|
||||
syn match helpVim "\<Vim version [0-9][0-9.a-z]*"
|
||||
syn match helpVim "VIM REFERENCE.*"
|
||||
syn match helpOption "'[a-z]\{2,\}'"
|
||||
syn match helpOption "'t_..'"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
" Filename: spec.vim
|
||||
" Purpose: Vim syntax file
|
||||
" Language: SPEC: Build/install scripts for Linux RPM packages
|
||||
" Maintainer: Donovan Rebbechi elflord@panix.com
|
||||
" Last Change: Fri Dec 3 11:54 EST 2004 Marcin Dalecki
|
||||
" Maintainer: Igor Gnatenko i.gnatenko.brain@gmail.com
|
||||
" Former Maintainer: Donovan Rebbechi elflord@panix.com (until March 2014)
|
||||
" Last Change: Sun Mar 2 10:33 MSK 2014 Igor Gnatenko
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
@@ -82,8 +83,8 @@ syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _b
|
||||
|
||||
"One line macros - valid in all ScriptAreas
|
||||
"tip: remember do include new items on specScriptArea's skip section
|
||||
syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|patch\d*\|setup\|configure\|GNUconfigure\|find_lang\|makeinstall\|include\)\>' end='$' contains=specCommandOpts,specMacroIdentifier
|
||||
syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure\|GNUconfigure\|find_lang\|makeinstall\)}' end='$' contains=specCommandOpts,specMacroIdentifier
|
||||
syn region specSectionMacroArea oneline matchgroup=specSectionMacro start='^%\(define\|global\|patch\d*\|setup\|configure\|GNUconfigure\|find_lang\|makeinstall\|make_install\|include\)\>' end='$' contains=specCommandOpts,specMacroIdentifier
|
||||
syn region specSectionMacroBracketArea oneline matchgroup=specSectionMacro start='^%{\(configure\|GNUconfigure\|find_lang\|makeinstall\|make_install\)}' end='$' contains=specCommandOpts,specMacroIdentifier
|
||||
|
||||
"%% Files Section %%
|
||||
"TODO %config valid parameters: missingok\|noreplace
|
||||
@@ -113,7 +114,7 @@ syn region specDescriptionArea matchgroup=specSection start='^%description' end=
|
||||
syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment
|
||||
|
||||
"%% Scripts Section %%
|
||||
syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
|
||||
syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|find_lang\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2
|
||||
|
||||
"%% Changelog Section %%
|
||||
syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense
|
||||
|
||||
101
runtime/syntax/systemverilog.vim
Normal file
101
runtime/syntax/systemverilog.vim
Normal 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
|
||||
@@ -6,11 +6,9 @@
|
||||
" (previously Matt Neumann <mattneu@purpleturtle.com>)
|
||||
" (previously Allan Kelly <allan@fruitloaf.co.uk>)
|
||||
" Original: Robin Becker <robin@jessikat.demon.co.uk>
|
||||
" Last Change: 2009/04/06 02:38:36
|
||||
" Version: 1.13
|
||||
" URL: http://real.metasyntax.net:2357/cvs/cvsweb.cgi/Config/vim/syntax/tcl.vim
|
||||
"
|
||||
" Keywords TODO: click anchor
|
||||
" Last Change: 2014-02-12
|
||||
" Version: 1.14
|
||||
" URL: http://bitbucket.org/taylor_venable/metasyntax/src/tip/Config/vim/syntax/tcl.vim
|
||||
|
||||
" For version 5.x: Clear all syntax items
|
||||
" For version 6.x: Quit when a syntax file was already loaded
|
||||
@@ -20,41 +18,39 @@ elseif exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
" Basic Tcl commands: http://www.tcl.tk/man/tcl8.5/TclCmd/contents.htm
|
||||
syn keyword tclCommand after append apply array bgerror binary catch cd chan clock
|
||||
syn keyword tclCommand close concat dde dict encoding eof error eval exec exit
|
||||
syn keyword tclCommand expr fblocked fconfigure fcopy file fileevent filename flush
|
||||
syn keyword tclCommand format gets glob global history incr info interp join
|
||||
syn keyword tclCommand lappend lassign lindex linsert list llength load lrange lrepeat
|
||||
syn keyword tclCommand lreplace lreverse lsearch lset lsort memory namespace open package
|
||||
syn keyword tclCommand pid proc puts pwd read regexp registry regsub rename return
|
||||
syn keyword tclCommand scan seek set socket source split string subst tell time
|
||||
syn keyword tclCommand trace unknown unload unset update uplevel upvar variable vwait
|
||||
" Basic Tcl commands: http://www.tcl.tk/man/tcl8.6/TclCmd/contents.htm
|
||||
syn keyword tclCommand after append array bgerror binary cd chan clock close concat
|
||||
syn keyword tclCommand dde dict encoding eof error eval exec exit expr fblocked
|
||||
syn keyword tclCommand fconfigure fcopy file fileevent flush format gets glob
|
||||
syn keyword tclCommand global history http incr info interp join lappend lassign
|
||||
syn keyword tclCommand lindex linsert list llength lmap load lrange lrepeat
|
||||
syn keyword tclCommand lreplace lreverse lsearch lset lsort memory my namespace
|
||||
syn keyword tclCommand next nextto open package pid puts pwd read refchan regexp
|
||||
syn keyword tclCommand registry regsub rename scan seek self set socket source
|
||||
syn keyword tclCommand split string subst tell time trace unknown unload unset
|
||||
syn keyword tclCommand update uplevel upvar variable vwait
|
||||
|
||||
" The 'Tcl Standard Library' commands: http://www.tcl.tk/man/tcl8.5/TclCmd/library.htm
|
||||
syn keyword tclCommand auto_execok auto_import auto_load auto_mkindex auto_mkindex_old
|
||||
syn keyword tclCommand auto_qualify auto_reset parray tcl_endOfWord tcl_findLibrary
|
||||
syn keyword tclCommand tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter
|
||||
syn keyword tclCommand tcl_wordBreakBefore
|
||||
" The 'Tcl Standard Library' commands: http://www.tcl.tk/man/tcl8.6/TclCmd/library.htm
|
||||
syn keyword tclCommand auto_execok auto_import auto_load auto_mkindex auto_reset
|
||||
syn keyword tclCommand auto_qualify tcl_findLibrary parray tcl_endOfWord
|
||||
syn keyword tclCommand tcl_startOfNextWord tcl_startOfPreviousWord
|
||||
syn keyword tclCommand tcl_wordBreakAfter tcl_wordBreakBefore
|
||||
|
||||
" Commands that were added in Tcl 8.6
|
||||
|
||||
syn keyword tclCommand my oo::copy oo::define oo::objdefine self
|
||||
syn keyword tclCommand coroutine tailcall throw yield
|
||||
|
||||
" Global variables used by Tcl: http://www.tcl.tk/man/tcl8.5/TclCmd/tclvars.htm
|
||||
syn keyword tclVars env errorCode errorInfo tcl_library tcl_patchLevel tcl_pkgPath
|
||||
syn keyword tclVars tcl_platform tcl_precision tcl_rcFileName tcl_traceCompile
|
||||
syn keyword tclVars tcl_traceExec tcl_wordchars tcl_nonwordchars tcl_version argc argv
|
||||
syn keyword tclVars argv0 tcl_interactive geometry
|
||||
" Global variables used by Tcl: http://www.tcl.tk/man/tcl8.6/TclCmd/tclvars.htm
|
||||
syn keyword tclVars auto_path env errorCode errorInfo tcl_library tcl_patchLevel
|
||||
syn keyword tclVars tcl_pkgPath tcl_platform tcl_precision tcl_rcFileName
|
||||
syn keyword tclVars tcl_traceCompile tcl_traceExec tcl_wordchars
|
||||
syn keyword tclVars tcl_nonwordchars tcl_version argc argv argv0 tcl_interactive
|
||||
|
||||
" Strings which expr accepts as boolean values, aside from zero / non-zero.
|
||||
syn keyword tclBoolean true false on off yes no
|
||||
|
||||
syn keyword tclLabel case default
|
||||
syn keyword tclProcCommand apply coroutine proc return tailcall yield yieldto
|
||||
syn keyword tclConditional if then else elseif switch
|
||||
syn keyword tclConditional try finally
|
||||
syn keyword tclConditional catch try throw finally
|
||||
syn keyword tclLabel default
|
||||
syn keyword tclRepeat while for foreach break continue
|
||||
|
||||
syn keyword tcltkSwitch contained insert create polygon fill outline tag
|
||||
|
||||
" WIDGETS
|
||||
@@ -91,6 +87,11 @@ syn match tclVarRef "$\(\(::\)\?\([[:alnum:]_]*::\)*\)\a[[:alnum:]_]*"
|
||||
" ${...} may contain any character except '}'
|
||||
syn match tclVarRef "${[^}]*}"
|
||||
|
||||
" Used to facilitate hack to utilize string background for certain color
|
||||
" schemes, e.g. inkpot and lettuce.
|
||||
syn cluster tclVarRefC add=tclVarRef
|
||||
syn cluster tclSpecialC add=tclSpecial
|
||||
|
||||
" The syntactic unquote-splicing replacement for [expand].
|
||||
syn match tclExpand '\s{\*}'
|
||||
syn match tclExpand '^{\*}'
|
||||
@@ -203,9 +204,9 @@ syn match tclSpecial contained '\\[\[\]\{\}\"\$]'
|
||||
syn region tclEmbeddedStatement start='\[' end='\]' contained contains=tclCommand,tclNumber,tclLineContinue,tclString,tclVarRef,tclEmbeddedStatement
|
||||
" A string needs the skip argument as it may legitimately contain \".
|
||||
" Match at start of line
|
||||
syn region tclString start=+^"+ end=+"+ contains=tclSpecial skip=+\\\\\|\\"+
|
||||
syn region tclString start=+^"+ end=+"+ contains=@tclSpecialC skip=+\\\\\|\\"+
|
||||
"Match all other legal strings.
|
||||
syn region tclString start=+[^\\]"+ms=s+1 end=+"+ contains=tclSpecial,tclVarRef,tclEmbeddedStatement skip=+\\\\\|\\"+
|
||||
syn region tclString start=+[^\\]"+ms=s+1 end=+"+ contains=@tclSpecialC,@tclVarRefC,tclEmbeddedStatement skip=+\\\\\|\\"+
|
||||
|
||||
" Line continuation is backslash immediately followed by newline.
|
||||
syn match tclLineContinue '\\$'
|
||||
@@ -231,6 +232,9 @@ syn case match
|
||||
syn region tclComment start="^\s*\#" skip="\\$" end="$" contains=tclTodo
|
||||
syn region tclComment start=/;\s*\#/hs=s+1 skip="\\$" end="$" contains=tclTodo
|
||||
|
||||
"syn match tclComment /^\s*\#.*$/
|
||||
"syn match tclComment /;\s*\#.*$/hs=s+1
|
||||
|
||||
"syn sync ccomment tclComment
|
||||
|
||||
" Define the default highlighting.
|
||||
@@ -252,6 +256,7 @@ if version >= 508 || !exists("did_tcl_syntax_inits")
|
||||
HiLink tclNumber Number
|
||||
HiLink tclError Error
|
||||
HiLink tclCommand Statement
|
||||
HiLink tclProcCommand Type
|
||||
HiLink tclString String
|
||||
HiLink tclComment Comment
|
||||
HiLink tclSpecial Special
|
||||
@@ -279,4 +284,4 @@ endif
|
||||
|
||||
let b:current_syntax = "tcl"
|
||||
|
||||
" vim: ts=8 noet
|
||||
" vim: ts=8 noet nolist
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -58,11 +58,11 @@ NOTA: As teclas de cursor devem funcionar tamb
|
||||
Isso sai do editor SEM salvar qualquer mudan<61>a que tenha sido feita.
|
||||
Se quiser salvar as altera<72><61>es e sair, digite :wq <ENTER>
|
||||
|
||||
3. Quando vir o prompt do shell digite o comando que lhe trouxe a este
|
||||
tutorial, na maioria dos casos: vimtutor <ENTER>.
|
||||
3. Repita o procedimento que lhe trouxe a este tutorial. O procedimento pode
|
||||
ter sido a digita<74><61>o de: vimtutor <ENTER>.
|
||||
|
||||
4. Se voc<6F> memorizou estes passos e est<73> confiante, execute os passos de
|
||||
1 a 3 para sair e re-entrar no editor.
|
||||
1 a 3 para sair e reentrar no editor.
|
||||
|
||||
NOTA: :q! <ENTER> descarta qualquer mudan<61>a. Em uma pr<70>xima li<6C><69>o ser<65>
|
||||
ensinado como salvar as mudan<61>as feitas em um arquivo.
|
||||
@@ -560,7 +560,7 @@ Nota: Isso
|
||||
|
||||
1. Mova o cursor para a linha abaixo marcada com --->.
|
||||
|
||||
2. Digite :/s/aa/a <ENTER> . Note que este comando somente muda a
|
||||
2. Digite :s/aa/a <ENTER> . Note que este comando somente muda a
|
||||
primeira ocorr<72>ncia na linha.
|
||||
|
||||
3. Agora digite :s/aa/a/g significando substituir globalmente na linha.
|
||||
|
||||
@@ -58,11 +58,11 @@ NOTA: As teclas de cursor devem funcionar também. Mas usando hjkl, tão logo
|
||||
Isso sai do editor SEM salvar qualquer mudança que tenha sido feita.
|
||||
Se quiser salvar as alterações e sair, digite :wq <ENTER>
|
||||
|
||||
3. Quando vir o prompt do shell digite o comando que lhe trouxe a este
|
||||
tutorial, na maioria dos casos: vimtutor <ENTER>.
|
||||
3. Repita o procedimento que lhe trouxe a este tutorial. O procedimento pode
|
||||
ter sido a digitação de: vimtutor <ENTER>.
|
||||
|
||||
4. Se você memorizou estes passos e está confiante, execute os passos de
|
||||
1 a 3 para sair e re-entrar no editor.
|
||||
1 a 3 para sair e reentrar no editor.
|
||||
|
||||
NOTA: :q! <ENTER> descarta qualquer mudança. Em uma próxima lição será
|
||||
ensinado como salvar as mudanças feitas em um arquivo.
|
||||
@@ -560,7 +560,7 @@ Nota: Isso é muito útil para corrigir um programa com parênteses não-casados
|
||||
|
||||
1. Mova o cursor para a linha abaixo marcada com --->.
|
||||
|
||||
2. Digite :/s/aa/a <ENTER> . Note que este comando somente muda a
|
||||
2. Digite :s/aa/a <ENTER> . Note que este comando somente muda a
|
||||
primeira ocorrência na linha.
|
||||
|
||||
3. Agora digite :s/aa/a/g significando substituir globalmente na linha.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -419,7 +419,7 @@ CPUARG = -$(CPUNR)
|
||||
ALIGNARG = -a$(ALIGN)
|
||||
#
|
||||
!if ("$(DEBUG)"=="yes")
|
||||
DEFINES=$(DEFINES) -DDEBUG
|
||||
DEFINES=$(DEFINES) -DDEBUG -D_DEBUG
|
||||
!endif
|
||||
#
|
||||
!if ("$(OLE)"=="yes")
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
# Makefile for Vim on OpenVMS
|
||||
#
|
||||
# Maintainer: Zoltan Arpadffy <arpadffy@polarhome.com>
|
||||
# Last change: 2008 Aug 16
|
||||
# Last change: 2014 Feb 24
|
||||
#
|
||||
# This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
|
||||
# with MMS and MMK
|
||||
@@ -21,9 +21,6 @@
|
||||
######################################################################
|
||||
# Configuration section.
|
||||
######################################################################
|
||||
# VMS version
|
||||
# Uncomment if you use VMS version 6.2 or older
|
||||
# OLD_VMS = YES
|
||||
|
||||
# Compiler selection.
|
||||
# Comment out if you use the VAXC compiler
|
||||
@@ -60,7 +57,7 @@ CCVER = YES
|
||||
|
||||
# Uncomment if want a debug version. Resulting executable is DVIM.EXE
|
||||
# Development purpose only! Normally, it should not be defined. !!!
|
||||
# DEBUG = YES
|
||||
# DEBUG = YES
|
||||
|
||||
# Languages support for Perl, Python, TCL etc.
|
||||
# If you don't need it really, leave them behind the comment.
|
||||
@@ -87,6 +84,9 @@ CCVER = YES
|
||||
# Allow FEATURE_MZSCHEME
|
||||
# VIM_MZSCHEME = YES
|
||||
|
||||
# Use ICONV
|
||||
# VIM_ICONV = YES
|
||||
|
||||
######################################################################
|
||||
# Directory, library and include files configuration section.
|
||||
# Normally you need not to change anything below. !
|
||||
@@ -99,25 +99,25 @@ CCVER = YES
|
||||
|
||||
.IFDEF MMSVAX
|
||||
.IFDEF DECC # VAX with DECC
|
||||
CC_DEF = cc # /decc # some system requires this switch but when it is not required /ver might fail
|
||||
CC_DEF = cc # /decc # some versions require /decc switch but when it is not required /ver might fail
|
||||
PREFIX = /prefix=all
|
||||
OPTIMIZE= /noopt # do not optimize on VAX. The compiler has hard time with crypto functions
|
||||
.ELSE # VAX with VAXC
|
||||
CC_DEF = cc
|
||||
PREFIX =
|
||||
OPTIMIZE= /noopt
|
||||
CCVER =
|
||||
.ENDIF
|
||||
.ELSE # AXP wixh DECC
|
||||
.ELSE # AXP and IA64 with DECC
|
||||
CC_DEF = cc
|
||||
PREFIX = /prefix=all
|
||||
OPTIMIZE= /opt
|
||||
.ENDIF
|
||||
|
||||
|
||||
LD_DEF = link
|
||||
C_INC = [.proto]
|
||||
|
||||
.IFDEF OLD_VMS
|
||||
VMS_DEF = ,"OLD_VMS"
|
||||
.ENDIF
|
||||
|
||||
.IFDEF DEBUG
|
||||
DEBUG_DEF = ,"DEBUG"
|
||||
TARGET = dvim.exe
|
||||
@@ -125,7 +125,7 @@ CFLAGS = /debug/noopt$(PREFIX)
|
||||
LDFLAGS = /debug
|
||||
.ELSE
|
||||
TARGET = vim.exe
|
||||
CFLAGS = /opt$(PREFIX)
|
||||
CFLAGS = $(OPTIMIZE)$(PREFIX)
|
||||
LDFLAGS =
|
||||
.ENDIF
|
||||
|
||||
@@ -274,6 +274,11 @@ MZSCH_SRC = if_mzsch.c
|
||||
MZSCH_OBJ = if_mzsch.obj
|
||||
.ENDIF
|
||||
|
||||
.IFDEF VIM_ICONV
|
||||
# ICONV related setup
|
||||
ICONV_DEF = ,"USE_ICONV"
|
||||
.ENDIF
|
||||
|
||||
######################################################################
|
||||
# End of configuration section.
|
||||
# Please, do not change anything below without programming experience.
|
||||
@@ -287,8 +292,8 @@ VIMHOST = "''F$TRNLNM("SYS$NODE")'''F$TRNLNM("UCX$INET_HOST")'.''F$TRNLNM("UCX$I
|
||||
|
||||
.SUFFIXES : .obj .c
|
||||
|
||||
ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(VMS_DEF)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
|
||||
$(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)) -
|
||||
ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
|
||||
$(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)$(ICONV_DEF)) -
|
||||
$(CFLAGS)$(GUI_FLAG) -
|
||||
/include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC)$(PERL_INC)$(PYTHON_INC)$(TCL_INC))
|
||||
|
||||
@@ -296,8 +301,8 @@ ALL_CFLAGS = /def=($(MODEL_DEF)$(DEFS)$(VMS_DEF)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_
|
||||
# It is specially formated for correct display of unix like includes
|
||||
# as $(GUI_INC) - replaced with $(GUI_INC_VER)
|
||||
# Otherwise should not be any other difference.
|
||||
ALL_CFLAGS_VER = /def=($(MODEL_DEF)$(DEFS)$(VMS_DEF)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
|
||||
$(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)) -
|
||||
ALL_CFLAGS_VER = /def=($(MODEL_DEF)$(DEFS)$(DEBUG_DEF)$(PERL_DEF)$(PYTHON_DEF) -
|
||||
$(TCL_DEF)$(SNIFF_DEF)$(RUBY_DEF)$(XIM_DEF)$(HANGULIN_DEF)$(TAG_DEF)$(MZSCH_DEF)$(ICONV_DEF)) -
|
||||
$(CFLAGS)$(GUI_FLAG) -
|
||||
/include=($(C_INC)$(GUI_INC_DIR)$(GUI_INC_VER)$(PERL_INC)$(PYTHON_INC)$(TCL_INC))
|
||||
|
||||
|
||||
@@ -2381,6 +2381,7 @@ shadow: runtime pixmaps
|
||||
../../testdir/*.in \
|
||||
../../testdir/*.vim \
|
||||
../../testdir/python* \
|
||||
../../testdir/sautest \
|
||||
../../testdir/test83-tags? \
|
||||
../../testdir/*.ok .
|
||||
|
||||
|
||||
19
src/auto/configure
vendored
19
src/auto/configure
vendored
@@ -5199,9 +5199,19 @@ $as_echo "not found" >&6; }
|
||||
$as_echo_n "checking for mzscheme_base.c... " >&6; }
|
||||
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
|
||||
@@ -12323,6 +12333,15 @@ _ACEOF
|
||||
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define VIM_SIZEOF_INT $ac_cv_sizeof_int
|
||||
_ACEOF
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define VIM_SIZEOF_LONG $ac_cv_sizeof_long
|
||||
_ACEOF
|
||||
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
|
||||
$as_echo_n "checking uint32_t is 32 bits... " >&6; }
|
||||
if test "$cross_compiling" = yes; then :
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
83
src/buffer.c
83
src/buffer.c
@@ -994,6 +994,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.
|
||||
*
|
||||
@@ -1114,7 +1158,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. */
|
||||
@@ -1155,30 +1198,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
|
||||
/*
|
||||
@@ -1212,7 +1232,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,
|
||||
@@ -1311,6 +1332,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
|
||||
*/
|
||||
@@ -1950,6 +1978,9 @@ free_buf_options(buf, free_p_ff)
|
||||
#endif
|
||||
buf->b_p_ar = -1;
|
||||
buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
|
||||
#ifdef FEAT_LISP
|
||||
clear_string_option(&buf->b_p_lw);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -37,10 +37,10 @@
|
||||
#undef UNIX
|
||||
|
||||
/* Defined to the size of an int */
|
||||
#undef SIZEOF_INT
|
||||
#undef VIM_SIZEOF_INT
|
||||
|
||||
/* Defined to the size of a long */
|
||||
#undef SIZEOF_LONG
|
||||
#undef VIM_SIZEOF_LONG
|
||||
|
||||
/* Defined to the size of off_t */
|
||||
#undef SIZEOF_OFF_T
|
||||
|
||||
@@ -802,9 +802,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
|
||||
@@ -3571,6 +3581,10 @@ AC_CHECK_SIZEOF([long])
|
||||
AC_CHECK_SIZEOF([time_t])
|
||||
AC_CHECK_SIZEOF([off_t])
|
||||
|
||||
dnl Use different names to avoid clashing with other header files.
|
||||
AC_DEFINE_UNQUOTED(VIM_SIZEOF_INT, [$ac_cv_sizeof_int])
|
||||
AC_DEFINE_UNQUOTED(VIM_SIZEOF_LONG, [$ac_cv_sizeof_long])
|
||||
|
||||
dnl Make sure that uint32_t is really 32 bits unsigned.
|
||||
AC_MSG_CHECKING([uint32_t is 32 bits])
|
||||
AC_TRY_RUN([
|
||||
|
||||
@@ -1192,23 +1192,29 @@ install_vimrc(int idx)
|
||||
fprintf(fd, " if arg3 =~ ' ' | let arg3 = '\"' . arg3 . '\"' | endif\n");
|
||||
|
||||
/* If the path has a space: When using cmd.exe (Win NT/2000/XP) put
|
||||
* quotes around the whole command and around the diff command.
|
||||
* quotes around the diff command and rely on the default value of
|
||||
* shellxquote to solve the quoting problem for the whole command.
|
||||
*
|
||||
* Otherwise put a double quote just before the space and at the
|
||||
* end of the command. Putting quotes around the whole thing
|
||||
* doesn't work on Win 95/98/ME. This is mostly guessed! */
|
||||
fprintf(fd, " let eq = ''\n");
|
||||
fprintf(fd, " if $VIMRUNTIME =~ ' '\n");
|
||||
fprintf(fd, " if &sh =~ '\\<cmd'\n");
|
||||
fprintf(fd, " let cmd = '\"\"' . $VIMRUNTIME . '\\diff\"'\n");
|
||||
fprintf(fd, " let eq = '\"'\n");
|
||||
fprintf(fd, " if empty(&shellxquote)\n");
|
||||
fprintf(fd, " let l:shxq_sav = ''\n");
|
||||
fprintf(fd, " set shellxquote&\n");
|
||||
fprintf(fd, " endif\n");
|
||||
fprintf(fd, " let cmd = '\"' . $VIMRUNTIME . '\\diff\"'\n");
|
||||
fprintf(fd, " else\n");
|
||||
fprintf(fd, " let cmd = substitute($VIMRUNTIME, ' ', '\" ', '') . '\\diff\"'\n");
|
||||
fprintf(fd, " endif\n");
|
||||
fprintf(fd, " else\n");
|
||||
fprintf(fd, " let cmd = $VIMRUNTIME . '\\diff'\n");
|
||||
fprintf(fd, " endif\n");
|
||||
fprintf(fd, " silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq\n");
|
||||
|
||||
fprintf(fd, " silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3\n");
|
||||
fprintf(fd, " if exists('l:shxq_sav')\n");
|
||||
fprintf(fd, " let &shellxquote=l:shxq_sav\n");
|
||||
fprintf(fd, " endif\n");
|
||||
fprintf(fd, "endfunction\n");
|
||||
fprintf(fd, "\n");
|
||||
}
|
||||
|
||||
162
src/edit.c
162
src/edit.c
@@ -264,6 +264,7 @@ static char_u *do_insert_char_pre __ARGS((int c));
|
||||
|
||||
static colnr_T Insstart_textlen; /* length of line when insert started */
|
||||
static colnr_T Insstart_blank_vcol; /* vcol for first inserted blank */
|
||||
static int update_Insstart_orig = TRUE; /* set Insstart_orig to Insstart */
|
||||
|
||||
static char_u *last_insert = NULL; /* the text of the previous insert,
|
||||
K_SPECIAL and CSI are escaped */
|
||||
@@ -340,6 +341,9 @@ edit(cmdchar, startln, count)
|
||||
* error message */
|
||||
check_for_delay(TRUE);
|
||||
|
||||
/* set Insstart_orig to Insstart */
|
||||
update_Insstart_orig = TRUE;
|
||||
|
||||
#ifdef HAVE_SANDBOX
|
||||
/* Don't allow inserting in the sandbox. */
|
||||
if (sandbox != 0)
|
||||
@@ -631,6 +635,9 @@ edit(cmdchar, startln, count)
|
||||
if (arrow_used) /* don't repeat insert when arrow key used */
|
||||
count = 0;
|
||||
|
||||
if (update_Insstart_orig)
|
||||
Insstart_orig = Insstart;
|
||||
|
||||
if (stop_insert_mode)
|
||||
{
|
||||
/* ":stopinsert" used or 'insertmode' reset */
|
||||
@@ -1556,87 +1563,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 */
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -4178,6 +4187,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)
|
||||
{
|
||||
@@ -4196,6 +4206,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
|
||||
@@ -4215,6 +4226,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)
|
||||
@@ -4379,7 +4394,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 */
|
||||
@@ -4406,12 +4421,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)
|
||||
@@ -6914,6 +6930,7 @@ stop_insert(end_insert_pos, esc, nomove)
|
||||
if (end_insert_pos != NULL)
|
||||
{
|
||||
curbuf->b_op_start = Insstart;
|
||||
curbuf->b_op_start_orig = Insstart_orig;
|
||||
curbuf->b_op_end = *end_insert_pos;
|
||||
}
|
||||
}
|
||||
@@ -8248,6 +8265,7 @@ ins_ctrl_g()
|
||||
|
||||
/* Need to reset Insstart, esp. because a BS that joins
|
||||
* a line to the previous one must save for undo. */
|
||||
update_Insstart_orig = FALSE;
|
||||
Insstart = curwin->w_cursor;
|
||||
break;
|
||||
|
||||
|
||||
180
src/eval.c
180
src/eval.c
@@ -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;
|
||||
}
|
||||
@@ -6418,6 +6425,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);
|
||||
@@ -6439,7 +6456,6 @@ list_insert_tv(l, tv, item)
|
||||
item->li_prev = ni;
|
||||
++l->lv_len;
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -7998,7 +8014,7 @@ static struct fst
|
||||
{"log10", 1, 1, f_log10},
|
||||
#endif
|
||||
#ifdef FEAT_LUA
|
||||
{"luaeval", 1, 2, f_luaeval},
|
||||
{"luaeval", 1, 2, f_luaeval},
|
||||
#endif
|
||||
{"map", 2, 2, f_map},
|
||||
{"maparg", 1, 4, f_maparg},
|
||||
@@ -8275,16 +8291,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)
|
||||
{
|
||||
@@ -9186,7 +9203,7 @@ f_byte2line(argvars, rettv)
|
||||
byteidx(argvars, rettv, comp)
|
||||
typval_T *argvars;
|
||||
typval_T *rettv;
|
||||
int comp;
|
||||
int comp UNUSED;
|
||||
{
|
||||
#ifdef FEAT_MBYTE
|
||||
char_u *t;
|
||||
@@ -10039,8 +10056,6 @@ f_exists(argvars, rettv)
|
||||
int n = FALSE;
|
||||
int len = 0;
|
||||
|
||||
no_autoload = TRUE;
|
||||
|
||||
p = get_tv_string(&argvars[0]);
|
||||
if (*p == '$') /* environment variable */
|
||||
{
|
||||
@@ -10091,7 +10106,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) */
|
||||
@@ -10107,8 +10122,6 @@ f_exists(argvars, rettv)
|
||||
}
|
||||
|
||||
rettv->vval.v_number = n;
|
||||
|
||||
no_autoload = FALSE;
|
||||
}
|
||||
|
||||
#ifdef FEAT_FLOAT
|
||||
@@ -11119,6 +11132,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;
|
||||
|
||||
@@ -11131,8 +11146,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
|
||||
@@ -13344,8 +13357,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)
|
||||
@@ -13358,7 +13371,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:
|
||||
@@ -13892,6 +13905,7 @@ find_some_match(argvars, rettv, type)
|
||||
int type;
|
||||
{
|
||||
char_u *str = NULL;
|
||||
long len = 0;
|
||||
char_u *expr = NULL;
|
||||
char_u *pat;
|
||||
regmatch_T regmatch;
|
||||
@@ -13931,7 +13945,10 @@ find_some_match(argvars, rettv, type)
|
||||
li = l->lv_first;
|
||||
}
|
||||
else
|
||||
{
|
||||
expr = str = get_tv_string(&argvars[0]);
|
||||
len = (long)STRLEN(str);
|
||||
}
|
||||
|
||||
pat = get_tv_string_buf_chk(&argvars[1], patbuf);
|
||||
if (pat == NULL)
|
||||
@@ -13955,7 +13972,7 @@ find_some_match(argvars, rettv, type)
|
||||
{
|
||||
if (start < 0)
|
||||
start = 0;
|
||||
if (start > (long)STRLEN(str))
|
||||
if (start > len)
|
||||
goto theend;
|
||||
/* When "count" argument is there ignore matches before "start",
|
||||
* otherwise skip part of the string. Differs when pattern is "^"
|
||||
@@ -13963,7 +13980,10 @@ find_some_match(argvars, rettv, type)
|
||||
if (argvars[3].v_type != VAR_UNKNOWN)
|
||||
startcol = start;
|
||||
else
|
||||
{
|
||||
str += start;
|
||||
len -= start;
|
||||
}
|
||||
}
|
||||
|
||||
if (argvars[3].v_type != VAR_UNKNOWN)
|
||||
@@ -14013,6 +14033,12 @@ find_some_match(argvars, rettv, type)
|
||||
#else
|
||||
startcol = (colnr_T)(regmatch.startp[0] + 1 - str);
|
||||
#endif
|
||||
if (startcol > (colnr_T)len
|
||||
|| str + startcol <= regmatch.startp[0])
|
||||
{
|
||||
match = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14141,8 +14167,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
|
||||
@@ -16924,7 +16950,7 @@ f_shellescape(argvars, rettv)
|
||||
typval_T *rettv;
|
||||
{
|
||||
rettv->vval.v_string = vim_strsave_shellescape(
|
||||
get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]));
|
||||
get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]), TRUE);
|
||||
rettv->v_type = VAR_STRING;
|
||||
}
|
||||
|
||||
@@ -19774,11 +19800,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;
|
||||
@@ -19805,7 +19832,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;
|
||||
}
|
||||
@@ -20207,9 +20234,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;
|
||||
@@ -20219,7 +20247,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);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -20227,11 +20255,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;
|
||||
|
||||
@@ -20263,7 +20291,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. */
|
||||
@@ -20343,7 +20371,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);
|
||||
@@ -21429,6 +21457,7 @@ ex_function(eap)
|
||||
if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
|
||||
{
|
||||
EMSG2(_("E853: Duplicate argument name: %s"), arg);
|
||||
vim_free(arg);
|
||||
goto erret;
|
||||
}
|
||||
|
||||
@@ -21672,7 +21701,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"),
|
||||
@@ -21830,8 +21859,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 *
|
||||
@@ -21869,7 +21899,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)
|
||||
{
|
||||
@@ -21931,14 +21962,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;
|
||||
}
|
||||
@@ -22146,7 +22177,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
|
||||
@@ -22393,10 +22425,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)
|
||||
@@ -24328,6 +24356,17 @@ repeat:
|
||||
}
|
||||
}
|
||||
|
||||
if (src[*usedlen] == ':' && src[*usedlen + 1] == 'S')
|
||||
{
|
||||
p = vim_strsave_shellescape(*fnamep, FALSE, FALSE);
|
||||
if (p == NULL)
|
||||
return -1;
|
||||
vim_free(*bufp);
|
||||
*bufp = *fnamep = p;
|
||||
*fnamelen = (int)STRLEN(p);
|
||||
*usedlen += 2;
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
@@ -24351,7 +24390,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;
|
||||
@@ -24368,6 +24407,19 @@ do_string_sub(str, pat, sub, flags)
|
||||
tail = str;
|
||||
while (vim_regexec_nl(®match, 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:
|
||||
@@ -24390,17 +24442,9 @@ do_string_sub(str, pat, sub, flags)
|
||||
(void)vim_regsub(®match, 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;
|
||||
}
|
||||
|
||||
@@ -1012,7 +1012,18 @@ do_bang(addr_count, eap, forceit, do_in, do_out)
|
||||
|
||||
if (bangredo) /* put cmd in redo buffer for ! command */
|
||||
{
|
||||
AppendToRedobuffLit(prevcmd, -1);
|
||||
/* If % or # appears in the command, it must have been escaped.
|
||||
* Reescape them, so that redoing them does not substitute them by the
|
||||
* buffername. */
|
||||
char_u *cmd = vim_strsave_escaped(prevcmd, (char_u *)"%#");
|
||||
|
||||
if (cmd != NULL)
|
||||
{
|
||||
AppendToRedobuffLit(cmd, -1);
|
||||
vim_free(cmd);
|
||||
}
|
||||
else
|
||||
AppendToRedobuffLit(prevcmd, -1);
|
||||
AppendToRedobuff((char_u *)"\n");
|
||||
bangredo = FALSE;
|
||||
}
|
||||
@@ -4099,12 +4110,12 @@ ex_z(eap)
|
||||
* 'scroll' */
|
||||
if (eap->forceit)
|
||||
bigness = curwin->w_height;
|
||||
else if (firstwin == lastwin)
|
||||
bigness = curwin->w_p_scr * 2;
|
||||
#ifdef FEAT_WINDOWS
|
||||
else
|
||||
else if (firstwin != lastwin)
|
||||
bigness = curwin->w_height - 3;
|
||||
#endif
|
||||
else
|
||||
bigness = curwin->w_p_scr * 2;
|
||||
if (bigness < 1)
|
||||
bigness = 1;
|
||||
|
||||
@@ -5936,14 +5947,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 +5997,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] == '+')))
|
||||
|
||||
@@ -3261,7 +3261,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)
|
||||
@@ -8050,6 +8054,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;
|
||||
@@ -8081,13 +8087,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);
|
||||
@@ -8101,7 +8107,8 @@ ex_syncbind(eap)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
curwin = wp;
|
||||
curwin = save_curwin;
|
||||
curbuf = save_curbuf;
|
||||
if (curwin->w_p_scb)
|
||||
{
|
||||
did_syncbind = TRUE;
|
||||
@@ -8221,6 +8228,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
|
||||
@@ -8237,7 +8245,6 @@ post_chdir(local)
|
||||
* name. */
|
||||
vim_free(globaldir);
|
||||
globaldir = NULL;
|
||||
curwin->w_localdir = NULL;
|
||||
}
|
||||
|
||||
shorten_fnames(TRUE);
|
||||
@@ -8364,7 +8371,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;
|
||||
@@ -10374,7 +10381,7 @@ makeopens(fd, dirnow)
|
||||
}
|
||||
|
||||
/* the global argument list */
|
||||
if (ses_arglist(fd, "args", &global_alist.al_ga,
|
||||
if (ses_arglist(fd, "argglobal", &global_alist.al_ga,
|
||||
!(ssop_flags & SSOP_CURDIR), &ssop_flags) == FAIL)
|
||||
return FAIL;
|
||||
|
||||
@@ -10948,9 +10955,9 @@ ses_arglist(fd, cmd, gap, fullname, flagp)
|
||||
char_u *buf = NULL;
|
||||
char_u *s;
|
||||
|
||||
if (gap->ga_len == 0)
|
||||
return put_line(fd, "silent! argdel *");
|
||||
if (fputs(cmd, fd) < 0)
|
||||
if (fputs(cmd, fd) < 0 || put_eol(fd) == FAIL)
|
||||
return FAIL;
|
||||
if (put_line(fd, "silent! argdel *") == FAIL)
|
||||
return FAIL;
|
||||
for (i = 0; i < gap->ga_len; ++i)
|
||||
{
|
||||
@@ -10967,7 +10974,9 @@ ses_arglist(fd, cmd, gap, fullname, flagp)
|
||||
s = buf;
|
||||
}
|
||||
}
|
||||
if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
|
||||
if (fputs("argadd ", fd) < 0
|
||||
|| ses_put_fname(fd, s, flagp) == FAIL
|
||||
|| put_eol(fd) == FAIL)
|
||||
{
|
||||
vim_free(buf);
|
||||
return FAIL;
|
||||
@@ -10975,7 +10984,7 @@ ses_arglist(fd, cmd, gap, fullname, flagp)
|
||||
vim_free(buf);
|
||||
}
|
||||
}
|
||||
return put_eol(fd);
|
||||
return OK;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
132
src/ex_eval.c
132
src/ex_eval.c
@@ -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();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -211,18 +211,12 @@
|
||||
#endif
|
||||
|
||||
/*
|
||||
* +visual Visual mode.
|
||||
* +visual Visual mode - now always included.
|
||||
* +visualextra Extra features for Visual mode (mostly block operators).
|
||||
*/
|
||||
#ifdef FEAT_SMALL
|
||||
# define FEAT_VISUAL
|
||||
# ifdef FEAT_NORMAL
|
||||
# define FEAT_VISUALEXTRA
|
||||
# endif
|
||||
#else
|
||||
# ifdef FEAT_CLIPBOARD
|
||||
# undef FEAT_CLIPBOARD /* can't use clipboard without Visual mode */
|
||||
# endif
|
||||
#define FEAT_VISUAL
|
||||
#ifdef FEAT_NORMAL
|
||||
# define FEAT_VISUALEXTRA
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -328,7 +322,7 @@
|
||||
*
|
||||
* Disabled for EBCDIC as it requires multibyte.
|
||||
*/
|
||||
#if defined(FEAT_BIG) && !defined(WIN16) && SIZEOF_INT >= 4 && !defined(EBCDIC)
|
||||
#if defined(FEAT_BIG) && !defined(WIN16) && VIM_SIZEOF_INT >= 4 && !defined(EBCDIC)
|
||||
# define FEAT_ARABIC
|
||||
#endif
|
||||
#ifdef FEAT_ARABIC
|
||||
@@ -640,7 +634,7 @@
|
||||
*/
|
||||
#if (defined(FEAT_NORMAL) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
|
||||
&& !defined(FEAT_MBYTE) && !defined(WIN16) \
|
||||
&& SIZEOF_INT >= 4 && !defined(EBCDIC)
|
||||
&& VIM_SIZEOF_INT >= 4 && !defined(EBCDIC)
|
||||
# define FEAT_MBYTE
|
||||
#endif
|
||||
|
||||
@@ -661,7 +655,7 @@
|
||||
# define FEAT_MBYTE
|
||||
#endif
|
||||
|
||||
#if defined(FEAT_MBYTE) && SIZEOF_INT < 4 && !defined(PROTO)
|
||||
#if defined(FEAT_MBYTE) && VIM_SIZEOF_INT < 4 && !defined(PROTO)
|
||||
Error: Can only handle multi-byte feature with 32 bit int or larger
|
||||
#endif
|
||||
|
||||
|
||||
25
src/fileio.c
25
src/fileio.c
@@ -1185,7 +1185,7 @@ retry:
|
||||
* The amount is limited by the fact that read() only can read
|
||||
* upto max_unsigned characters (and other things).
|
||||
*/
|
||||
#if SIZEOF_INT <= 2
|
||||
#if VIM_SIZEOF_INT <= 2
|
||||
if (linerest >= 0x7ff0)
|
||||
{
|
||||
++split;
|
||||
@@ -1197,7 +1197,7 @@ retry:
|
||||
{
|
||||
if (!skip_read)
|
||||
{
|
||||
#if SIZEOF_INT > 2
|
||||
#if VIM_SIZEOF_INT > 2
|
||||
# if defined(SSIZE_MAX) && (SSIZE_MAX < 0x10000L)
|
||||
size = SSIZE_MAX; /* use max I/O size, 52K */
|
||||
# else
|
||||
@@ -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;
|
||||
@@ -5294,7 +5294,7 @@ msg_add_lines(insert_space, lnum, nchars)
|
||||
if (shortmess(SHM_LINES))
|
||||
sprintf((char *)p,
|
||||
#ifdef LONG_LONG_OFF_T
|
||||
"%ldL, %lldC", lnum, nchars
|
||||
"%ldL, %lldC", lnum, (long long)nchars
|
||||
#else
|
||||
/* Explicit typecast avoids warning on Mac OS X 10.6 */
|
||||
"%ldL, %ldC", lnum, (long)nchars
|
||||
@@ -5312,7 +5312,7 @@ msg_add_lines(insert_space, lnum, nchars)
|
||||
else
|
||||
sprintf((char *)p,
|
||||
#ifdef LONG_LONG_OFF_T
|
||||
_("%lld characters"), nchars
|
||||
_("%lld characters"), (long long)nchars
|
||||
#else
|
||||
/* Explicit typecast avoids warning on Mac OS X 10.6 */
|
||||
_("%ld characters"), (long)nchars
|
||||
@@ -7559,7 +7559,7 @@ vim_tempname(extra_char)
|
||||
p = (char_u *)tempnam("tmp:", (char *)itmp);
|
||||
if (p != NULL)
|
||||
{
|
||||
/* VMS will use '.LOG' if we don't explicitly specify an extension,
|
||||
/* VMS will use '.LIS' if we don't explicitly specify an extension,
|
||||
* and VIM will then be unable to find the file later */
|
||||
STRCPY(itmp, p);
|
||||
STRCAT(itmp, ".txt");
|
||||
@@ -9330,7 +9330,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;
|
||||
@@ -9383,14 +9385,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
|
||||
|
||||
177
src/getchar.c
177
src/getchar.c
@@ -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)
|
||||
@@ -2165,10 +2206,16 @@ vgetorpeek(advance)
|
||||
#ifdef FEAT_MBYTE
|
||||
/* Don't allow mapping the first byte(s) of a
|
||||
* multi-byte char. Happens when mapping
|
||||
* <M-a> and then changing 'encoding'. */
|
||||
if (has_mbyte && MB_BYTE2LEN(c1)
|
||||
> (*mb_ptr2len)(mp->m_keys))
|
||||
mlen = 0;
|
||||
* <M-a> and then changing 'encoding'. Beware
|
||||
* that 0x80 is escaped. */
|
||||
{
|
||||
char_u *p1 = mp->m_keys;
|
||||
char_u *p2 = mb_unescape(&p1);
|
||||
|
||||
if (has_mbyte && p2 != NULL
|
||||
&& MB_BYTE2LEN(c1) > MB_PTR2LEN(p2))
|
||||
mlen = 0;
|
||||
}
|
||||
#endif
|
||||
/*
|
||||
* Check an entry whether it matches.
|
||||
@@ -2261,6 +2308,10 @@ vgetorpeek(advance)
|
||||
msg_row = Rows - 1;
|
||||
msg_clr_eos(); /* clear ruler */
|
||||
}
|
||||
#ifdef FEAT_WINDOWS
|
||||
status_redraw_all();
|
||||
redraw_statuslines();
|
||||
#endif
|
||||
showmode();
|
||||
setcursor();
|
||||
continue;
|
||||
|
||||
@@ -752,6 +752,12 @@ EXTERN pos_T saved_cursor /* w_cursor before formatting text. */
|
||||
*/
|
||||
EXTERN pos_T Insstart; /* This is where the latest
|
||||
* insert/append mode started. */
|
||||
|
||||
/* This is where the latest insert/append mode started. In contrast to
|
||||
* Insstart, this won't be reset by certain keys and is needed for
|
||||
* op_insert(), to detect correctly where inserting by the user started. */
|
||||
EXTERN pos_T Insstart_orig;
|
||||
|
||||
#ifdef FEAT_VREPLACE
|
||||
/*
|
||||
* Stuff for VREPLACE mode.
|
||||
@@ -979,11 +985,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}
|
||||
|
||||
@@ -3069,15 +3069,26 @@ logfont2name(LOGFONT lf)
|
||||
char *p;
|
||||
char *res;
|
||||
char *charset_name;
|
||||
char *font_name = lf.lfFaceName;
|
||||
|
||||
charset_name = charset_id2name((int)lf.lfCharSet);
|
||||
res = alloc((unsigned)(strlen(lf.lfFaceName) + 20
|
||||
#ifdef FEAT_MBYTE
|
||||
/* Convert a font name from the current codepage to 'encoding'.
|
||||
* TODO: Use Wide APIs (including LOGFONTW) instead of ANSI APIs. */
|
||||
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
|
||||
{
|
||||
int len;
|
||||
acp_to_enc(lf.lfFaceName, (int)strlen(lf.lfFaceName),
|
||||
(char_u **)&font_name, &len);
|
||||
}
|
||||
#endif
|
||||
res = alloc((unsigned)(strlen(font_name) + 20
|
||||
+ (charset_name == NULL ? 0 : strlen(charset_name) + 2)));
|
||||
if (res != NULL)
|
||||
{
|
||||
p = res;
|
||||
/* make a normal font string out of the lf thing:*/
|
||||
sprintf((char *)p, "%s:h%d", lf.lfFaceName, pixels_to_points(
|
||||
sprintf((char *)p, "%s:h%d", font_name, pixels_to_points(
|
||||
lf.lfHeight < 0 ? -lf.lfHeight : lf.lfHeight, TRUE));
|
||||
while (*p)
|
||||
{
|
||||
@@ -3102,6 +3113,10 @@ logfont2name(LOGFONT lf)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef FEAT_MBYTE
|
||||
if (font_name != lf.lfFaceName)
|
||||
vim_free(font_name);
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
@@ -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_
|
||||
@@ -118,6 +138,8 @@ typedef int HANDLE;
|
||||
#endif
|
||||
typedef int XSINIT_t;
|
||||
typedef int XSUBADDR_t;
|
||||
#endif
|
||||
#ifndef USE_ITHREADS
|
||||
typedef int perl_key;
|
||||
#endif
|
||||
|
||||
@@ -145,11 +167,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
|
||||
@@ -246,7 +266,9 @@ typedef int perl_key;
|
||||
# define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
|
||||
# define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
|
||||
# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
|
||||
# define PL_thr_key *dll_PL_thr_key
|
||||
# ifdef USE_ITHREADS
|
||||
# define PL_thr_key *dll_PL_thr_key
|
||||
# endif
|
||||
# endif
|
||||
|
||||
/*
|
||||
@@ -262,10 +284,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 +362,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*);
|
||||
@@ -360,7 +390,9 @@ static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*);
|
||||
#endif
|
||||
|
||||
#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
|
||||
# ifdef USE_ITHREADS
|
||||
static perl_key* dll_PL_thr_key;
|
||||
# endif
|
||||
#else
|
||||
static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
|
||||
static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
|
||||
@@ -384,12 +416,12 @@ 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
|
||||
#ifdef PERL_IMPLICIT_CONTEXT
|
||||
{"Perl_croak_nocontext", (PERL_PROC*)&Perl_croak_nocontext},
|
||||
#endif
|
||||
{"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray},
|
||||
{"Perl_free_tmps", (PERL_PROC*)&Perl_free_tmps},
|
||||
{"Perl_gv_stashpv", (PERL_PROC*)&Perl_gv_stashpv},
|
||||
@@ -481,7 +513,9 @@ static struct {
|
||||
# endif
|
||||
#endif
|
||||
#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
|
||||
# ifdef USE_ITHREADS
|
||||
{"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key},
|
||||
# endif
|
||||
#else
|
||||
{"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
|
||||
{"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
|
||||
@@ -492,6 +526,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.
|
||||
*
|
||||
|
||||
712
src/if_py_both.h
712
src/if_py_both.h
@@ -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)" \
|
||||
@@ -230,7 +236,7 @@ NumberToLong(PyObject *obj, long *result, int flags)
|
||||
if (*result <= 0)
|
||||
{
|
||||
PyErr_SET_STRING(PyExc_ValueError,
|
||||
N_("number must be greater then zero"));
|
||||
N_("number must be greater than zero"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -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 than %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 than %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;
|
||||
|
||||
@@ -196,6 +196,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
|
||||
@@ -241,6 +242,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
|
||||
@@ -341,6 +343,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 *);
|
||||
@@ -382,6 +387,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 *, ...);
|
||||
@@ -521,6 +527,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},
|
||||
@@ -562,6 +569,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},
|
||||
@@ -605,7 +613,7 @@ static struct
|
||||
# endif
|
||||
# endif
|
||||
# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
|
||||
&& SIZEOF_SIZE_T != SIZEOF_INT
|
||||
&& SIZEOF_SIZE_T != VIM_SIZEOF_INT
|
||||
# ifdef Py_DEBUG
|
||||
{"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4},
|
||||
# else
|
||||
@@ -1472,21 +1480,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)
|
||||
{
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user