VV is a Neovim client for macOS. A pure, fast, minimalistic Vim experience with good macOS integration. Optimized for speed and nice font rendering.
VV is available via Homebrew Cask:
$ brew install vv
NOTE: older versions of brew require a special command to install
$ brew cask install vv
It will also install Neovim (if it is not installed) and command line launcher
Or you can download the most recent release from the Releases page.
You need Neovim to run VV. You can install it via Homebrew:
$ brew install neovim. Or you can find Neovim installation instructions here: https://github.com/neovim/neovim/wiki/Installing-Neovim. Neovim version 0.4.0 and higher is required.
$ git clone email@example.com:vv-vim/vv.git $ cd vv $ yarn $ yarn build:electron
This will generate a VV.app binary in the dist directory. Copy VV.app to your /Applications folder and add the CLI launcher
vv to your
You can use the
vv command to run VV in a Terminal. Install it via the
VV → Command Line Launcher... menu item. VV will add the command to your
/usr/local/bin folder. If you prefer another place, you can link the command manually:
ln -s -f /Applications/VV.app/Contents/Resources/bin/vv [dir from $PATH]/vv
vv [options] [file ...]
Options are passed to
nvim. You can check available options in nvim help:
You can setup VV-specific options via the
:VVset command. It works the same as the vim built-in command
:set. For example
:VVset nofullscreen is the same as
:VVset fullscreen=0. You can use
:help set for syntax reference.
fu: Switch to fullscreen mode. You can also toggle fullscreen with
sfu: Use simple or standard fullscreen mode. Simple mode is faster than standard macOS fullscreen mode. It does not have any transition animation. Default:
bold: Allow bold font. You can completely disable bold even if the colorscheme uses it. Default:
italic: Allow italic. Default:
underline: Allow underline. Default:
undercurl: Allow undercurl. Default:
strikethrough: Allow strikethrough. Default:
fontfamily: Font family. Syntax is the same as CSS
font-family. You can use comma-separated list of fonts. It will use first installed font in the list and fallback to default monospace font if none of them installed. Spaces should be excaped by
\. For example:
:VVset fontfamily=Menlo,\ Courier\ New. Default:
fontsize: Font size in pixels. Default:
lineheight: Line height related to font size. Pixel value is
fontsize * lineheight. Default:
letterspacing: Fine-tuning letter spacing in retina pixels. Can be a negative value. For retina screens the value is physical pixels. For non-retina screens it works differently: it divides the value by 2 and rounds it. For example,
:VVset letterspacing=1will make characters 1 pixel wider on retina displays and will do nothing on non-retina displays. Value 2 is 2 physical pixels on retina and 1 physical pixel on non-retina. Default:
width: Window width. Can be a number in pixels or percentage of display width.
height: Window height.
left: Window position from left. Can be a number in pixels or a percentage. Percent values work the same as the
background-positionrule in CSS. For example:
25%means that the vertical line on the window that is 25% from the left will be placed at the line that is 25% from the display's left. 0% — the very left, 100% — the very right, 50% — center.
top: Window position top.
quitoncloselastwindow: Quit app on close last window. Default:
autoupdateinterval: Autoupdate interval in minutes.
0— disable autoupdate. Default:
1440, one day.
openinproject: Open file in existing VV instance if this file is located inside current directory of this instance. By default it will obey
switchbufoption, but you can set
switchbufoverride as a value of this option, for example:
:VVset openinproject=newtab. Possible values are:
0open in new instance, any valid
You can use these settings in your
init.vim or change them any time. You can check if VV is loaded by checking the
if exists('g:vv') VVset nobold VVset noitalic VVset windowheight=100% VVset windowwidth=60% VVset windowleft=0 VVset windowtop=0 endif
VV also sets
set termguicolors on startup.
First, you need start a Webpack watch process in a separate terminal:
Then you can run the app:
You can run tests with
yarn test and ESLint with
yarn lint commands.
It is written on TypeScript, but it uses Babel to build. It does not check types during the build. If you want do do type check manually you can run it with
You can run Neovim remotely in browser via VV Server. More info: packages/server/README.md
Browser Renderer is a separate package used in Electron app and Server.
The VV name comes from the bash shortcut
vv that I use to start Vim.
VV is released under the MIT License.