After using Helm, you are going to have a big change in the way you use Emacs. After you get used to the Helm way, you won't want to leave it. However, if you don't like Helm, you can still use Ido, which is introduced in a later section. Let's learn how to use helm by playing with it.

Completion with Helm is very different from the usual Emacs completion:

You type something.

Instead of TAB to expand the common part until you find your candidates, in Helm, you type parts of the candidate you want to search for, separated by spaces. In Helm, these strings are called patterns . Patterns can also be regexps.

to expand the common part until you find your candidates, in Helm, you type parts of the candidate you want to search for, separated by spaces. In Helm, these strings are called . Patterns can also be regexps. Helm will try to search and sort according to highest match, from top to bottom. The best match is at the top, so you can press RET and select it.

and select it. You can navigate the buffer with C-n and C-p or <up> and <down> to move up/down, C-v and M-v to move to next/previous pages, and M-< and M-> to move to the top and bottom of the Helm buffer.

and or and to move up/down, and to move to next/previous pages, and and to move to the top and bottom of the Helm buffer. You can mark candidates with C-SPC ; this is useful when you need to perform an action on many candidates of your choice. M-a to select all.

; this is useful when you need to perform an action on many candidates of your choice. to select all. You can insert marked candidates into the current buffer with C-c C-i . This is useful when you have narrowed to a list of candidates, i.e. files, and then you want to save such candidates.

. This is useful when you have narrowed to a list of candidates, i.e. files, and then you want to save such candidates. If you find the current horizontal Helm window is small, you can always switch it to a vertical window with C-t. Running C-t again returns the Helm window back to horizontal and so on.

You can practice the above commands with C-x b, which runs helm-mini . If you mark more than one buffer, RET opens the selected buffers.

IMPORTANT: Please remember that, when you use Helm, you never TAB to complete prefixes like vanilla or other packages like Ido and its related packages. In Helm, when you type something, candidates get updated automatically. In vanilla Emacs, you have to TAB to get a list of candidates. This is a great feature from Helm, not a lack of a feature. You have to forget the habit of TAB'ing to get candidates. If you want quick completion of search patterns in the Helm prompt, you always have hippie-expand to replace the TAB behavior, as introduced at the beginning of this section. This is the biggest confusion for new people switching to Helm. When you are used to Helm, you will love it.

When you execute a Helm command, you enter a Helm session. A Helm session is a dedicated state to working with Helm features; while in a Helm session, a dedicated Helm buffer is always opened. When you quit a Helm session, a Helm buffer is closed. In Helm, you basically need to remember these 3 commands:

Access the action menu with TAB . An action is a command to run on marked candidates (one or more) and quits the current Helm session; an action menu is a text-based menu that lists actions you can take. For example, Find File (open file), Find File in Dired , Grep File …

. An action is a command to run on marked candidates (one or more) and quits the current Helm session; an action menu is a text-based menu that lists actions you can take. For example, (open file), , … C-z executes helm-execute-persistent-action ; a persistent action is an action that you use in a Helm session that does not quit the session.

executes ; a persistent action is an action that you use in a Helm session that does not quit the session. In some Helm sessions, such as helm-find-files or helm-mini , you can select more than one candidates and execute actions on them, such as grep or open .

However, for convenience, let's TAB with C-z in the above settings, so we can use TAB more comfortably, because you actually use helm-execute-persistent-action more than helm-select-action by adding the code snippet below:

( define-key helm-map ( kbd "<tab>" ) 'helm-execute-persistent-action ) ; rebind tab to do persistent action ( define-key helm-map ( kbd "C-i" ) 'helm-execute-persistent-action ) ; make TAB works in terminal ( define-key helm-map ( kbd "C-z" ) 'helm-select-action ) ; list actions using C-z

In a Helm session, if you need help, use C-c ?, or refer to this manual again. The commands in the key bindings above are good enough to help you use Helm productively.