181

ターミナルで非常に長いコマンドラインを移動する最良の方法は何ですか?

この長いコマンド ラインを取得するために、矢印キーまたはCtrl-を使用したとします。R

./cmd --option1 --option2 --option3 --option4 --option5 --option6 --option7 --option8 --option9 --option10 --option11 --option12 --option13 --option14 --option15 --option16 --option17 --option18 --option19 --option20 --option21 --option22 --option23 --option24 --option25 --option26 --option27 --option28 --option29 --option30 --option31 --option32 --option33 --option34 --option35 --option36 --option37 --option38 --option39 --option40 --option41 --option42 --option43 --option44 --option45 --option46 --option47 --option48 --option49 --option50 

ここで、カーソルを (行の先頭または末尾から開始して) に移動して、--option25そこで何かを変更する必要があります。

そこに着くための最速の方法は何ですか? 私が通常行うことは、最初に行ってから繰り返し、単語ごとに前に進むことです (または、Ctrl最後に行ってから戻ることです) 。しかし、時間がかかりすぎる長い列に。変更する必要がある部分を検索して直接ジャンプする方法が必要です。AAltFCtrlEAltBoption25

4

15 に答える 15

225

明確にするために、「端末のコマンドラインでカーソルをすばやく移動する方法」は必要ありません。実際に必要なのは、シェルプログラムでコマンド ラインをすばやく移動する方法です。

たとえば、 Bashは非常に一般的なシェルです。Readlineライブラリを使用して、コマンド ライン入力を実装します。つまり、bash だけでなく、Readline バインディングを知っていると非常に便利です。たとえば、gdb も Readline を使用して入力を処理します。

Readline のドキュメントでは、すべてのナビゲーション関連のバインディング (およびその他) を見つけることができます: http://www.gnu.org/software/bash/manual/bash.html#Readline-Interaction

上記のリンクがダウンした場合は、短いコピーと貼り付け:

ベア エッセンシャルズ

  • Ctrl-b 1 文字戻ります。
  • Ctrl-f 1 文字進みます。
  • [DEL] または [Backspace] カーソルの左側の文字を削除します。
  • Ctrl-d カーソルの下の文字を削除します。
  • Ctrl-_ または Cx Cu 最後の編集コマンドを取り消します。空の行まで元に戻すことができます。

動き

  • Ctrl-a 行頭に移動します。
  • Ctrl-e 行末に移動します。
  • Meta-f 単語が文字と数字で構成される場合、次の単語に移動します。
  • Meta-b 単語を後方に移動します。
  • Ctrl-l 画面をクリアし、現在の行を一番上に再表示します。

殺して引っ張る

  • Ctrl-k 現在のカーソル位置から行末までのテキストを削除します。
  • Md カーソルから現在の単語の終わりまで、または単語と単語の間の場合は次の単語の終わりまでを削除します。単語境界は、Mf で使用されるものと同じです。
  • M-[DEL] カーソルから現在の単語の先頭まで、または単語と単語の間の場合は前の単語の先頭までを削除します。単語境界は、Mb で使用されるものと同じです。
  • Ctrl-w カーソルから前の空白までを削除します。単語境界が異なるため、これは M- とは異なります。
  • Ctrl-y 直前に削除されたテキストを、カーソル位置のバッファにヤンクします。
  • 私のキルリングを回転させ、新しいトップを引っ張ってください。これは、前のコマンドが Cy または My の場合にのみ実行できます。

M はメタキーです。Max OS X ターミナルの場合、[設定]/[キーボード] で [オプションをメタ キーとして使用] を有効にすることができます。Linux の場合は、より複雑です。

アップデート

また、Readline は 2 つのモードで動作できることに注意してください。

Bash を vi モードを使用するように切り替えるには、次のようにします。

$ set -o vi

個人的にはテキスト編集にvimを使っているのでviモードの方が好きです。

ボーナス

macOS ターミナル アプリ (および iTerm も) では、Option キーを押しながらクリックしてカーソルを移動できます (カーソルはクリックした位置に移動します)。これは内部でも機能しますvim

于 2012-08-17T16:58:12.933 に答える
118

これはまだ終了していないので、ここにいくつかのオプションがあります。

  • Ctrl+のx後にCtrl+を使用して、またはまたは(この順序で試行)でe指定されたエディターで現在の行を開きます。$FCEDIT$EDITORemacs
  • 以前にコマンドを実行した場合は、Ctrl+rを押して履歴を逆検索し、入力option25します(この場合)。線が表示されます。Tabこの時点でヒットして編集を開始します。
  • s///修飾子を使用して履歴展開を使用します。たとえば!-2:s/--option25/--newoption/、最後から2番目のコマンドを再実行しますが、option25を置き換えます。最後の./cmdコマンドを変更するには、!string構文を使用します!./cmd:s/--option25/--newoption/
    。置換では、/の代わりに任意の区切り文字を使用できます。
  • 前の行を編集する場合は、クイック置換を使用できます。^--option25^--newoption
  • 文字検索。これはPaxによって言及されており、通常のemacsモードで、前方検索の場合はCtrl+ 、後方検索の場合は++で実行できます。]CtrlAlt]

