Home Explore Blog CI



neovim

24th chunk of `runtime/doc/lua.txt`
880c14911a728266ae82d05ae2ccfc2f0587baa94b4f76ff0000000100000fca
        (`"utf-8"|"utf-16"|"utf-32"`)
      • {index}            (`integer?`)
      • {strict_indexing}  (`boolean?`) default: true

    Return: ~
        (`integer`)

vim.system({cmd}, {opts}, {on_exit})                            *vim.system()*
    Runs a system command or throws an error if {cmd} cannot be run.

    Examples: >lua
        local on_exit = function(obj)
          print(obj.code)
          print(obj.signal)
          print(obj.stdout)
          print(obj.stderr)
        end

        -- Runs asynchronously:
        vim.system({'echo', 'hello'}, { text = true }, on_exit)

        -- Runs synchronously:
        local obj = vim.system({'echo', 'hello'}, { text = true }):wait()
        -- { code = 0, signal = 0, stdout = 'hello\n', stderr = '' }
<

    See |uv.spawn()| for more details. Note: unlike |uv.spawn()|, vim.system
    throws an error if {cmd} cannot be run.

    Parameters: ~
      • {cmd}      (`string[]`) Command to execute
      • {opts}     (`vim.SystemOpts?`) Options:
                   • cwd: (string) Set the current working directory for the
                     sub-process.
                   • env: table<string,string> Set environment variables for
                     the new process. Inherits the current environment with
                     `NVIM` set to |v:servername|.
                   • clear_env: (boolean) `env` defines the job environment
                     exactly, instead of merging current environment.
                   • stdin: (string|string[]|boolean) If `true`, then a pipe
                     to stdin is opened and can be written to via the
                     `write()` method to SystemObj. If string or string[] then
                     will be written to stdin and closed. Defaults to `false`.
                   • stdout: (boolean|function) Handle output from stdout.
                     When passed as a function must have the signature
                     `fun(err: string, data: string)`. Defaults to `true`
                   • stderr: (boolean|function) Handle output from stderr.
                     When passed as a function must have the signature
                     `fun(err: string, data: string)`. Defaults to `true`.
                   • text: (boolean) Handle stdout and stderr as text.
                     Replaces `\r\n` with `\n`.
                   • timeout: (integer) Run the command with a time limit.
                     Upon timeout the process is sent the TERM signal (15) and
                     the exit code is set to 124.
                   • detach: (boolean) If true, spawn the child process in a
                     detached state - this will make it a process group
                     leader, and will effectively enable the child to keep
                     running after the parent exits. Note that the child
                     process will still keep the parent's event loop alive
                     unless the parent process calls |uv.unref()| on the
                     child's process handle.
      • {on_exit}  (`fun(out: vim.SystemCompleted)?`) Called when subprocess
                   exits. When provided, the command runs asynchronously.
                   Receives SystemCompleted object, see return of
                   SystemObj:wait().

    Return: ~
        (`vim.SystemObj`) Object with the fields:
        • cmd (string[]) Command name and args
        • pid (integer) Process ID
        • wait (fun(timeout: integer|nil): SystemCompleted) Wait for the
          process to complete, including any open handles for background
          processes (e.g., `bash -c 'sleep 10 &'`). To avoid waiting for
          handles, set stdout=false and stderr=false. Upon timeout the process
          is sent the KILL signal (9) and the exit code is set to 124. Cannot
          be called in |api-fast|.
          • SystemCompleted is an object with the fields:
            • code: (integer)
            • signal: (integer)
            • stdout: (string), nil if

Title: Lua vim API: vim.system() Details
Summary
This section provides detailed information about the `vim.system()` function in the Neovim Lua API. It elaborates on the parameters, including options for setting the working directory, environment variables, handling stdin/stdout/stderr, timeout, and detachment. It also describes the return value (`vim.SystemObj`) and the `SystemCompleted` object returned by the `wait()` method, which includes information about the process's exit code, signal, and output.