---
name: "o"
section: "1"
platform: "linux"
package: "orbiton"
version: "2.74.6-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/o"
---

# o(1)

an editor

## NAME

o - an editor

## SYNOPSIS

**o** filename \[LINE NUMBER\]

## DESCRIPTION

Edit an existing file or create a new one.

## OPTIONS

The line number can be prefixed with **+**, or be a suffix of the filename if prefixed with **:**.

- **-c FILENAME or --copy FILENAME**

  Copy the given file into the clipboard.

- **-f or --force**

  Ignore file locks when opening files.

- **-l or --last-command**

  Output the last used build/format/export command.

- **-m FILENAME or --monitor FILENAME**

  Monitor the given file for changes, and open it as read-only.

- **-n or --no-cache**

  Avoid writing the location history, search history, game highscore and last build/format/export command to the cache directory.

- **-p FILENAME or --paste FILENAME**

  Paste the contents of the clipboard into the given file. Combine with -f to overwrite the file.

- **-e or --clear-locks**

  Clear all file locks and close all portals.

- **-o or --ollama**

  Enable Ollama-specific features. The model can be specified in the **OLLAMA\_MODEL** environment variable. This requires that Ollama is up and running, either locally or at the host specified in the **OLLAMA\_HOST** environment variable. Any server that speaks the Ollama API can be used, for instance llmman, by setting **LLMMAN\_HOST** to **localhost:17434**.

- **-r or --release**

  Build release executables when ctrl-b is pressed, or projects when no filenames are given.

- **-t or --list**

  List the file in a colorful way without opening it for editing.

- **-b or --build**

  Build the given file instead of opening it for editing.

- **-F or --fmt**

  Format the given file in place and quit. Runs headless: no TTY, no UI.

- **-k or --create-dir**

  When opening a new file, create directories as needed.

- **-d or --debug**

  Start in debug mode.

- **-s or --digraphs**

  List all possible digraphs.

- **-i FILENAME or --input-file FILENAME**

  Used as stdin when running programs with ctrl-b. The default filename is input.txt.

- **-a or --nano**

  Emulate Pico/Nano.

- **-q or --quick-help**

  Always display the quick help pane at start.

- **-z or --no-quick-help**

  Never display the quick help pane at start.

- **-x or --noapprox**

  Disable approximate filename matching.

- **-g GLOB or --glob GLOB**

  Search for and open the first filename that matches the given substring.

- **-v or --version**

  Display the current version.

- **-h or --help**

  Display brief usage information.

## KEYBINDINGS

**ctrl-q**\
   Quit o.

**ctrl-s**\
   Save the file.

**ctrl-w**\
   Format the current file with **goimports** or **clang-format**, depending on the file extension.\
   Zig, V, Rust (**rustfmt**), Haskell (**ormolu**) and Python (**ruff format**) are also supported.\
   If in git mode, cycle the git interactive rebase keyword on the current line.\
   If in Markdown mode, format the table under the cursor.

**ctrl-a**\
   Go to start of the text, then the start of the line and then the previous line.

**ctrl-e**\
   Go to end of the line and then the next line.

**ctrl-n**\
   Scroll down 10 lines or go to the next match if a search is active.\
   Insert a new column when in the Markdown table editor.\
   Jump to a matching parenthesis or bracket if the arrow keys were just used.

**ctrl-p**\
   Scroll up 10 lines or go to the previous match if a search is active.\
   Remove an empty column when in the Markdown table editor.\
   Jump to a matching parenthesis or bracket if the arrow keys were just used.

**ctrl-k**\
   Delete all characters to the end of the line. Delete the line if it is empty.

**ctrl-g**\
   Go to an include or definition, go back or toggle the status bar.

**ctrl-d**\
   Delete a single character.

**F1**\
   Show the overview of hotkeys, the same as pressing ctrl-l and then /.

**F2**\
   Save, the same as ctrl-s.

**F3**\
   Go to the next search match, the same as ctrl-n.

**F4**\
   Launch the file browser, which is also available from the ctrl-o menu.

**F5**\
   Build or export, the same as ctrl-space. In debug mode, continue.

**F6**\
   Toggle block editing mode, which is also available from the ctrl-o menu.

**F7**\
   Jump to the next typo.

**F8**\
   In debug mode, step over. The same as F10, which some terminals take for themselves.

**F9**\
   In debug mode, toggle a breakpoint. The same as ctrl-b.

**F10**\
   In debug mode, step over. The same as ctrl-o.

**F11**\
   In debug mode, step out. The same as ctrl-f.

**F12**\
   Go to a definition or include, the same as ctrl-g.

  On macOS, the function keys may need to be held together with Fn, depending on the keyboard settings.

**ctrl-o**\
   Open the command menu, which is a list of actions that can be performed.\
   If editing a PKGBUILD file and guessica is installed, there will be a menu option for updating the pkgver + source fields.\
   If pandoc is installed, a menu option for rendering to PDF may appear.

