「Readline」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://stackoverflow.com/」を「https://stackoverflow.com/」に置換) |
Kusanaginoturugi (トーク | 投稿記録) (add Category.) |
||
(3人の利用者による、間の5版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category:コマンド |
+ | [[Category:コマンドライン]] |
+ | [[Category:GNU]] |
||
[[en:Readline]] |
[[en:Readline]] |
||
[[it:Readline]] |
[[it:Readline]] |
||
[[ru:Readline]] |
[[ru:Readline]] |
||
[[zh-hans:Readline]] |
[[zh-hans:Readline]] |
||
− | '''Readline''' は [[GNU プロジェクト]]によって開発されているライブラリで、コマンドラインで編集したり対話するために [[Bash]] などの CLI インターフェイスプログラムで使われています。 |
+ | '''Readline''' は [[GNU プロジェクト]]によって開発されているライブラリで、コマンドラインで編集したり対話するために [[Bash]] などの CLI インターフェイスプログラムで使われています。詳しくは {{man|3|readline}} を参照してください。ここでは簡単な設定だけに触れます。 |
+ | |||
+ | == インストール == |
||
+ | |||
+ | {{Pkg|readline}} パッケージは、[[Bash]] の依存関係としてすでにインストールされている可能性があります。 |
||
== 編集モード == |
== 編集モード == |
||
− | デフォルトでは Readline はコマンドラインと対話するのに Emacs のようなショートカットを使います。ただし、vi スタイルの編集インターフェイスもサポートはされています。 |
+ | デフォルトでは Readline はコマンドラインと対話するのに [[Emacs]] のようなショートカットを使います。ただし、vi スタイルの編集インターフェイスもサポートはされています。 |
[[vi]] あるいは vim を使っている場合、以下の行を {{Ic|~/.inputrc}} に記述することで Readline ベースのアプリケーションで vi ライクなキーバインドを有効にできます: |
[[vi]] あるいは vim を使っている場合、以下の行を {{Ic|~/.inputrc}} に記述することで Readline ベースのアプリケーションで vi ライクなキーバインドを有効にできます: |
||
− | set editing-mode vi |
||
+ | {{hc|~/.inputrc| |
||
− | もしくは、以下の行を {{Ic|~/.bashrc}} に追加すると Bash で vi ライクなキーバインドが設定されます: |
||
− | + | set editing-mode vi}} |
|
+ | |||
+ | もしくは、以下の行を {{Ic|~/.bashrc}} に追加すると [[Bash]] で vi ライクなキーバインドが設定されます: |
||
+ | |||
+ | {{hc|~/.bashrc| |
||
+ | set -o vi}} |
||
便利な [http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf vi] や [http://www.catonmat.net/download/readline-emacs-editing-mode-cheat-sheet.pdf emacs] のチートシートも参照。 |
便利な [http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf vi] や [http://www.catonmat.net/download/readline-emacs-editing-mode-cheat-sheet.pdf emacs] のチートシートも参照。 |
||
+ | |||
+ | === プロンプトのモードインジケータ === |
||
+ | |||
+ | viスタイルの編集には、コマンドと挿入の2つのモードがあります。次のオプションを追加すると、現在アクティブなものを表示できます。 |
||
+ | |||
+ | {{hc|~/.inputrc| |
||
+ | set show-mode-in-prompt on |
||
+ | }} |
||
+ | |||
+ | プロンプトに表示される文字列 (デフォルトでは {{ic|(cmd)}}/{{ic| (ins) }})は、{{ic|vi-ins-mode-string}} および {{ic|vi-cmd-mode-string}} 変数を使用してカスタマイズできます。 |
||
+ | |||
+ | === モードごとに異なるカーソル形状 === |
||
+ | |||
+ | モードごとに異なるカーソル形状を設定するには、[https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html#index-vi_002dcmd_002dmode_002dstring "\1 .. \2" escapes] |
||
+ | |||
+ | {{hc|~/.inputrc| |
||
+ | set vi-ins-mode-string \1\e[6 q\2 |
||
+ | set vi-cmd-mode-string \1\e[2 q\2 |
||
+ | }} |
||
+ | |||
+ | |||
+ | これにより、コマンドモードの場合はブロック型カーソルが、挿入モードの場合はパイプカーソルが設定されます。 これを機能させるには、モードインジケーターを有効にする必要があることに注意してください ([[#Mode indicator in prompt]] を参照) |
||
+ | |||
+ | 仮想コンソールでは異なるエスケープコードが使用されるため、最初に使用されている用語を確認する必要があります。 |
||
+ | |||
+ | {{hc|~/.inputrc|2= |
||
+ | $if term=linux |
||
+ | set vi-ins-mode-string \1\e[?0c\2 |
||
+ | set vi-cmd-mode-string \1\e[?8c\2 |
||
+ | $else |
||
+ | set vi-ins-mode-string \1\e[6 q\2 |
||
+ | set vi-cmd-mode-string \1\e[2 q\2 |
||
+ | $endif |
||
+ | }} |
||
+ | |||
+ | 詳細については、[https://www.kernel.org/doc/html/latest/admin-guide/vga-softcursor.html software cursor for VGA] を参照してください。 |
||
== 高速な単語移動 == |
== 高速な単語移動 == |
||
125行目: | 170行目: | ||
{{Pkg|readline}} のアップデートによって、{{ic|Ctrl+C}} を押すとターミナルは {{Ic|^C}} を表示するようになっています。制御文字を表示して欲しくない場合、以下を {{Ic|~/.inputrc}} に追加します: |
{{Pkg|readline}} のアップデートによって、{{ic|Ctrl+C}} を押すとターミナルは {{Ic|^C}} を表示するようになっています。制御文字を表示して欲しくない場合、以下を {{Ic|~/.inputrc}} に追加します: |
||
set echo-control-characters off |
set echo-control-characters off |
||
+ | |||
+ | == 参照 == |
||
+ | |||
+ | * [http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf vi readline 編集チートシート] |
||
+ | * [http://www.catonmat.net/download/readline-emacs-editing-mode-cheat-sheet.pdf emacs readline 編集チートシート] |
2022年3月6日 (日) 08:46時点における最新版
Readline は GNU プロジェクトによって開発されているライブラリで、コマンドラインで編集したり対話するために Bash などの CLI インターフェイスプログラムで使われています。詳しくは readline(3) を参照してください。ここでは簡単な設定だけに触れます。
目次
インストール
readline パッケージは、Bash の依存関係としてすでにインストールされている可能性があります。
編集モード
デフォルトでは Readline はコマンドラインと対話するのに Emacs のようなショートカットを使います。ただし、vi スタイルの編集インターフェイスもサポートはされています。
vi あるいは vim を使っている場合、以下の行を ~/.inputrc
に記述することで Readline ベースのアプリケーションで vi ライクなキーバインドを有効にできます:
~/.inputrc
set editing-mode vi
もしくは、以下の行を ~/.bashrc
に追加すると Bash で vi ライクなキーバインドが設定されます:
~/.bashrc
set -o vi
プロンプトのモードインジケータ
viスタイルの編集には、コマンドと挿入の2つのモードがあります。次のオプションを追加すると、現在アクティブなものを表示できます。
~/.inputrc
set show-mode-in-prompt on
プロンプトに表示される文字列 (デフォルトでは (cmd)
/ (ins)
)は、vi-ins-mode-string
および vi-cmd-mode-string
変数を使用してカスタマイズできます。
モードごとに異なるカーソル形状
モードごとに異なるカーソル形状を設定するには、"\1 .. \2" escapes
~/.inputrc
set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2
これにより、コマンドモードの場合はブロック型カーソルが、挿入モードの場合はパイプカーソルが設定されます。 これを機能させるには、モードインジケーターを有効にする必要があることに注意してください (#Mode indicator in prompt を参照)
仮想コンソールでは異なるエスケープコードが使用されるため、最初に使用されている用語を確認する必要があります。
~/.inputrc
$if term=linux set vi-ins-mode-string \1\e[?0c\2 set vi-cmd-mode-string \1\e[?8c\2 $else set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2 $endif
詳細については、software cursor for VGA を参照してください。
高速な単語移動
Xterm は Ctrl+Left
と Ctrl+Right
による単語ごとの移動を デフォルトで サポートしています。他のターミナルエミュレータでもこの機能を使うには、適切な ターミナルコード を確認して、~/.inputrc
で backward-word
と forward-word
にバインドしてください。
例えば urxvt の場合:
~/.inputrc
"\e[1;5D": backward-word "\e[1;5C": forward-word
履歴
通常、上方向キーを押すと、今入力しているコマンドとは関係なく、最後に実行したコマンドが表示されます。しかしながら、今入力した文字列とマッチする過去のコマンドだけを表示するようにすると便利かもしれません。
例えば、ユーザーが以下のコマンドを実行していた場合:
ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig
who
mount
man mount
この場合、ls
と入力して上方向キーを押したときに、入力されている文字が man mount
に置き換わるようなことです。履歴検索を有効にしていれば、(現在入力した) ls
から始まる過去のコマンドだけが表示されます。上記の例なら ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig
です。
以下の行を /etc/inputrc
または ~/.inputrc
に追加することで履歴検索モードを有効にできます:
"\e[A":history-search-backward "\e[B":history-search-forward
vi モードを使っている場合、以下の行を ~/.inputrc
に追加します (この投稿 を参照):
set editing-mode vi $if mode=vi set keymap vi-command # these are for vi-command mode "\e[A": history-search-backward "\e[B": history-search-forward j:history-search-forward k:history-search-backward set keymap vi-insert # these are for vi-insert mode "\e[A": history-search-backward "\e[B": history-search-forward $endif
上記の行を ~/.inputrc
に追加する場合、こちら のような変なことが起こらないようにファイルの最初に以下の行を追加することを推奨します:
$include /etc/inputrc
また、Ctrl+R
を押すことで reverse-search-history (インクリメンタル検索) を使うこともできます。前の入力に基づいて検索する代わりに入力されたコマンドを検索語として履歴バッファを後方に検索します。このモードで Ctrl+R
をもう一度押すと現在の検索語にマッチするバッファの一つ前の行が表示され、Ctrl+G
(abort) を押すと検索がキャンセルされて現在の入力行に戻ります。例えば前に実行した mount
コマンドを検索したい場合、Ctrl+R
を押してから 'mount' と入力して、見つけたい行が出るまで Ctrl+R
を押します。
このモードの前方検索は forward-search-history と呼ばれデフォルトでは Ctrl+S
で呼び出せます。しかしながら、ほとんどのターミナルは Ctrl+S
を上書きしてしまい、Ctrl+Q
が入力されるまで画面出力が一時停止します (XON/XOFF フロー制御と呼ばれます)。forward-search-history を有効にするには、以下のコマンドを実行してフロー制御を無効化:
$ stty -ixon
または inputrc
で別のキーを使って下さい。例えば、デフォルトで何にもバインドされていない Alt+S
を使うには:
"\es":forward-search-history
高速な補完
タブ補完を実行するとき、タブを一回押すと入力している単語が部分的に補完されます。部分補完ができない場合、タブを二回押すと全ての補完候補が表示されます。
タブを一回押した時に二回押したときと同じ補完を実行するには、以下を設定:
~/.inputrc
set show-all-if-unmodified on
もしくは一回のタブで両方の補完を実行するように設定: 部分補完を実行して補完候補を全て表示:
~/.inputrc
set show-all-if-ambiguous on
カラー補完
colored-stats
オプションを使うことでファイル名の補完に色を付けることができます。colored-completion-prefix
で補完リストの一致部分に色を付けることも可能です。例:
~/.inputrc
# Color files by types set colored-stats On # Append char to indicate type set visible-stats On # Mark symlinked directories set mark-symlinked-directories On # Color the common prefix set colored-completion-prefix On # Color the common prefix in menu-complete set menu-complete-display-prefix On
マクロ
Readline ではキーをキーボードマクロにバインドすることができます。例えば、Bash で以下のコマンドを実行します:
bind '"\ew":"\C-e # macro"'
もしくは inputrc に以下を追加します:
"\ew":"\C-e # macro"
そして何か文字を入力して Alt
+W
を押して見て下さい。Readline はまるで Ctrl+E
(end-of-line) が押されたように振る舞い、' # macro
' が追加されます。
Readline マクロで既存のキーバインドを使うことで、頻繁に使用するイディオムを自動的に使うようにできて大変便利です。例えば、以下のマクロは Ctrl+Alt+L
で "| less" を行末に追加して実行します (Ctrl+M
は Enter
と同じです):
"\e\C-l":"\C-e | less\C-m"
以下のマクロは Ctrl+Alt+Y
を押すと行頭に 'yes |' が追加され、yes/no を聞いてくるコマンドに y で答えてくれます:
"\e\C-y":"\C-ayes | \C-m"
以下のマクロは Alt+S
が押されたときに入力した文字列を su -c ''
で囲ってくれます:
"\es":"\C-a su -c '\C-e'\C-m"
以下のマクロは Alt+S
が押されたときに sudo
を行頭に付けます。Enter
キーは入力しないので安全です。
"\es":"\C-asudo \C-e"
最後の例は、Ctrl+Alt+B
でコマンドを バックグラウンドに送って、全ての出力を捨てます:
"\e\C-b":"\C-e > /dev/null 2>&1 &\C-m"
制御エコーを無効にする
readline のアップデートによって、Ctrl+C
を押すとターミナルは ^C
を表示するようになっています。制御文字を表示して欲しくない場合、以下を ~/.inputrc
に追加します:
set echo-control-characters off