web-dev-qa-db-ja.com

OS Xターミナルで単語をスキップする方法は?

MacOSXターミナルで長いコマンドを書いたとしましょう。

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

そして今、Word HelloHiに変更したいと思います。

そのためには、「カーソル」がWord Helloの最後に到達するまで、左のキーボードキーを押し続ける(または押し続ける)必要があります。その後、削除します。通常の「オプションを押し続ける」手法は、他のほとんどのOSXアプリケーションのようには機能しません。

代わりに一度にWordをスキップする方法(またはカーソルをそこに移動する他の短い方法)はありますか?

11
Yuval

コマンドライン編集はシェルの機能であり、ターミナルの機能ではありません。おそらくあなたのシェルはbashであり、おそらくそのコマンドライン編集スタイルは「emacs」に設定されています。

便利なEmacsスタイルのキーの組み合わせをいくつか紹介します。

  • C-a:beginning-of-line
  • C-e:end-of-line
  • M-f:forward-Word
  • M-b:backward-Word
  • C-d:delete-char
  • M-d:kill-Word(次の「単語」を削除)
  • M-DEL:backward-kill-Word

C-xは Control+x、つまりC-aは Control+a

M-xは Meta+x、ただし、キーボードにメタキーがない可能性があります。したがって、代わりに、ESCxを使用できます(つまり、 Escape その後 x)。 Terminalには、キーが押される前にESCを自動的に送信する設定があります。 Option 押した。この機能を使用すると、Option修飾子を使用するときにMac OSXが通常提供する拡張文字処理が無効になります。したがって、拡張文字をほとんど使用せず、 Option+x ESCxを送信すると、このTerminalオプションを有効にできます。

あなたの例では、「こんにちは」に移動する方法はたくさんあります。

  • 「Hello」を検索:C-r H e l l o C-j(またはESC)
    • 通常のEmacsでは、RET(Return)現在の場所で検索を終了し、編集に戻ります。ただし、bashでは、デフォルトのバインディングにより、インクリメンタルサーチがアクティブな場合でも、RET(つまりC-m)は常に現在の行を実行します。したがって、C-j/ESCの部分は通常のEmacsからの逸脱です。
  • 行の先頭にジャンプして前に進みます:C-a M-f C-f(または 
  • 行の先頭にジャンプしてから、単語で移動します:C-a M-f M-f M-b
  • M-bを頻繁に使用します(OptionをMetaにマップした場合にのみ実際に実行可能です)。

希望する交換を行う方法もいくつかあります。

  • 単語を削除して置き換えます:M-d H i
  • 文字を削除して置き換えます:C-d C-d C-d C-d C-d H i
  • 「H」を過ぎて次の作品を削除し、置き換えます:C-f M-d i
  • 「H」を超えて残りの文字を削除し、それらを置き換えます。C-fC-d C-d C-d C-d i

Wordの最後で停止した場合(おそらくC-a M-f M-f経由)、M-DEL Hiを使用できます。

bind -P | lessのようなことをして、他の興味深いバインディングを見つけることができます。 bashのマニュアルページのreadlineセクションを参照してください (または bash情報ページのreadline部分 )詳細については。

19
Chris Johnsen

_forward-Word_のデフォルトのreadlineバインディングはMeta-F(bash(1) man page、[〜#〜] readline [〜#〜] section、Commands移動用サブセクション)。ただし、OSXでMetaが何に変換されるかはわかりません。オプション、おそらく。