**ctrl-t**\
   For C and C++: switch between the corresponding header and implementation.\
   For Agda, insert a symbol.\
   For Markdown, if the cursor is on a table, launch the Markdown table editor.\
   For the rest, record and play back keypresses. Press escape to clear the current macro.

**ctrl-c**\
   Press twice to copy the current block of text (until a blank line or the end of the file).\
   Press once to only copy the current line. Press thrice to copy the current function.\
   Also closes the portal.

**ctrl-v**\
   Press once to paste only the first line of the copied text, trimmed.\
   Press twice to paste the all copied text, untrimmed.

**ctrl-x**\
   Press once to only cut the current line (or delete the line, if empty).\
   Press twice to cut the current block of text (until a blank line or the end of the file).\
   Press thrice to cut the current function.\
   Also closes the portal.

**ctrl-b**\
   Build programs, render to PDF or export to man page.\
   Press twice to also run after building.\
   Use **o -l** to view the last build command.\
   Cycle book mode. Toggle a breakpoint in debug mode.\
   Toggle bold when started directly in book mode.

**ctrl-i**\
   Toggle italic in book mode. Otherwise the same as tab.\
   Terminals that can not display italics, like the Linux console, show it unstyled.

**ctrl-j**\
   Join lines.

**ctrl-u**\
   Undo (**ctrl-z** is also possible, but may background the application).

**ctrl-y**\
   Redo.

**ctrl-l**\
   Jump to a specific line number or percentage. Press return to jump to the top. Press return again to jump to the bottom.\
   Press one of the highlighted on-screen letters to jump to that location.

**ctrl-f**\
   Search for a string from the current location. The search wraps around and is case sensitive.\
   There is also support for text replacement, after typing in the search term:\
   To replace all, press tab instead of return, enter a replace term and then press tab.\
   To replace once, press tab instead of return, enter a replace term and then press return.\
   Search for just **f** to find the previous function signature.

**esc**\
   Go back after having gone to another location or file.\
   Redraw the screen and clear the last search.

**ctrl-space**\
   Build programs, render to PDF or export to man page.\
   Press twice to also run after building.\
   Toggle checkboxes in Markdown. Cycle display and export options in book mode.\
   **o** will try to jump to the location where the error is and otherwise display "Success".

  The last used external command by **o** can be found in **~/.cache/o/last\_command.sh**.

**ctrl-~**\
   Insert the current date and time.

**ctrl-\\\\**\
   Toggle single-line comments for a block of code.

**ctrl-\_**\
   Insert a symbol by typing in a 2-letter digraph.\
   The digraphs are the same as for ViM.\
   For a full overview, see: https://raw.githubusercontent.com/xyproto/digraph/main/digraphs.txt

**ctrl-r**\
   Jump to matching bracket, otherwise open or close a portal.\
   Double press to toggle "wrap when typing".\
   For git interactive rebase, cycle keywords.

## ENV

The **NO\_COLOR** environment variable can be set to 1 to disable all colors.

If **XTERM\_VERSION** is set (usually automatically by xterm), the "light" color scheme will be used.

The **ORBITON\_OLLAMA** environment variable can be set to 1 to enable Ollama-specific features.

The **OLLAMA\_MODEL** environment variable can be set to specify which Ollama model to use for code completion.

The **OLLAMA\_HOST** environment variable specifies the host for the Ollama service if a non-local service should be used.

The **LLMMAN\_HOST** environment variable is used if **OLLAMA\_HOST** is not set, for using llmman (https://github.com/llmmanorg/llmman), which serves the Ollama API on port 17434.

## MAN PAGER

O can be used for viewing man pages by setting MANPAGER to "o" with ie. **export MANPAGER=o**.

## WHY

I wanted to write a simple editor that only used VT100 terminal codes.

## SEE ALSO

[**e3**(1)](/e3/1.md) [**nano**(1)](/nano/1.md) [**micro**(1)](/micro/1.md)

## KNOWN BUGS

In some terminal emulators, scrolling quickly up or down with the arrow keys can make the text jump around (it works fine in **alacritty**). Scroll up and down with **ctrl-n** and **ctrl-p** instead to avoid this. Press **esc** to repaint the text, if needed.

Some unicode runes may disrupt the text flow. This is generally not a problem for editing code and configuration files, but may be an issue when editing files that contains text in many languages.

For some terminal emulators, if **o** is busy performing an operation, pressing **ctrl-s** may lock the terminal. Some terminal emulators, like **konsole**, can be configured to turn off this behavior. Press **ctrl-q** to unlock the terminal again (together with the unfortunate risk of quitting **o**). You can also use the **ctrl-o** menu for saving and quitting.

**o** may have issues with large files (of several MB+). For normal text files or source code files, this is a non-issue.

Middle-click pasting (instead of pasting with **ctrl-v**) may have issues with only pasting the first character.

The smart indentation is not always smart.

## VERSION

2\.74.6

## AUTHOR

**o** was written by Alexander F. Rødseth \<xyproto@archlinux.org\>
