Skip to content


gokcehan edited this page Dec 15, 2019 · 21 revisions


If you have go installed on your machine and want to build lf yourself from the source, you can use the following command:

go get -u

Make sure $GOPATH/bin is in your $PATH variable. Master branch is rarely broken so this method should often be safe though new features may not always work as expected. If you like to build a static stripped binary for faster startup, you can modify the command as follows:

env CGO_ENABLED=0 go get -u -ldflags="-s -w"

If you do not have go installed on your machine, you can grab one of the pre-built binaries from releases section. These are built regularly every couple of weeks once there are some interesting new features and/or important bug fixes. You can use a command similar to the following to install or update a binary from the command line:

curl -L<version>/lf-linux-amd64.tar.gz | tar xzC ~/.local/bin

Do not forget to change the release number (i.e. r<version>) to the latest release, and os (i.e. linux) and arch (i.e. amd64) values to the appropriate values for your system. Also make sure that the extracted directory (i.e. ~/.local/bin) exists and it is in your $PATH variable.

Lastly, you can see packages wiki to see if there is a package available for your system. Packages can be prefered since they may be easier to install and new versions are installed when you update your system. Also some of the instructions given below may already be available with a package.


Once installed, running lf from shell should start lf in the current directory until a quit (default q) command is received:


up (default k and <up>) and down (default j and <down>) commands move up and down in the list:


half-up (default <c-u>) and half-down (default <c-d>) commands move half a page at a time:


page-up (default <c-b> and <pgup>) and page-down (default <c-f> and <pgdn>) commands move a full page at a time:


updir (default h) command moves to parent directory and open (default l) command opens the current directory or runs the default file opener on your system:


top (default gg and <home>) and bottom (default G and <end>) commands move to the beginning and end of the list:


toggle (default <space>) command toggles selection in the current file, invert (default v) command inverts selections in the current directory, and unmark (default u) command unmarks all selections:


copy (default y) command copies the current file or selections, cut (default d) command cuts the current file or selections, paste (default p) command pastes the copied or cut files to the current directory, and clear (default c) command clears copied or cut files:


read (default :) command reads a builtin or custom command:


shell (default $) command runs a command in the shell:


shell-pipe (default %) command runs a command in the shell while piping the input from the ui and output to the ui:


shell-wait (default !) command runs a command in the shell waits for a key press afterwards:


shell-async (default &) command runs a command in the background:


search (default /) command reads a pattern to search, search-back (default ?) command searches in the opposite direction, search-next (default n) and search-prev (default N) find the next and previous file matching the pattern:


Some default keybindings are provided (prefixed with z) to toggle options or change their values:


Some default keybindings are provided (prefixed with s) to change the values of sortby and info options:


Keybindings are provided to launch an editor (default e), a pager (default i), and a shell (default w):



You can download the example configuration file and customize according to your needs. If you built from source you can simply copy this file from the repository:

mkdir -p ~/.config/lf
cp $GOPATH/src/ ~/.config/lf/lfrc

Or if you installed a pre-built binary you can download this file from the repository:

mkdir -p ~/.config/lf
curl -o ~/.config/lf/lfrc

Working Directory

lf starts in the current directory and changes the working directory accordingly when you move around. On the other hand, when you quit lf, the launching shell remains in the starting directory. This is a limitation of shells since it is not possible for a program to change the working directory of the parent process. However, you can define a shell function for this purpose as a workaround if you want to stay on the last visited directory when you quit:


Example scripts are provided in the repository for common shells. If you installed a pre-built binary you can download these example scripts from the repository:

mkdir -p ~/.config/lf
curl -o ~/.config/lf/

Then you need to source this file in your shell configuration file (e.g. ~/.bashrc):

LFCD="$GOPATH/src/"  # source
LFCD="~/.config/lf/"                            # pre-built binary
if [ -f "$LFCD" ]; then
    source "$LFCD"

You can also bind a key for this command if you like:

bind '"\C-o":"lfcd\C-m"'

For other shells, see the comments in corresponding files for instructions.

Multiple Terminals or Multiplexers

It is often useful to open a file manager in multiple paths at the same time to copy files between directories. Instead of implementing tabs or panes, lf uses a server/client architecture for this purpose to fit your existing workflow. A server process is automatically launched in the background when you run lf command for the first time. This process saves the names of files to be copied or moved so that you can copy files in one client and paste them in another. This feature requires no configuration and it can be used with either multiple terminals or a multiplexer such as screen or tmux:


What Next?

You can read the documentation for more in-depth information and the rest of the wiki for extras.

You can’t perform that action at this time.