2番目のオプションをお勧めします。Ctrl+rは本当に便利で高速で、エディターをいじくり回すことはありません。コマンドを実行する前に結果を確認できます(履歴の展開とは異なります)。

于 2009-05-13T11:01:13.873 に答える
39

Option キーを押したまま、カーソルを動かしたい場所をクリックすると、Terminal はその正確な場所にカーソルを移動させます。

于 2016-07-21T12:44:50.680 に答える
12

私は vi 編集モードを好む傾向があります (これらのキーストロークは、WordStar 3.3 の CTRL-K や CTRL-X と一緒に、脊髄に埋め込まれているため (脳はまったく使用されていません) :-)。コマンドラインset -o viを使用してアクティブ化 (およびset -o emacs元に戻す) できます。

Vi では、(もちろん最初に行を取得するには ESC-K) " f5;;B" (二重引用符なし) になります。

もちろん、これを回避するには何が起こっているのかを理解する必要があります。基本的には、

f5 to find the first occurrence of "5" (in --option5).
;  to find the next one (in --option15).
;  to find the next one (in --option25).
B  to back up to the start of the word.

emacs 愛好家がより良い解決策を思い付くことができるかどうか見てみましょう (私は宗教戦争を始めたくありませんが)。

この恐ろしく長いコマンドをスクリプトに入れたいかどうか考えたことはありますか? :-)

実際には、" 3f5B" と入力して 3 番目に出現する "5" を見つけてから、単語の先頭に戻ることができます。

于 2009-03-18T06:21:31.270 に答える
9

Meta-b / Meta-f を使用して、それぞれ単語単位で前後に移動します。

OSX では、Meta は ESC として変換されますが、これは最悪です。

ただし、代わりに、ターミナルの設定 -> 設定 -> プロファイル -> キーボードを開いて、「オプションをメタ キーとして使用する」にチェックを入れることもできます。

于 2012-05-11T11:28:17.827 に答える
8

コマンドを1回実行した後、実行しますfc

前のコマンドで起動$EDITORし、通常のエディターを使用してコマンドを変更できます。保存して終了すると、ファイルが実行されます。

..しかし、Pax が言ったように、コマンド ラインはとてつもなく長い行を編集するのには特に適していません。なぜコマンドをスクリプトにしないのでしょうか。

于 2009-03-18T12:46:15.590 に答える
1

1 つのオプションは、で使用することM-x shellですemacs。これにより、すべての編集機能とキーストロークが提供されるemacsため、たとえばC-s、テキストの検索に使用できます。option25

(しかし、誰かが優れた検索および編集機能を教えてくれるなら、代わりに実際のターミナル シェルを使用したいと思います。)

于 2009-03-18T18:19:40.687 に答える
0

Cygwin では、ウィンドウを右クリックすることで、このような機能を有効にすることができます。ポップアップ ウィンドウで、[オプション... ] -> [マウス] -> [コマンド ライン カーソルを配置] をクリックしてアクティブ化-> [適用] を選択します。

これからは、コマンド ライン内の任意の位置でマウスの左ボタンをクリックするだけで、そこにカーソルが置かれます。

于 2017-06-14T13:00:00.627 に答える
0

それは最速ではないかもしれませんが、これはここにある必要があります.ANSIカーソルの動きについて読んでください

ANSI エスケープ シーケンスを使用すると、カーソルを画面上で自由に移動できます。これは、シェル スクリプトによって生成された全画面表示のユーザー インターフェイスでより便利ですが、プロンプトでも使用できます。移動エスケープ シーケンスは次のとおりです。

- Position the Cursor:
  \033[<L>;<C>H
     Or
  \033[<L>;<C>f
  puts the cursor at line L and column C.
- Move the cursor up N lines:
  \033[<N>A
- Move the cursor down N lines:
  \033[<N>B
- Move the cursor forward N columns:
  \033[<N>C
- Move the cursor backward N columns:
  \033[<N>D

- Clear the screen, move to (0,0):
  \033[2J  or \033c
- Erase to end of line:
  \033[K

- Save cursor position:
  \033[s
- Restore cursor position:
  \033[u

(...)

プロンプトに次のコード行を入力してみてください (これを入力したときにプロンプ​​トがターミナルの数行下にある場合は、何をするかが少し明確になります):echo -en "\033[7A\033[1;35m BASH \033[7B\033[6D"これにより、カーソルが画面の 7 行上に移動し、" BASH "、その後、通常のプロンプトの生成を開始した場所に戻ります。


:

カーソルを 7 行戻します。

echo -e "\033[7A"

カーソルを行 10、列 5 に移動します。

echo -e "\033[10;5H"

プログラムを色付けするために、色コードをすばやくエコーします。

echo -e "\033[35;42m" ; ifconfig
于 2019-10-16T21:01:00.933 に答える