ターミナルでCtrl + L


41

誤ってターミナルにctrl+ Lを入力すると、ターミナルウィンドウが「スクリーンフル」サイズ1つジャンプしました。「編集」->「キーボードショートカット」でキーボードショートカットを調べましたが、そのショートカットが見つかりませんでした。

ctrl+ Lは何をし、どこで定義されていますか?

回答:


58

ctrl+ Lターミナル画面をクリアします。

これは、コマンドに相当するキーボードショートカットclear -xです。ref

これはのプロパティでbashあるため、gnome-terminalのキーボードショートカットでは見つかりませんでした。からman bash

clear-screen (C-l)
          Clear the screen leaving the current line  at  the  top  of  the
          screen.   With  an  argument,  refresh  the current line without
          clearing the screen.

Bashキーボードショートカットの詳細リストを参照してください。


ああ、それはそれを説明しています。
パート

3
ただし、単なるbashではありません。Ctrl-Lはフォームフィード文字です。これはそれほど一般的ではありませんが、ソースコードに^ Lが表示されて、コードの「ページ」が区切られることがあります。プリンタがそれを制御文字として解釈するとき、それはより理にかなっています。
ジョシュアテイラー

@JoshuaTaylorあなたは正しいです。上の関連ウィキの記事改ページ
souravc

1
^ Lはasciiテーブルのフォームフィード文字ですが、それに応じて処理するプログラム(このコンテキストではbashまたはターミナルエミュレーター)で受信しない限り、何もしません。
アレクシス14年

1
clearこのコマンドclearは、端末の履歴を消去しないため、デフォルトのコマンドと同等ではないことに注意してください。-x引数を追加しない限り、コマンドは消去しますclear -x
ジリスラフ

18

使用しているシェルがインターセプトしていない場合、ターミナルで「フォームフィード」文字を入力しています。端末アプリケーションが何らかの方法でキーストロークをインターセプトまたは使用しない場合、Ctrl+ Letterは文字から64(1)を引いたASCIIコードに変換されます。65は 'A'のASCIIコード、 'L'は12文字目->コード76です。シェルがコードの処理方法を知らない場合は、それを出力します。

FF文字を印刷すると、ラインプリンターに新しいページが表示され、端末にクリアスクリーンが表示されます(はい、当時300ボーでVT-52を使用しました)。

だから、Ctrl+ LFFである12です。同様に、Ctrl+ IはTABで、Ctrl+ Gはベルを鳴らします。たとえば、Ctrl+のように、端末またはシェルがそれをインターセプトしないC場合です。

他の回答からの注意:bash インターセプトを行い、CTRL- Lを行うようclearです。bash作成者がキーをコマンドに関連付けて、古い端末でASCIIコードを実行したのとほぼ同じことを行うという素晴らしい感じです!

一方、私zshの組み合わせではCTRL- Iとして動作しTABCTRL- (2)Hとして動作しBackspaceます。

古い素敵なASCII ...(文字Lは列4、行12にあり、ASCIIコード4 * 16 + 12 = 76であることに注意してください)。

ウィキメディアコモンズの画像

オリジナル画像ここから、ASCIIのWikipediaの記事


脚注:

(1)Ctrlビット7をクリアするために実際に使用されます。

(2)これは、たとえば「これは悪い^ H ^ H ^ Hではないのでいいアイデアだった」などの「単語を削除できない」というジョークのソースです...(通常、悪いよりも強い言葉で!)


1
いいね ちなみにこのチャートはどのように使用しますか?文字Lが行12と列4にあることがわかります。それから、124からマイナス32だけですか、またはASCIIコードをどのように計算しますか?
パート

@AvatarPartoが上がり、65の代わりに32を書きました。回答が修正されました。テーブルはバイナリであるため、コードはcolumn * 16 + rowです。
Rmano

1
取り消し線を使用できない場合は、リテラル^Hsまたは^Wsを挿入すると便利です。:)
ブラックライトシャイニング

8

Control-Lは、bashによってインターセプトされ、解釈されます(実際には、コマンドラインでインタラクティブな編集を処理するreadlinelibraryによって)。clear-screen@souravcが書いたように、関数にバインドされています。

の意味に関する注意Control-L ASCII文字テーブルでフォームフィードとして定義されていますが、プログラムがそれに応じて解釈しない限り、これは何も意味しません。端末にフォームフィードが表示されても画面はクリアされませんcat。ファイルに^ Lを保存し、でファイルを印刷することで確認できます。をbash/readline見ると^Lclear-screen関数を実行します。これにより、端末エミュレーターによって認識される一連の文字(termcapまたはterminfoで説明)が送信され、画面がクリアされます。

非常に古いプリンタでは、a ^Lは用紙を進めて次のシートの印刷を開始するため、「フォームフィード」という名前が付けられます。しかし、最新の端末と端末エミュレータは、制御コマンドが(エスケープ)で始まる複数文字の「エスケープコード」である新しいANSI標準に従います^[。bashがを見ると^L、おそらく2コマンドシーケンスを送信しています。これはESC [ H ESC [ J画面の左上に移動し、その下のすべてをクリアします(したがって、画面全体)。


実際には、シーケンスESC [ ESC [ Jはコマンド履歴もクリアしますが、シーケンスはクリアCTRL + L しません。ターミナルに送信されるシーケンスはむしろESC [ H ESC [ 2 J、次のコマンドを使用して自分で試してみてくださいprintf "\033[H\033[2J"
ジリスラフ

0

誰もがCtrl+ Lが何であり、何をするかをすでに十分に説明しているが、コマンドを「逆にする」方法については誰も説明していないので、ここにいくつかのコマンドを入力して元の状態に戻すことができます:

history

最後に入力した20個のコマンドが表示されます。

tail --lines=20 /var/log/dpkg.log

実行していたパッケージインストールの出力の最後の20行が表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.