[](https://gitter.im/zyedidia/micro?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
As its name indicates, micro aims to be somewhat of a successor to the nano editor by being easy to install and use.
It strives to be enjoyable as a full-time editor for people who prefer to work in a terminal, or those who regularly edit files over SSH.
A simple terminal UI for git commands, written in Go with the [gocui](https://github.com/jroimartin/gocui"gocui") library.
Here is a picture of micro editing its source code.


## Sponsors
To see more screenshots of micro, showcasing some of the default color schemes, see [here](https://micro-editor.github.io).
You can also check out the website for Micro at https://micro-editor.github.io.
<palign="center">
Maintenance of this project is made possible by all the <ahref="https://github.com/jesseduffield/lazygit/graphs/contributors">contributors</a> and <ahref="https://github.com/sponsors/jesseduffield">sponsors</a>. If you'd like to sponsor this project and have your avatar or company logo appear below <ahref="https://github.com/sponsors/jesseduffield">click here</a>. 💙
Rant time: You've heard it before, git is _powerful_, but what good is that power when everything is so damn hard to do? Interactive rebasing requires you to edit a goddamn TODO file in your editor? _Are you kidding me?_ To stage part of a file you need to use a command line program to step through each hunk and if a hunk can't be split down any further but contains code you don't want to stage, you have to edit an arcane patch file _by hand_? _Are you KIDDING me?!_ Sometimes you get asked to stash your changes when switching branches only to realise that after you switch and unstash that there weren't even any conflicts and it would have been fine to just checkout the branch directly? _YOU HAVE GOT TO BE KIDDING ME!_
If you're a mere mortal like me and you're tired of hearing how powerful git is when in your daily life it's a powerful pain in your ass, lazygit might be for you.
-[Colors and syntax highlighting](#colors-and-syntax-highlighting)
-[Cygwin, Mingw, Plan9](#cygwin-mingw-plan9)
-[Binary releases](#binary-releases)
-[Homebrew](#homebrew)
-[MacPorts](#macports)
-[Void Linux](#void-linux)
-[Scoop (Windows)](#scoop-windows)
-[Arch Linux](#arch-linux)
-[Fedora and RHEL](#fedora-and-rhel)
-[Solus Linux](#solus-linux)
-[Ubuntu](#ubuntu)
-[Funtoo Linux](#funtoo-linux)
-[FreeBSD](#freebsd)
-[Conda](#conda)
-[Go](#go)
-[Chocolatey (Windows)](#chocolatey-windows)
-[Manual](#manual)
-[Usage](#usage)
-[Documentation and Help](#documentation-and-help)
-[Keybindings](#keybindings)
-[Changing directory on exit](#changing-directory-on-exit)
-[Undo/Redo](#undoredo)
-[Configuration](#configuration)
-[Custom pagers](#configuration)
-[Custom commands](#configuration)
-[Tutorials](#tutorials)
-[Cool Features](#cool-features)
-[Contributing](#contributing)
-[Donate](#donate)
-[Alternatives](#alternatives)
- - -
## Features
- Easy to use and install.
- No dependencies or external files are needed — just the binary you can download further down the page.
- Multiple cursors.
- Common keybindings (<kbd>Ctrl-s</kbd>, <kbd>Ctrl-c</kbd>, <kbd>Ctrl-v</kbd>, <kbd>Ctrl-z</kbd>, …).
- Keybindings can be rebound to your liking.
- Sane defaults.
- You shouldn't have to configure much out of the box (and it is extremely easy to configure).
- Splits and tabs.
- nano-like menu to help you remember the keybindings.
- Extremely good mouse support.
- This means mouse dragging to create a selection, double click to select by word, and triple click to select by line.
- Cross-platform (it should work on all the platforms Go runs on).
- Note that while Windows is supported Mingw/Cygwin is not (see below).
- Plugin system (plugins are written in Lua).
- micro has a built-in plugin manager to automatically install, remove, and update plugins.
- Built-in diff gutter.
- Simple autocompletion.
- Persistent undo.
- Automatic linting and error notifications.
- Syntax highlighting for over [130 languages](runtime/syntax).
- Color scheme support.
- By default, micro comes with 16, 256, and true color themes.
- True color support (set the `MICRO_TRUECOLOR` environment variable to 1 to enable it).
- Copy and paste with the system clipboard.
- Small and simple.
- Easily configurable.
- Macros.
- Common editor features such as undo/redo, line numbers, Unicode support, soft wrapping, …
Github Sponsors is matching all donations dollar-for-dollar for 12 months so if you're feeling generous consider [sponsoring me](https://github.com/sponsors/jesseduffield)
To install micro, you can download a [prebuilt binary](https://github.com/zyedidia/micro/releases), or you can build it from source.
## Installation
If you want more information about ways to install micro, see this [wiki page](https://github.com/zyedidia/micro/wiki/Installing-Micro).
### Binary Releases
Use `micro -version` to get the version information after installing. It is only guaranteed that you are installing the most recent
stable version if you install from the prebuilt binaries, Homebrew, or Snap.
For Windows, Mac OS(10.12+) or Linux, you can download a binary release [here](../../releases).
A desktop entry file and man page can be found in the [assets/packaging](https://github.com/zyedidia/micro/tree/master/assets/packaging) directory.
### Homebrew
### Pre-built binaries
Normally the lazygit formula can be found in the Homebrew core but we suggest you tap our formula to get the frequently updated one. It works with Linux, too.
Pre-built binaries are distributed with [releases](https://github.com/zyedidia/micro/releases).
Tap:
To uninstall micro, simply remove the binary, and the configuration directory at `~/.config/micro`.
```
brew install jesseduffield/lazygit/lazygit
```
#### Quick-install script
Core:
```bash
curl https://getmic.ro | bash
```
brew install lazygit
```
The script will place the micro binary in the current directory. From there, you can move it to a directory on your path of your choosing (e.g. `sudo mv micro /usr/bin`). See its [GitHub repository](https://github.com/benweissmann/getmic.ro) for more information.
#### Eget
### MacPorts
With [Eget](https://github.com/zyedidia/eget) installed, you can easily get a pre-built binary:
Latest version built from github releases.
Tap:
```
eget zyedidia/micro
sudo port install lazygit
```
Use `--tag VERSION` to download a specific tagged version.
### Void Linux
Packages for Void Linux are available in the distro repo
They follow upstream latest releases
```sh
sudo xbps-install -S lazygit
```
eget --tag nightly zyedidia/micro # download the nightly version (compiled every day at midnight UTC)
eget --tag v2.0.8 zyedidia/micro # download version 2.0.8 rather than the latest release
### Scoop (Windows)
You can install `lazygit` using [scoop](https://scoop.sh/). It's in the `extras` bucket:
```sh
# Add the extras bucket
scoop bucket add extras
# Install lazygit
scoop install lazygit
```
You can install `micro` by adding `--to /usr/local/bin` to the `eget` command, or move the binary manually to a directory on your `$PATH` after the download completes.
### Arch Linux
Packages for Arch Linux are available via pacman and AUR (Arch User Repository).
There are two packages. The stable one which is built with the latest release
and the git version which builds from the most recent commit.
See [Eget](https://github.com/zyedidia/eget) for more information.
sudo tar xf lazygit.tar.gz -C /usr/local/bin lazygit
```
Micro is also available through other package managers on Linux such dnf, AUR, Nix, and package managers
for other operating systems. These packages are not guaranteed to be up-to-date.
Verify the correct installation of lazygit:
<!-- * `apt install micro` (Ubuntu 20.04 `focal`, and Debian `unstable | testing | buster-backports`). At the moment, this package (2.0.1-1) is outdated and has a known bug where debug mode is enabled. -->
```sh
lazygit --version
```
* Linux: Available in distro-specific package managers.
*`dnf install micro` (Fedora).
*`pacman -S micro` (Arch Linux).
*`emerge app-editors/micro` (Gentoo).
*`eopkg install micro` (Solus).
*`pacstall -I micro` (Pacstall).
* See [wiki](https://github.com/zyedidia/micro/wiki/Installing-Micro) for details about CRUX, Termux.
* Windows: [Chocolatey](https://chocolatey.org) and [Scoop](https://github.com/lukesampson/scoop).
*`choco install micro`.
*`scoop install micro`.
* OpenBSD: Available in the ports tree and also available as a binary package.
*`pkd_add -v micro`.
* NetBSD, macOS, Linux, Illumos, etc. with [pkgsrc](http://www.pkgsrc.org/)-current:
*`pkg_add micro`
* macOS with [MacPorts](https://www.macports.org):
*`sudo port install micro`
### Funtoo Linux
**Note for Linux desktop environments:**
Funtoo Linux has an autogenerated lazygit package in [dev-kit](https://github.com/funtoo/dev-kit/tree/1.4-release/dev-vcs/lazygit):
For interfacing with the local system clipboard, the following tools need to be installed:
* For X11 `xclip` or `xsel`
* For [Wayland](https://wayland.freedesktop.org/)`wl-clipboard`
```sh
sudo emerge dev-vcs/lazygit
```
Without these tools installed, micro will use an internal clipboard for copy and paste, but it won't be accessible to external applications.
### FreeBSD
### Building from source
```sh
pkg install lazygit
```
If your operating system does not have a binary release, but does run Go, you can build from source.
### Conda
Make sure that you have Go version 1.16 or greater and Go modules are enabled.
Released versions are available for different platforms, see <https://anaconda.org/conda-forge/lazygit>
```sh
conda install-c conda-forge lazygit
```
git clone https://github.com/zyedidia/micro
cd micro
make build
sudo mv micro /usr/local/bin # optional
### Go
```sh
go install github.com/jesseduffield/lazygit@latest
```
The binary will be placed in the current directory and can be moved to
anywhere you like (for example `/usr/local/bin`).
Please note:
If you get an error claiming that lazygit cannot be found or is not defined, you
may need to add `~/go/bin` to your $PATH (MacOS/Linux), or `%HOME%\go\bin`
(Windows). Not to be mistaken for `C:\Go\bin` (which is for Go's own binaries,
not apps like lazygit).
### Chocolatey (Windows)
The command `make install` will install the binary to `$GOPATH/bin` or `$GOBIN`.
You can install `lazygit` using [Chocolatey](https://chocolatey.org/):
You can install directly with `go get` (`go get github.com/zyedidia/micro/cmd/micro`) but this isn't
recommended because it doesn't build micro with version information (necessary for the plugin manager),
and doesn't disable debug mode.
```sh
choco install lazygit
```
### Fully static binary
### Manual
By default, the micro binary will dynamically link with core system libraries (this is generally
recommended for security and portability). However, there is a fully static prebuilt binary that
is provided for amd64 as `linux-static.tar.gz`, and to build a fully static binary from source, run
You'll need to [install Go](https://golang.org/doc/install)
You can also use `go run main.go` to compile and run in one go (pun definitely intended)
If you are using macOS, you should consider using [iTerm2](http://iterm2.com/) instead of the default terminal (Terminal.app). The iTerm2 terminal has much better mouse support as well as better handling of key events. For best keybinding behavior, choose `xterm defaults` under `Preferences->Profiles->Keys->Presets...`, and select `Esc+` for `Left Option Key` in the same menu. The newest versions also support true color.
## Usage
If you still insist on using the default Mac terminal, be sure to set `Use Option key as Meta key` under
`Preferences->Profiles->Keyboard` to use <kbd>option</kbd> as <kbd>alt</kbd>.
Call `lazygit` in your terminal inside a git repository.
### Colors and syntax highlighting
```sh
$ lazygit
```
If you open micro and it doesn't seem like syntax highlighting is working, this is probably because
you are using a terminal which does not support 256 color mode. Try changing the color scheme to `simple`
by pressing <kbd>Ctrl-e</kbd> in micro and typing `set colorscheme simple`.
If you want, you can
also add an alias for this with `echo "alias lg='lazygit'" >> ~/.zshrc` (or
whichever rc file you're using).
If you are using the default Ubuntu terminal, to enable 256 make sure your `TERM` variable is set
to `xterm-256color`.
### Keybindings
Many of the Windows terminals don't support more than 16 colors, which means
that micro's default color scheme won't look very good. You can either set
the color scheme to `simple`, or download and configure a better terminal emulator
than the Windows default.
You can check out the list of keybindings [here](/docs/keybindings).
### Cygwin, Mingw, Plan9
### Changing Directory On Exit
Cygwin, Mingw, and Plan9 are unfortunately not officially supported. In Cygwin and Mingw, micro will often work when run using
the `winpty` utility:
If you change repos in lazygit and want your shell to change directory into that repo on exiting lazygit, add this to your `~/.zshrc` (or other rc file):
```
winpty micro.exe ...
lg()
{
export LAZYGIT_NEW_DIR_FILE=~/.lazygit/newdir
lazygit "$@"
if [ -f $LAZYGIT_NEW_DIR_FILE ]; then
cd "$(cat $LAZYGIT_NEW_DIR_FILE)"
rm -f $LAZYGIT_NEW_DIR_FILE > /dev/null
fi
}
```
Micro uses the amazing [tcell library](https://github.com/gdamore/tcell), but this
means that micro is restricted to the platforms tcell supports. As a result, micro does not support
Plan9, and Cygwin (although this may change in the future). Micro also doesn't support NaCl (which is deprecated anyway).
Then `source ~/.zshrc` and from now on when you call `lg` and exit you'll switch directories to whatever you were in inside lazygit. To override this behaviour you can exit using `shift+Q` rather than just `q`.
## Usage
### Undo/Redo
Once you have built the editor, start it by running `micro path/to/file.txt` or `micro` to open an empty buffer.
See the [docs](/docs/Undoing.md)
micro also supports creating buffers from `stdin`:
## Configuration
```sh
ip a | micro
```
Check out the [configuration docs](docs/Config.md).
You can move the cursor around with the arrow keys and mouse.
### Custom Pagers
You can also use the mouse to manipulate the text. Simply clicking and dragging
will select text. You can also double click to enable word selection, and triple
click to enable line selection.
See the [docs](docs/Custom_Pagers.md)
## Documentation and Help
### Custom Commands
micro has a built-in help system which you can access by pressing <kbd>Ctrl-e</kbd> and typing `help`. Additionally, you can
view the help files here:
If lazygit is missing a feature, there's a good chance you can implement it yourself with a custom command!
Check out this [video](https://www.youtube.com/watch?v=kNavnhzZHtk) walking through the creation of a small feature in lazygit if you want an idea of where to get started.
### Debugging Locally
Run `lazygit --debug` in one terminal tab and `lazygit --logs` in another to view the program and its log output side by side
## Donate
If you would like to support the development of lazygit, consider [sponsoring me](https://github.com/sponsors/jesseduffield)(github is matching all donations dollar-for-dollar for 12 months)
## FAQ
### What do the commit colors represent?
- Green: the commit is included in the master branch
- Yellow: the commit is not included in the master branch
- Red: the commit has not been pushed to the upstream branch
## Shameless Plug
If you want to see what I (Jesse) am up to in terms of development, follow me on
[twitter](https://twitter.com/DuffieldJesse) or check out my [blog](https://jesseduffield.com/)
You can use the [GitHub issue tracker](https://github.com/zyedidia/micro/issues)
to report bugs, ask questions, or suggest new features.
## Alternatives
For a more informal setting to discuss the editor, you can join the [Gitter chat](https://gitter.im/zyedidia/micro) or the [Discord](https://discord.gg/nhWR6armnR). You can also use the [Discussions](https://github.com/zyedidia/micro/discussions) section on Github for a forum-like setting or for Q&A.
If you find that lazygit doesn't quite satisfy your requirements, these may be a better fit:
Sometimes I am unresponsive, and I apologize! If that happens, please ping me.