Skink commands and actions
Press Ctrl+E to open the command line, type a command and press Enter. Tab completes names and paths, ↑ and ↓ walk the history. You type the command in plain text; Skink shows the : on the left for you. That is why these docs write commands as :quit or :grep: type quit or grep. F1 opens the same list as a searchable palette.
| Command | What it does |
|---|---|
:addroot DIRalso :add-folder | add another project root (tree, quick open, project search) |
:agent [MESSAGE | cancel | stop | send | errors] | agent panel: chat with the configured ACP agent; send = selection or terminal output; errors = diagnostics or the last terminal command |
:agentdock | show or hide the agent panel on the right (Alt-Shift-T) |
:agents [check] | supported agents, which are installed, the active one; check = test it now |
:ai [TEXT] | AI prompt box for the selection (Ctrl-G); /ask /search /implement /model inside |
:amend | toggle amending the last commit in the message tab |
:back | back to where you were before the last jump (Alt-U) |
:bindingsalso :keys | open bindings.json (Micro format: key -> action); keys that replace a default or repeat show as problems |
:blame | git blame of this file in a tab (Enter shows the commit) |
:both | resolve the conflict under the cursor: keep both |
:branch NAME | create branch NAME and switch to it |
:branches | local branches; Enter switches |
:breakpoint [if COND|hits N|log MSG|clear|clearall|list]also :bp, :break | toggle a breakpoint on the cursor line (F9), or set a condition, hit count or logpoint |
:commit [MESSAGE...] | commit with MESSAGE, or open a message tab (saving it commits) |
:conflicts | open all git-conflicted files at the first conflict |
:cqalso :cancel | leave without saving and exit 1 (git aborts the commit or rebase) |
:debug [NAME|stop|pause|continue|restart|panel|eval EXPR|watch EXPR]also :dbg | debug: pick a launch configuration (F5 reruns the last), control the session, evaluate |
:definitionalso :def | go to the definition of the symbol at the cursor |
:diff [HEAD|all] | this file side by side against the index (or HEAD); `all`: `git diff` |
:extract var|fn [NAME] | extract the selection into a variable or function (server action; tree-sitter fallback for var) |
:fetch [ARGS...] | git fetch in a terminal tab |
:fold | fold or unfold the block at the cursor (Alt-M) |
:foldall | fold every top-level block |
:fontsize +1|-1|0also :font | change the terminal font size (EveryAI, Kitty; else use the terminal's keys) |
:formatalso :fmt | format the selection or the file with the language server |
:forward | forward again after :back (Alt-Shift-U) |
:git ARGS... | run git, output in a tab |
:gitstatusalso :status, :gitpanel | the git panel: status, stage, commit, branches, stash, push |
:goto LINE[:COL] | jump to a line |
:grep [TEXT]also :search, :rg | search every file in the project (Alt-s); results stream into a tab, Enter jumps |
:greprep WITHalso :replace-in-files | replace the last project search's matches in every file, through the preview |
:help [topic]also :docs | open this documentation in a tab (topics: tabs, editing, conflicts, settings, ...) |
:hsplit [FILE]also :split, :sp | split the pane top and bottom, optionally opening FILE in the new pane (Alt-\) |
:hunkalso :peekhunk | show the change at the cursor inline (s stage, u unstage, r revert) |
:implementationalso :impl | go to the implementations of the symbol at the cursor |
:inlineblame | toggle the cursor line's blame |
:install NAME | owner/repo[/package][@tag] | DIR | . | install a package (grammar, language server, theme, font); . = what this project needs |
:lsp [restart|log] | language server status (memory, progress, log); restart it; full log |
:messages | the last notes and errors in full (toasts are cut to one line) |
:mkdir [PATH] | create a folder (parents too); relative to the project root |
:mode | full editor or a lean file for another tool, and why |
:model [NAME | default] | show or set the model for AI requests (until restart; settings: ai.model) |
:mv [NEW_PATH]also :move | move / rename the current file (relative to the project root); servers update imports |
:new [PATH]also :touch | create a file (parents too) and open it; relative to the project root |
:nextconflict | next merge conflict |
:nexthunk | go to the next git change |
:only | close every pane but the focused one |
:open [FILE[:LINE[:COL]]]also :e, :tabnew | open a file or folder in a tab (no argument: new empty tab) |
:ours | resolve the conflict under the cursor: keep ours |
:packages [enable NAME | disable NAME] | installed packages; turn one off or on without removing it |
:port PORT[:LOCAL] | skink ssh: forward a port of this machine to yours (:port 3000, :port 3000:8080) |
:ports [stop PORT | forward PORT[:LOCAL]] | skink ssh: ports listening on this machine and their forwards; stop one (:port adds one) |
:prevconflict | previous merge conflict |
:prevhunk | go to the previous git change |
:preview | live preview of this Markdown or SVG file in a tab (Alt-V); again to go back |
:problemsalso :diagnostics | errors and warnings of the open files (Enter jumps) |
:pull [ARGS...] | git pull in a terminal tab |
:push [ARGS...] | git push in a terminal tab (credentials stay with git) |
:qaalso :quitall | quit everything (refuses when tabs have unsaved changes) |
:quitalso :q | close the tab (quits on the last document tab) |
:rebase pick|reword|edit|squash|fixup|drop | set the verb of the cursor line in git-rebase-todo (Alt-Shift-K cycles) |
:recentalso :quickopen | quick open: tabs, recent files, project files (Alt-P) |
:referencesalso :refs | every use of the symbol at the cursor (Enter jumps) |
:reload | reload settings.json and bindings.json |
:remotes | saved skink ssh targets ("remotes" in settings.json) |
:removeroot [DIR] | remove an added root (no argument: the one selected in the tree) |
:renamesymbol NEW_NAMEalso :rn | rename the symbol at the cursor everywhere (language server; shown in the preview) |
:replace FIND WITHalso :replaceall | replace every FIND with WITH (selection, else whole file; literal; quote to use spaces) |
:reverthunk | put the index version of the change at the cursor back (undoable) |
:review | review the edits the agent staged (refactor preview) |
:run COMMAND...also :! | run a shell command in the project root, output in a tab |
:safedelete | delete the declaration at the cursor if find-references shows no other use; preview first |
:safedelete! | preview deleting the declaration at the cursor without checking references |
:savealso :w | save the file |
:scrollback [last]also :termhistory | the terminal's history in a searchable tab (Shift-F11); `last` selects the last output (Shift-F4) |
:set eol=lf|crlf | set a file option (line endings are written on the next save) |
:settings [project] | open settings.json (created with defaults if missing); project: this project's .skink/settings.json |
:sgrep PATTERNalso :structural | structural search (ast-grep) in files of the current language: `foo($A, $$$REST)` |
:signoff | toggle a Signed-off-by line in the message tab |
:srep PATTERN => WITH | structural replace through the preview: `srep foo($A, $B) => bar($B, $A)` |
:stage [PATH] | git add this file (or PATH) |
:stagehunk | stage the change at the cursor |
:stash [MESSAGE...] | stash the current changes |
:stashes | list stashes; Enter applies, p pops, D drops |
:stopsearch | stop a running project search |
:switch BRANCHalso :checkout | switch to BRANCH |
:symbolsalso :outline | symbols in this file |
:tab N | select tab N |
:task [LABEL|last]also :tasks | run a task in a terminal tab (Shift-F10 picks, Shift-F9 reruns); problems go to Shift-F8 |
:term [COMMAND...]also :terminal | new terminal tab running COMMAND (default: your shell), e.g. `term claude` |
:termdockalso :panel | show or hide a shell along the bottom (Alt-T) |
:theirs | resolve the conflict under the cursor: keep theirs |
:theme [NAME]also :colorscheme | pick a theme with a live preview (Esc keeps the old one), or switch to NAME |
:tree [collapse|expand|hide|hidden] | show / focus the file tree (F8); collapse all, expand the selected folder, hide it, show/hide dotfiles |
:unfoldall | open every fold (Alt-Shift-M) |
:uninstall NAME | remove a package and everything it placed |
:unsplitalso :close-pane | close the focused pane; its tab stays open (Alt-Q) |
:unstage [PATH] | take this file (or PATH) out of the index |
:unstagehunk | unstage the staged change at the cursor |
:upgradealso :update | download and install the latest skink release (runs from the next start) |
:vsplit [FILE]also :vs | split the pane side by side, optionally opening FILE in the new pane (Ctrl-\) |
:zoom | zoom pane: only the text (also Alt-Z) |
Actions
Every action can be bound to a key in bindings.json or run by name from the command line, for example :SelectAll.
| Action | What it does |
|---|---|
Quit | Quit the editor |
Save | Save the file |
Find | Search in the file |
FindNext | Next match |
FindPrevious | Previous match |
Undo | Undo |
Redo | Redo |
CursorUp | Move up |
CursorDown | Move down |
CursorLeft | Move left |
CursorRight | Move right |
SelectUp | Select up |
SelectDown | Select down |
SelectLeft | Select left |
SelectRight | Select right |
WordLeft | Move a word left |
WordRight | Move a word right |
SelectWordLeft | Select a word left |
SelectWordRight | Select a word right |
StartOfLine | Start of line |
StartOfText | First non-blank |
StartOfTextToggle | First non-blank / column 0 |
EndOfLine | End of line |
SelectToStartOfTextToggle | Select to line start |
SelectToEndOfLine | Select to line end |
CursorStart | Start of file |
CursorEnd | End of file |
SelectToStart | Select to file start |
SelectToEnd | Select to file end |
CursorPageUp | Page up |
CursorPageDown | Page down |
SelectPageUp | Select page up |
SelectPageDown | Select page down |
SelectAll | Select all |
Deselect | Clear selection |
Escape | Cancel |
ClearInfo | Clear the status message |
InsertNewline | Insert a newline |
InsertTab | Insert a tab |
Backspace | Delete backwards |
Delete | Delete forwards |
DeleteWordLeft | Delete word left |
DeleteWordRight | Delete word right |
IndentSelection | Indent selected lines |
OutdentSelection | Outdent selected lines |
OutdentLine | Outdent the line |
MoveLinesUp | Move lines up |
MoveLinesDown | Move lines down |
Duplicate | Duplicate the selection |
DuplicateLine | Duplicate the line |
Copy | Copy the selection |
CopyLine | Copy the line |
Cut | Cut the selection |
CutLine | Cut the line |
Paste | Paste |
JoinLines | Join the selected lines (or the next line) |
SortLines | Sort the selected lines |
UpperCase | Selection / word to UPPER CASE |
LowerCase | Selection / word to lower case |
TitleCase | Selection / word to Title Case |
TrimTrailingWhitespace | Remove trailing spaces on every line |
ToggleComment | Comment / uncomment the lines |
SpawnMultiCursor | Select the word, then add a cursor at the next match |
SpawnMultiCursorUp | Add a cursor on the line above |
SpawnMultiCursorDown | Add a cursor on the line below |
SkipMultiCursor | Skip this match and select the next |
RemoveMultiCursor | Remove the newest cursor |
RemoveAllMultiCursors | Back to a single cursor |
ConflictNext | Next merge conflict |
ConflictPrevious | Previous merge conflict |
AcceptOurs | Resolve conflict: keep ours |
AcceptTheirs | Resolve conflict: keep theirs |
AcceptBoth | Resolve conflict: keep both |
DebugContinue | Debug: start (the last configuration, or pick one) or continue |
DebugStop | Debug: stop the program (again: kill the adapter) |
DebugStepOver | Debug: step over (falls through to the next action when not debugging) |
DebugStepInto | Debug: step into (falls through when not debugging) |
DebugStepOut | Debug: step out (falls through when not debugging) |
DebugPause | Debug: pause the running program (falls through when nothing runs) |
ToggleBreakpoint | Debug: breakpoint on the cursor line, on or off |
EditBreakpoint | Debug: condition, hit count or log message of the cursor line's breakpoint |
DebugPanel | Debug: the panel (stack, variables, watch, breakpoints, console) on or off |
CycleRebaseVerb | Rebase list: pick → reword → edit → squash → fixup → drop on the cursor line |
ToggleMacro | Start / stop recording a keyboard macro |
PlayMacro | Replay the last keyboard macro |
TerminalHistory | The terminal's history in a tab: search, select and copy with editor keys; Enter opens file:line |
SelectLastOutput | Select the last command's output in the terminal history (needs OSC 133) |
PreviousPrompt | Scroll the terminal to the previous shell prompt (needs OSC 133) |
NextPrompt | Scroll the terminal to the next shell prompt (needs OSC 133) |
RunTask | Pick a task (tasks.json or detected cargo / npm / go / zig / pytest / make) and run it |
RerunTask | Run the last task again |
NextHunk | Go to the next git change |
PreviousHunk | Go to the previous git change |
PeekHunk | Show the git change at the cursor (s stage, u unstage, r revert) |
StageHunk | Stage the git change at the cursor |
UnstageHunk | Unstage the staged change at the cursor |
RevertHunk | Put the index version of the change at the cursor back |
ToggleInlineBlame | Show or hide the cursor line's git blame |
GitPanel | Git status, staging, commit, branches, stash, push / pull |
JumpBack | Back to where you were before the last jump |
JumpForward | Forward again after JumpBack |
ToggleTerminalDock | Show or hide a shell along the bottom |
ToggleAgentDock | Show or hide the agent panel on the right |
ToggleFold | Fold or unfold the block at the cursor (by indentation) |
FoldAll | Fold every top-level block |
UnfoldAll | Open every fold |
FindInFiles | Search every file in the project |
VSplit | Split the pane: a new one to the right (same file, own cursor) |
HSplit | Split the pane: a new one below (same file, own cursor) |
NextSplit | Focus the next pane |
PreviousSplit | Focus the previous pane |
Unsplit | Close the focused pane (its tab stays open) |
GrowSplit | Make the focused pane bigger |
ShrinkSplit | Make the focused pane smaller |
PreviousTab | Select the tab to the left |
NextTab | Select the tab to the right |
FirstTab | Select the first tab |
LastTab | Select the last tab |
AddTab | New empty document tab |
OpenFile | Open a file or folder by path |
QuickOpen | Quick open: tabs, recent and project files |
ToggleTree | Show / focus the file tree |
JumpToMatchingBrace | Move to the bracket matching the one at the cursor |
ScrollLeft | Scroll the view left without moving the cursor |
ScrollRight | Scroll the view right without moving the cursor |
TogglePreview | Preview this Markdown or SVG file in a tab, or go back to its source |
ToggleZoom | zoom pane: hide the tab bar, file tree and status line |
FontBigger | bigger terminal font (EveryAI or Kitty) |
FontSmaller | smaller terminal font (EveryAI or Kitty) |
FontReset | default terminal font size (EveryAI or Kitty) |
ExpandSelection | grow the selection to the enclosing syntax node |
ShrinkSelection | undo the last ExpandSelection |
TreeWider | make the file tree wider |
TreeNarrower | make the file tree narrower |
ToggleHiddenFiles | show / hide dotfiles in the file tree (works from the editor too) |
ToggleSidebar | Hide / show the file tree sidebar |
ToggleTerminal | Jump between the document and a terminal tab |
NewTerminal | Open another terminal tab |
CloseTerminal | Close the active terminal tab |
Complete | completion list at the cursor (language server) |
Hover | type and docs of the symbol at the cursor (its value while debugging) |
GotoDefinition | go to the definition of the symbol at the cursor |
GotoDeclaration | go to the declaration of the symbol at the cursor |
GotoTypeDefinition | go to the definition of the type at the cursor |
GotoImplementation | go to the implementations of the symbol at the cursor |
PeekDefinition | show the definition in a popup without leaving |
FindReferences | every use of the symbol at the cursor, in a results tab |
CodeActions | quick fixes and refactorings at the cursor |
Format | format the selection or the file (language server) |
Outline | symbols in this file (quick open with @) |
WorkspaceSymbols | symbols in the project (quick open with #) |
CommandPalette | every action and command (quick open with >) |
AiPrompt | AI prompt box for the selection or the code at the cursor |
AgentPanel | show the agent panel (chat with the ACP agent) |
AgentSendErrors | send the errors to the agent: diagnostics, or the last command in a terminal |
RenameSymbol | rename the symbol at the cursor (asks for the new name) |
ReviewAgentEdits | review the edits the agent staged |
Problems | errors and warnings of the open files, in a results tab |
NextDiagnostic | next error or warning in this file |
PreviousDiagnostic | previous error or warning in this file |