Difference between revisions of "Readline"

From ArchWiki
Jump to: navigation, search
Line 78: Line 78:
 
Due to an update to {{Package Official|readline}}, the terminal now echoes {{Codeline|^C}} after {{Keypress|Ctrl}}+{{Keypress|C}} is pressed. For users who wish to disable this, simply add the following to {{Filename|~/.inputrc}}:
 
Due to an update to {{Package Official|readline}}, the terminal now echoes {{Codeline|^C}} after {{Keypress|Ctrl}}+{{Keypress|C}} is pressed. For users who wish to disable this, simply add the following to {{Filename|~/.inputrc}}:
 
  set echo-control-characters off
 
  set echo-control-characters off
 +
 +
=Resources=
 +
* [http://www.gnu.org/s/readline/ Readline Documentation]

Revision as of 23:10, 11 October 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary end

Readline is a library by the GNU Project, used by Bash and other CLI-interface programs to edit and interact with the command line. Before reading this page please refer to the library home page as only subtle configuration will be introduced here.

Command-line editing

By default Readline uses Emacs style shortcuts for interacting with command line. However, vi style editing interface is also supported. If you are a vi or vim user, you may want to put the following line to your Template:Filename to enable vi-like keybindings:

set -o vi

You may find either vi or emacs cheat sheets useful.

History

Usually, pressing the up arrow key will cause the last command to be shown regardless of what has been typed so far. However, users may find it more practical to list only past commands that match the current input.

For example, if the user has typed the following commands:

In this situation, when typing Template:Codeline and pressing the up arrow key, current input will be replaced with Template:Codeline, the last performed command. Had history search been enabled, only past commands beginning with Template:Codeline (the current input) would've been shown, in this case Template:Codeline.

You can enable this mode by adding the lines below to Template:Filename or Template:Filename:

"\e[A":history-search-backward
"\e[B":history-search-forward

If you chose to add the aforementioned two lines to Template:Filename, it is recommended that you also add the following line at the beginning of this file to avoid strange things like this:

$include /etc/inputrc

Alternatively, one can use reverse-search-history (incremental search) by pressing Template:Keypress+Template:Keypress, which does not search based on previous input but instead jumps backwards in the history buffer as commands are typed in a search term. Pressing Template:Keypress+Template:Keypress again during this mode will display the previous line in the buffer that matches the current search term, while pressing Template:Keypress+Template:Keypress (abort) will cancel the search and restore the current input line. So in order to search through all previous Template:Codeline commands, press Template:Keypress+Template:Keypress, type 'mount' and keep pressing Template:Keypress+Template:Keypress until the desired line is found.

The forward equivalent to this mode is called forward-search-history and is bound to Template:Keypress+Template:Keypress by default. Beware that most terminals override Template:Keypress+Template:Keypress to suspend execution until Template:Keypress+Template:Keypress is entered. (This is called XON/XOFF flow control). For activating forward-search-history, either disable flow control by issuing:

$ stty -ixon

or use a different key in Template:Filename. For example, to use Template:Keypress+Template:Keypress which is not bound by default:

"\es":forward-search-history

History search

Avoid duplicates

If you repeat the same command several times, they will all be appended in your history. To prevent this, add to your Template:Filename:

export HISTCONTROL=ignoredups

Avoid whitespaces

To disable logging blank commands add this to your Template:Filename:

export HISTCONTROL=ignorespace

If your Template:Filename already contains

export HISTCONTROL=ignoredups

replace it with

export HISTCONTROL=ignoreboth

Macros

Readline also supports binding keys to keyboard macros. For simple example, run this command in Bash:

bind '"\ew":"\C-e # macro"'

or add the part within single quotes to inputrc:

"\ew":"\C-e # macro"

Now type a line and press Template:Keypress+Template:Keypress. Readline will act as though Template:Keypress+Template:Keypress (end-of-line) had been pressed, appended with 'Template:Codeline'.

Use any of the existing keybindings within a readline macro, which can be quite useful to automate frequently used idioms. For example, this one makes Template:Keypress+Template:Keypress+Template:Keypress append "| less" to the line and run it (Template:Keypress+Template:Keypress is equivalent to Template:Keypress:

"\e\C-l":"\C-e | less\C-m"

The next one prefixes the line with 'yes |' when pressing Template:Keypress+Template:Keypress+Template:Keypress, confirming any yes/no question the command might ask:

"\e\C-y":"\C-ayes | \C-m"

This example wraps the line in Template:Codeline, if Template:Keypress+Template:Keypress is pressed:

"\es":"\C-a su -c '\C-e'\C-m"

As a last example, quickly send a command in the background with Template:Keypress+Template:Keypress+Template:Keypress, discarding all of its output:

"\e\C-b":"\C-e > /dev/null 2>&1 &\C-m"

Tips and Tricks

Disabling control echo

Due to an update to Template:Package Official, the terminal now echoes Template:Codeline after Template:Keypress+Template:Keypress is pressed. For users who wish to disable this, simply add the following to Template:Filename:

set echo-control-characters off

Resources