iTerm 2:キーボードショートカットを設定して行の最初/最後にジャンプする方法


395

Ctrl+ left/ rightが行の先頭/末尾にジャンプすることがわかります。これをCmd+ left/ に変更する方法はright arrow

得るためにAlt+ left/ right arrowワードジャンプのために正しく動作することは従って、この記事を


私はここでそれを説明した:github.com/nikoloza/articles/blob/master/devtools/...
nikoloza

1
これらのショートカットをVIMでも機能させたい場合は、この回答を参照してください。stackoverflow.com/ a / 9611698/991068
Razvan Grigore

回答:


735

次のプロファイルショートカットキーをiTerm2に追加します

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

これが必要な人のためのビジュアルです

iTermはキービジュアルを追加します


3
Command + Deleteのコード/シーケンスを知っていますか?(プロンプトをクリアしてください)
Steven Lu

10
私は他の場所で最初のコメントに答えました、基本的に16進コード0x15はCtrl + Uを与えて行をクリアします。しかし、Tmuxの使用を妨げる0x01 Ctrl + Aを見つけています。したがって、代わりにHomeキーにマップするつもりです(MacキーボードのFn + Leftと同じ機能)。
Steven Lu

7
ホームのためのエスケープシーケンスは、[1〜あると終了のためのエスケープシーケンスがある[4〜
スティーブン・呂

3
すごい魅力のように機能します!
ジュート、2013

25
正しいバインディングは⌘← "SEND ESC SEQ" OHHomeと⌘→ "SEND ESC SEQ" OFEndに対するものです(これらは大文字の 'o'であり、ゼロではありません)。これは実際にホームとEndキーを押し、およびその他のbashで、このような意志の仕事、vimの、などをシミュレート
ティモシーツォルン

433

iTerm2で単語と行の始まり/終わりの間をジャンプするには、1つ選択してくださいは、以下の2つの解決策のを。

1.簡単な解決策(推奨)

  1. 設定を開く
  2. 「プロフィール」タブをクリック
  3. 左側のリストでプロファイルを選択し(「デフォルト」など)、「キー」タブをクリックします
  4. [プリセット]ダウンダウンをクリックし、[ナチュラルテキスト編集]を選択します

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


2.キーを手動でマッピングする(詳細)

上記の「Natural Text Editing」プリセットを使用したくない場合は、必要なキーを手動でマッピングできます。

  1. 設定を開く
  2. 「キー」タブをクリックします
  3. [+]アイコンをクリック

次のキーボードショートカットを追加できます。

カーソルを1単語左に移動する

  • キーボードショートカット:+
  • アクション:16進コードを送信する
  • コード: 0x1b 0x62

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

カーソルを1単語右に移動

  • キーボードの組み合わせ:+
  • アクション:16進コードを送信する
  • コード: 0x1b 0x66

カーソルを行頭に移動

  • キーボードの組み合わせ:+
  • アクション:16進コードを送信する
  • コード: 0x01

カーソルを行末に移動

  • キーボードの組み合わせ:+
  • アクション:16進コードを送信する
  • コード: 0x05

単語を削除

  • キーボードの組み合わせ:+←Delete
  • アクション:16進コードを送信する
  • コード: 0x1b 0x08

行を削除

  • キーボードの組み合わせ:+←Delete
  • アクション:16進コードを送信する
  • コード: 0x15

元に戻す

  • キーボードの組み合わせ:+z
  • アクション:16進コードを送信する
  • コード: 0x1f

以前のバインディング削除することを忘れないでください:

  • 「プロフィール」タブを開きます
  • サブタブ「キー」をクリックします
  • キーの組み合わせ+ +のマッピングを削除します

2
これは私にとってiTerm2でうまく機能し、とても簡単にフォローできました。
Natetronn

3
Just←の元のバインディングが何をするのかを明確にするだけですか?見えるよSays send Hex Codes: 0x1b 0x1b 0x5b 0x44。これを削除したくない場合は、知っておくと便利です。
2015

5
行の最初と最後にジャンプしても、zshを使用できませんでした。トップの回答で提案されているように、「Hex Code」「0x01」/「0x05」を使用するとうまくいきました。
フリップ

2
行頭と行末へのジャンプは私にとってもうまくいきませんでした。最高の答えが出ました。
hisabimbola

3
iTermには、これらを読み込み可能なプリセットにバンドルする方法がありますか?手動で入力するのは煩わしいようですが、これは私にとってはうまくいき、すばらしかったです。ltoありがとうございます!
2017

259

良い答えはたくさんありますが、シェルだけでなく、ネイティブのOSX機能にできる限り近いものを提供するはずです。これがZSH、Bash、node、python -i、iex、irb / pryセッションで機能することを確認しました(readlineにはrb-readline gemを使用しますが、すべてで機能するはずです)。

iTerm設定+ ,を開き、Profilesタブに移動します(Keysタブは使用できますが、プロファイルにキーバインドを追加すると、プロファイルを保存して複数のコンピューターに同期できます)。keysサブタブに移動し、次のように入力します。

カーソルの左側のすべての文字を削除します

+ ←Delete16進コードを送信:

0x15より互換性がありますが、機能としては、カーソルの左側にある文字だけでなく、行全体を削除することがあります。私はこれを個人的に使用し^U、カーソルの左側にあるものだけを削除するためにzshバインドキーを上書きします(以下を参照)。

または

0x18 0x7f互換性が低く、ノードでは機能せず、デフォルトで zshで機能しません。zsh を修正するは、以下を参照してください(bash / irb / pryで問​​題ありません)。機能する場合は、必要な機能を実行します。

カーソルの右側のすべての文字を削除します

+ fn+ ←Deleteまたは+ Delete→16進コードを送信:0x0b

カーソルの左側の1単語を削除

+ ←Delete16進コードを送信:

0x1b 0x08 エリクサーのIEXの中断、他の場所では問題なく動作するようです

または

0x17 どこでも機能しますが、IRBの通常の単語の区切りで停止せず、代わりにリテラルスペースが見つかるまで削除します。

カーソルの右側の1単語を削除

+ fn←Deleteまたは+ Delete→16進コードを送信:0x1b 0x64

カーソルを行の先頭に移動します

+ 16進コードを送信:0x01

カーソルを行末に移動

+ 16進コードを送信:0x05

カーソルを1単語左に移動する

+ 16進コードを送信:0x1b 0x62

カーソルを1単語右に移動

+ 16進コードを送信:0x1b 0x66

元に戻す

+ z16進コードを送信:0x1f

やり直しは、我々は、その後のzshに修正することができ、未使用のhexcodeにそれを設定することができますので、通常は、bash、zshのか、readlineの中で結合していません

+ + Zまたは+ y16進コードを送信:0x18 0x1f

動作しないものを修正する方法

zshの場合、次のコマンドを実行して、まだ機能していない+ ←Deleteおよび+ + Z/ +のバインディングを設定できます y

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

私はbashまたはreadlineでやり直しを追加するための解決策を見つけることができないので、誰かがそれらのどちらかの解決策を知っている場合は、以下にコメントしてください、それらを追加しようとします。

キーシーケンスを16進数に変換する方法に関するルックアップテーブルを探している人にとって、このテーブルは非常に役立ちます。


2
これは非常に便利です。大きな違いがあります。一部の人々は$前のと混同される可能性があることを指摘したいと思いechoます(単にそれを削除しますか?)。それ以外は完璧です。ありがとうございました。
edmundo

1
@Christopheでは、キーバインディングが本来あるべき状態にあるようです。16進値の追加に失敗したか、backward-wordのキーバインドが上書きされています。実行するbindkey | grep "\^\[b"と、設定後に別のものが上書きしているかどうかがわかります。これは、必要があるだけ返します#=> "^[b" backward-word。上書きされている場合は、上書きされている場所を見つけて削除する必要があります。それが不可能な場合は、実行echo 'bindkey "^[b" backward-word' >> ~/.zshrcしての最後の行に追加し、.zshrciTermを再起動すると動作します
Travis

2
@Christophe keysは、iTerm設定のタブをチェックして、+ が何かにマッピングされているかどうかを確認します。もしそうならそれを削除します。リリースをbすばやく押してからを押すとesc、正しく動作するかどうかをテストできますb。単語が左にジャンプするはずです。または、+ を16進数0x1b 0x42 またはに マップできます0x1b 0x5b 0x31 0x3b 0x35 0x44。私はそれらの両方が私のために働くことを確認しました。+ タブまたはタブのどちらかで、iTermで上書きされていると思います。profile keyskeys
Travis

3
すごい!ここで、元に戻すとやり直しのバインディングについて学習しました。
ecbrodie 2018年

3
これを手動で実行しましたが、これを行うためにプロファイルをインポートできないのはなぜですか?次に、これらの指示に基づいてGabLeRoux / iterm2-macos-dynamic-profileを作成しました。おかげで完璧に動作しますthanks
GabLeRoux

48

上記のチュートリアルに従って、iterm2で主要な設定をセットアップします。

  1. 新しいショートカットキーを作成する
  2. アクションとして「エスケープシーケンスを送信」を選択します
  3. 次に、その下のテキストでcmd-leftを設定します。
    • ラインスタートの[Hために入力してくださいOR
    • 入力[F用の行末

1
Fが私のiterm2内の1つの単語のみをジャンプする
Matthias

1
ITerm => Preferences => Keys
pfrank

これが大好き!他の解決策は私にとってはうまくいきませんでした。私はiterm2でctrl + aとctrl + eを使用できないことに苛立ちを感じていました。でも魚をあきらめたくなかった。これは完全に機能しますありがとうございます!
FLY

他の解決策も私にはうまくいきませんでしたが、これはうまくいきました。
Braham Snyder

42

iTerm 3.0.12では、Natural Text Editingプリセットに切り替えることができます。

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

iTerm→設定→プロファイル→キー

警告プリセットであるため、以前にバインドしたキーをオーバーライドできます。したがって、プリセットを適用する前に、現在のキーバインディングを保存することをお勧めします。


2
あなたの答えをもっと詳しく教えてもらえますか?のように、そのプリセットには何が含まれていて、上書きする可能性がありますか?
Carles Alcolea 2017年

答えてくれてありがとう。また、それに鳴ることは、おそらく方法は、あなたがデフォルトでねじ込むされていないと、「モード」を編集し、自然テキストとしてプロファイルを切り替えることができ、独自のカスタムプロファイルにこれを適用するのがベストプラクティスです
8月

29

iTerm2で行末または行頭に移動したい人をすばやく参照するには、上記のリンク http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html は、iTerm2では次のように述べています。

  • Ctrl+ A、行の先頭にジャンプし、
  • Ctrl+ E、行の終わりにジャンプします。

なぜこの答えが一番上にないのですか?
Gangadhar JANNU

1
@GangadharJannu:完全に同意します。それはansに直接行きます。上にする必要があります。
Catbuilt、

10

Travis Answerを使用して、その指示に基づいてインポートできる動的プロファイルを作成しました。

GabLeRoux / iterm2-macos-dynamic-profile

手順はreadmeにあり、すべて手動で追加するよりもインポートの方がはるかに高速です。これはコメントに隠されていたので、@ gooliのリクエストに従ってこれを回答しました。これをお楽しみください Hop


2
一年後にここに戻ってきて、これを見つけてとても幸せです!
elifiner

9

同じ問題を抱えているが、特にiTerm 2でZshシェルを使用している人を助けるためだけです。Zsh 正しく読み取れないことがわかります/etc/inputrc、設定で設定したキーバインディングを理解できないことがわかりました。

これを修正するには、次のようなキーバインディングを.zshrcファイルに追加する必要があります。

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

上記の例の「e」の前のバックスラッシュに注意してください。リンクされた記事には表示されないため、.zshrcバインディングを追加するときにファイルに追加します。


4

古い方法のemacsバインディングは、iterm2とos xターミナルで引き続き機能します。

設定->プロファイル->キー(プロファイルのサブタブ)

  • セットLeft/Right option <kbd>⌥</kbd> key acts as +Esc(OS X端末で同様)

これは有効にする必要がありますalt- falt- b言葉で単語を移動するため。(それでもctrl- actrl-eいつもいつものように働く)

metaこれらの古いバインディングが設定されている場合、一部のiterm2バインディングは使用できません。


2

ここで説明するように、簡単な手順で実行できます。

デフォルトでは、単語のジャンプ(オプション+→または←)および単語の削除(オプション+バックスペース)は機能しません。これらを有効にするには、「iTerm→設定→プロファイル→キー→プリセットの読み込み...→自然なテキスト編集→ブーム!ヘッドが爆発します」に進みます。


2

行の最初と最後に移動するために役立つ唯一のことは

⌘← "SEND ESC SEQ" OH-行頭
⌘→ "SEND ESC SEQ" OFに移動する- 行末に移動する


1

bind -p シェルにバインドされたエスケープキーのリストが表示されます。これは、より多くのアイデア/検索用語を提供するのに役立つ場合があります。


5
bind -pzsh、csh、tcshのBourneシェル(bash、sh)でのみ機能しますbindkey
トラビス


0

私にとって、次の組み合わせが機能しました:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

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