Skip to content
/
Try

A Neovim-style editor without modes, with mouse and gestures

Open a folder, quick open, type, multiple cursors, save.

If you like Neovim for what surrounds the editing but not the modes, you have two choices. You can bend Neovim toward modeless editing with mappings, or you can use an editor that is modeless by design and ships the IDE features itself.

Skink is the second kind: no Normal mode, mouse and trackpad first, and LSP, tree-sitter, git, a terminal and AI agents built in. Like Neovim, it lives in the terminal, works over SSH and starts fast.

Partly. Vim has an old “easy” mode (vim -y / evim) that keeps you in Insert mode and maps common shortcuts. In Neovim you can map desktop keys in Insert mode:

-- init.lua: a few desktop-style keys in Insert mode
vim.keymap.set("i", "<C-s>", "<Cmd>write<CR>")
vim.keymap.set("i", "<C-z>", "<Cmd>undo<CR>")
vim.keymap.set("i", "<C-q>", "<Cmd>quit<CR>")
vim.opt.mouse = "a"
vim.opt.keymodel = "startsel,stopsel" -- Shift+arrows start a selection
vim.opt.selectmode = "mouse,key" -- typing replaces the selection

This gets you far, but plugins, help and documentation all assume Normal mode. You keep hitting places where Esc is expected. It is a workaround, not a different editor.

  • Every printable key types. Commands use Ctrl, Alt or function keys.
  • Selection is Shift+movement or a mouse drag, and typing replaces it.
  • There is never a state where you have to look at the screen to know what a key will do.

The trade-off is real: Vim’s operator + motion grammar (ci", dap, .) is more expressive than chorded shortcuts. Modeless editors close the gap with multiple cursors, syntax-aware selection and a command palette.

Every key in the table also has a typed command: press Ctrl+E, type the name, press Enter. If you think in ex commands, that may feel more natural than chords. See typed commands.

Vim habit Skink key Typed command
ciw, viw Ctrl+D selects the word, then type :addcursor
vi(, vaf Alt+O grows the selection to the enclosing syntax node, Alt+I shrinks it :expand / :contract
* then cgn and . Ctrl+D repeatedly adds a cursor at each next match; Alt+X skips one :addcursor / :skipcursor
Visual block Ctrl-v Alt+Shift+↑ / ↓ adds cursors above / below :cursorabove / :cursorbelow
dd, yy, p Ctrl+X / Ctrl+C with no selection act on the line; Ctrl+V pastes :cut / :copy / :paste
ddp, :m Alt+↑ / ↓ move lines :moveup / :movedown
gcc Ctrl+/ or Alt+/ :comment
% Ctrl+] :bracket
qq … @q Ctrl+U to record, Ctrl+J to replay :record / :replay
za Alt+M folds by indentation :fold
Ctrl-o / Ctrl-i Alt+U / Alt+Shift+U :back / :forward
:cnext over diagnostics F6 / Shift+F6; Shift+F8 lists them :nextproblem / :prevproblem, :problems
:w, :q, :e, :vs Still work in the command line (Ctrl+E) :w, :q, :e, :vs

Every action has a name you can bind in ~/.config/skink/bindings.json, in Micro’s format. There, a lowercase letter after Alt- means the plain key, so Alt-j is Alt+J:

{
"Alt-j": "MoveLinesDown",
"Alt-k": "MoveLinesUp",
"Ctrl-5": "JumpToMatchingBrace"
}

This example replaces the defaults for Alt+J (peek definition) and Alt+K (hover). Those stay reachable as :peek and :hover.

This is where a modeless design pays off: the mouse never fights a mode.

  • Click to place the cursor, drag to select, Alt+click to add or remove a cursor.
  • Wheel scrolls; Shift+wheel or a horizontal trackpad swipe scrolls long lines sideways, with line numbers staying put.
  • Tabs: click to switch, middle-click or the x to close.
  • Splits: drag the divider or a pane’s title row to resize; click a pane to focus it.
  • Gutter: click a git mark to peek at the change (stage, unstage or revert from there), click a fold mark to open it.
  • Sticky scroll headers: click one to jump to that block.
  • Merge conflicts: click “Accept ours | theirs | both” above the block.
  • Terminal tabs: programs inside get the mouse too; Ctrl+click a file:line to open it.

All of it works over SSH and inside tmux (with set -g mouse on). See mouse and trackpad.

  • LSP for Rust, TS/JS, Python, Go, Dart and Zig, started on first use: completion, hover, definition, references, code actions, rename, format, inlay hints.
  • tree-sitter colours for 19 languages, with injections (code in Markdown fences, script and style in HTML).
  • Fuzzy quick open (Alt+P, or :recent) and project search (Alt+S) that respect .gitignore.
  • Git: gutter, hunks, blame, panel, diff, conflicts.
  • Terminal tabs and a bottom dock (Alt+T).
  • AI agents over ACP: Claude Code, Gemini CLI, Codex and more.
  • A debugger (DAP) for gdb, lldb, debugpy and Delve.
Terminal window
curl -fsSL https://skink.cc/install.sh | sh
skink .

Keep Neovim installed; nothing conflicts. Compare in detail: Skink vs Neovim, Skink vs Helix.