# Skink > Skink is a free, open-source (MIT OR Apache-2.0), modeless code editor that runs in the terminal on Linux, macOS and Windows. It uses Micro / VS Code style keys (Ctrl+S save, Ctrl+Q quit, Ctrl+C copy) with full mouse support, and ships language servers, tree-sitter highlighting, git, terminal tabs, a debugger and AI agents (Agent Client Protocol) in one ~18 MB binary. Current version: 0.9.0 (alpha). Install: `curl -fsSL https://skink.cc/install.sh | sh` (Linux, macOS) or `irm https://skink.cc/install.ps1 | iex` (Windows PowerShell). Run `skink`, `skink file`, `skink dir` or `skink file:line:col`. Quit with Ctrl+Q. Inside the editor, Ctrl+E opens the command line and `help` opens the manual. Source code: https://github.com/xuckless/skink. Every page below is also available as HTML without the .md suffix. Everything in one file: https://skink.cc/llms-full.txt ## Get started - [Install](https://skink.cc/start/install.md): Install Skink with one command on Linux, macOS or Windows, or build it with cargo. Covers installer options, unsigned binaries, upgrading and uninstalling. - [Quick start](https://skink.cc/start/quick-start.md): Get going with Skink in five minutes: open a file, a folder or file:line:col, learn the ten keys you need, use the mouse, and find help in the command line. - [Quit and save](https://skink.cc/start/exit-skink.md): How to quit Skink: Ctrl+Q closes the tab and quits on the last one, with a save prompt for unsaved changes. Also closing terminal tabs, panes and quitting all. ## Everyday editing - [Mouse and trackpad](https://skink.cc/editing/mouse-and-trackpad.md): Skink supports the mouse: click to place the cursor, drag to select, Alt+click for more cursors, Shift+wheel or trackpad to scroll sideways, drag to resize. - [Multiple cursors](https://skink.cc/editing/multiple-cursors.md): Edit in several places at once in Skink: Ctrl+D selects the next match, Alt+Shift+Up/Down add cursors above and below, Alt+click adds one, Esc goes back to one. - [Find and replace](https://skink.cc/editing/find-and-replace.md): Search the current file in Skink with Ctrl+F, step through matches with Ctrl+N and Ctrl+P, toggle regex, case and whole word, and replace all in one undo step. - [Typed commands](https://skink.cc/editing/typed-commands.md): Every Skink key also runs as a typed command: press Ctrl+E, type a short name like comment or dotfiles, press Enter. The fallback for macOS Option, tmux and keyboard layouts. - [Splits and docks](https://skink.cc/editing/splits-and-docks.md): Split Skink side by side with Ctrl+\ or top and bottom with Alt+\, move between or resize panes, and dock a shell at the bottom or the agent panel at the right. - [Hidden files and panels](https://skink.cc/editing/hidden-files-and-panels.md): Show dotfiles in Skink's file tree with Alt+H or :hidden, bring back a hidden sidebar with Ctrl+B or F8, leave zoom mode, and see why the tree or status line disappeared. - [Text size and zoom](https://skink.cc/editing/zoom-and-text-size.md): How to make Skink's text bigger or smaller: font size belongs to your terminal (Ctrl+= and Ctrl+-), :fontsize for Kitty and EveryAI, Alt+Z or :zoom to zoom a pane. - [Sessions and folding](https://skink.cc/editing/sessions-and-folding.md): Skink reopens your files, splits and shells when you run it in a project again. Fold code with Alt+M, unfold all with Alt+Shift+M, sticky scroll and rulers. ## Code and projects - [Language servers](https://skink.cc/code/code-intelligence.md): Set up language servers for Skink (rust-analyzer, TypeScript, pyright, gopls, zls, Dart): completion, hover, go to definition, references, rename and format. - [Project search](https://skink.cc/code/project-search.md): Search every file in your project with Alt+S or :grep, replace across files via a preview with :greprep, and search or rewrite code by its shape with :sgrep. - [Refactoring](https://skink.cc/code/refactoring.md): Refactor safely in Skink: rename a symbol everywhere, move files with import updates, extract a variable or function, safe delete, all reviewed in a preview. - [Build and test tasks](https://skink.cc/code/tasks.md): Run build, test and script tasks with Shift+F10: tasks.json (VS Code subset), detected cargo, npm, go, zig, pytest and make tasks, with errors in the gutter. ## Terminal, Git and AI - [Terminal tabs](https://skink.cc/tools/terminal-tabs.md): Open a shell or any program in a Skink terminal tab with Shift+F12, flip back with F12, search the scrollback, open file:line links and jump between prompts. - [Git](https://skink.cc/tools/git.md): Use git without leaving Skink: gutter marks, stage or revert single hunks, inline blame, side-by-side diff, the git panel, commits, branches, stash, conflicts. - [AI agents](https://skink.cc/tools/ai-agents.md): Use Claude Code, Gemini CLI, opencode, Goose, Codex or Antigravity in Skink: ACP setup, the Ctrl+G prompt box, inline diffs, the agent panel and terminal CLIs. - [Skink as $EDITOR](https://skink.cc/tools/skink-as-editor.md): Make Skink the editor git, Claude Code, Codex, crontab and your shell open: two lines of setup, a lean mode for commit messages and rebase lists, and tabs in Skink. - [Inside EveryAI](https://skink.cc/tools/everyai.md): When EveryAI starts Skink, Skink hands language servers and AI over to it automatically. What changes, the two environment variables, and what if it fails. ## Remote - [Editing over SSH](https://skink.cc/remote/ssh-remote-editing.md): Use Skink on a remote server over SSH, mosh or tmux: install the single binary without sudo, copy to your local clipboard with OSC 52, save root-owned files. ## Customize - [Settings](https://skink.cc/customize/configuration.md): Where Skink's config lives, how to edit settings.json and bindings.json in Micro's format, the main settings and defaults, and how to bring over a Micro config. - [Key bindings](https://skink.cc/customize/keybindings.md): Customize Skink's shortcuts in bindings.json, Micro's format: key names, chained actions, command shortcuts, examples, and keys that need the kitty protocol. - [macOS Option key](https://skink.cc/customize/macos-option-key.md): Why Option+key types characters like Ω on a Mac instead of running Skink's Alt shortcuts, how Skink translates them, how to set up your terminal, and typed commands that need no Alt. ## Reference - [Keyboard shortcuts](https://skink.cc/reference/shortcuts.md): Every default key binding in Skink, the modeless terminal editor, grouped by task, with the action name to rebind it in bindings.json. - [Commands](https://skink.cc/reference/commands.md): Every command you can type on Skink's command line (Ctrl+E) and every bindable action, generated from the editor's source. - [Manual](https://skink.cc/reference/manual.md): Skink's built-in manual, the same text you get with :help inside the editor, split into short topics. - [Manual: Editing](https://skink.cc/reference/manual/editing.md): Keys follow Micro; [every key](keys) has a list. - [Manual: Multiple cursors](https://skink.cc/reference/manual/multiple-cursors.md): | Key | Does | |---|---| | Ctrl-D (or Alt-N) | select the word; again: add a cursor at the next match | | Alt-X | skip this match | | Alt-Sh - [Manual: Typed commands for every key](https://skink.cc/reference/manual/typed-commands-for-every-key.md): A terminal, the OS or a keyboard layout can swallow any key (macOS Option, the Windows console, tmux). So every key also has a command: pres - [Manual: File tree](https://skink.cc/reference/manual/file-tree.md): F8 shows the tree, moves the keys into it, and back. Ctrl-B hides or shows it. - [Manual: Files on disk](https://skink.cc/reference/manual/files-on-disk.md): - **Saves are atomic**: a temp file and a rename, permissions and symlinks kept, so a crash or a full disk never leaves half a file. - **Enc - [Manual: Previews](https://skink.cc/reference/manual/previews.md): Alt-V (or `:preview`) on a Markdown file opens a live, rendered preview in a tab. It follows your edits and opens scrolled to where you were - [Manual: Code intelligence](https://skink.cc/reference/manual/code-intelligence.md): Language servers start on first use, when installed: rust-analyzer, typescript-language-server, basedpyright or pyright, gopls, `dart langua - [Manual: Git](https://skink.cc/reference/manual/git.md): Marks next to the line numbers compare the file with the index: a thin green bar added, a thick blue bar changed, a red mark deleted. Dotted - [Manual: Tasks](https://skink.cc/reference/manual/tasks.md): | Key | Does | |---|---| | Shift-F10 | pick a task and run it in a terminal tab (`:task [LABEL]`) | | Shift-F9 | run the last task again (`: - [Manual: Debugging](https://skink.cc/reference/manual/debugging.md): | Key | Does | |---|---| | F5 | start (the last configuration, else pick one), or continue | | Shift-F5 | stop the program (twice: kill the - [Manual: Terminals](https://skink.cc/reference/manual/terminals.md): Terminal tabs are real terminal emulators (colours, mouse, full-screen programs), so any CLI runs unchanged, AI ones included: `:term claude - [Manual: AI](https://skink.cc/reference/manual/ai.md): Skink talks to an ACP agent it starts in the background (Claude Code, Gemini CLI, opencode, Goose, Antigravity, Codex), or to EveryAI's agen - [Manual: Skink as your $EDITOR](https://skink.cc/reference/manual/skink-as-your-editor.md): ```sh git config --global core.editor skink export EDITOR=skink VISUAL=skink ``` - [Manual: Remote development](https://skink.cc/reference/manual/remote-development.md): ```sh skink ssh user@host:~/app skink ssh pi ``` - [Manual: Packages and languages](https://skink.cc/reference/manual/packages-and-languages.md): Built in: Rust, TypeScript/TSX, JavaScript, Python, Go, JSON, TOML, Bash, Markdown and YAML. Everything else is a package: Zig, Dart, HTML, - [Manual: Themes, icons and fonts](https://skink.cc/reference/manual/themes-icons-and-fonts.md): `:theme` lists every theme and previews the one you move to; Enter picks it, Esc puts the old one back. `:theme NAME` switches straight away - [Manual: Settings and key bindings](https://skink.cc/reference/manual/settings-and-key-bindings.md): | Command | Opens | |---|---| | `:settings` | settings.json (made with defaults when missing) | | `:settings project` | this project's `.ski - [Manual: Scripts (Lua)](https://skink.cc/reference/manual/scripts-lua.md): `~/.config/skink/init.lua` runs at start-up. A project's `.skink/init.lua` runs only after you trust it, asked again whenever it changes. - [Manual: Updates](https://skink.cc/reference/manual/updates.md): | Command | Does | |---|---| | `skink --upgrade` (or `skink upgrade`) | install the latest release in place | | `skink --upgrade --check` | - [Manual: macOS: Option as Alt](https://skink.cc/reference/manual/macos-option-as-alt.md): Mac terminals type a character for Option+key (Option+Z gives "Ω"). Skink reads those characters back as the Alt chord when that chord does - [Manual: Opening, tabs and quitting](https://skink.cc/reference/manual/opening-tabs-and-quitting.md): Everything opens as a tab: files, help, command output, git views, settings and terminals. - [Manual: Find and replace](https://skink.cc/reference/manual/find-and-replace.md): Ctrl-F opens the find bar. It searches as you type, marks every match and shows "N of M". - [Manual: Search the project](https://skink.cc/reference/manual/search-the-project.md): Alt-S (or `:grep TEXT`) searches every file in the project. Results stream into a tab grouped by file; Enter jumps to one. - [Manual: Splits, docks and zoom](https://skink.cc/reference/manual/splits-docks-and-zoom.md): | Key | Does | |---|---| | Ctrl-\ (old terminals: Ctrl-4) | split side by side (`:vsplit [FILE]`) | | Alt-\ | split top and bottom (`:split - [Manual: Moving around](https://skink.cc/reference/manual/moving-around.md): | Key | Does | |---|---| | Ctrl-L | go to line (`:40`, `:goto 40`) | | Alt-U | back to where you were before a jump (`:back`) | | Alt-Shift- ## Optional - [Skink vs Neovim](https://skink.cc/compare/neovim.md): Skink vs Neovim compared honestly. Modal vs modeless editing, mouse, LSP, tree-sitter, terminal, AI agents, plugins and SSH, and who should pick which. - [Skink vs Vim](https://skink.cc/compare/vim.md): Skink vs Vim: when preinstalled, modal Vim wins, and when a modeless terminal editor with mouse, LSP, git and AI agents built in is the better fit. - [Skink vs nano](https://skink.cc/compare/nano.md): Skink vs GNU nano: both are modeless and easy. Nano is preinstalled and tiny; Skink adds mouse, LSP, tree-sitter, tabs, git and a terminal. - [Skink vs Micro](https://skink.cc/compare/micro.md): Skink vs Micro: same keys and the same settings.json and bindings.json. Micro has Lua plugins and maturity; Skink adds LSP, tree-sitter, git and AI agents. - [Skink vs Helix](https://skink.cc/compare/helix.md): Skink vs Helix: both ship LSP and tree-sitter in a terminal editor. Helix is modal and more mature; Skink is modeless with a terminal tab, git and AI agents. - [Skink vs Zed: Zed-style features in the terminal](https://skink.cc/compare/zed.md): Zed is a fast GUI editor; Skink brings Zed-style features (LSP, tree-sitter, git, ACP agents, multi-cursor) into the terminal, where SSH just works. - [Skink vs VS Code Remote SSH](https://skink.cc/compare/vscode-remote.md): VS Code Remote SSH vs a terminal editor on the server. Compare setup, requirements (glibc, RAM), extensions and when Skink over plain SSH is simpler. - [How to use mouse clicks in Vim and Neovim](https://skink.cc/articles/how-to-use-the-mouse-in-vim.md): Enable the mouse in Vim with set mouse=a and ttymouse=sgr, use Neovim's mouse=nvi default, and fix the mouse over SSH and tmux. Plus a modeless option. - [How to exit Vim (and editors where you don't need to ask)](https://skink.cc/articles/how-to-exit-vim.md): Exit Vim: press Esc, then type :q and Enter. Save and quit with :wq, quit without saving with :q!. Also why Vim traps you, and editors that quit with Ctrl+Q. - [The best terminal editor for SSH and remote servers](https://skink.cc/articles/best-terminal-editor-for-ssh.md): Which terminal editor to use over SSH? Compare Vim, Neovim, nano, Micro, Helix and Skink on install, mouse, clipboard, LSP and minimal hosts. - [Edit files on a remote server without a GUI](https://skink.cc/articles/edit-files-on-a-remote-server.md): Four ways to edit files on a remote server from the terminal - an editor over SSH, sshfs, scp round-trips, Vim's scp:// - and when each one makes sense. - [Copy and paste over SSH to your local clipboard (OSC 52)](https://skink.cc/articles/copy-paste-over-ssh.md): Copy from a remote Vim, Neovim, tmux or terminal editor to your local clipboard over SSH with OSC 52. Terminal support, tmux set-clipboard, and editor settings. - [A Neovim-style editor without modes, with mouse and gestures](https://skink.cc/articles/modeless-editor-for-vim-users.md): Want Neovim's terminal speed and IDE features without Normal and Insert mode? Options for modeless editing, and how Skink maps Vim habits to mouse and keys. - [Can you run Zed in the terminal? A terminal alternative](https://skink.cc/articles/zed-in-the-terminal.md): Zed has no terminal (TUI) mode; it is a GPU-rendered desktop app. Here is how Zed's remote mode works and which terminal editors give you Zed-style features. - [Run Claude Code (or any AI agent) inside your terminal editor](https://skink.cc/articles/run-claude-code-next-to-your-editor.md): Run Claude Code, Gemini CLI, Codex or opencode next to your code in the terminal - with tmux, Neovim's :terminal, or an editor that speaks ACP like Skink. - [An editor as easy as nano, with LSP and syntax highlighting](https://skink.cc/articles/nano-but-with-more.md): Like nano but want code completion, errors, syntax colours and tabs? How far nano's nanorc goes, and modeless editors that add LSP without a learning curve. - [Terminal text editors with mouse support](https://skink.cc/articles/terminal-editor-with-mouse-support.md): Which terminal editors support the mouse, and how to turn it on - Vim, Neovim, nano, Micro, Helix, Emacs and Skink - plus why mouse fails in tmux or over SSH.