func (v *Nvim) Serve() error {
	v.readMu.Lock()
	defer v.readMu.Unlock()
	return v.ep.Serve()
}
Serve serves incoming mesages from the peer. Serve blocks until Nvim
disconnects or there is an error.

By default, the NewChildProcess and Dial functions start a goroutine to run Serve().
Callers of the low-level New function are responsible for running Serve().
package nvim
import (
	"bytes"
	"context"
	"errors"
	"fmt"
	"io"
	"log"
	"net"
	"os/exec"
	"reflect"
	"strings"
	"sync"
	"syscall"
	"time"
	"github.com/neovim/go-client/msgpack"
	"github.com/neovim/go-client/msgpack/rpc"
)
var embedProcAttr *syscall.SysProcAttr
type Nvim struct {
	ep *rpc.Endpoint
	cmd         *exec.Cmd
	serveCh     chan error
	channelID   int
	channelIDMu sync.Mutex
	readMu sync.Mutex
}