changeset 8061:abd64cf67bcf

commit https://github.com/vim/vim/commit/38a55639d603823efcf2d2fdf542dbffdeb60b75 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Feb 15 22:07:32 2016 +0100 Update runtime files.
author Christian Brabandt <cb@256bit.org>
date Mon, 15 Feb 2016 22:45:05 +0100
parents ec3056fe30fd
children 7fe3b9dc132b
files runtime/doc/change.txt runtime/doc/channel.txt runtime/doc/editing.txt runtime/doc/eval.txt runtime/doc/options.txt runtime/doc/repeat.txt runtime/doc/tags runtime/doc/todo.txt runtime/doc/usr_41.txt runtime/doc/various.txt runtime/doc/vi_diff.txt runtime/plugin/matchparen.vim runtime/syntax/c.vim src/po/eo.po src/po/it.po
diffstat 15 files changed, 716 insertions(+), 249 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.4.  Last change: 2016 Jan 31
+*change.txt*    For Vim version 7.4.  Last change: 2016 Feb 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -98,10 +98,10 @@ These commands delete text.  You can rep
 
 An exception for the d{motion} command: If the motion is not linewise, the
 start and end of the motion are not in the same line, and there are only
-blanks before the start and after the end of the motion, the delete becomes
-linewise.  This means that the delete also removes the line of blanks that you
-might expect to remain. Use the |o_v| operator to force the motion to be
-characterwise.
+blanks before the start and there are no non-blanks after the end of the
+motion, the delete becomes linewise.  This means that the delete also removes
+the line of blanks that you might expect to remain. Use the |o_v| operator to
+force the motion to be characterwise.
 
 Trying to delete an empty region of text (e.g., "d0" in the first column)
 is an error when 'cpoptions' includes the 'E' flag.
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -1,4 +1,4 @@
-*channel.txt*      For Vim version 7.4.  Last change: 2016 Feb 07
+*channel.txt*      For Vim version 7.4.  Last change: 2016 Feb 15
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -9,36 +9,72 @@
 DRAFT  DRAFT  DRAFT  DRAFT  DRAFT  DRAFT  DRAFT  DRAFT  DRAFT  DRAFT
 
 Vim uses channels to communicate with other processes.
-A channel uses a socket.				*socket-interface*
+A channel uses a socket or pipes			*socket-interface*
+Jobs can be used to start processes and communicate with them.
 
 Vim current supports up to 10 simultaneous channels.
 The Netbeans interface also uses a channel. |netbeans|
 
-1. Demo					|channel-demo|
-2. Opening a channel			|channel-open|
-3. Using a JSON or JS channel		|channel-use|
-4. Vim commands				|channel-commands|
-5. Using a raw channel			|channel-use|
-6. Job control				|job-control|
+1. Overview				|job-channel-overview|
+2. Channel demo				|channel-demo|
+3. Opening a channel			|channel-open|
+4. Using a JSON or JS channel		|channel-use|
+5. Channel commands			|channel-commands|
+6. Using a RAW or NL channel		|channel-raw|
+7. More channel functions		|channel-more|
+8. Starting a job with a channel	|job-start|
+9. Starting a job without a channel	|job-start-nochannel|
+10. Job options				|job-options|
+11. Controlling a job			|job-control|
 
 {Vi does not have any of these features}
-{only available when compiled with the |+channel| feature}
+{only when compiled with the |+channel| feature for channel stuff}
+{only when compiled with the |+job| feature for job stuff}
 
 ==============================================================================
-1. Demo							*channel-demo*
+1. Overview						*job-channel-overview*
+
+There are four main types of jobs:
+1. A deamon, serving several Vim instances.
+   Vim connects to it with a socket.
+2. One job working with one Vim instance, asynchronously.
+   Uses a socket or pipes.
+3. A job performing some work for a short time, asynchronously.
+   Uses a socket or pipes.
+4. Running a filter, synchronously.
+   Uses pipes.
+
+For when using sockets See |job-start|, |job-may-start| and |channel-open|.
+For 2 and 3, one or more jobs using pipes, see |job-start|.
+For 4 use the ":{range}!cmd" command, see |filter|.
+
+Over the socket and pipes these protocols are available:
+RAW	nothing known, Vim cannot tell where a message ends
+NL	every message ends in a NL (newline) character
+JSON	JSON encoding |json_encode()|
+JS	JavaScript style JSON-like encoding |js_encode()|
+
+Common combination are:
+- Using a job connected through pipes in NL mode.  E.g., to run a style
+  checker and receive errors and warnings.
+- Using a deamon, connecting over a socket in JSON mode.  E.g. to lookup
+  crosss-refrences in a database.
+
+==============================================================================
+2. Channel demo						*channel-demo*
 
 This requires Python.  The demo program can be found in
 $VIMRUNTIME/tools/demoserver.py
 Run it in one terminal.  We will call this T1.
 
 Run Vim in another terminal.  Connect to the demo server with: >
-	let handle = ch_open('localhost:8765')
+	let channel = ch_open('localhost:8765')
 
 In T1 you should see:
 	=== socket opened === ~
 
 You can now send a message to the server: >
-	echo ch_sendexpr(handle, 'hello!')
+	echo ch_sendexpr(channel, 'hello!')
 
 The message is received in T1 and a response is sent back to Vim.
 You can see the raw messages in T1.  What Vim sends is:
@@ -54,47 +90,63 @@ And you should see the message in Vim. Y
 	["normal","w"] ~
 
 To handle asynchronous communication a callback needs to be used: >
-	func MyHandler(handle, msg)
+	func MyHandler(channel, msg)
 	  echo "from the handler: " . a:msg
 	endfunc
-	call ch_sendexpr(handle, 'hello!', "MyHandler")
+	call ch_sendexpr(channel, 'hello!', "MyHandler")
+Vim will not wait for a response.  Now the server can send the response later
+and MyHandler will be invoked.
 
 Instead of giving a callback with every send call, it can also be specified
 when opening the channel: >
-	call ch_close(handle)
-	let handle = ch_open('localhost:8765', {'callback': "MyHandler"})
-	call ch_sendexpr(handle, 'hello!', 0)
+	call ch_close(channel)
+	let channel = ch_open('localhost:8765', {'callback': "MyHandler"})
+	call ch_sendexpr(channel, 'hello!', 0)
 
 ==============================================================================
-2. Opening a channel					*channel-open*
+3. Opening a channel					*channel-open*
 
 To open a channel: >
-    let handle = ch_open({address} [, {argdict}])
+    let channel = ch_open({address} [, {options}])
+
+Use |ch_status()| to see if the channel could be opened.
 
 {address} has the form "hostname:port".  E.g., "localhost:8765".
 
-{argdict} is a dictionary with optional entries:
+{options} is a dictionary with optional entries:
 
 "mode" can be:						*channel-mode*
 	"json" - Use JSON, see below; most convenient way. Default.
 	"js"   - Use JavaScript encoding, more efficient than JSON.
+	"nl"   - Use messages that end in a NL character
 	"raw"  - Use raw messages
 
 							*channel-callback*
-"callback" is a function that is called when a message is received that is not
-handled otherwise.  It gets two arguments: the channel handle and the received
-message. Example: >
-	func Handle(handle, msg)
+"callback"	A function that is called when a message is received that is
+		not handled otherwise.  It gets two arguments: the channel
+		handle and the received message. Example: >
+	func Handle(channel, msg)
 	  echo 'Received: ' . a:msg
 	endfunc
-	let handle = ch_open("localhost:8765", {"callback": "Handle"})
+	let channel = ch_open("localhost:8765", {"callback": "Handle"})
+<
+		TODO:
+"err-cb"	A function like "callback" but used for stderr.  Only for when
+		the channel uses pipes.
 
-"waittime" is the time to wait for the connection to be made in milliseconds.
-The default is zero, don't wait, which is useful if the server is supposed to
-be running already.  A negative number waits forever.
+		TODO:
+"close-cb"	A function that is called when the channel gets closed, other
+		than by calling ch_close().  It should be defined like this: >
+	func MyCloseHandler(channel)
 
-"timeout" is the time to wait for a request when blocking, using
-ch_sendexpr().  Again in milliseconds.  The default is 2000 (2 seconds).
+"waittime"	The time to wait for the connection to be made in
+		milliseconds.  The default is zero, don't wait, which is
+		useful if the server is supposed to be running already.  A
+		negative number waits forever.
+
+"timeout"	The time to wait for a request when blocking, using
+		ch_sendexpr().  Again in milliseconds.  The default is 2000 (2
+		seconds).
 
 When "mode" is "json" or "js" the "msg" argument is the body of the received
 message, converted to Vim types.
@@ -103,18 +155,26 @@ When "mode" is "raw" the "msg" argument 
 When "mode" is "json" or "js" the "callback" is optional.  When omitted it is
 only possible to receive a message after sending one.
 
-The handler can be added or changed later: >
-    call ch_setcallback(handle, {callback})
+TODO:
+To change the channel options after opening it use ch_setoptions().  The
+arguments are similar to what is passed to ch_open(), but "waittime" cannot be
+given, since that only applies to opening the channel.
+
+The handler can be added or changed: >
+    call ch_setoptions(channel, {'callback': callback})
 When "callback" is empty (zero or an empty string) the handler is removed.
-NOT IMPLEMENTED YET
 
-The timeout can be changed later: >
-    call ch_settimeout(handle, {msec})
-NOT IMPLEMENTED YET
+The timeout can be changed: >
+    call ch_setoptions(channel, {'timeout': msec})
+<
 							  *E906*
 Once done with the channel, disconnect it like this: >
