Skip to content

Getting Started

John Donaghy edited this page Mar 11, 2026 · 1 revision

Getting Started

Installation

Linux — Pre-built packages

Pre-built packages are published automatically on every release:

→ Download latest release

Option A — .deb package (recommended for Ubuntu/Debian)

sudo dpkg -i vimcode_*.deb
sudo apt -f install   # pulls in any missing GTK4 runtime libraries

Requires Ubuntu 24.04+ or any distro with GTK 4.10+.

Option B — raw binary

# Install runtime dependencies:
sudo apt install libgtk-4-1 libglib2.0-0 libpango-1.0-0 libcairo2
# Then run:
chmod +x vimcode-linux-x86_64
./vimcode-linux-x86_64

Option C — Flatpak

flatpak install vimcode.flatpak
flatpak run io.github.jdonaghy.VimCode

The Flatpak bundles GTK4 and all dependencies — works on any Linux distro with Flatpak installed.

Note: Ubuntu 22.04 ships GTK 4.6 which is too old for the .deb and raw binary; use the Flatpak or upgrade to 24.04+.

Building from source

Prerequisites — GTK4 development libraries (TUI mode works without GTK4):

Platform Install command
Ubuntu/Debian sudo apt install libgtk-4-dev build-essential pkg-config
Fedora sudo dnf install gtk4-devel gcc pkg-config
Arch sudo pacman -S gtk4 base-devel pkgconf
openSUSE sudo zypper install gtk4-devel gcc pkg-config
macOS brew install gtk4 pkg-config
Windows (MSYS2) pacman -S mingw-w64-x86_64-gtk4 mingw-w64-x86_64-pkgconf mingw-w64-x86_64-gcc

Platform notes:

  • macOS: GTK4 works via Homebrew; this is not a native AppKit app
  • Windows: Use the MSYS2 MinGW64 shell and set rustup default stable-x86_64-pc-windows-gnu
cargo build
cargo run -- <file>                         # GTK window
cargo run -- --tui <file>                   # Terminal UI (alias: -t)
cargo run -- --tui --debug /tmp/v.log       # TUI with debug log

First launch

GTK mode (default)

Run vimcode or vimcode <file> to open the GTK window. You'll see:

  • Activity bar (left edge) — icons for Explorer, Search, Git, Debug, Extensions, AI, Settings
  • File explorer (sidebar) — tree view of the current directory
  • Editor area — syntax-highlighted code with line numbers
  • Status bar (bottom) — mode indicator, file info, cursor position, git branch

TUI mode

Run vimcode --tui or vimcode -t to run in the terminal. Same features, different renderer. The layout mirrors the GTK version with activity bar, sidebar, and editor area rendered in the terminal.

Modes

VimCode starts in Normal mode (Vim mode) or Edit mode (VSCode mode, if configured).

Mode How to enter Purpose
Normal Escape Navigation, commands, operators
Insert i, a, o, etc. Text entry
Visual v (char), V (line), Ctrl-V (block) Selection
Command : Ex commands
Search / or ? Find text

Press Alt-M at any time to toggle between Vim mode and VSCode mode.

Essential keys (Vim mode)

Key Action
hjkl Move cursor
i / Escape Enter / exit Insert mode
:w Save
:q Quit (close tab)
:wq Save and quit
dd Delete line
yy Yank (copy) line
p Paste
u / Ctrl-R Undo / redo
/pattern Search
Ctrl-P Fuzzy file finder
Ctrl-T Toggle terminal
Ctrl-B Toggle sidebar

Essential keys (VSCode mode)

Key Action
Ctrl-S Save
Ctrl-Z / Ctrl-Y Undo / redo
Ctrl-C / Ctrl-X / Ctrl-V Copy / cut / paste
Ctrl-A Select all
Ctrl-/ Toggle comment
Ctrl-P Fuzzy file finder
F1 / Ctrl-Shift-P Command palette
Ctrl-G Go to line
Alt-M Switch to Vim mode

Opening files and folders

vimcode file.rs              # Open a single file
vimcode .                    # Open current directory
vimcode /path/to/project     # Open a project folder

Or from within VimCode:

  • :e <file> — open a file
  • :OpenFolder <path> — open a directory as workspace root
  • Ctrl-P — fuzzy file finder

Installing language support

When you open a file for a language without an LSP server, VimCode shows:

No Python Language Support extension — :ExtInstall python  (N to dismiss)

Run :ExtInstall python (or the suggested extension name) to install. Extensions are fetched from the vimcode-ext registry.

Browse available extensions: click the extensions icon (bottom of the activity bar) or run :ExtList.

Next steps

Clone this wiki locally