web-dev-qa-db-ja.com

CentOSコマンドラインでalt / ctrl +左/右を有効にする

私のホスティング業者は最近新しいCentOSにアップデートしましたが、私はそれを「パーソナライズ」してきましたが、今は何かが足りません。

私の家のUbuntuサーバーではforward-Wordおよびbackward-Wordと ALTRIGHTLEFT。私はそのために何もしませんでした。私がすることもできます ALTBACKSPACE Wordを削除します。

私の新しいCentOSで私はすることができます ALTBACKSPACE、しかし私は得ることができません ALTRIGHTLEFT ワーキング! ALTBF 動作しますが、それは左側でのみ動作するため、受け入れられません ALT そして私の指はそれほど痩せていません。 (正しい ALTBF 「b」または「f」を出力するだけです)

/ etc/inputrcの一部をCentOSにコピーしようとしましたが、何もしません。

ALT または CTRL、私は気にしませんが、私は本当にショートカットが必要です。前回のCentOSにはありませんでしたが、Ubuntu以降、CentOSにはありませんでした。

私のCentOS/etc/inputrc

"\e[5C": forward-Word
"\e[5D": backward-Word
"\e[1;5C": forward-Word
"\e[1;5D": backward-Word

私のUbuntu/etc/inputrc

"\e[1;5C": forward-Word
"\e[1;5D": backward-Word
"\e[5C": forward-Word
"\e[5D": backward-Word
"\e\e[C": forward-Word
"\e\e[D": backward-Word

どういう意味かわからない!?とは [1;5Cキー用??

10
Rudie

あなたの質問のおかげで、私はついにいくつかの読書をし、私の理解を深めました、乾杯!

したがって、非常に優れた情報源はman readlineです。さまざまなinputrcファイルで指定されたキーバインディングは、BASHreadlineライブラリの動作方法を制御します。 readlineのマンページによると、シンボリックキー名またはエスケープシーケンスのいずれかを使用できます。

   Key Bindings
       The syntax for controlling key bindings in the inputrc file is
       simple.  All that is required is the name of  the  command  or
       the  text  of a macro and a key sequence to which it should be
       bound. The name may be specified in one of two ways: as a sym‐
       bolic  key  name, possibly with Meta- or Control- prefixes, or
       as a key sequence.  The name and key sequence are separated by
       a  colon.  There can be no whitespace between the name and the
       colon.

       When using the form keyname:function-name or macro, keyname is
       the name of a key spelled out in English.  For example:

              Control-u: universal-argument
              Meta-Rubout: backward-kill-Word
              Control-o: "> output"

マニュアルページには、デフォルトの構成ファイルが~/.inputrcであるとも記載されているため、そこにバインディングを配置することをお勧めします。

通常の文字キーを使用する場合(たとえば Control-g)、Control-g: forward-Wordは正常に機能します。矢印キーは難しいです。矢印キーのキーnameを見つけようとしましたが、失敗しました。私が試したもの(left-arrowleft:left)はどれも機能しなかったため、エスケープシーケンスでスタックしているようです。

残念ながら、正確なエスケープシーケンスはターミナルエミュレーター間で異なります(そのため、Ubuntu inputrcには複数の行がありました)。お気に入りの端末が使用しているエスケープシーケンスを見つけるには、readを実行してから、目的のキーシーケンスを入力します。terminatorxterm、およびgnome-terminalに、 Control-Left 与える:

$ read
^[[1;5D

aterm

$ read
^[Od    <-- that is a capital O not a zero (0).

少し実験して、^[[Dが Left^[[1;5Dは Control-Left。最初の^[は Esc ここで使用されているキーは、エスケープシーケンスを表すために使用されていると思います。

いずれにせよ、バインドする Control-Left すべての人に役立つ方法でforward-Wordに、これらの行を~/inputrcに追加しました。

"\e[1;5D": backward-Word
"\eOd": backward-Word

私が完全に理解していない理由のために、 Control\eで表されます。これはshould Esc

上記のすべての端末で機能する最後の~/.inputrcファイルは次のとおりです。

"\e[1;5D": backward-Word
"\eOd": backward-Word
"\e[1;5C": forward-Word
"\eOc": forward-Word
11
terdon

Iterm2でそれを実行して、任意のホストに接続したときに機能するようにする方法。

注:これを書くのは、別の質問( https://superuser.com/questions/1042937/getting-ctrlarrows-to-move-Word-at-a-time- on-newest-iterm2?rq = 1 )はこの質問に重複としてリンクしていますが、この質問はIterm2でこれを行う方法に答えていないため、実際には重複していません。

OS Xを使用していて、Iterm2を使用している場合は、マッピングできます Alt/Ctrl+→ (right arrow) そして Alt/Ctrl+ 標準のreadlineコマンドに Meta+F そして Meta+B。以下の例では、エスケープキーがメタであると想定しています。これを行うには、Iterm2を開きます。

  1. クリック:メニュー->設定...
  2. 「プロファイル」タブをクリックします。
  3. プロファイルまたはデフォルトのプロファイルをクリックします。
  4. 「キー」サブタブをクリックします。
  5. 「プリセットの読み込み…」の横にある「+」プラス記号をクリックします
  6. 最初のフィールドにキーボードショートカットを入力します(例: Ctrl+
  7. 「SendText」、「Send Hex」(以下の「キーシーケンスをコントロールキーにバインドする方法」でHexを送信する方法の詳細)、または「SendEscapeSequence」のいずれかを選択します。この場合、「エスケープシーケンスの送信」を使用しています。
  8. 最後のフィールドで、readlineが解釈できる文字を選択します。
  9. ^[はエスケープのreadlineシーケンスです。このエントリマップ Opt+ に Esc+F (多分 Alt+F 他の端末で)

key mapping window example

ショートカットを非エスケープシーケンスにマップする方法(Ctrl、 Alt、 Cmdなど)

  1. アプリストアから「キーコード」をダウンロードします。インストールして開きます。
  2. 開いているキーコードウィンドウで、 Ctrl+[いくつかの鍵]、この場合は使用します Ctrl+W readlineの前のWordを削除するため。
  3. 「Unicode」フィールドに注意してください。
  4. 次に、itermのpreferences-> Keys-> +(上記のシーケンス)を使用して、キーシーケンスをマップします。
  5. この状況のように「キーボードショートカット」フィールドに入力します Opt+Backspace
  6. 「アクション」を「16進コードの送信」に変更します。
  7. 最後のフィールドに前述の16進数を入力します。この場合、 23/0x17
  8. 「OK」をクリックすると、ショートカットがターミナルウィンドウで機能し、readlineが利用可能なすべてのシステムで機能するはずです。
1
N D

質問ありがとうございます。 CentOS 7のPuTTYでこの問題が発生し、$if mode=emacs条件内にこれを追加することで解決しました。

# for PuTTY
"\e\e[C": forward-Word
"\e\e[D": backward-Word

設定を有効にしました with CtrlX その後 CtrlR

0
Walf