-    call ch_close(handle)
+    call ch_close(channel)
+When a socket is used this will close the socket for both directions.  When
+pipes are used (stdin/stdout/stderr) they are all closed.  This might not be
+what you want!  Stopping the job with job_stop() might be better.
 
+TODO:
 Currently up to 10 channels can be in use at the same time. *E897*
 
 When the channel can't be opened you will get an error message.  There is a
@@ -126,21 +186,26 @@ If there is an error reading or writing 
 *E896* *E630* *E631* 
 
 ==============================================================================
-3. Using a JSON or JS channel					*channel-use*
+4. Using a JSON or JS channel					*channel-use*
 
 If {mode} is "json" then a message can be sent synchronously like this: >
-    let response = ch_sendexpr(handle, {expr})
+    let response = ch_sendexpr(channel, {expr})
 This awaits a response from the other side.
 
 When {mode} is "js" this works the same, except that the messages use
-JavaScript encoding.  See |jsencode()| for the difference.
+JavaScript encoding.  See |js_encode()| for the difference.
 
 To send a message, without handling a response: >
-    call ch_sendexpr(handle, {expr}, 0)
+    call ch_sendexpr(channel, {expr}, 0)
 
 To send a message and letting the response handled by a specific function,
 asynchronously: >
-    call ch_sendexpr(handle, {expr}, {callback})
+    call ch_sendexpr(channel, {expr}, {callback})
+
+Vim will match the response with the request using the message ID.  Once the
+response is received the callback will be invoked.  Further responses with the
+same ID will be ignored.  If your server sends back multiple responses you
+need to send them with ID zero, they will be passed to the channel callback.
 
 The {expr} is converted to JSON and wrapped in an array.  An example of the
 message that the receiver will get when {expr} is the string "hello":
@@ -175,9 +240,7 @@ It is also possible to use ch_sendraw() 
 is then completely responsible for correct encoding and decoding.
 
 ==============================================================================
-4. Vim commands						*channel-commands*
-
-PARTLY IMPLEMENTED: only "ex" and "normal" work
+5. Channel commands					*channel-commands*
 
 With a "json" channel the process can send commands to Vim that will be
 handled by Vim internally, it does not require a handler for the channel.
@@ -251,43 +314,202 @@ Example:
 	["expr","setline('$', ['one', 'two', 'three'])"] ~
 
 ==============================================================================
-5. Using a raw channel					*channel-raw*
+6. Using a RAW or NL channel				*channel-raw*
 
 If {mode} is "raw" then a message can be send like this: >
-    let response = ch_sendraw(handle, {string})
+    let response = ch_sendraw(channel, {string})
 The {string} is sent as-is.  The response will be what can be read from the
 channel right away.  Since Vim doesn't know how to recognize the end of the
-message you need to take care of it yourself.
+message you need to take care of it yourself.  The timeout applies for reading
+the first byte, after that it will not wait for anything more.
+
+If {mode} is "nl" you can send a message in a similar way.  You are expected
+to put in the NL after each message.  Thus you can also send several messages
+ending in a NL at once.  The response will be the text up to and including the
+first NL.  This can also be just the NL for an empty response.
+If no NL was read before the channel timeout an empty string is returned.
 
 To send a message, without expecting a response: >
-    call ch_sendraw(handle, {string}, 0)
+    call ch_sendraw(channel, {string}, 0)
 The process can send back a response, the channel handler will be called with
 it.
 
 To send a message and letting the response handled by a specific function,
 asynchronously: >
-    call ch_sendraw(handle, {string}, {callback})
+    call ch_sendraw(channel, {string}, {callback})
 
-This {string} can also be JSON, use |jsonencode()| to create it and
-|jsondecode()| to handle a received JSON message.
+This {string} can also be JSON, use |json_encode()| to create it and
+|json_decode()| to handle a received JSON message.
 
 It is not possible to use |ch_sendexpr()| on a raw channel.
 
 ==============================================================================
-6. Job control						*job-control*
+7. More channel functions				*channel-more*
+
+To obtain the status of a channel: ch_status(channel).  The possible results
+are:
+	"fail"		Failed to open the channel.
+	"open"		The channel can be used.
+	"closed"	The channel was closed.
+
+TODO:
+To objain the job associated with a channel: ch_getjob(channel)
 
-NOT IMPLEMENTED YET
+TODO:
+To read one message from a channel: >
+	let output = ch_read(channel)
+This uses the channel timeout.  To read without a timeout, just get any
+message that is available: >
+	let output = ch_read(channel, 0)
+When no message was available then the result is v:none for a JSON or JS mode
+channels, an empty string for a RAW or NL channel.
+
+To read all output from a RAW or NL channel that is available: >
+	let output = ch_readall(channel)
+To read the error output: >
+	let output = ch_readall(channel, "err")
+TODO: use channel timeout, no timeout or specify timeout?
+
+==============================================================================
+8. Starting a job with a channel			*job-start* *job*
+
+To start a job and open a channel for stdin/stdout/stderr: >
+    let job = job_start(command, {options})
+
+You can get the channel with: >
+    let channel = job_getchannel(job)
 
-To start another process: >
-    call startjob({command})
+The channel will use NL mode.  If you want another mode it's best to specify
+this in {options}.  When changing the mode later some text may have already
+been received and not parsed correctly.
+
+If the command produces a line of output that you want to deal with, specify
+a handler for stdout: >
+    let job = job_start(command, {"out-cb": "MyHandler"})
+The function will be called with the channel and a message. You would define
+it like this: >
+    func MyHandler(channel, msg)
+
+Without the handler you need to read the output with ch_read().
+
+The handler defined for "out-cb" will also receive stderr.  If you want to
+handle that separately, add an "err-cb" handler: >
+    let job = job_start(command, {"out-cb": "MyHandler",
+	    \			  "err-cb": "ErrHandler"})
 
-This does not wait for {command} to exit.
+You can send a message to the command with ch_sendraw().  If the channel is in
+JSON or JS mode you can use ch_sendexpr().
+
+There are several options you can use, see |job-options|.
+
+TODO:
+To run a job and read its output once it is done: >
+
+	let job = job_start({command}, {'exit-cb': 'MyHandler'})
+	func MyHandler(job, status)
+	  let channel = job_getchannel()
+	  let output = ch_readall(channel)
+	  " parse output
+	endfunc
+
+==============================================================================
+9. Starting a job without a channel			*job-start-nochannel*
+
+To start another process without creating a channel: >
+    let job = job_start(command, {"in-io": "null", "out-io": "null"})
+
+This starts {command} in the background, Vim does not wait for it to finish.
 
 TODO:
+When Vim sees that neither stdin, stdout or stderr are connected, no channel
+will be created.  Often you will want to include redirection in the command to
+avoid it getting stuck.
 
-    let handle = startjob({command}, 's')            # uses stdin/stdout
-    let handle = startjob({command}, '', {address})  # uses socket
-    let handle = startjob({command}, 'd', {address}) # start if connect fails
+There are several options you can use, see |job-options|.
+
+TODO:							*job-may-start*
+To start a job only when connecting to an address does not work use
+job_maystart('command', {address}, {options}), For Example: >
+	let job = job_maystart(command, address, {"waittime": 1000})
+	let channel = job_gethandle(job)
+
+This comes down to: >
+	let channel = ch_open(address, {"waittime": 0})
+	if ch_status(channel) == "fail"
+	  let job = job_start(command)
+	  let channel = ch_open(address, {"waittime": 1000})
+	  call job_sethandle(channel)
+	endif
+Note that the specified waittime applies to when the job has been started.
+This gives the job some time to make the port available.
+
+==============================================================================
+10. Job options						*job-options*
+
+The {options} argument in job_start() is a dictionary.  All entries are
+optional.  The same options can be used with job_setoptions(job, {options}).
+
+TODO:						*job-out-cb*
+"out-cb": handler	Callback for when there is something to read on
+			stdout.
+TODO:						*job-err-cb*
+"err-cb": handler	Callback for when there is something to read on
+			stderr.  Defaults to the same callback as "out-cb".
+TODO:						*job-close-cb*
+"close-cb": handler	Callback for when the channel is closed.  Same as
+			"close-cb" on ch_open().
+TODO:						*job-exit-cb*
+"exit-cb": handler	Callback for when the job ends.  The arguments are the
+			job and the exit status.
+TODO:						*job-killonexit*
+"killonexit": 1		Stop the job when Vim exits.
+"killonexit": 0		Do not stop the job when Vim exits.
+			The default is 1.
+TODO:						*job-term*
+"term": "open"		Start a terminal and connect the job
+			stdin/stdout/stderr to it.
+
+TODO:						*job-in-io*
+"in-io": "null"		disconnect stdin
+"in-io": "pipe"		stdin is connected to the channel (default)
+"in-io": "file"		stdin reads from a file
+"in-file": "/path/file"	the file to read from
+
+TODO:						*job-out-io*
+"out-io": "null"	disconnect stdout
+"out-io": "pipe"	stdout is connected to the channel (default)
+"out-io": "file"	stdout writes to a file
+"out-file": "/path/file" the file to write to
+"out-io": "buffer" 	stdout appends to a buffer
+"out-buffer": "name" 	buffer to append to
+
+TODO:						*job-err-io*
+"err-io": "out"		same as stdout (default)
+"err-io": "null"	disconnect stderr
+"err-io": "pipe"	stderr is connected to the channel
+"err-io": "file"	stderr writes to a file
+"err-file": "/path/file" the file to write to
+"err-io": "buffer" 	stderr appends to a buffer
+"err-buffer": "name" 	buffer to append to
+
+TODO: more options
+
+
+==============================================================================
+11. Controlling a job					*job-control*
+
+To get the status of a job: >
+	echo job_status(job)
+
+To make a job stop running: >
+	job_stop(job)
+
+This is the normal way to end a job. On Unix it sends a SIGTERM to the job.
+It is possible to use other ways to stop the job, or even send arbitrary
+signals.  E.g. to force a job to stop, "kill it": >
+	job_stop(job, "kill")
+
+For more options see |job_stop()|.
 
 
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/doc/editing.txt
+++ b/runtime/doc/editing.txt
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 7.4.  Last change: 2016 Feb 01
+*editing.txt*   For Vim version 7.4.  Last change: 2016 Feb 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -403,16 +403,21 @@ Note there are some commands where this 
 Example: >
 	:n **/*.txt
 Finds files:
-	ttt.txt
-	subdir/ttt.txt
-	a/b/c/d/ttt.txt
-When non-wildcard characters are used these are only matched in the first
-directory.  Example: >
-	:n /usr/inc**/*.h
+	aaa.txt ~
+	subdir/bbb.txt ~
+	a/b/c/d/ccc.txt ~
+When non-wildcard characters are used right before or after "**" these are
+only matched in the top directory.  They are not used for directories further
+down in the tree. For example: >
+	:n /usr/inc**/types.h
 Finds files:
-	/usr/include/types.h
-	/usr/include/sys/types.h
-	/usr/inc_old/types.h
+	/usr/include/types.h ~
+	/usr/include/sys/types.h ~
+	/usr/inc/old/types.h ~
+Note that the path with "/sys" is included because it does not need to match
+"/inc".  Thus it's like matching "/usr/inc*/*/*...", not
+"/usr/inc*/inc*/inc*".
+
 					*backtick-expansion* *`-expansion*
 On Unix and a few other systems you can also use backticks for the file name
 argument, for example: >
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -37,7 +37,7 @@ 1. Variables						*variables*
 
 1.1 Variable types ~
 							*E712*
-There are eight types of variables:
+There are nine types of variables:
 
 Number		A 32 or 64 bit signed number.  |expr-number| *Number*
 		Examples:  -123  0x10  0177
@@ -61,7 +61,9 @@ Funcref		A reference to a function |Func
 
 Special		v:false, v:true, v:none and v:null
 
-Job		Used for job control, see |job_start()|.
+Job		Used for a job, see |job_start()|.
+
+Channel		Used for a channel, see |ch_open()|.
 
 The Number and String types are converted automatically, depending on how they
 are used.
@@ -100,7 +102,7 @@ Note that in the command >
 use empty(): >
 	:if !empty("foo")
 <
-			*E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910*
+		*E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910* *E913*
 List, Dictionary, Funcref and Job types are not automatically converted.
 
 							*E805* *E806* *E808*
@@ -108,7 +110,7 @@ When mixing Number and Float the Number 
 there is no automatic conversion of Float.  You can use str2float() for String
 to Float, printf() for Float to String and float2nr() for Float to Number.
 
-				*E891* *E892* *E893* *E894* *E907* *E911*
+			*E891* *E892* *E893* *E894* *E907* *E911* *E914*
 When expecting a Float a Number can also be used, but nothing else.
 
 						*E706* *sticky-type-checking*
@@ -1823,6 +1825,7 @@ ch_sendexpr( {handle}, {expr} [, {callba
 				any	send {expr} over JSON channel {handle}
 ch_sendraw( {handle}, {string} [, {callback}])
 				any	send {string} over raw channel {handle}
+ch_status( {handle})		String	status of channel {handle}
 changenr()			Number	current change number
 char2nr( {expr}[, {utf8}])	Number	ASCII/UTF8 value of first char in {expr}
 cindent( {lnum})		Number	C indent for line {lnum}
@@ -1955,6 +1958,7 @@ invert( {expr})			Number  bitwise invert
 isdirectory( {directory})	Number	TRUE if {directory} is a directory
 islocked( {expr})		Number	TRUE if {expr} is locked
 items( {dict})			List	key-value pairs in {dict}
+job_getchannel( {job})		Number	get the channel handle for {job}
 job_start( {command} [, {options}]) Job	start a job	
 job_status( {job})		String	get the status of a job
 job_stop( {job} [, {how}])	Number	stop a job
@@ -2684,9 +2688,13 @@ ch_close({handle})						*ch_close()*
 
 ch_logfile( {fname} [, {mode}])					*ch_logfile()*
 		Start logging channel activity to {fname}.
+		When {fname} is an empty string: stop logging.
+
 		When {mode} is omitted or "a" append to the file.
 		When {mode} is "w" start with an empty file.
-		When {fname} is an empty string: stop logging.
+
+		The file is flushed after every message, on Unix you can use
+		"tail -f" to see what is going on in real time.
 
 ch_open({address} [, {argdict}])				*ch_open()*
 		Open a channel to {address}.  See |channel|.
@@ -2742,6 +2750,12 @@ ch_sendraw({handle}, {string} [, {callba
 
 		{only available when compiled with the |+channel| feature}
 
+ch_status({handle})						*ch_status()*
+		Return the status of channel {handle}:
+			"fail"		failed to open the channel
+			"open"		channel can be used
+			"closed"	channel can not be used
+
 							*copy()*
 copy({expr})	Make a copy of {expr}.	For Numbers and Strings this isn't
 		different from using {expr} directly.
@@ -2938,6 +2952,7 @@ empty({expr})						*empty()*
 		- A Number and Float is empty when its value is zero.
 		- |v:false|, |v:none| and |v:null| are empty, |v:true| is not.
 		- A Job is empty when it failed to start.
+		- A Channel is empty when it is closed.
 
 		For a long |List| this is much faster than comparing the
 		length with zero.
@@ -4334,7 +4349,11 @@ items({dict})						*items()*
 		order.
 
 
-job_start({command} [, {options}])				*job_start()*
+job_getchannel({job})					 *job_getchannel()*
+		Get the channel handle that {job} is using.
+		{only available when compiled with the |+job| feature}
+
+job_start({command} [, {options}])			*job_start()*
 		Start a job and return a Job object.  Unlike |system()| and
 		|:!cmd| this does not wait for the job to finish.
 
@@ -6838,6 +6857,7 @@ type({expr})	The result is a Number, dep
 			Boolean:    6 (v:false and v:true)
 			None	    7 (v:null and v:none)
 			Job	    8
+			Channel	    9
 		To avoid the magic numbers it should be used this way: >
 			:if type(myvar) == type(0)
 			:if type(myvar) == type("")
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.4.  Last change: 2016 Feb 01
+*options.txt*	For Vim version 7.4.  Last change: 2016 Feb 12
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -3096,17 +3096,17 @@ A jump table for the options with a shor
 
 	  item		default		Used for ~
 	  stl:c		' ' or '^'	statusline of the current window
-	  stlnc:c	' ' or '-'	statusline of the non-current windows
+	  stlnc:c	' ' or '='	statusline of the non-current windows
 	  vert:c	'|'		vertical separators |:vsplit|
 	  fold:c	'-'		filling 'foldtext'
 	  diff:c	'-'		deleted lines of the 'diff' option
 
 	Any one that is omitted will fall back to the default.  For "stl" and
-	"stlnc" the space will be used when there is highlighting, '^' or '-'
+	"stlnc" the space will be used when there is highlighting, '^' or '='
 	otherwise.
 
 	Example: >
-	    :set fillchars=stl:^,stlnc:-,vert:\|,fold:-,diff:-
+	    :set fillchars=stl:^,stlnc:=,vert:\|,fold:-,diff:-
 <	This is similar to the default, except that these characters will also
 	be used when there is highlighting.
 
@@ -7571,6 +7571,7 @@ A jump table for the options with a shor
 	non-keyword characters (white space is preferred).  Maximum line
 	length is 510 bytes.
 	To obtain a file to be used here, check out this ftp site:
+	[Sorry this link doesn't work anymore, do you know the right one?] 
 	ftp://ftp.ox.ac.uk/pub/wordlists/  First get the README file.
 	To include a comma in a file name precede it with a backslash.  Spaces
 	after a comma are ignored, otherwise spaces are included in the file
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -1,4 +1,4 @@
-*repeat.txt*    For Vim version 7.4.  Last change: 2016 Jan 16
+*repeat.txt*    For Vim version 7.4.  Last change: 2016 Feb 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -490,7 +490,7 @@ Additionally, these commands can be used
 	bt
 	where
 							*>frame*
-	frame N		Goes to N bactrace level. + and - signs make movement
+	frame N		Goes to N backtrace level. + and - signs make movement
 			relative.  E.g., ":frame +3" goes three frames up.
 							*>up*
 	up		Goes one level up from call stacktrace.
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -9,6 +9,7 @@
 $VIM	starting.txt	/*$VIM*
 $VIM-use	version5.txt	/*$VIM-use*
 $VIMRUNTIME	starting.txt	/*$VIMRUNTIME*
+$VIM_POSIX	vi_diff.txt	/*$VIM_POSIX*
 %	motion.txt	/*%*
 %:.	cmdline.txt	/*%:.*
 %:8	cmdline.txt	/*%:8*
@@ -1218,6 +1219,7 @@
 +iconv	various.txt	/*+iconv*
 +iconv/dyn	various.txt	/*+iconv\/dyn*
 +insert_expand	various.txt	/*+insert_expand*
++job	various.txt	/*+job*
 +jumplist	various.txt	/*+jumplist*
 +keymap	various.txt	/*+keymap*
 +langmap	various.txt	/*+langmap*
@@ -4443,6 +4445,8 @@ E91	options.txt	/*E91*
 E910	eval.txt	/*E910*
 E911	eval.txt	/*E911*
 E912	eval.txt	/*E912*
+E913	eval.txt	/*E913*
+E914	eval.txt	/*E914*
 E92	message.txt	/*E92*
 E93	windows.txt	/*E93*
 E94	windows.txt	/*E94*
@@ -5164,9 +5168,12 @@ cc	change.txt	/*cc*
 ceil()	eval.txt	/*ceil()*
 ch.vim	syntax.txt	/*ch.vim*
 ch_close()	eval.txt	/*ch_close()*
+ch_logfile()	eval.txt	/*ch_logfile()*
 ch_open()	eval.txt	/*ch_open()*
+ch_readraw()	eval.txt	/*ch_readraw()*
 ch_sendexpr()	eval.txt	/*ch_sendexpr()*
 ch_sendraw()	eval.txt	/*ch_sendraw()*
+ch_status()	eval.txt	/*ch_status()*
 change-list-jumps	motion.txt	/*change-list-jumps*
 change-name	tips.txt	/*change-name*
 change-tabs	change.txt	/*change-tabs*
@@ -5197,6 +5204,7 @@ channel-callback	channel.txt	/*channel-c
 channel-commands	channel.txt	/*channel-commands*
 channel-demo	channel.txt	/*channel-demo*
 channel-mode	channel.txt	/*channel-mode*
+channel-more	channel.txt	/*channel-more*
 channel-open	channel.txt	/*channel-open*
 channel-raw	channel.txt	/*channel-raw*
 channel-use	channel.txt	/*channel-use*
@@ -5564,6 +5572,7 @@ dip	motion.txt	/*dip*
 dircolors.vim	syntax.txt	/*dircolors.vim*
 dis	motion.txt	/*dis*
 disable-menus	gui.txt	/*disable-menus*
+disable_char_avail_for_testing()	eval.txt	/*disable_char_avail_for_testing()*
 discard	editing.txt	/*discard*
 distribute-script	usr_41.txt	/*distribute-script*
 distribution	intro.txt	/*distribution*
@@ -6817,16 +6826,32 @@ java-indenting	indent.txt	/*java-indenti
 java.vim	syntax.txt	/*java.vim*
 javascript-cinoptions	indent.txt	/*javascript-cinoptions*
 javascript-indenting	indent.txt	/*javascript-indenting*
+job	channel.txt	/*job*
+job-channel-overview	channel.txt	/*job-channel-overview*
+job-close-cb	channel.txt	/*job-close-cb*
 job-control	channel.txt	/*job-control*
+job-err-cb	channel.txt	/*job-err-cb*
+job-err-io	channel.txt	/*job-err-io*
+job-exit-cb	channel.txt	/*job-exit-cb*
+job-in-io	channel.txt	/*job-in-io*
+job-killonexit	channel.txt	/*job-killonexit*
+job-may-start	channel.txt	/*job-may-start*
+job-options	channel.txt	/*job-options*
+job-out-cb	channel.txt	/*job-out-cb*
+job-out-io	channel.txt	/*job-out-io*
+job-start	channel.txt	/*job-start*
+job-start-nochannel	channel.txt	/*job-start-nochannel*
+job-term	channel.txt	/*job-term*
+job_getchannel()	eval.txt	/*job_getchannel()*
 job_start()	eval.txt	/*job_start()*
 job_status()	eval.txt	/*job_status()*
 job_stop()	eval.txt	/*job_stop()*
 join()	eval.txt	/*join()*
+js_decode()	eval.txt	/*js_decode()*
+js_encode()	eval.txt	/*js_encode()*
 jsbterm-mouse	options.txt	/*jsbterm-mouse*
-jsdecode()	eval.txt	/*jsdecode()*
-jsencode()	eval.txt	/*jsencode()*
-jsondecode()	eval.txt	/*jsondecode()*
-jsonencode()	eval.txt	/*jsonencode()*
+json_decode()	eval.txt	/*json_decode()*
+json_encode()	eval.txt	/*json_encode()*
 jtags	tagsrch.txt	/*jtags*
 jump-motions	motion.txt	/*jump-motions*
 jumplist	motion.txt	/*jumplist*
@@ -8582,6 +8607,7 @@ undo-tree	undo.txt	/*undo-tree*
 undo-two-ways	undo.txt	/*undo-two-ways*
 undo.txt	undo.txt	/*undo.txt*
 undo_ftplugin	usr_41.txt	/*undo_ftplugin*
+undo_indent	usr_41.txt	/*undo_indent*
 undofile()	eval.txt	/*undofile()*
 undotree()	eval.txt	/*undotree()*
 unicode	mbyte.txt	/*unicode*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.4.  Last change: 2016 Feb 07
+*todo.txt*      For Vim version 7.4.  Last change: 2016 Feb 15
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -34,6 +34,100 @@ not be repeated below, unless there is e
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
++channel:
+- Move netbeans NL handling to channel.c, use it for NL mode channel
+- ch_open fails when socket isn't present yet. (Marcin Szamotulski)
+  Retry when error is "connection refused".
+- channel test waittime is disabled for MS-Windows, causes a crash.
+- channel needs both stdout and stderr (GUI implementation)
+- implement TODO items in ":help channel":
+   - implement ch_setoptions(handle, {options})
+   - job_setoptions(job, {options})
+   - ch_close() closes stdin/stdout/stderr
+   - out-cb
+   - err-cb
+   - exit-cb  move code from mch_clear_job()
+   - job argument: killonexit
+   - ch_read() for stderr
+   - ch_getjob(handle)
+   - ch_read(handle [, timeout])
+   - ch_readall(handle [, timeout])
+   - job_info() should remove usable info: process ID, run/dead, etc.
+   - job_maystart()
+   - job_gethandle(), job_sethandle()
+   - add ch_status(): Whether channel is open.  Perhaps also mode, timeout.
+   - When channel closes invoke "close-cb".
+- Move more details from eval.txt to channel.txt.  Add tags in eval.txt.
+- When receiving malformed json starting with a quote it doesn't get
+  discarded.
+- When message in queue but there is no callback, drop it after a while?
+- Crash when closing channel after ch_sendexpr() with callback and outstanding
+  request (Christian Robinson).
+- cleanup on exit?  in mch_getout() and getout().
+- On Mac a 1 msec waittime is needed in ch_open(), why?
+- Add more log calls, basically at every branch, before every callback, etc.
+- Add timestamp to queued messages and callbacks with ID, remove after a
+  minute.
+- add remark about undo sync, is there a way to force it?
+- When starting a job, have an option to open the server socket, so we know
+  the port, and pass it to the command with --socket-fd {nr}. (Olaf Dabrunz,
+  Feb 9)  How to do this on MS-Windows?
+- Add more unit-testing in json_test.c
+- Add a test where ["eval","getline(123)"] gets a line with special
+  characters (NUL, 0x80, etc.).  Check that it isn't garbled.
+- make sure errors lead to a useful error msg. ["ex","foobar"]
+- json: implement UTF-16 surrogate pair.
+- For connection to server, a "keep open" flag would be useful.  Retry
+  connecting in the main loop with zero timeout.
+More plugin support:
+- Have a way to install a callback from the main loop.  Called every second or
+  so.
+- Need way to uniquely identify a window, no matter how windows are
+  rearranged.  Same for tab pages.
+      getwinid()             ID of current winow
+      getwinid({nr})         ID of window {nr}
+      getwinid({nr}, {tab})  ID of window {nr} in tab page {tab}
+      getwinnr({id})	     window nr of {id} or -1 if not open
+      gettabnr({id})	     tab page nr of {id} or -1 if not open
+      gotowin({id})
+  Make it so that the window ID can be used where currently a window nr is used
+
+Patch on #608: (Ken Takata)
+https://bitbucket.org/k_takata/vim-ktakata-mq/src/479934b94fd56b064c9e4bd8737585c5df69d56a/fix-gvimext-loadlibrary.patch?fileviewer=file-view-default
+
+This difference is unexpected:
+    echo v:true == 1
+    1
+    echo [v:true] == [1]
+    0
+It's because tv_equal() works different.
+
+Add "runtime/bundles" ?
+    runtime/bundles/netrw/spec.vim
+    runtime/bundles/netrw/autoload/netrw.vim
+    runtime/bundles/netrw/syntax/netrw.vim
+    etc.
+Need an alternative for 'runtimepath' that tells where bundles are to be
+found. 'bundlepath' ?
+The plugins under 'bundlepath' would always be loaded.  Also have a path for
+optional plugins?  'optbundlepath'?  Or have directories "bundlesdef" and
+"bundlesopt"?
+Then use a command "loadplugin" to find a plugin in "optional".
+"bundles" is used by some plugin managers, need another name. "packages"?
+Add a "requires" / "provides" mechanism?
+    if my_feature_enabled
+      require +python
+    endif
+    require my_other_plugin
+~/vim/packages/netrw/def/netrw/plugin/netrw.vim
+~/vim/packages/netrw/opt/nwdebug/plugin/nwdebug.vim
+
+Why does this: 	echo "a" . 1.1
+result in:	a11
+Should recognize float (so long as it's not ".1.1").
+
+Allow for an empty dictionary key.
+
 Regexp problems:
 - The regexp engines are not reentrant, causing havoc when interrupted by a
   remote expression or something else.  Move global variables onto the stack
@@ -76,53 +170,8 @@ Regexp problems:
   matches the empty string. (Dominique Pelle, 2015 Oct 2, Nov 24)
 - Search for \\~ causes error E874.
 
-- "\%1l^#.*" does not match on a line starting with "#".  The zero-width match
-  clears the start-of-line flag.
-  Patch by Christian, 2016 Jan 29.
-
-+channel:
-- implement job control:
-	job argument: redirect stdin/stdout
-	job argument: killonexit
-	let job = job_maystart('command', {address}, {options})
-- When receiving malformed json starting with a quote it doesn't get
-  discarded.
-- add ch_status(): Whether channel is open.  Perhaps also mode, timeout.
-  When channel closes invoke channel callback.
-- add ch_setcallback()
-- add ch_settimeout()
-- cleanup on exit?  in mch_getout() and getout().
-- Add a test for the channel callback.
-- implement debug log
-- Add timestamp to queued messages and callbacks with ID, remove after a
-  minute.
-- add remark about undo sync, is there a way to force it?
-- Add more testing in json_test.c
-- make sure errors lead to a useful error msg. ["ex","foobar"]
-- json: implement UTF-16 surrogate pair.
-- Need way to uniquely identify a window, no matter how windows are
-  rearranged.  Same for tab pages.
-      getwinid()             ID of current winow
-      getwinid({nr})         ID of window {nr}
-      getwinid({nr}, {tab})  ID of window {nr} in tab page {tab}
-      getwinnr({id})	     window nr of {id} or -1 if not open
-      gettabnr({id})	     tab page nr of {id} or -1 if not open
-      gotowin({id})
-  Make it so that the window ID can be used where currently a window nr is used
-- For connection to server, a "keep open" flag would be useful.  Retry
-  connecting in the main loop with zero timeout.
-
-Patch on #608: (Ken Takata)
-https://bitbucket.org/k_takata/vim-ktakata-mq/src/479934b94fd56b064c9e4bd8737585c5df69d56a/fix-gvimext-loadlibrary.patch?fileviewer=file-view-default
-
-This difference is unexpected:
-    echo v:true == 1
-    1
-    echo [v:true] == [1]
-    0
-It's because tv_equal() works different.
-
-Allow for an empty dictionary key.
+Also include update_curswant() fix for getcurpos(). (Christian Brabandt, 2016
+Feb 9)
 
 Patch to put undo options together in undo window.
 (Gary Johnson, 2016 Jan 28)
@@ -221,8 +270,14 @@ Patch to fix display of listchars on the
 Update suggested by Yasuhiro Matsumoto, 2014 Nov 25:
 https://gist.github.com/presuku/d3d6b230b9b6dcfc0477
 
+Patch to make the behavior of "w" more straightforward, but not Vi compatible.
+With a 'cpo' flag.  (Christian Brabandt, 2016 Feb 8)
+
 Patch to add TagNotFound autocommand. (Anton Lindqvist, 2016 Feb 3)
 
+Patch to add Error autocommand. (Anton Lindqvist, 2016 Feb 14)
+Only remembers one error.
+
 Illegal memory access, requires ASAN to see. (Dominique Pelle, 2015 Jul 28)
 
 Gvim: when both Tab and CTRL-I are mapped, use CTRL-I not for Tab.
@@ -271,7 +326,7 @@ Can we cache the syntax attributes, so t
 Build with Python on Mac does not always use the right library.
 (Kazunobu Kuriyama, 2015 Mar 28)
 
-Patch to add GTK 3 support. (Kazunobu Kuriyama, 2016 Feb 6)
+Patch to add GTK 3 support. (Kazunobu Kuriyama, 2016 Feb 13)
 Does not fully work yet.
 
 Need a Vim equivalent of Python's None and a way to test for it.
@@ -497,7 +552,7 @@ Bug: Autocompleting ":tag/pat" replaces 
 insert a space. (Micha Mos, 2014 Nov 7)
 
 Patch to add the :bvimgrep command.  (Christian Brabandt, 2014 Nov 12)
-Update Dec 6.
+Updated 2016 Feb 10
 
 Patch to add argument to :cquit. (Thinca, 2014 Oct 12)
 
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 7.4.  Last change: 2016 Feb 02
+*usr_41.txt*	For Vim version 7.4.  Last change: 2016 Feb 14
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -2235,7 +2235,7 @@ This construct makes sure the function i
 	:endif
 <
 
-UNDO							*undo_ftplugin*
+UNDO						*undo_indent* *undo_ftplugin*
 
 When the user does ":setfiletype xyz" the effect of the previous filetype
 should be undone.  Set the b:undo_ftplugin variable to the commands that will
@@ -2250,6 +2250,9 @@ global value.  That is mostly the best w
 This does require removing the "C" flag from 'cpoptions' to allow line
 continuation, as mentioned above |use-cpo-save|.
 
+For undoing the effect of an indent script, the b:undo_indent variable should
+be set accordingly.
+
 
 FILE NAME
 
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -1,4 +1,4 @@
-*various.txt*   For Vim version 7.4.  Last change: 2016 Jan 31
+*various.txt*   For Vim version 7.4.  Last change: 2016 Feb 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -358,6 +358,7 @@ m  *+hangul_input*	Hangul input support 
    *+iconv*		Compiled with the |iconv()| function
    *+iconv/dyn*		Likewise |iconv-dynamic| |/dyn|
 N  *+insert_expand*	|insert_expand| Insert mode completion
+m  *+job*		starting and stopping jobs |job|
 N  *+jumplist*		|jumplist|
 B  *+keymap*		|'keymap'|
 B  *+langmap*		|'langmap'|
--- a/runtime/doc/vi_diff.txt
+++ b/runtime/doc/vi_diff.txt
@@ -1,4 +1,4 @@
-*vi_diff.txt*   For Vim version 7.4.  Last change: 2015 Nov 01
+*vi_diff.txt*   For Vim version 7.4.  Last change: 2016 Feb 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -960,7 +960,7 @@ 7. POSIX compliance				*posix* *posix-co
 In 2005 the POSIX test suite was run to check the compatibility of Vim.  Most
 of the test was executed properly.  There are the few things where Vim
 is not POSIX compliant, even when run in Vi compatibility mode.
-
+							*$VIM_POSIX*
 Set the $VIM_POSIX environment variable to have 'cpoptions' include the POSIX
 flags when Vim starts up.  This makes Vim run as POSIX as it can.  That's
 a bit different from being Vi compatible.
--- a/runtime/plugin/matchparen.vim
+++ b/runtime/plugin/matchparen.vim
@@ -1,6 +1,6 @@
 " Vim plugin for showing matching parens
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2015 Dec 31
+" Last Change: 2016 Feb 09
 
 " Exit quickly when:
 " - this plugin was already loaded (or disabled)
@@ -97,6 +97,7 @@ function! s:Highlight_Matching_Pair()
     if has_getcurpos
       " getcurpos() is more efficient but doesn't exist before 7.4.313.
       let save_cursor = getcurpos()
+let g:saved_cursor = save_cursor
     else
       let save_cursor = winsaveview()
     endif
--- a/runtime/syntax/c.vim
+++ b/runtime/syntax/c.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2015 Mar 05
+" Last Change:	2016 Feb 08
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
@@ -264,7 +264,7 @@ syn keyword	cStorageClass	static registe
 if exists("c_gnu")
   syn keyword	cStorageClass	inline __attribute__
 endif
-if !exists("c_no_c99")
+if !exists("c_no_c99") && s:ft !=# 'cpp'
   syn keyword	cStorageClass	inline restrict
 endif
 if !exists("c_no_c11")
--- a/src/po/eo.po
+++ b/src/po/eo.po
@@ -23,8 +23,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Vim(Esperanto)\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-30 17:54+0200\n"
-"PO-Revision-Date: 2015-07-30 18:00+0200\n"
+"POT-Creation-Date: 2016-02-13 23:42+0100\n"
+"PO-Revision-Date: 2016-02-13 23:45+0100\n"
 "Last-Translator: Dominique PELLÉ <dominique.pelle@gmail.com>\n"
 "Language-Team: \n"
 "Language: eo\n"
@@ -215,6 +215,18 @@ msgstr "Emfazaj simbolaĵoj de %s:"
 msgid "    line=%ld  id=%d  name=%s"
 msgstr "    linio=%ld  id=%d  nomo=%s"
 
+msgid "E897: All channels are in use"
+msgstr "E897: Ĉiuj kanaloj estas uzataj"
+
+msgid "E902: Cannot connect to port"
+msgstr "E902: Ne eblas konekti al pordo"
+
+msgid "E899: Cannot connect to port after retry2"
+msgstr "E899: Ne eblas konekti al pordo post 2 reprovoj"
+
+msgid "E896: read from channel"
+msgstr "E896: lego el kanalo"
+
 msgid "E821: File is encrypted with unknown method"
 msgstr "E821: Dosiero estas ĉifrata per nekonata metodo"
 
@@ -412,9 +424,6 @@ msgstr "E686: Argumento de %s devas esti
 msgid "E712: Argument of %s must be a List or Dictionary"
 msgstr "E712: Argumento de %s devas esti Listo aŭ Vortaro"
 
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Ne eblas uzi malplenan ŝlosilon de Vortaro"
-
 msgid "E714: List required"
 msgstr "E714: Listo bezonata"
 
@@ -529,6 +538,9 @@ msgstr "E110: Mankas ')'"
 msgid "E695: Cannot index a Funcref"
 msgstr "E695: Ne eblas indeksi Funcref"
 
+msgid "E909: Cannot index a special variable"
+msgstr "E909: Ne eblas indeksi specialan variablon"
+
 #, c-format
 msgid "E112: Option name missing: %s"
 msgstr "E112: Mankas nomo de opcio: %s"
@@ -554,7 +566,7 @@ msgid "E697: Missing end of List ']': %s
 msgstr "E697: Mankas fino de Listo ']': %s"
 
 msgid "Not enough memory to set references, garbage collection aborted!"
-msgstr "Ne sufiĉa memory por valorigi referencojn, senrubigado ĉesigita!"
+msgstr "Ne sufiĉa memoro por valorigi referencojn, senrubigado ĉesigita!"
 
 #, c-format
 msgid "E720: Missing colon in Dictionary: %s"
@@ -608,6 +620,15 @@ msgstr "argumento de add()"
 msgid "E699: Too many arguments"
 msgstr "E699: Tro da argumentoj"
 
+msgid "E906: not an open channel"
+msgstr "E906: ne estas malfermita kanalo"
+
+msgid "E999: Invalid callback argument"
+msgstr "E999: Nevalida argumento de reagfunctio"
+
+msgid "E912: cannot use ch_sendexpr() with a raw channel"
+msgstr "E912: ne eblas uzi ch_sendexpr() kun kruda kanalo"
+
 msgid "E785: complete() can only be used in Insert mode"
 msgstr "E785: complete() uzeblas nur en Enmeta reĝimo"
 
@@ -720,6 +741,33 @@ msgstr "E745: Uzo de Listo kiel Nombro"
 msgid "E728: Using a Dictionary as a Number"
 msgstr "E728: Uzo de Vortaro kiel Nombro"
 
+msgid "E910: Using a Job as a Number"
+msgstr "E910: Uzo de Tasko kiel Nombro"
+
+msgid "E913: Using a Channel as a Number"
+msgstr "E913: Uzo de Kanalo kiel Nombro"
+
+msgid "E891: Using a Funcref as a Float"
+msgstr "E891: Uzo de Funcref kiel Glitpunktnombro"
+
+msgid "E892: Using a String as a Float"
+msgstr "E892: Uzo de Ĉeno kiel Glitpunktnombro"
+
+msgid "E893: Using a List as a Float"
+msgstr "E893: Uzo de Listo kiel Glitpunktnombro"
+
+msgid "E894: Using a Dictionary as a Float"
+msgstr "E894: Uzo de Vortaro kiel Glitpunktnombro"
+
+msgid "E907: Using a special value as a Float"
+msgstr "E907: Uzo de speciala valoro kiel Glitpunktnombro"
+
+msgid "E911: Using a Job as a Float"
+msgstr "E911: Uzo de Tasko kiel Glitpunktnombro"
+
+msgid "E914: Using a Channel as a Float"
+msgstr "E914: Uzo de Kanalo kiel Glitpunktnombro"
+
 msgid "E729: using Funcref as a String"
 msgstr "E729: uzo de Funcref kiel Ĉeno"
 
@@ -729,6 +777,9 @@ msgstr "E730: uzo de Listo kiel Ĉeno"
 msgid "E731: using Dictionary as a String"
 msgstr "E731: uzo de Vortaro kiel Ĉeno"
 
+msgid "E908: using an invalid value as a String"
+msgstr "E908: uzo de nevalida valoro kiel Ĉeno"
+
 #, c-format
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706: Nekongrua datumtipo de variablo: %s"
@@ -941,6 +992,13 @@ msgstr "# Valoro de 'encoding' kiam tiu 
 msgid "Illegal starting char"
 msgstr "Nevalida eka signo"
 
+msgid ""
+"\n"
+"# Bar lines, copied verbatim:\n"
+msgstr ""
+"\n"
+"# Linioj komencantaj per |, kopiitaj sen ŝanĝo:\n"
+
 msgid "Save As"
 msgstr "Konservi kiel"
 
@@ -1148,6 +1206,13 @@ msgstr "linio %ld: %s"
 msgid "cmd: %s"
 msgstr "kmd: %s"
 
+msgid "frame is zero"
+msgstr "kadro estas nul"
+
+#, c-format
+msgid "frame at highest level: %d"
+msgstr "kadro je la plej alta nivelo: %d"
+
 #, c-format
 msgid "Breakpoint in \"%s%s\" line %ld"
 msgstr "Kontrolpunkto en \"%s%s\" linio %ld"
@@ -2624,6 +2689,13 @@ msgstr ""
 "E815: Bedaŭrinde, tiu komando estas malŝaltita, ne eblis ŝargi la "
 "bibliotekojn."
 
+msgid ""
+"E895: Sorry, this command is disabled, the MzScheme's racket/base module "
+"could not be loaded."
+msgstr ""
+"E895: Bedaŭrinde, tiu komando estas malŝaltita, ne eblis ŝargi la modulon de "
+"MzScheme racket/base."
+
 msgid "invalid expression"
 msgstr "nevalida esprimo"
 
@@ -3801,15 +3873,12 @@ msgid ""
 "\n"
 "(1) Another program may be editing the same file.  If this is the case,\n"
 "    be careful not to end up with two different instances of the same\n"
-"    file when making changes."
-msgstr ""
-"\n"
-"(1) Alia programo eble redaktas la saman dosieron.\n"
-"    Se jes, estu singarda por ne havi du malsamajn\n"
-"    aperojn de la sama dosiero, kiam vi faros ŝanĝojn."
-
-msgid "  Quit, or continue with caution.\n"
-msgstr "  Eliru, aŭ daŭrigu singarde.\n"
+"    file when making changes.  Quit, or continue with caution.\n"
+msgstr ""
+"\n"
+"(1) Alia programo eble redaktas la saman dosieron. Se jes, estu singarda\n"
+"    por ne havi du malsamajn aperojn de la sama dosiero, kiam vi faros\n"
+"    ŝanĝojn. Eliru aŭ daŭrigu singarde.\n"
 
 msgid "(2) An edit session for this file crashed.\n"
 msgstr "(2) Redakta seanco de tiu dosiero kolapsis.\n"
@@ -4116,20 +4185,11 @@ msgstr "E346: Ne plu trovis dosierujon \
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Ne plu trovis dosieron \"%s\" en serĉvojo"
 
-msgid "Cannot connect to Netbeans #2"
-msgstr "Ne eblas konekti al Netbeans n-ro 2"
-
-msgid "Cannot connect to Netbeans"
-msgstr "Ne eblas konekti al Netbeans"
-
 #, c-format
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
 "E668: Nevalida permeso de dosiero de informo de konekto NetBeans: \"%s\""
 
-msgid "read from Netbeans socket"
-msgstr "lego el kontaktoskatolo de Netbeans"
-
 #, c-format
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Konekto de NetBeans perdita por bufro %ld"
@@ -4584,18 +4644,14 @@ msgstr ""
 "\n"
 "Ne povis ŝalti kuntekston de sekureco por "
 
-msgid "Could not set security context "
-msgstr "Ne povis akiri kuntekston de sekureco "
-
-msgid " for "
-msgstr " por "
-
-#. no enough size OR unexpected error
-msgid "Could not get security context "
-msgstr "Ne povis akiri kuntekston de sekureco "
-
-msgid ". Removing it!\n"
-msgstr ". Ĝi estas foriganta!\n"
+#, c-format
+msgid "Could not set security context %s for %s"
+msgstr "Ne povis ŝalti kuntekston de sekureco %s por %s"
+
+#, c-format
+msgid "Could not get security context %s for %s. Removing it!"
+msgstr ""
+"Ne povis akiri kuntekston de sekureco %s por %s. Gi nun estas forigata!"
 
 msgid ""
 "\n"
@@ -5458,6 +5514,9 @@ msgstr "Neniu sintaksa elemento difinita
 msgid "E390: Illegal argument: %s"
 msgstr "E390: Nevalida argumento: %s"
 
+msgid "syntax iskeyword "
+msgstr "sintakso iskeyword "
+
 #, c-format
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: Nenia sintaksa fasko: %s"
@@ -5535,6 +5594,10 @@ msgid "E789: Missing ']': %s"
 msgstr "E789: Mankas ']': %s"
 
 #, c-format
+msgid "E890: trailing char after ']': %s]%s"
+msgstr "E890: vosta signo post ']': %s]%s"
+
+#, c-format
 msgid "E398: Missing '=': %s"
 msgstr "E398: Mankas '=': %s"
 
@@ -6575,6 +6638,9 @@ msgstr "E46: Ne eblas ŝanĝi nurlegeblan variablon \"%s\""
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
 msgstr "E794: Ne eblas agordi variablon en la sabloludejo: \"%s\""
 
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Ne eblas uzi malplenan ŝlosilon de Vortaro"
+
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Eraro dum legado de erardosiero"
 
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -13,13 +13,13 @@ msgid ""
 msgstr ""
 "Project-Id-Version: vim 7.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-11 20:58+0200\n"
-"PO-Revision-Date:  2015-08-11 22:02+0200\n"
-"Last-Translator:   Vlad Sandrini   <vlad.gently@gmail.com>\n"
-"Language-Team:     Italian                   Antonio Colombo <azc100@gmail."
-"com>                   Vlad Sandrini <vlad.gently@gmail."
-"com>                   Luciano Montanaro <mikelima@cirulla.net>\n"
-"Language: \n"
+"POT-Creation-Date: 2016-02-11 12:10+0100\n"
+"PO-Revision-Date:  2016-02-11 14:42+0200\n"
+"Last-Translator:   Antonio Colombo   <azc100@gmail.com>\n"
+"Language-Team:     Antonio Colombo   <azc100@gmail.com>"
+"                   Vlad Sandrini     <vlad.gently@gmail.com"
+"                   Luciano Montanaro <mikelima@cirulla.net>\n"
+"Language: Italian\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO_8859-1\n"
 "Content-Transfer-Encoding: 8-bit\n"
@@ -204,6 +204,18 @@ msgstr "Segni per %s:"
 msgid "    line=%ld  id=%d  name=%s"
 msgstr "    riga=%ld id=%d, nome=%s"
 
+msgid "E897: All channels are in use"
+msgstr "E897: Tutti i canali sono in uso"
+
+msgid "E902: Cannot connect to port"
+msgstr "E902: Non posso commettermi alla porta"
+
+msgid "E899: Cannot connect to port after retry2"
+msgstr "E899: Non posso commettermi alla porta dopo retry2"
+
+msgid "E896: read from channel"
+msgstr "E896: lettura dal canale"
+
 msgid "E821: File is encrypted with unknown method"
 msgstr "E821: File cifrato con metodo sconosciuto"
 
@@ -400,9 +412,6 @@ msgstr "E686: L'argomento di %s deve ess
 msgid "E712: Argument of %s must be a List or Dictionary"
 msgstr "E712: L'argomento di %s deve essere una Lista o un Dizionario"
 
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Non posso usare una chiave nulla per il Dizionario"
-
 msgid "E714: List required"
 msgstr "E714:  necessaria una Lista"
 
@@ -444,7 +453,7 @@ msgstr "E461: Nome di variabile non amme
 
 # nuovo
 msgid "E806: using Float as a String"
-msgstr "E806: uso di un numero con virgola come stringa"
+msgstr "E806: uso di un Numero-a-virgola-mobile come Stringa"
 
 msgid "E687: Less targets than List items"
 msgstr "E687: Destinazioni pi numerose degli elementi di Lista"
@@ -510,7 +519,7 @@ msgid "E694: Invalid operation for Funcr
 msgstr "E694: Operazione non valida per Funcref"
 
 msgid "E804: Cannot use '%' with Float"
-msgstr "E804: Non si pu usare '%' con un numero con virgola"
+msgstr "E804: Non si pu usare '%' con un Numero-a-virgola-mobile"
 
 msgid "E110: Missing ')'"
 msgstr "E110: Manca ')'"
@@ -518,6 +527,9 @@ msgstr "E110: Manca ')'"
 msgid "E695: Cannot index a Funcref"
 msgstr "E695: Non posso indicizzare un Funcref"
 
+msgid "E909: Cannot index a special variable"
+msgstr "E909: Non posso indicizzare una variabile speciale"
+
 #, c-format
 msgid "E112: Option name missing: %s"
 msgstr "E112: Nome Opzione mancante: %s"
@@ -589,7 +601,7 @@ msgid "E725: Calling dict function witho
 msgstr "E725: Chiamata di funzione dict in assenza di Dizionario: %s"
 
 msgid "E808: Number or Float required"
-msgstr "E808: Ci vuole un numero intero o con virgola"
+msgstr "E808: Ci vuole un Numero o un Numero-a-virgola-mobile"
 
 msgid "add() argument"
 msgstr "argomento di add()"
@@ -597,6 +609,15 @@ msgstr "argomento di add()"
 msgid "E699: Too many arguments"
 msgstr "E699: Troppi argomenti"
 
+msgid "E906: not an open channel"
+msgstr "E906: canale non aperto"
+
+msgid "E999: Invalid callback argument"
+msgstr "E999: Argomento callback non valido"
+
+msgid "E912: cannot use ch_sendexpr() with a raw channel"
+msgstr "E912: non posso usare ch_sendexpr() con un canale grezzo"
+
 msgid "E785: complete() can only be used in Insert mode"
 msgstr "E785: complete() pu essere usata solo in modalit inserimento"
 
@@ -698,7 +719,7 @@ msgid "E677: Error writing temp file"
 msgstr "E677: Errore in scrittura su file temporaneo"
 
 msgid "E805: Using a Float as a Number"
-msgstr "E805: Uso di un numero con virgola come intero"
+msgstr "E805: Uso di un Numero-a-virgola-mobile come Numero"
 
 msgid "E703: Using a Funcref as a Number"
 msgstr "E703: Uso di Funcref come Numero"
@@ -709,6 +730,27 @@ msgstr "E745: Uso di Lista come Numero"
 msgid "E728: Using a Dictionary as a Number"
 msgstr "E728: Uso di Dizionario come Numero"
 
+msgid "E910: Using a Job as a Number"
+msgstr "E910: Uso di Job come Numero"
+
+msgid "E891: Using a Funcref as a Float"
+msgstr "E891: Uso di Funcref come Numero-a-virgola-mobile"
+
+msgid "E892: Using a String as a Float"
+msgstr "E892: Uso di Stringa come Numero-a-virgola-mobile"
+
+msgid "E893: Using a List as a Float"
+msgstr "E893: Uso di Lista come Numero-a-virgola-mobile"
+
+msgid "E894: Using a Dictionary as a Float"
+msgstr "E894: Uso di Dizionario come Numero-a-virgola-mobile"
+
+msgid "E907: Using a special value as a Float"
+msgstr "E907: Uso di valore speciale come Numero-a-virgola-mobile"
+
+msgid "E911: Using a Job as a Float"
+msgstr "E911: Uso di Job come Numero-a-virgola-mobile"
+
 msgid "E729: using Funcref as a String"
 msgstr "E729: uso di Funcref come Stringa"
 
@@ -718,6 +760,10 @@ msgstr "E730: uso di Lista come Stringa"
 msgid "E731: using Dictionary as a String"
 msgstr "E731: uso di Dizionario come Stringa"
 
+# nuovo
+msgid "E908: using an invalid value as a String"
+msgstr "E908: uso di un valore non valido come Stringa"
+
 #, c-format
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706: Tipo di variabile non corrispondente per: %s"
@@ -786,9 +832,11 @@ msgstr "E746: Il nome funzione non corri
 msgid "E129: Function name required"
 msgstr "E129: Nome funzione necessario"
 
+#, c-format
 msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: Il nome funzione deve iniziare con maiuscola o \"s:\": %s" 
-
+msgstr "E128: Il nome funzione deve iniziare con maiuscola o \"s:\": %s"
+
+#, c-format
 msgid "E884: Function name cannot contain a colon: %s"
 msgstr "E884: Il nome della funzione non pu contenere un due punti: %s"
 
@@ -908,6 +956,7 @@ msgstr "E138: Non riesco a scrivere il f
 msgid "Writing viminfo file \"%s\""
 msgstr "Scrivo file viminfo \"%s\""
 
+#, c-format
 msgid "E886: Can't rename viminfo file to %s!"
 msgstr "E886: Non riesco a rinominare il file viminfo a %s!"
 
@@ -929,6 +978,13 @@ msgstr "# Valore di 'encoding' al moment
 msgid "Illegal starting char"
 msgstr "Carattere iniziale non ammesso"
 
+msgid ""
+"\n"
+"# Bar lines, copied verbatim:\n"
+msgstr ""
+"\n"
+"# Righe che iniziano con '|', semplicemente copiate:\n"
+
 msgid "Save As"
 msgstr "Salva con Nome"
 
@@ -1135,6 +1191,13 @@ msgstr "riga %ld: %s"
 msgid "cmd: %s"
 msgstr "com: %s"
 
+msgid "frame is zero"
+msgstr "al livello zero"
+
+#, c-format
+msgid "frame at highest level: %d"
+msgstr "al livello pi alto: %d"
+
 #, c-format
 msgid "Breakpoint in \"%s%s\" line %ld"
 msgstr "Pausa in \"%s%s\" riga %ld"
@@ -1166,8 +1229,7 @@ msgstr "E162: Buffer \"%s\" non salvato 
 
 msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
 msgstr ""
-"Avviso: Entrato in altro buffer inaspettatamente (controllare "
-"autocomandi)"
+"Avviso: Entrato in altro buffer inaspettatamente (controllare autocomandi)"
 
 msgid "E163: There is only one file to edit"
 msgstr "E163: C' un solo file da elaborare"
@@ -1356,6 +1418,7 @@ msgstr "E841: Nome riservato, non usabil
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Comando definito dall'utente %s inesistente"
 
+#, c-format
 msgid "E180: Invalid address type value: %s"
 msgstr "E180: Tipo di indirizzo non valido: %s"
 
@@ -1811,8 +1874,8 @@ msgid ""
 "E513: write error, conversion failed in line %ld (make 'fenc' empty to "
 "override)"
 msgstr ""
-"E513: errore in scrittura, conversione fallita alla riga %ld (rendere "
-"'fenc' nullo per eseguire comunque)"
+"E513: errore in scrittura, conversione fallita alla riga %ld (rendere 'fenc' "
+"nullo per eseguire comunque)"
 
 msgid "E514: write error (file system full?)"
 msgstr "E514: errore in scrittura ('File System' pieno?)"
@@ -1868,16 +1931,16 @@ msgid "[dos format]"
 msgstr "[in formato DOS]"
 
 msgid "[mac]"
-msgstr "[MAC]"
+msgstr "[Mac]"
 
 msgid "[mac format]"
-msgstr "[in formato MAC]"
+msgstr "[in formato Mac]"
 
 msgid "[unix]"
-msgstr "[UNIX]"
+msgstr "[Unix]"
 
 msgid "[unix format]"
-msgstr "[in formato UNIX]"
+msgstr "[in formato Unix]"
 
 msgid "1 line, "
 msgstr "1 riga, "
@@ -2621,6 +2684,13 @@ msgstr ""
 "E815: Spiacente, comando non disponibile, non riesco a caricare librerie "
 "programmi MzScheme."
 
+msgid ""
+"E895: Sorry, this command is disabled, the MzScheme's racket/base module "
+"could not be loaded."
+msgstr ""
+"E815: Spiacente, comando non disponibile, non riesco a caricare modulo "
+"racket/base di MzScheme."
+
 msgid "invalid expression"
 msgstr "espressione non valida"
 
@@ -3788,15 +3858,12 @@ msgid ""
 "\n"
 "(1) Another program may be editing the same file.  If this is the case,\n"
 "    be careful not to end up with two different instances of the same\n"
-"    file when making changes."
-msgstr ""
-"\n"
-"(1) Un altro programma pu essere in edit sullo stesso file.\n"
-"    Se  cos, attenzione a non trovarti con due versioni\n"
-"    differenti dello stesso file a cui vengono apportate modifiche."
-
-msgid "  Quit, or continue with caution.\n"
-msgstr "  Esci, o continua con prudenza.\n"
+"    file when making changes.  Quit, or continue with caution.\n"
+msgstr ""
+"\n"
+"(1) Un altro programma pu essere in edit sullo stesso file.  Se  cos,\n"
+"    attenzione a non finire con due sessioni differenti che modificano lo\n"
+"    stesso file.  Uscire da Vim, o continuare con cautela.\n"
 
 msgid "(2) An edit session for this file crashed.\n"
 msgstr "(2) Una sessione di edit per questo file  finita male.\n"
@@ -3989,7 +4056,7 @@ msgid "E766: Insufficient arguments for 
 msgstr "E766: Argomenti non sufficienti per printf()"
 
 msgid "E807: Expected Float argument for printf()"
-msgstr "E807: Numero con virgola atteso come argomento per printf()"
+msgstr "E807: Numero-a-virgola-mobile atteso come argomento per printf()"
 
 msgid "E767: Too many arguments to printf()"
 msgstr "E767: Troppi argomenti per printf()"
@@ -4100,20 +4167,11 @@ msgstr "E346: Nessun altra directory \"%
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Nessun altro file \"%s\" trovato nel percorso"
 
-msgid "Cannot connect to Netbeans #2"
-msgstr "Non posso connettermi a Netbeans #2"
-
-msgid "Cannot connect to Netbeans"
-msgstr "Non posso connettermi a Netbeans"
-
 #, c-format
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
 "E668: Modalit errata di accesso a file info connessione NetBeans: \"%s\""
 
-msgid "read from Netbeans socket"
-msgstr "lettura da socket Netbeans"
-
 #, c-format
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Connessione NetBeans persa per il buffer %ld"
@@ -4246,7 +4304,8 @@ msgstr "E574: Tipo di registro sconosciu
 msgid ""
 "E883: search pattern and expression register may not contain two or more "
 "lines"
-msgstr "E883: espressione di ricerca e registro dell'espressione non possono "
+msgstr ""
+"E883: espressione di ricerca e registro dell'espressione non possono "
 "contenere due o pi righe"
 
 #, c-format
@@ -4567,18 +4626,11 @@ msgstr ""
 "\n"
 "Non posso impostare il contesto di sicurezza per "
 
-msgid "Could not set security context "
-msgstr "Non riesco a impostare il contesto di sicurezza "
-
-msgid " for "
-msgstr " per "
-
-#. no enough size OR unexpected error
-msgid "Could not get security context "
-msgstr "Non riesco a ottenere il contesto di sicurezza "
-
-msgid ". Removing it!\n"
-msgstr ". Lo rimuovo!\n"
+msgid "Could not set security context %s for %s"
+msgstr "Non posso impostare il contesto di sicurezza %s per %s"
+
+msgid "Could not get security context %s for %s. Removing it!"
+msgstr "Non posso ottenere il contesto di sicurezza %s per %s. Lo rimuovo!"
 
 msgid ""
 "\n"
@@ -4757,6 +4809,7 @@ msgstr "E681: Buffer non caricato"
 msgid "E777: String or List expected"
 msgstr "E777: aspettavo Stringa o Lista"
 
+#, c-format
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: elemento non valido in %s%%[]"
 
@@ -4847,6 +4900,7 @@ msgstr "E554: Errore sintattico in %s{..
 msgid "External submatches:\n"
 msgstr "Sotto-corrispondenze esterne:\n"
 
+#, c-format
 msgid "E888: (NFA regexp) cannot repeat %s"
 msgstr "E888: (NFA regexp) non riesco a ripetere %s"
 
@@ -4867,6 +4921,7 @@ msgstr "E865: (NFA) Fine prematura dell'
 msgid "E866: (NFA regexp) Misplaced %c"
 msgstr "E866: (NFA regexp) %c fuori posto"
 
+#, c-format
 msgid "E877: (NFA regexp) Invalid character class: %ld"
 msgstr "E877: (NFA regexp) Classe di caratteri non valida: %ld"
 
@@ -5171,8 +5226,7 @@ msgstr "Valore errato per CHECKCOMPOUNDP
 
 #, c-format
 msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr ""
-"Flag combinazione diverso in blocco affissi continuo in %s riga %d: %s"
+msgstr "Flag combinazione diverso in blocco affissi continuo in %s riga %d: %s"
 
 #, c-format
 msgid "Duplicate affix in %s line %d: %s"
@@ -5367,9 +5421,11 @@ msgstr "Fatto!"
 msgid "E765: 'spellfile' does not have %ld entries"
 msgstr "E765: 'spellfile' non ha %ld elementi"
 
+#, c-format
 msgid "Word '%.*s' removed from %s"
 msgstr "Parola '%.*s' rimossa da %s"
 
+#, c-format
 msgid "Word '%.*s' added to %s"
 msgstr "Parola '%.*s' aggiunta a %s"
 
@@ -5432,6 +5488,9 @@ msgstr "Nessun elemento sintattico defin
 msgid "E390: Illegal argument: %s"
 msgstr "E390: Argomento non ammesso: %s"
 
+msgid "syntax iskeyword "
+msgstr "syntax iskeyword "
+
 #, c-format
 msgid "E391: No such syntax cluster: %s"
 msgstr "E391: 'cluster' sintattico inesistente: %s"
@@ -5508,6 +5567,9 @@ msgstr "E847: Troppe inclusioni di sinta
 msgid "E789: Missing ']': %s"
 msgstr "E789: Manca ']': %s"
 
+msgid "E890: trailing char after ']': %s]%s"
+msgstr "E890: Caratteri in pi dopo ']': %s]%s"
+
 #, c-format
 msgid "E398: Missing '=': %s"
 msgstr "E398: Manca '=': %s"
@@ -5965,7 +6027,7 @@ msgid ""
 "MacOS X (unix) version"
 msgstr ""
 "\n"
-"Versione MacOS X (unix)"
+"Versione MacOS X (Unix)"
 
 msgid ""
 "\n"
@@ -6537,6 +6599,9 @@ msgid "E794: Cannot set variable in the 
 msgstr ""
 "E794: Non posso impostare la variabile read-only in ambiente protetto: \"%s\""
 
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Non posso usare una chiave nulla per il Dizionario"
+
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Errore leggendo il file errori"
 
@@ -6655,6 +6720,7 @@ msgstr "il dizionario  bloccato"
 msgid "list is locked"
 msgstr "la lista  bloccata"
 
+#, c-format
 msgid "failed to add key '%s' to dictionary"
 msgstr "non non riusciato ad aggiungere la chiave '%s' al dizionario"
 
@@ -6754,8 +6820,8 @@ msgstr "il passo scorrendo un intervallo non pu essere zero"
 
 #, c-format
 msgid "attempt to assign sequence of size greater than %d to extended slice"
-msgstr "tentativo di assegnare una sequenza maggiore di %d a un intervallo "
-"esteso"
+msgstr ""
+"tentativo di assegnare una sequenza maggiore di %d a un intervallo esteso"
 
 #, c-format
 msgid "internal error: no vim list item %d"
@@ -6767,9 +6833,11 @@ msgstr "errore interno: non ci sono abba
 msgid "internal error: failed to add item to list"
 msgstr "errore interno: non ho potuto aggiungere un elemento alla lista"
 
+#, c-format
 msgid "attempt to assign sequence of size %d to extended slice of size %d"
-msgstr "tentativo di assegnare sequenza di dimensione %d a un intervallo "
-" esteso di dimensione %d"
+msgstr ""
+"tentativo di assegnare sequenza di dimensione %d a un intervallo  esteso di "
+"dimensione %d"
 
 msgid "failed to add item to list"
 msgstr "non ho potuto aggiungere un elemento alla lista"
@@ -6907,4 +6975,3 @@ msgid ""
 msgstr ""
 "Impostazione di percorso non riuscita: sys.path non  una lista\n"
 "Dovresti aggiungere vim.VIM_SPECIAL_PATH a sys.path"
-