OS Xターミナルでカーソルを単語単位で移動する方法


762

私は組み合わせを知っているCtrl+は、A現在のコマンドの先頭にジャンプすると、Ctrl+ E最後にジャンプします。

しかし、CocoaアプリケーションのAlt+ /のように、単語ごとにジャンプする方法はありますか?


2
どのシェルを使用していますか?バッシュ?
Sargun Dhillon、

4
iTerm2は組み込み端末よりもはるかに優れています。キーボードをカスタマイズする方法について、以下の手順を投稿しました:)
cwd

21
ALTショートカットは、最新のOS Xのバージョンにターミナルに追加されました。
モスティモスタチョ2013年

7
これは私の見解ではありませんが、Bashシェルは関連するプログラミング環境であり、readlineバインディングは最も人気のあるLinux CLIアプリに広まっています。また、コミュニティが発言した賛成票の数も確認してください。
GL2014 14

11
投票を再開します。OSX ターミナルはプログラミングツールとして非常に重要です。
djechlin 2016年

回答:


567

箱から出して、あなたは非常に奇妙使用することができますEsc+をF次の単語の先頭に移動し、Esc+ B現在の単語の先頭に移動します。


47
コマンドを再実行するために両方のキーを再度押すのは不便でした。GNOMEターミナルと比較して、Mac OSXターミナルでこれを行うのはかなり不自然だと思います。
フオングエン

245
[ターミナル]> [設定]> [設定]> [プロファイル]>キーボードで[オプションをメタキーとして使用]を有効にできます。その後、手動でEscを個別に入力する必要はありません。
Chris Page

7
また、行の終わりでEsc+をF押すか、行の先頭で他のキーコンボを押すと、代わりに文字が挿入されます。迷惑!
Noldorin

10
「奇妙な」に関して:「F」と「B」は「前へ」と「後ろへ」の略です。Control-Fはカーソルを1文字進め、Control-Bはカーソルを1文字戻します。メタ修飾子(またはESC)を使用することは、「単語単位で移動する」ことを意味します。これらはemacs互換のバインディングです。bashを使用している場合は、vi互換のバインディングを使用するオプションがあります。または、を使用してそれらを完全にカスタマイズできます~/.inputrc
クリスペイジ

5
オプションをメタとして使用することは、〜や| (フランス語キーボードのように)。
Eric O Lebigot

417

Mac OS Xの場合-次のキーボードショートカットはデフォルトで機能します。ターミナル設定(キーボードタブの下)でオプションキーをメタのように機能させる必要があることに注意してください。

  • alt (⌥)+ Fを単語ごとFにジャンプする
  • alt (⌥)+ Bを1単語後ろBにジャンプする

私は、単純なテキストナビゲーションのデフォルトのemacsキーバインディングがbashシェルで機能するように見えることを確認しました。使用できます

  • alt (⌥)+ D現在のカーソル位置から始まる単語を削除するには
  • ctrl+ A行の先頭にジャンプする
  • ctrl+ E行末にジャンプする
  • ctrl+Kカーソル位置から始まる行を削除する
  • ctrl+Yキルバッファからテキストを貼り付けます
  • ctrl+R履歴から過去に入力したコマンドを逆検索する
  • ctrl+S前方検索へ(私にとってはzshで機能しますが、bashでは機能しません)
  • ctrl+F charで前進する
  • ctrl+B charで後方に移動するには
  • ctrl+ Wカーソル位置から逆方向に単語を削除する

1
ありがとう!なぜそれが箱から出してもうまくいかなかったのかと思っていました。それがまさに私が必要としたことです。
Flov、2011

11
次のようにiterm2でメタを変更できます。環境設定->プロファイル->キー->左のオプションキーはとして機能し+ESC、OPTION f / bを使用して単語を前後に移動できます。もっと
アラン・ドン

5
[ Ctrl + W ]-カーソル位置から後方に単語を削除するには
YemSalat

[ctrl + u] -エントリ全体を削除します
Cornelius

286

これを行う方法は次のとおりです

デフォルトでは、ターミナルには次のショートカットがあり、単語ごとに(左右に)移動します。

  • esc+ B(左)
  • esc+ F(右)

