The job control feature of Neovim introduced great multitasking support that added new capabilities and enhanced important tasks by allowing them to be done asynchronously (e.g.: online linting, as in ALE for instance). This improved the overall user experience and reduced editing latency.

We aim to add multiprocessing support to VimL, the built-in scripting language of Neovim, by allowing functions to be invoked asynchronously in separate processes and enabling the retrieval of their results through callbacks and by waiting for them on demand in the parent process. This multiprocessing feature will have a noticeable positive impact on the performance of parallelizable computations and tasks.

This is achieved by introducing the following built-in multiprocessing primitives based on the job control feature:

  • call_async({callee}, {args}[, {opts}])
  • call_parallel({callee}, {arglists}[, {opts}])
  • call_wait({ids}[, {timeout}])
  • :&:{cmd} (invokes {cmd} asynchronously; has a custom predefined handler for :[l]vimgrep[add] commands)

Complementing the multiprocessing feature, is the context feature, which is a set of built-in functions to save and restore parts of the current editor state.

Organization

Student

abdelhakeem

Mentors

  • Justin Keyes
close

2019