aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'runtime')
-rw-r--r--runtime/autoload/man.vim44
-rw-r--r--runtime/autoload/msgpack.vim3
-rw-r--r--runtime/autoload/provider/python.vim4
-rw-r--r--runtime/autoload/provider/python3.vim4
-rw-r--r--runtime/autoload/provider/pythonx.vim26
-rw-r--r--runtime/autoload/provider/ruby.vim34
-rw-r--r--runtime/autoload/provider/script_host.py247
-rw-r--r--runtime/autoload/remote/host.vim69
-rw-r--r--runtime/doc/autocmd.txt14
-rw-r--r--runtime/doc/eval.txt66
-rw-r--r--runtime/doc/options.txt3
-rw-r--r--runtime/doc/os_dos.txt279
-rw-r--r--runtime/doc/repeat.txt6
-rw-r--r--runtime/doc/starting.txt2
-rw-r--r--runtime/doc/usr_05.txt5
-rw-r--r--runtime/doc/usr_06.txt2
-rw-r--r--runtime/doc/various.txt4
-rw-r--r--runtime/doc/vim_diff.txt48
-rw-r--r--runtime/doc/windows.txt2
-rw-r--r--runtime/ftplugin/man.vim4
-rw-r--r--runtime/macros/less.bat4
-rwxr-xr-xruntime/macros/less.sh4
-rw-r--r--runtime/plugin/rplugin.vim15
23 files changed, 237 insertions, 652 deletions
diff --git a/runtime/autoload/man.vim b/runtime/autoload/man.vim
index 49663d7e5a..0dfcc424e2 100644
--- a/runtime/autoload/man.vim
+++ b/runtime/autoload/man.vim
@@ -11,6 +11,8 @@ catch /E145:/
" Ignore the error in restricted mode
endtry
+" Load man page {page} from {section}
+" call man#get_page([{section}, ]{page})
function man#get_page(...) abort
let invoked_from_man = (&filetype ==# 'man')
@@ -20,21 +22,14 @@ function man#get_page(...) abort
elseif a:0 > 2
echoerr 'too many arguments'
return
- elseif a:0 == 2
- let [page, sect] = [a:2, 0 + a:1]
- elseif type(1) == type(a:1)
- let [page, sect] = ['<cword>', a:1]
- else
- let [page, sect] = [a:1, '']
endif
- if page == '<cword>'
- let page = expand('<cword>')
- endif
+ let sect = get(a:000, 0)
+ let page = get(a:000, 1, sect)
let [page, sect] = s:parse_page_and_section(sect, page)
- if 0 + sect > 0 && s:find_page(sect, page) == 0
+ if !empty(sect) && s:find_page(sect, page) == 0
let sect = ''
endif
@@ -54,9 +49,9 @@ function man#get_page(...) abort
let thiswin = winnr()
wincmd b
if winnr() > 1
- exe "norm! " . thiswin . "\<C-W>w"
+ exec thiswin . 'wincmd w'
while 1
- if &filetype == 'man'
+ if &filetype ==# 'man'
break
endif
wincmd w
@@ -80,11 +75,11 @@ function man#get_page(...) abort
endif
silent exec 'r!/usr/bin/man '.s:cmd(sect, page).' | col -b'
" Remove blank lines from top and bottom.
- while getline(1) =~ '^\s*$'
- silent keepjumps norm! gg"_dd
+ while getline(1) =~# '^\s*$'
+ silent keepjumps 1delete _
endwhile
- while getline('$') =~ '^\s*$'
- silent keepjumps norm! G"_dd
+ while getline('$') =~# '^\s*$'
+ silent keepjumps $delete _
endwhile
setlocal nomodified
setlocal filetype=man
@@ -118,15 +113,11 @@ endfunction
" Expects a string like 'access' or 'access(2)'.
function s:parse_page_and_section(sect, str) abort
try
- let save_isk = &iskeyword
- setlocal iskeyword-=(,)
- let page = substitute(a:str, '(*\(\k\+\).*', '\1', '')
- let sect = substitute(a:str, '\(\k\+\)(\([^()]*\)).*', '\2', '')
- if sect == page || -1 == match(sect, '^[0-9 ]\+$')
+ let [page, sect] = matchlist(a:str, '\v\C([-.[:alnum:]_]+)%(\(([-.[:alnum:]_]+)\))?')[1:2]
+ if empty(sect)
let sect = a:sect
endif
catch
- let &l:iskeyword = save_isk
echoerr 'man.vim: failed to parse: "'.a:str.'"'
endtry
@@ -134,7 +125,7 @@ function s:parse_page_and_section(sect, str) abort
endfunction
function s:cmd(sect, page) abort
- if 0 + a:sect > 0
+ if !empty(a:sect)
return s:man_sect_arg.' '.a:sect.' '.a:page
endif
return a:page
@@ -142,10 +133,5 @@ endfunction
function s:find_page(sect, page) abort
let where = system('/usr/bin/man '.s:man_find_arg.' '.s:cmd(a:sect, a:page))
- if where !~ "^/"
- if matchstr(where, " [^ ]*$") !~ "^ /"
- return 0
- endif
- endif
- return 1
+ return (where =~# '^ */')
endfunction
diff --git a/runtime/autoload/msgpack.vim b/runtime/autoload/msgpack.vim
index e6022922fe..2bb7ec5b02 100644
--- a/runtime/autoload/msgpack.vim
+++ b/runtime/autoload/msgpack.vim
@@ -395,7 +395,8 @@ endfunction
""
" Dump floating-point value.
function s:msgpack_dump_float(v) abort
- return string(type(a:v) == type({}) ? a:v._VAL : a:v)
+ return substitute(string(type(a:v) == type({}) ? a:v._VAL : a:v),
+ \'\V\^\(-\)\?str2float(''\(inf\|nan\)'')\$', '\1\2', '')
endfunction
""
diff --git a/runtime/autoload/provider/python.vim b/runtime/autoload/provider/python.vim
index b769895357..cb9d5c5296 100644
--- a/runtime/autoload/provider/python.vim
+++ b/runtime/autoload/provider/python.vim
@@ -24,12 +24,10 @@ if s:prog == ''
finish
endif
-let s:plugin_path = expand('<sfile>:p:h').'/script_host.py'
-
" The Python provider plugin will run in a separate instance of the Python
" host.
call remote#host#RegisterClone('legacy-python-provider', 'python')
-call remote#host#RegisterPlugin('legacy-python-provider', s:plugin_path, [])
+call remote#host#RegisterPlugin('legacy-python-provider', 'script_host.py', [])
function! provider#python#Call(method, args)
if s:err != ''
diff --git a/runtime/autoload/provider/python3.vim b/runtime/autoload/provider/python3.vim
index 2952f76b40..f4a751e7a2 100644
--- a/runtime/autoload/provider/python3.vim
+++ b/runtime/autoload/provider/python3.vim
@@ -24,12 +24,10 @@ if s:prog == ''
finish
endif
-let s:plugin_path = expand('<sfile>:p:h').'/script_host.py'
-
" The Python3 provider plugin will run in a separate instance of the Python3
" host.
call remote#host#RegisterClone('legacy-python3-provider', 'python3')
-call remote#host#RegisterPlugin('legacy-python3-provider', s:plugin_path, [])
+call remote#host#RegisterPlugin('legacy-python3-provider', 'script_host.py', [])
function! provider#python3#Call(method, args)
if s:err != ''
diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim
index 022ef19914..05815a4896 100644
--- a/runtime/autoload/provider/pythonx.vim
+++ b/runtime/autoload/provider/pythonx.vim
@@ -5,6 +5,32 @@ endif
let s:loaded_pythonx_provider = 1
+function! provider#pythonx#Require(host) abort
+ let ver = (a:host.orig_name ==# 'python') ? 2 : 3
+
+ " Python host arguments
+ let args = ['-c', 'import sys; sys.path.remove(""); import neovim; neovim.start_host()']
+
+ " Collect registered Python plugins into args
+ let python_plugins = remote#host#PluginsForHost(a:host.name)
+ for plugin in python_plugins
+ call add(args, plugin.path)
+ endfor
+
+ try
+ let channel_id = rpcstart((ver == '2' ?
+ \ provider#python#Prog() : provider#python3#Prog()), args)
+ if rpcrequest(channel_id, 'poll') == 'ok'
+ return channel_id
+ endif
+ catch
+ echomsg v:throwpoint
+ echomsg v:exception
+ endtry
+ throw remote#host#LoadErrorForHost(a:host.orig_name,
+ \ '$NVIM_PYTHON_LOG_FILE')
+endfunction
+
function! provider#pythonx#Detect(major_ver) abort
let host_var = (a:major_ver == 2) ?
\ 'g:python_host_prog' : 'g:python3_host_prog'
diff --git a/runtime/autoload/provider/ruby.vim b/runtime/autoload/provider/ruby.vim
new file mode 100644
index 0000000000..aad8c09d28
--- /dev/null
+++ b/runtime/autoload/provider/ruby.vim
@@ -0,0 +1,34 @@
+" The Ruby provider helper
+if exists('s:loaded_ruby_provider')
+ finish
+endif
+
+let s:loaded_ruby_provider = 1
+
+function! provider#ruby#Require(host) abort
+ " Collect registered Ruby plugins into args
+ let args = []
+ let ruby_plugins = remote#host#PluginsForHost(a:host.name)
+
+ for plugin in ruby_plugins
+ call add(args, plugin.path)
+ endfor
+
+ try
+ let channel_id = rpcstart(provider#ruby#Prog(), args)
+
+ if rpcrequest(channel_id, 'poll') == 'ok'
+ return channel_id
+ endif
+ catch
+ echomsg v:throwpoint
+ echomsg v:exception
+ endtry
+
+ throw remote#host#LoadErrorForHost(a:host.orig_name,
+ \ '$NVIM_RUBY_LOG_FILE')
+endfunction
+
+function! provider#ruby#Prog() abort
+ return 'neovim-ruby-host'
+endfunction
diff --git a/runtime/autoload/provider/script_host.py b/runtime/autoload/provider/script_host.py
deleted file mode 100644
index 416b4070bb..0000000000
--- a/runtime/autoload/provider/script_host.py
+++ /dev/null
@@ -1,247 +0,0 @@
-"""Legacy python/python3-vim emulation."""
-import imp
-import io
-import logging
-import os
-import sys
-
-import neovim
-
-__all__ = ('ScriptHost',)
-
-
-logger = logging.getLogger(__name__)
-debug, info, warn = (logger.debug, logger.info, logger.warn,)
-
-IS_PYTHON3 = sys.version_info >= (3, 0)
-
-if IS_PYTHON3:
- basestring = str
-
- if sys.version_info >= (3, 4):
- from importlib.machinery import PathFinder
-
-
-@neovim.plugin
-class ScriptHost(object):
-
- """Provides an environment for running python plugins created for Vim."""
-
- def __init__(self, nvim):
- """Initialize the legacy python-vim environment."""
- self.setup(nvim)
- # context where all code will run
- self.module = imp.new_module('__main__')
- nvim.script_context = self.module
- # it seems some plugins assume 'sys' is already imported, so do it now
- exec('import sys', self.module.__dict__)
- self.legacy_vim = nvim.with_hook(LegacyEvalHook())
- sys.modules['vim'] = self.legacy_vim
-
- def setup(self, nvim):
- """Setup import hooks and global streams.
-
- This will add import hooks for importing modules from runtime
- directories and patch the sys module so 'print' calls will be
- forwarded to Nvim.
- """
- self.nvim = nvim
- info('install import hook/path')
- self.hook = path_hook(nvim)
- sys.path_hooks.append(self.hook)
- nvim.VIM_SPECIAL_PATH = '_vim_path_'
- sys.path.append(nvim.VIM_SPECIAL_PATH)
- info('redirect sys.stdout and sys.stderr')
- self.saved_stdout = sys.stdout
- self.saved_stderr = sys.stderr
- sys.stdout = RedirectStream(lambda data: nvim.out_write(data))
- sys.stderr = RedirectStream(lambda data: nvim.err_write(data))
-
- def teardown(self):
- """Restore state modified from the `setup` call."""
- for plugin in self.installed_plugins:
- if hasattr(plugin, 'on_teardown'):
- plugin.teardown()
- nvim = self.nvim
- info('uninstall import hook/path')
- sys.path.remove(nvim.VIM_SPECIAL_PATH)
- sys.path_hooks.remove(self.hook)
- info('restore sys.stdout and sys.stderr')
- sys.stdout = self.saved_stdout
- sys.stderr = self.saved_stderr
-
- @neovim.rpc_export('python_execute', sync=True)
- def python_execute(self, script, range_start, range_stop):
- """Handle the `python` ex command."""
- self._set_current_range(range_start, range_stop)
- exec(script, self.module.__dict__)
-
- @neovim.rpc_export('python_execute_file', sync=True)
- def python_execute_file(self, file_path, range_start, range_stop):
- """Handle the `pyfile` ex command."""
- self._set_current_range(range_start, range_stop)
- with open(file_path) as f:
- script = compile(f.read(), file_path, 'exec')
- exec(script, self.module.__dict__)
-
- @neovim.rpc_export('python_do_range', sync=True)
- def python_do_range(self, start, stop, code):
- """Handle the `pydo` ex command."""
- self._set_current_range(start, stop)
- nvim = self.nvim
- start -= 1
- stop -= 1
- fname = '_vim_pydo'
-
- # define the function
- function_def = 'def %s(line, linenr):\n %s' % (fname, code,)
- exec(function_def, self.module.__dict__)
- # get the function
- function = self.module.__dict__[fname]
- while start <= stop:
- # Process batches of 5000 to avoid the overhead of making multiple
- # API calls for every line. Assuming an average line length of 100
- # bytes, approximately 488 kilobytes will be transferred per batch,
- # which can be done very quickly in a single API call.
- sstart = start
- sstop = min(start + 5000, stop)
- lines = nvim.current.buffer.get_line_slice(sstart, sstop, True,
- True)
-
- exception = None
- newlines = []
- linenr = sstart + 1
- for i, line in enumerate(lines):
- result = function(line, linenr)
- if result is None:
- # Update earlier lines, and skip to the next
- if newlines:
- end = sstart + len(newlines) - 1
- nvim.current.buffer.set_line_slice(sstart, end,
- True, True,
- newlines)
- sstart += len(newlines) + 1
- newlines = []
- pass
- elif isinstance(result, basestring):
- newlines.append(result)
- else:
- exception = TypeError('pydo should return a string ' +
- 'or None, found %s instead'
- % result.__class__.__name__)
- break
- linenr += 1
-
- start = sstop + 1
- if newlines:
- end = sstart + len(newlines) - 1
- nvim.current.buffer.set_line_slice(sstart, end, True, True,
- newlines)
- if exception:
- raise exception
- # delete the function
- del self.module.__dict__[fname]
-
- @neovim.rpc_export('python_eval', sync=True)
- def python_eval(self, expr):
- """Handle the `pyeval` vim function."""
- return eval(expr, self.module.__dict__)
-
- def _set_current_range(self, start, stop):
- current = self.legacy_vim.current
- current.range = current.buffer.range(start, stop)
-
-
-class RedirectStream(io.IOBase):
- def __init__(self, redirect_handler):
- self.redirect_handler = redirect_handler
-
- def write(self, data):
- self.redirect_handler(data)
-
- def writelines(self, seq):
- self.redirect_handler('\n'.join(seq))
-
-
-class LegacyEvalHook(neovim.SessionHook):
-
- """Injects legacy `vim.eval` behavior to a Nvim instance."""
-
- def __init__(self):
- super(LegacyEvalHook, self).__init__(from_nvim=self._string_eval)
-
- def _string_eval(self, obj, session, method, kind):
- if method == 'vim_eval':
- if IS_PYTHON3:
- if isinstance(obj, (int, float)):
- return str(obj)
- elif isinstance(obj, (int, long, float)):
- return str(obj)
- return obj
-
-
-# This was copied/adapted from nvim-python help
-def path_hook(nvim):
- def _get_paths():
- return discover_runtime_directories(nvim)
-
- def _find_module(fullname, oldtail, path):
- idx = oldtail.find('.')
- if idx > 0:
- name = oldtail[:idx]
- tail = oldtail[idx+1:]
- fmr = imp.find_module(name, path)
- module = imp.find_module(fullname[:-len(oldtail)] + name, *fmr)
- return _find_module(fullname, tail, module.__path__)
- else:
- return imp.find_module(fullname, path)
-
- class VimModuleLoader(object):
- def __init__(self, module):
- self.module = module
-
- def load_module(self, fullname, path=None):
- # Check sys.modules, required for reload (see PEP302).
- if fullname in sys.modules:
- return sys.modules[fullname]
- return imp.load_module(fullname, *self.module)
-
- class VimPathFinder(object):
- @staticmethod
- def find_module(fullname, path=None):
- "Method for Python 2.7 and 3.3."
- try:
- return VimModuleLoader(
- _find_module(fullname, fullname, path or _get_paths()))
- except ImportError:
- return None
-
- @staticmethod
- def find_spec(fullname, path=None, target=None):
- "Method for Python 3.4+."
- return PathFinder.find_spec(fullname, path or _get_paths(), target)
-
- def hook(path):
- if path == nvim.VIM_SPECIAL_PATH:
- return VimPathFinder
- else:
- raise ImportError
-
- return hook
-
-
-def discover_runtime_directories(nvim):
- rv = []
- for path in nvim.list_runtime_paths():
- if not os.path.exists(path):
- continue
- path1 = os.path.join(path, 'pythonx')
- if IS_PYTHON3:
- path2 = os.path.join(path, 'python3')
- else:
- path2 = os.path.join(path, 'python2')
- if os.path.exists(path1):
- rv.append(path1)
- if os.path.exists(path2):
- rv.append(path2)
- return rv
diff --git a/runtime/autoload/remote/host.vim b/runtime/autoload/remote/host.vim
index 24497b10c2..1aead649a0 100644
--- a/runtime/autoload/remote/host.vim
+++ b/runtime/autoload/remote/host.vim
@@ -2,6 +2,7 @@ let s:hosts = {}
let s:plugin_patterns = {}
let s:remote_plugins_manifest = fnamemodify(expand($MYVIMRC, 1), ':h')
\.'/.'.fnamemodify($MYVIMRC, ':t').'-rplugin~'
+let s:plugins_for_host = {}
" Register a host by associating it with a factory(funcref)
@@ -35,6 +36,9 @@ endfunction
" Get a host channel, bootstrapping it if necessary
function! remote#host#Require(name) abort
+ if empty(s:plugins_for_host)
+ call remote#host#LoadRemotePlugins()
+ endif
if !has_key(s:hosts, a:name)
throw 'No host named "'.a:name.'" is registered'
endif
@@ -123,6 +127,13 @@ function! remote#host#LoadRemotePlugins() abort
endfunction
+function! remote#host#LoadRemotePluginsEvent(event, pattern) abort
+ autocmd! nvim-rplugin
+ call remote#host#LoadRemotePlugins()
+ execute 'silent doautocmd' a:event a:pattern
+endfunction
+
+
function! s:RegistrationCommands(host) abort
" Register a temporary host clone for discovering specs
let host_id = a:host.'-registration-clone'
@@ -138,7 +149,9 @@ function! s:RegistrationCommands(host) abort
endfor
let channel = remote#host#Require(host_id)
let lines = []
+ let registered = []
for path in paths
+ unlet! specs
let specs = rpcrequest(channel, 'specs', path)
if type(specs) != type([])
" host didn't return a spec list, indicates a failure while loading a
@@ -151,9 +164,10 @@ function! s:RegistrationCommands(host) abort
call add(lines, " \\ ".string(spec).",")
endfor
call add(lines, " \\ ])")
+ call add(registered, path)
endfor
echomsg printf("remote/host: %s host registered plugins %s",
- \ a:host, string(map(copy(paths), "fnamemodify(v:val, ':t')")))
+ \ a:host, string(map(registered, "fnamemodify(v:val, ':t')")))
" Delete the temporary host clone
call rpcstop(s:hosts[host_id].channel)
@@ -163,7 +177,7 @@ function! s:RegistrationCommands(host) abort
endfunction
-function! s:UpdateRemotePlugins() abort
+function! remote#host#UpdateRemotePlugins() abort
let commands = []
let hosts = keys(s:hosts)
for host in hosts
@@ -185,10 +199,6 @@ function! s:UpdateRemotePlugins() abort
endfunction
-command! UpdateRemotePlugins call s:UpdateRemotePlugins()
-
-
-let s:plugins_for_host = {}
function! remote#host#PluginsForHost(host) abort
if !has_key(s:plugins_for_host, a:host)
let s:plugins_for_host[a:host] = []
@@ -197,40 +207,25 @@ function! remote#host#PluginsForHost(host) abort
endfunction
-" Registration of standard hosts
-
-" Python/Python3 {{{
-function! s:RequirePythonHost(host) abort
- let ver = (a:host.orig_name ==# 'python') ? 2 : 3
-
- " Python host arguments
- let args = ['-c', 'import sys; sys.path.remove(""); import neovim; neovim.start_host()']
-
- " Collect registered Python plugins into args
- let python_plugins = remote#host#PluginsForHost(a:host.name)
- for plugin in python_plugins
- call add(args, plugin.path)
- endfor
-
- try
- let channel_id = rpcstart((ver == '2' ?
- \ provider#python#Prog() : provider#python3#Prog()), args)
- if rpcrequest(channel_id, 'poll') == 'ok'
- return channel_id
- endif
- catch
- echomsg v:throwpoint
- echomsg v:exception
- endtry
- throw 'Failed to load '. a:host.orig_name . ' host. '.
+function! remote#host#LoadErrorForHost(host, log) abort
+ return 'Failed to load '. a:host . ' host. '.
\ 'You can try to see what happened '.
\ 'by starting Neovim with the environment variable '.
- \ '$NVIM_PYTHON_LOG_FILE set to a file and opening '.
- \ 'the generated log file. Also, the host stderr will be available '.
+ \ a:log . ' set to a file and opening the generated '.
+ \ 'log file. Also, the host stderr will be available '.
\ 'in Neovim log, so it may contain useful information. '.
\ 'See also ~/.nvimlog.'
endfunction
-call remote#host#Register('python', '*.py', function('s:RequirePythonHost'))
-call remote#host#Register('python3', '*.py', function('s:RequirePythonHost'))
-" }}}
+
+" Registration of standard hosts
+
+" Python/Python3
+call remote#host#Register('python', '*',
+ \ function('provider#pythonx#Require'))
+call remote#host#Register('python3', '*',
+ \ function('provider#pythonx#Require'))
+
+" Ruby
+call remote#host#Register('ruby', '*.rb',
+ \ function('provider#ruby#Require'))
diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index e17281821c..ec5818e16f 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -308,6 +308,8 @@ Name triggered by ~
|InsertCharPre| when a character was typed in Insert mode, before
inserting it
+|TextYankPost| when some text is yanked or deleted
+
|TextChanged| after a change was made to the text in Normal mode
|TextChangedI| after a change was made to the text in Insert mode
@@ -722,6 +724,18 @@ InsertCharPre When a character is typed in Insert mode,
It is not allowed to change the text |textlock|.
The event is not triggered when 'paste' is
set.
+ *TextYankPost*
+TextYankPost Just after a |yank| or |deleting| command, but not
+ if the black hole register |quote_| is used nor
+ for |setreg()|. Pattern must be * because its
+ meaning may change in the future.
+ Sets these |v:event| keys:
+ operator
+ regcontents
+ regname
+ regtype
+ Recursion is ignored.
+ It is not allowed to change the text |textlock|.
*InsertEnter*
InsertEnter Just before starting Insert mode. Also for
Replace mode and Virtual Replace mode. The
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index c478a217c1..f3192e108b 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1391,6 +1391,22 @@ v:errors Errors found by assert functions, such as |assert_true()|.
< If v:errors is set to anything but a list it is made an empty
list by the assert function.
+ *v:event* *event-variable*
+v:event Dictionary of event data for the current |autocommand|. The
+ available keys differ per event type and are specified at the
+ documentation for each |event|. The possible keys are:
+ operator The operation performed. Unlike
+ |v:operator|, it is set also for an Ex
+ mode command. For instance, |:yank| is
+ translated to "|y|".
+ regcontents Text stored in the register as a
+ |readfile()|-style list of lines.
+ regname Requested register (e.g "x" for "xyy)
+ or the empty string for an unnamed
+ operation.
+ regtype Type of register as returned by
+ |getregtype()|.
+
*v:exception* *exception-variable*
v:exception The value of the exception most recently caught and not
finished. See also |v:throwpoint| and |throw-variables|.
@@ -1791,8 +1807,10 @@ cursor( {lnum}, {col} [, {off}])
cursor( {list}) Number move cursor to position in {list}
deepcopy( {expr} [, {noref}]) any make a full copy of {expr}
delete( {fname}) Number delete file {fname}
-dictwatcheradd({dict}, {pattern}, {callback}) Start watching a dictionary
-dictwatcherdel({dict}, {pattern}, {callback}) Stop watching a dictionary
+dictwatcheradd( {dict}, {pattern}, {callback})
+ Start watching a dictionary
+dictwatcherdel( {dict}, {pattern}, {callback})
+ Stop watching a dictionary
did_filetype() Number TRUE if FileType autocommand event used
diff_filler( {lnum}) Number diff filler lines about {lnum}
diff_hlID( {lnum}, {col}) Number diff highlighting at {lnum}/{col}
@@ -1812,7 +1830,7 @@ feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer
filereadable( {file}) Number TRUE if {file} is a readable file
filewritable( {file}) Number TRUE if {file} is a writable file
filter( {expr}, {string}) List/Dict remove items from {expr} where
- {string} is 0
+ {string} is 0
finddir( {name}[, {path}[, {count}]])
String find directory {name} in {path}
findfile( {name}[, {path}[, {count}]])
@@ -1894,20 +1912,22 @@ inputdialog( {p} [, {t} [, {c}]]) String like input() but in a GUI dialog
inputlist( {textlist}) Number let the user pick from a choice list
inputrestore() Number restore typeahead
inputsave() Number save and clear typeahead
-inputsecret( {prompt} [, {text}]) String like input() but hiding the text
-insert( {list}, {item} [, {idx}]) List insert {item} in {list} [before {idx}]
+inputsecret( {prompt} [, {text}])
+ String like input() but hiding the text
+insert( {list}, {item} [, {idx}])
+ List insert {item} in {list} [before {idx}]
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}
-jobclose({job}[, {stream}]) Number Closes a job stream(s)
-jobpid({job}) Number Returns pid of a job.
-jobresize({job}, {width}, {height})
+jobclose( {job}[, {stream}]) Number Closes a job stream(s)
+jobpid( {job}) Number Returns pid of a job.
+jobresize( {job}, {width}, {height})
Number Resize {job}'s pseudo terminal window
-jobsend({job}, {data}) Number Writes {data} to {job}'s stdin
-jobstart({cmd}[, {opts}]) Number Spawns {cmd} as a job
-jobstop({job}) Number Stops a job
-jobwait({ids}[, {timeout}]) Number Wait for a set of jobs
+jobsend( {job}, {data}) Number Writes {data} to {job}'s stdin
+jobstart( {cmd}[, {opts}]) Number Spawns {cmd} as a job
+jobstop( {job}) Number Stops a job
+jobwait( {ids}[, {timeout}]) Number Wait for a set of jobs
join( {list} [, {sep}]) String join {list} items into one String
keys( {dict}) List keys in {dict}
len( {expr}) Number the length of {expr}
@@ -1977,12 +1997,12 @@ repeat( {expr}, {count}) String repeat {expr} {count} times
resolve( {filename}) String get filename a shortcut points to
reverse( {list}) List reverse {list} in-place
round( {expr}) Float round off {expr}
-rpcnotify({channel}, {event}[, {args}...])
+rpcnotify( {channel}, {event}[, {args}...])
Sends a |msgpack-rpc| notification to {channel}
-rpcrequest({channel}, {method}[, {args}...])
+rpcrequest( {channel}, {method}[, {args}...])
Sends a |msgpack-rpc| request to {channel}
-rpcstart({prog}[, {argv}]) Spawns {prog} and opens a |msgpack-rpc| channel
-rpcstop({channel}) Closes a |msgpack-rpc| {channel}
+rpcstart( {prog}[, {argv}]) Spawns {prog} and opens a |msgpack-rpc| channel
+rpcstop( {channel}) Closes a |msgpack-rpc| {channel}
screenattr( {row}, {col}) Number attribute at screen position
screenchar( {row}, {col}) Number character at screen position
screencol() Number current cursor column
@@ -6243,12 +6263,22 @@ string({expr}) Return {expr} converted to a String. If {expr} is a Number,
{expr} type result ~
String 'string'
Number 123
- Float 123.123456 or 1.123456e8
- Funcref function('name')
+ Float 123.123456 or 1.123456e8 or
+ `str2float('inf')`
+ Funcref `function('name')`
List [item, item]
Dictionary {key: value, key: value}
Note that in String values the ' character is doubled.
Also see |strtrans()|.
+ Note 2: Output format is mostly compatible with YAML, except
+ for infinite and NaN floating-point values representations
+ which use |str2float()|. Strings are also dumped literally,
+ only single quote is escaped, which does not allow using YAML
+ for parsing back binary strings (including text when
+ 'encoding' is not UTF-8). |eval()| should always work for
+ strings and floats though and this is the only official
+ method, use |msgpackdump()| or |json_encode()| if you need to
+ share data with other application.
*strlen()*
strlen({expr}) The result is a Number, which is the length of the String
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index ced303947b..dbc87a8676 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -5538,6 +5538,9 @@ A jump table for the options with a short description can be found at |Q_op|.
c don't give |ins-completion-menu| messages. For example,
"-- XXX completion (YYY)", "match 1 of 2", "The only match",
"Pattern not found", "Back at original", etc.
+ q use "recording" instead of "recording @a"
+ F don't give the file info when editing a file, like `:silent`
+ was used for the command
This gives you the opportunity to avoid that a change between buffers
requires you to hit <Enter>, but still gives as useful a message as
diff --git a/runtime/doc/os_dos.txt b/runtime/doc/os_dos.txt
deleted file mode 100644
index 1601d65ffd..0000000000
--- a/runtime/doc/os_dos.txt
+++ /dev/null
@@ -1,279 +0,0 @@
-*os_dos.txt* For Vim version 7.4. Last change: 2006 Mar 30
-
-
- VIM REFERENCE MANUAL by Bram Moolenaar
-
-
- *dos* *DOS*
-This file documents some particularities of the Win32
-version of Vim. Also see |os_win32.txt|.
-
-1. File locations |dos-locations|
-2. Using backslashes |dos-backslash|
-3. Standard mappings |dos-standard-mappings|
-4. Screen output and colors |dos-colors|
-5. File formats |dos-file-formats|
-6. :cd command |dos-:cd|
-7. Interrupting |dos-CTRL-Break|
-8. Temp files |dos-temp-files|
-9. Shell option default |dos-shell|
-
-==============================================================================
-1. File locations *dos-locations*
-
-If you keep the Vim executable in the directory that contains the help and
-syntax subdirectories, there is no need to do anything special for Vim to
-work. No registry entries or environment variables need to be set. Just make
-sure that the directory is in your search path, or use a shortcut on the
-desktop.
-
-Your vimrc files ("_vimrc" and "_gvimrc") are normally located one directory
-up from the runtime files. If you want to put them somewhere else, set the
-environment variable $VIM to the directory where you keep them. Example: >
- set VIM=C:\user\piet
-Will find "c:\user\piet\_vimrc".
-Note: This would only be needed when the computer is used by several people.
-Otherwise it's simpler to keep your _vimrc file in the default place.
-
-If you move the executable to another location, you also need to set the $VIM
-environment variable. The runtime files will be found in "$VIM/vim{version}".
-Example: >
- set VIM=E:\vim
-Will find the version 5.4 runtime files in "e:\vim\vim54".
-Note: This is _not_ recommended. The preferred way is to keep the executable
-in the runtime directory.
-
-If you move your executable AND want to put your "_vimrc" and "_gvimrc" files
-somewhere else, you must set $VIM to where you vimrc files are, and set
-$VIMRUNTIME to the runtime files. Example: >
- set VIM=C:\usr\piet
- set VIMRUNTIME=E:\vim\vim54
-Will find "c:\user\piet\_vimrc" and the runtime files in "e:\vim\vim54".
-
-See |$VIM| and |$VIMRUNTIME| for more information.
-
-You can set environment variables for each user separately under
-"Start/Settings/Control Panel->System", or through the properties in the menu
-of "My Computer", under the Environment Tab.
-
-==============================================================================
-2. Using backslashes *dos-backslash*
-
-Using backslashes in file names can be a problem. Vi halves the number of
-backslashes for some commands. Vim is a bit more tolerant and does not remove
-backslashes from a file name, so ":e c:\foo\bar" works as expected. But when
-a backslash occurs before a special character (space, comma, backslash, etc.),
-Vim removes the backslash. Use slashes to avoid problems: ":e c:/foo/bar"
-works fine. Vim replaces the slashes with backslashes internally to avoid
-problems with some MS-DOS programs and Win32 programs.
-
-When you prefer to use forward slashes, set the 'shellslash' option. Vim will
-then replace backslashes with forward slashes when expanding file names. This
-is especially useful when using a Unix-like 'shell'.
-
-==============================================================================
-3. Standard mappings *dos-standard-mappings*
-
-The mappings for CTRL-PageUp and CTRL-PageDown have been removed, they now
-jump to the next or previous tab page |<C-PageUp>| |<C-PageDown>|
-
-If you want them to move to the first and last screen line you can use these
-mappings:
-
-key key code Normal/Visual mode Insert mode ~
-CTRL-PageUp <M-N><M-C-D> H <C-O>H
-CTRL-PageDown <M-N>v L$ <C-O>L<C-O>$
-
-Additionally, these keys are available for copy/cut/paste.
-In the Win32 version, they also use the clipboard.
-
-Shift-Insert paste text (from clipboard) *<S-Insert>*
-CTRL-Insert copy Visual text (to clipboard) *<C-Insert>*
-CTRL-Del cut Visual text (to clipboard) *<C-Del>*
-Shift-Del cut Visual text (to clipboard) *<S-Del>*
-
-These mappings accomplish this (Win32 version of Vim):
-
-key key code Normal Visual Insert ~
-Shift-Insert <M-N><M-T> "*P "-d"*P <C-R><C-O>*
-CTRL-Insert <M-N><M-U> "*y
-Shift-Del <M-N><M-W> "*d
-CTRL-Del <M-N><M-X> "*d
-
-Or these mappings (non-Win32 version of Vim):
-
-key key code Normal Visual Insert ~
-Shift-Insert <M-N><M-T> P "-dP <C-R><C-O>"
-CTRL-Insert <M-N><M-U> y
-Shift-Del <M-N><M-W> d
-CTRL-Del <M-N><M-X> d
-
-When the clipboard is supported, the "* register is used.
-
-==============================================================================
-4. Screen output and colors *dos-colors*
-
-The default output method for the screen is to use bios calls. This works
-right away on most systems. You do not need ansi.sys. You can use ":mode" to
-set the current screen mode. See |:mode|.
-
-To change the screen colors that Vim uses, you can use the |:highlight|
-command. The Normal highlight group specifies the colors Vim uses for normal
-text. For example, to get grey text on a blue background: >
- :hi Normal ctermbg=Blue ctermfg=grey
-See |highlight-groups| for other groups that are available.
-
-A DOS console does not support attributes like bold and underlining. You can
-set the color used in five modes with nine terminal options. Note that this
-is not necessary since you can set the color directly with the ":highlight"
-command; these options are for backward compatibility with older Vim versions.
-The |'highlight'| option specifies which of the five modes is used for which
-action. >
-
- :set t_mr=^V^[\|xxm start of invert mode
- :set t_md=^V^[\|xxm start of bold mode
- :set t_me=^V^[\|xxm back to normal text
-
- :set t_so=^V^[\|xxm start of standout mode
- :set t_se=^V^[\|xxm back to normal text
-
- :set t_us=^V^[\|xxm start of underline mode
- :set t_ue=^V^[\|xxm back to normal text
-
- :set t_ZH=^V^[\|xxm start of italics mode
- :set t_ZR=^V^[\|xxm back to normal text
-
-^V is CTRL-V
-^[ is <Esc>
-You must replace xx with a decimal code, which is the foreground color number
-and background color number added together:
-
-COLOR FOREGROUND BACKGROUND ~
-Black 0 0
-DarkBlue 1 16
-DarkGreen 2 32
-DarkCyan 3 48
-DarkRed 4 64
-DarkMagenta 5 80
-Brown, DarkYellow 6 96
-LightGray 7 112
-DarkGray 8 128 *
-Blue, LightBlue 9 144 *
-Green, LightGreen 10 160 *
-Cyan, LightCyan 11 176 *
-Red, LightRed 12 192 *
-Magenta, LightMagenta 13 208 *
-Yellow, LightYellow 14 224 *
-White 15 240 *
-
-* Depending on the display mode, the color codes above 128 may not be
- available, and code 128 will make the text blink.
-
-When you use 0, the color is reset to the one used when you started Vim
-(usually 7, lightgray on black, but you can override this. If you have
-overridden the default colors in a command prompt, you may need to adjust
-some of the highlight colors in your vimrc---see below).
-This is the default for t_me.
-
-The defaults for the various highlight modes are:
- t_mr 112 reverse mode: Black text (0) on LightGray (112)
- t_md 15 bold mode: White text (15) on Black (0)
- t_me 0 normal mode (revert to default)
-
- t_so 31 standout mode: White (15) text on DarkBlue (16)
- t_se 0 standout mode end (revert to default)
-
- t_czh 225 italic mode: DarkBlue text (1) on Yellow (224)
- t_czr 0 italic mode end (revert to default)
-
- t_us 67 underline mode: DarkCyan text (3) on DarkRed (64)
- t_ue 0 underline mode end (revert to default)
-
-These colors were chosen because they also look good when using an inverted
-display, but you can change them to your liking.
-
-Example: >
- :set t_mr=^V^[\|97m " start of invert mode: DarkBlue (1) on Brown (96)
- :set t_md=^V^[\|67m " start of bold mode: DarkCyan (3) on DarkRed (64)
- :set t_me=^V^[\|112m " back to normal mode: Black (0) on LightGray (112)
-
- :set t_so=^V^[\|37m " start of standout mode: DarkMagenta (5) on DarkGreen
- (32)
- :set t_se=^V^[\|112m " back to normal mode: Black (0) on LightGray (112)
-
-==============================================================================
-5. File formats *dos-file-formats*
-
-If the 'fileformat' option is set to "dos" (which is the default), Vim accepts
-a single <NL> or a <CR><NL> pair for end-of-line (<EOL>). When writing a
-file, Vim uses <CR><NL>. Thus, if you edit a file and write it, Vim replaces
-<NL> with <CR><NL>.
-
-If the 'fileformat' option is set to "unix", Vim uses a single <NL> for <EOL>
-and shows <CR> as ^M.
-
-You can use Vim to replace <NL> with <CR><NL> by reading in any mode and
-writing in Dos mode (":se ff=dos").
-You can use Vim to replace <CR><NL> with <NL> by reading in Dos mode and
-writing in Unix mode (":se ff=unix").
-
-Vim sets 'fileformat' automatically when 'fileformats' is not empty (which is
-the default), so you don't really have to worry about what you are doing.
- |'fileformat'| |'fileformats'|
-
-If you want to edit a script file or a binary file, you should set the
-'binary' option before loading the file. Script files and binary files may
-contain single <NL> characters which Vim would replace with <CR><NL>. You can
-set 'binary' automatically by starting Vim with the "-b" (binary) option.
-
-==============================================================================
-6. :cd command *dos-:cd*
-
-The ":cd" command recognizes the drive specifier and changes the current
-drive. Use ":cd c:" to make drive C the active drive. Use ":cd d:\foo" to go
-to the directory "foo" in the root of drive D. Vim also recognizes UNC names
-if the system supports them; e.g., ":cd \\server\share\dir". |:cd|
-
-==============================================================================
-7. Interrupting *dos-CTRL-Break*
-
-Use CTRL-Break instead of CTRL-C to interrupt searches. Vim does not detect
-the CTRL-C until it tries to read a key.
-
-==============================================================================
-8. Temp files *dos-temp-files*
-
-Vim uses standard Windows functions to obtain a temporary file name (for
-filtering). The first of these directories that exists and in which Vim can
-create a file is used:
- $TMP
- $TEMP
- current directory
-
-==============================================================================
-9. Shell option default *dos-shell*
-
-The default for the 'sh' ('shell') option is "cmd.exe" on Windows.
-If SHELL is defined, Vim uses SHELL instead, and if SHELL is not defined
-but COMSPEC is, Vim uses COMSPEC. Vim starts external commands with
-"<shell> /c <command_name>". Typing CTRL-Z starts a new command
-subshell. Return to Vim with "exit". |'shell'| |CTRL-Z|
-
-If you are running a third-party shell, you may need to set the
-|'shellcmdflag'| ('shcf') and |'shellquote'| ('shq') or |'shellxquote'|
-('sxq') options. Unfortunately, this also depends on the version of Vim used.
-For example, with the MKS Korn shell or with bash, the values of the options
-on Win32 should be:
-
-'shellcmdflag' -c
-'shellquote' (empty)
-'shellxquote' "
-
-For Win32, this starts the shell as:
- <shell> -c "command name >file"
-
-When starting up, Vim checks for the presence of "sh" anywhere in the 'shell'
-option. If it is present, Vim sets the 'shellcmdflag' and 'shellquote' or
-'shellxquote' options will be set as described above.
-
- vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt
index 21b5eef811..b2e935eb3f 100644
--- a/runtime/doc/repeat.txt
+++ b/runtime/doc/repeat.txt
@@ -109,6 +109,12 @@ q{0-9a-zA-Z"} Record typed characters into register {0-9a-zA-Z"}
while executing a register, and it doesn't work inside
a mapping and |:normal|.
+ Note: If the register being used for recording is also
+ used for |y| and |p| the result is most likely not
+ what is expected, because the put will paste the
+ recorded macro and the yank will overwrite the
+ recorded macro.
+
q Stops recording.
Implementation note: The 'q' that stops recording is
not stored in the register, unless it was the result
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index be108d4633..37593aef43 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -380,6 +380,8 @@ accordingly. Vim proceeds in this order:
Places for your personal initializations:
Unix $XDG_CONFIG_HOME/nvim/init.vim
(default for $XDG_CONFIG_HOME is ~/.config)
+ Windows $XDG_CONFIG_HOME/nvim/init.vim
+ (default for $XDG_CONFIG_HOME is ~/AppData/Local)
The files are searched in the order specified above and only the first
one that is found is read.
diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt
index 86fcf0cc2f..5aecf33557 100644
--- a/runtime/doc/usr_05.txt
+++ b/runtime/doc/usr_05.txt
@@ -37,9 +37,10 @@ for you), you can edit it this way: >
If you don't have a vimrc file yet, see |init.vim| to find out where you can
create a vimrc file.
-For Unix and Macintosh this file is always used and is recommended:
+This file is always used and is recommended:
- ~/.config/nvim/init.vim ~
+ ~/.config/nvim/init.vim (Unix and OSX) ~
+ ~/AppData/Local/nvim/init.vim (Windows) ~
The vimrc file can contain all the commands that you type after a colon. The
most simple ones are for setting options. For example, if you want Vim to
diff --git a/runtime/doc/usr_06.txt b/runtime/doc/usr_06.txt
index 1cb3eb8673..b4b495ff9f 100644
--- a/runtime/doc/usr_06.txt
+++ b/runtime/doc/usr_06.txt
@@ -152,7 +152,7 @@ You could also write your own color scheme. This is how you do it:
directory. For Unix, this should work: >
!mkdir -p ~/.config/nvim/colors
- !cp $VIMRUNTIME/colors/morning.vim ~/.vim/colors/mine.vim
+ !cp $VIMRUNTIME/colors/morning.vim ~/.config/nvim/colors/mine.vim
<
This is done from Vim, because it knows the value of $VIMRUNTIME.
diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt
index ff37466a14..3f53e3f507 100644
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -222,6 +222,10 @@ g8 Print the hex values of the bytes used in the
modified, but can be forced with "!". See |termopen()|
and |nvim-terminal-emulator| for more information.
+ To switch to terminal mode automatically:
+>
+ autocmd BufEnter term://* startinsert
+<
*:!cmd* *:!* *E34*
:!{cmd} Execute {cmd} with 'shell'. See also |:terminal|.
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index d3768409f5..17e16911bc 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -21,10 +21,10 @@ these differences.
==============================================================================
1. Configuration *nvim-configuration*
-- Use `$XDG_CONFIG_HOME/nvim/init.vim` instead of `.vimrc` for storing
+- Use `$XDG_CONFIG_HOME/nvim/init.vim` instead of `.vimrc` for storing
configuration.
- Use `$XDG_CONFIG_HOME/nvim` instead of `.vim` to store configuration files.
-- Use `$XDG_DATA_HOME/nvim/shada/main.shada` instead of `.viminfo` for persistent
+- Use `$XDG_DATA_HOME/nvim/shada/main.shada` instead of `.viminfo` for persistent
session information.
==============================================================================
@@ -73,54 +73,56 @@ are always available and may be used simultaneously in separate plugins. The
|nvim-python|).
|mkdir()| behaviour changed:
-1. Assuming /tmp/foo does not exist and /tmp can be written to
+1. Assuming /tmp/foo does not exist and /tmp can be written to
mkdir('/tmp/foo/bar', 'p', 0700) will create both /tmp/foo and /tmp/foo/bar
with 0700 permissions. Vim mkdir will create /tmp/foo with 0755.
-2. If you try to create an existing directory with `'p'` (e.g. mkdir('/',
+2. If you try to create an existing directory with `'p'` (e.g. mkdir('/',
'p')) mkdir() will silently exit. In Vim this was an error.
3. mkdir() error messages now include strerror() text when mkdir fails.
'encoding' cannot be changed after startup.
|string()| and |:echo| behaviour changed:
-1. No maximum recursion depth limit is applied to nested container
+1. No maximum recursion depth limit is applied to nested container
structures.
-2. |string()| fails immediately on nested containers, not when recursion limit
+2. |string()| fails immediately on nested containers, not when recursion limit
was exceeded.
2. When |:echo| encounters duplicate containers like >
let l = []
echo [l, l]
<
- it does not use "[...]" (was: "[[], [...]]", now: "[[], []]"). "..." is
+ it does not use "[...]" (was: "[[], [...]]", now: "[[], []]"). "..." is
only used for recursive containers.
-3. |:echo| printing nested containers adds "@level" after "..." designating
- the level at which recursive container was printed: |:echo-self-refer|.
- Same thing applies to |string()| (though it uses construct like
- "{E724@level}"), but this is not reliable because |string()| continues to
+3. |:echo| printing nested containers adds "@level" after "..." designating
+ the level at which recursive container was printed: |:echo-self-refer|.
+ Same thing applies to |string()| (though it uses construct like
+ "{E724@level}"), but this is not reliable because |string()| continues to
error out.
+4. Stringifyed infinite and NaN values now use |str2float()| and can be evaled
+ back.
-Viminfo text files were replaced with binary (messagepack) ShaDa files.
+Viminfo text files were replaced with binary (messagepack) ShaDa files.
Additional differences:
- |shada-c| has no effect.
- |shada-s| now limits size of every item and not just registers.
-- When reading ShaDa files items are merged according to the timestamp.
+- When reading ShaDa files items are merged according to the timestamp.
|shada-merging|
-- 'viminfo' option got renamed to 'shada'. Old option is kept as an alias for
+- 'viminfo' option got renamed to 'shada'. Old option is kept as an alias for
compatibility reasons.
-- |:wviminfo| was renamed to |:wshada|, |:rviminfo| to |:rshada|. Old
+- |:wviminfo| was renamed to |:wshada|, |:rviminfo| to |:rshada|. Old
commands are still kept.
- |:oldfiles| supports !.
-- When writing (|:wshada| without bang or at exit) it merges much more data,
- and does this according to the timestamp. Vim merges only marks.
+- When writing (|:wshada| without bang or at exit) it merges much more data,
+ and does this according to the timestamp. Vim merges only marks.
|shada-merging|
-- ShaDa file format was designed with forward and backward compatibility in
+- ShaDa file format was designed with forward and backward compatibility in
mind. |shada-compatibility|
-- Some errors make ShaDa code keep temporary file in-place for user to decide
- what to do with it. Vim deletes temporary file in these cases.
+- Some errors make ShaDa code keep temporary file in-place for user to decide
+ what to do with it. Vim deletes temporary file in these cases.
|shada-error-handling|
-- Vim keeps no timestamps at all, neither in viminfo file nor in the instance
+- Vim keeps no timestamps at all, neither in viminfo file nor in the instance
itself.
- ShaDa file keeps search direction (|v:searchforward|), viminfo does not.
@@ -139,8 +141,8 @@ Meta (alt) chords are recognized (even in the terminal).
Note: Meta chords are case-sensitive (<M-a> is distinguished from <M-A>).
-Some `CTRL-SHIFT-...` key chords are distinguished from `CTRL-...` variants (even in
-the terminal). Specifically, the following are known to work:
+Some `CTRL-SHIFT-...` key chords are distinguished from `CTRL-...` variants
+(even in the terminal). Specifically, the following are known to work:
<C-Tab>, <C-S-Tab>
<C-BS>, <C-S-BS>
<C-Enter>, <C-S-Enter>
diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt
index eee171b7da..29c8aaf808 100644
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -706,7 +706,7 @@ can also get to them with the buffer list commands, like ":bnext".
*:bufdo*
:[range]bufdo[!] {cmd} Execute {cmd} in each buffer in the buffer list or if
- [range[ is given only for buffers for which their
+ [range] is given only for buffers for which their
buffer name is in the [range]. It works like doing
this: >
:bfirst
diff --git a/runtime/ftplugin/man.vim b/runtime/ftplugin/man.vim
index 133a28e626..36cd70f203 100644
--- a/runtime/ftplugin/man.vim
+++ b/runtime/ftplugin/man.vim
@@ -24,11 +24,11 @@ setlocal buftype=nofile noswapfile
setlocal nomodifiable readonly bufhidden=hide nobuflisted tabstop=8
if !exists("g:no_plugin_maps") && !exists("g:no_man_maps")
- nnoremap <silent> <buffer> <C-]> :call man#get_page(v:count)<CR>
+ nnoremap <silent> <buffer> <C-]> :call man#get_page(v:count, expand('<cword>'))<CR>
nnoremap <silent> <buffer> <C-T> :call man#pop_page()<CR>
nnoremap <silent> <nowait><buffer> q <C-W>c
if &keywordprg !=# ':Man'
- nnoremap <silent> <buffer> K :call man#get_page(v:count)<CR>
+ nnoremap <silent> <buffer> K :call man#get_page(v:count, expand('<cword>'))<CR>
endif
endif
diff --git a/runtime/macros/less.bat b/runtime/macros/less.bat
index bbe619bc92..7395a70003 100644
--- a/runtime/macros/less.bat
+++ b/runtime/macros/less.bat
@@ -4,7 +4,7 @@ rem Read stdin if no arguments were given.
rem Written by Ken Takata.
if "%1"=="" (
- vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
+ nvim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
) else (
- vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" %*
+ nvim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" %*
)
diff --git a/runtime/macros/less.sh b/runtime/macros/less.sh
index e29958f7ad..125162f10a 100755
--- a/runtime/macros/less.sh
+++ b/runtime/macros/less.sh
@@ -8,9 +8,9 @@ if test -t 1; then
echo "Missing filename" 1>&2
exit
fi
- vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
+ nvim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
else
- vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
+ nvim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
fi
else
# Output is not a terminal, cat arguments or stdin
diff --git a/runtime/plugin/rplugin.vim b/runtime/plugin/rplugin.vim
index 879775ff0e..b4b03032b3 100644
--- a/runtime/plugin/rplugin.vim
+++ b/runtime/plugin/rplugin.vim
@@ -1,5 +1,16 @@
-if exists('g:loaded_remote_plugins') || &cp
+if exists('g:loaded_remote_plugins')
finish
endif
let g:loaded_remote_plugins = 1
-call remote#host#LoadRemotePlugins()
+
+command! UpdateRemotePlugins call remote#host#UpdateRemotePlugins()
+
+augroup nvim-rplugin
+ autocmd!
+ autocmd FuncUndefined *
+ \ call remote#host#LoadRemotePluginsEvent(
+ \ 'FuncUndefined', expand('<amatch>'))
+ autocmd CmdUndefined *
+ \ call remote#host#LoadRemotePluginsEvent(
+ \ 'CmdUndefined', expand('<amatch>'))
+augroup END