alt+ を設定して、これらのシーケンスを生成することができます。

  • ターミナル設定を開く(cmd+,);
  • [設定]タブで[キーボード]を選択し、ダブルクリックします ⌥ ←そこにある場合は、ない場合は追加します。
  • 必要に応じて修飾子を設定し、ボックスにショートカットキーを入力します:esc+ B、テキストを生成します\033b(手動でこのテキストを入力することはできません)。
  • 右に繰り返す(esc+にFなる\033f

または、textmateでこのブログ投稿を参照することもできます。

http://blog.macromates.com/2006/word-movement-in-terminal/


7
MacOSX 10+およびiTermユーザーの場合:グローバル設定でキーショートカットを割り当てるか、プロファイルキーの組み合わせとして割り当てます。ちょうど選択ドロップダウンの「エスケープシーケンスを送信」と入力:あなたが選択してくださいBために戻ったりFするために、前方へのEsc+フィールド
Gusの

以前は考えていなかった素晴らしいニーモニックの+1。私は間違いなく/残念なことになりません、私は設定しなかったために、今、これを覚えているalt leftし、alt rightそれらの配列を生成する
Arc676

ターミナルにキーマッピングを追加すると、Esc-Bではなく '^ [B'にバインドされます。
Andrea Bergonzo 2017

164

iTerm2に切り替えます。それは無料で、普通の古い端末よりもずっといいです。また、キーボードショートカットなど、カスタマイズのオプションが多数あります。

またcmd、1〜9を使用してタブを切り替えることができることも気に入っています。試してみてください。通常のターミナルに戻ることは決してありません:)

iterm2でカスタムキーボード設定をセットアップする方法

  • iTerm2をインストールする
  • 起動してから、設定ペインに移動します。
  • キーボードプロファイルタブを選択します
  • プロファイルを新しいものにコピーしてから、^+ Right/ などの矢印キーのショートカットを削除する必要がありますLeftか、バックアップ場合は、デフォルトのプロファイルから削除するだけです。
  • 次に、変更したプロファイルが選択されている(スター付き)ことを確認します

画像1.png

  • 次にキーボードタブを選択します(一番上の行)

iTerm 2

  • プラスボタンをクリックして、新しいキーボードショートカットを追加します
  • 最初のボックスにCMD+Left arrow
  • 2番目のボックスで[エスケープコードを送信]を選択します
  • 3番目のボックスに文字を入力します B

画像2.png

  • 必要なキーの組み合わせで繰り返します。escape+ Bは1単語左に移動し、escape+ fは1単語右に移動します。
  • あなたはまた、設定したいと思うかもしれcmd+ dとカーソルの前の単語を削除しますescape+d

矢印キーで間違ったボタン(cmd/ control/ alt)を押すことが多いので、これらのボタンと矢印キーの組み合わせをすべて前後にジャンプするように設定していますが、自分に合った方法で行ってください。


4
私は何をすべきかに関係なく、私が入ることができないCtrl + Arrow LeftRight- UpDown作品:/デフォルトとして新しいプロファイルを設定してとせずに試してみました
トビ

4
ソリューション:I MacOSのシステム環境の下で、ミッションコントロールのショートカットを無効にする必要がありました- >キーボード:)
トビ

上記の手順は、iTerm2では機能しなくなりました。以下のiTerm2ビルド3.3.4の回答を参照してください。
ハング

150

実際には、はるかに優れたアプローチがあります。ホールドoptionalt一部のキーボード上)を押し語で移動するために左または右の矢印キー。そのような単純な。

option
option

またctrle、行の最後に移動ctrlaし、最初に移動します。


2
場合によっては、これが機能しないことがあります。私はTerminal.appを開いたときに私にとって、それは大丈夫だったが、IntelliJのために、それだけで印刷[Dして[C。これを修正するには、bind '"[D": backward-word'およびbind '"[C": forward-word'をmy に追加します.bashrc
Jamie Counsell

@JamieCounsell私にバインドを追加しましたが、うまくいき.bashrcませんでした。(私はルビーマインを使用)
张艳军

@张艳军端末の.bashrc起動時にRubyMineが読み取るかどうかはわかりません。試してみてくださいecho "here"、あなたは新しいターミナルを開いたときにそのメッセージが表示された場合に参照してください。また、ターミナルを閉じて再度開くかsource ~/.bashrc、新しいファイルを読み取るために実行する必要があります。
ジェイミーカウンセル2017年

79

私はAlt+ / 作業しています:環境設定»設定»キーボードを開き、オプションカーソルのエントリをに設定してシェルに文字列を送信します:\ 033bオプションカーソルを右に設定して文字列をシェル送信します:\ 033f。これを他のControlキーの組み合わせにも使用できます。


20
\ 033bを取得するには、実際にはEscを押してからbを押す必要があります。
Matthew Schinckel、2008

7
私はSnow Leopardを使用していますが、有効にしEnable option as meta keyた場合にのみ機能します。ちなみに、とてもかっこいいです。キーがはるかに便利Escキー+ BまたはEscキー+ Fと比較達することになるはずです
フオングエン

2
好奇心から、ここで何が起こっているのですか?このコードがOSXで最初から違うのはなぜですか?他のそのようなコードを見つけるにはどうすればよいですか?
Koobz

私のMacでは、[設定]> [プロファイル]> [キー]にオプションキーが+ Ecsとして設定されています
Arun

38

実際には、使用するシェルによって異なりますが、ほとんどのシェルには同様のバインディングがあります。あなたが参照しているバインディング(例:Ctrl+ ACtrl+ E)は、他の多くのプログラムで見つかるバインディングであり、年齢に使用されます。BTWはほとんどのUIアプリでも機能します。

Bashのデフォルトのバインディングの外観は次のとおりです。

最も重要なBashキーボードショートカット

また、それらをカスタマイズできることにも注意してください。ファイルを作成し、必要に応じて名前を付ける必要があります。私は.bash_key_bindingsという名前を付けて、ホームディレクトリに配置します。そこで、いくつかの一般的なbashオプションを設定したり、キーバインディングを設定したりできます。それらが確実に適用されるようにするには、起動時にbashが読み込む「.bashrc」という名前のファイルを変更し(存在しない場合は作成する必要があります)、そこで次の呼び出しを行う必要があります。

bind -f ~/.bash_key_bindings

〜は、前述のようにbashのホームディレクトリを意味します。バインドする正しいパスと名前を入力する限り、ファイルに好きな名前を付け、好きな場所に配置できます。

私の.bash_key_bindingsファイルの抜粋をいくつか示します。

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

これらは、いくつかのオプションを設定するだけです(たとえば、ベルを無効にします。これはすべてbash Webページで調べることができます)。

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

これらは、文字だけが何もしないことを確認しますが、文字が「入力」されていることを確認します(シェルに自分自身を挿入します)。

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

これは非常に興味深いです。Ctrl+ Dだけを押した場合(削除にdを選択)、何も起こりません。しかし、小文字のwを入力すると、カーソルの左側にある単語が削除されます。しかし、大文字を入力すると、カーソルの右側の単語が削除されます。カーソルから始まる行全体についてlとLについても同様です。「a」を入力すると、行全体が実際に削除されます(カーソルの前後すべて)。

私は上の前方に一つの単語をジャンプ置いCtrl+ Fに1つのワード後方Ctrl+B

"\C-f": forward-word
"\C-b": backward-word

ご覧のとおり、すぐにアクションにつながるショートカットを作成することも、文字シーケンスを開始するだけで1つ(または複数)の文字を入力して次のようにアクションを実行させるショートカットを作成することもできます。上記の例に示されています。

したがって、デフォルトのバインディングに満足できない場合は、自由にカスタマイズしてください。ここだbashのマニュアルへのリンクの詳細については。


どのようにcommandキーコードは?あなたの例でcontrol\C、ですが、どうcommandですか?
Paschalis 2014年

基本的に、Ctrl + Aをcmd + leftにマップします(行の先頭に移動します)
Paschalis

1
@Paschalis MacOS Xでは、コマンドキーMetaはbash(\M)でマップされ、cmd + leftはになります\M-\e[D。ただし、cmd + ...を何かにマップすることはできません。すべてのコマンドショートカットはターミナルアプリ自体によって処理され(したがって、飲み込まれます)、シェルに転送されないため、cmd + leftは「前のウィンドウ」にマップします。ターミナルウィンドウが開きます。申し訳ありませんが、それはターミナルアプリでは不可能です。
Mecki 2014

18

自然テキスト編集プリセットを使用してください!

ここに画像の説明を入力してください

基本的に、他のキーシーケンスの中で、Option + LeftArrowにバインドします ^[bシーケンスに、Option + RightArrowをバインドします^[f

これは、psqlターミナルだけでなく、fishおよびbashでも機能します。


これは、古き良きキーのマッピングを設定する最も効率的な方法です。ありがとう!
fedesismo

私のように他の誰かが混乱した場合に備えて、このプリセットはトップレベルの[ キー ] タブではなく、[ プロファイルキー]サブタブでのみ使用できることに注意してください。
ベンアルブレヒト

15

もしあなたがたまたまVimユーザーなら、bashのvimモードを試すことができます。これを実行するか、~/.bashrcファイルに入れます。

set -o vi

デフォルトでは挿入モードです。エスケープを押すと、通常モードのVimと同じように動き回ることができるため、単語w単位の移動はまたはbであり、通常の移動キーも機能します。


15

Use option as meta key環境設定のキーボードタブでチェックインすると、前方ワードと後方ワードのデフォルトのemacsスタイルのコマンドと、それぞれ⌥FAlt+ F)と⌥BAlt+ B)になります。

From Bash to Z-Shellを読むことをお勧めします。bash / zshの腕前を高めたいなら!


1
はい、動作します。しかし、問題は、オプション7、オプション8、およびオプション9にある中括弧([] {} |)を入力する場合です。オプションはメタになり、メタ7、メタ8になりました...
マーティンウィックマン、

12

Mac OS X Lion 10.7以降では、ターミナルはデフォルトでOption- Left/Right ArrowEsc- マッピングするb/fため、これは今、これらのemacs互換のキーバインディングを使用するbashおよびその他のプログラムに組み込まれています。



8

Bashでは、これらはEsc- BおよびEsc-にバインドされFます。Bashには多くのキーボードショートカットがあります。の出力bind -pを見て、それらが何であるかを確認してください。


4

以下の下でiterm2環境設定>プロフィール>キー、あなたはをクリックし+、以下のキーマッピングをし、新しいショートカットを記録。以下のためのアクションを選択Send Escape Sequenceして入力するbか、fそれぞれ前後のために。

Ctrl+ )を記録しようとすると、キーボードショートカットフィールドに矢印が表示されないことに気付きました。私は、デフォルトのMacのシステム環境設定>キーボード>ショートカット> Mission Controlのショートカットを無効にする必要があったことがわかりました。標準端末アプリにも当てはまるはずです。

キーボードのシステム設定


1

iTerm2 Build 3.3.4ユーザー向けの新しい回答:

ステップ1:(macOS X)システム設定>キーボード>ショートカットタブ> Mission Control(左パネル)を選択>「左にスペースを移動」および「右にスペースを移動」というラベルが付いたショートカットのチェックを外します

ステップ2:(iTerm2ビルド3.3.4)[設定]> [プロファイル]> [選択] * [デフォルト](左パネル)> [キー]タブ> "⌥->"と "⌥<-"の両方のエントリを削除>両方の "左オプション(⌥)キーを設定: "および"右オプション(⌥)キー: "からEsc +

シェルプロファイルをいじり回したり、劣ったmasOS(デフォルト)ターミナルをいじり回したり、厄介なEsc + F / Bを使用したり、すすぎや繰り返しを行ったりする必要はありません。

取引完了!

私の仲間のプログラマー、このヒントをお楽しみください!


0

以前に回答set -o viしたように~/.bashrc、使用するvi/ vimキーバインディングを追加するか、次の部分を追加.bashrcCtrlて矢印キーで移動できます。

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

これらのコード行の効果を開始するには、source ~/.bashrcまたは新しい端末セッションを開始します。

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