ターミナルで指定された非常に長いコマンドライン上を移動する最良の方法は何ですか?
矢印キーを使用した、または 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-A 最初に行き、繰り返し Alt-F 前進するには、Word by Word(または Ctrl-E 最後に行くと Alt-B その後、逆戻りします)。しかし、長い時間がかかりすぎて時間がかかりすぎます。検索して、変更する必要がある部分に直接ジャンプする方法が必要です。 option25
?
これはまだ閉じられていないため、さらにいくつかのオプションがあります。
$FCEDIT
または$EDITOR
またはemacs
(この順序で試行)で指定されたエディターで現在の行を開きます。option25
と入力します(この場合)。行が表示されます。ヒット Tab この時点で編集を開始します。s///
修飾子を使用して履歴展開を使用します。例えば。 !-2:s/--option25/--newoption/
は、最後から2番目のコマンドを再実行しますが、option25を置き換えます。最後の./cmd
コマンドを変更するには、!string
構文を使用します:!./cmd:s/--option25/--newoption/
^--option25^--newoption
2番目のオプションをお勧めします。 Ctrl+r は本当に便利で高速であり、エディターをいじる必要はありません。また、コマンドを実行する前に結果が表示されます(履歴展開とは異なります)。
明確にするために、「terminalコマンドラインでカーソルをすばやく移動する方法」は望ましくありません。実際に必要なのは、Shellプログラムのコマンドラインをすばやく移動する方法です。
Bash は、たとえば非常に一般的なシェルです。 Readline ライブラリを使用して、コマンドライン入力を実装します。つまり、bashだけでなくReadlineバインディングを使用することは非常に便利です。たとえば、gdbは入力を処理するためにReadlineも使用します。
Readlineのドキュメントでは、すべてのナビゲーション関連のバインディング(およびその他)を見つけることができます。 http://www.gnu.org/software/bash/manual/bash.html#Readline-Interaction
上記のリンクがダウンした場合の短いコピーアンドペースト:
ベアエッセンシャル
移動
殺してヤンク
Mはメタキーです。 Max OS Xターミナルの場合、そのために[設定/キーボード]で[メタキーとしてオプションを使用]を有効にできます。 Linuxの場合はより複雑です。
更新
また、Readlineは2つのモードで動作できることに注意してください。
Bashを切り替えてviモードを使用するには:
$ set -o vi
個人的には、vimをテキスト編集に使用しているため、viモードを好みます。
ボーナス
MacOSターミナルアプリ(およびiTermでも)では、Optionキーを押しながらクリックしてカーソルを移動できます(カーソルはクリックした位置に移動します)。これはvim
内でも機能します。
Optionキーを押しながらカーソルを移動したい場所をクリックすると、Terminalはカーソルをその正確な場所に急いで行きます。
私は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の愛好家が、5回未満のキーストロークでより良い解決策を考え出すことができるかどうかを見てみましょう(宗教戦争を始めたくはありませんが)。
この恐ろしく長いコマンドをスクリプトに入れたいかどうか考えたことはありますか? :-)
実際、私はそれより1つ上に行くことができます。「3f5B
」で3番目の「5」を見つけてから、Wordの先頭に戻ります。
Meta-b/Meta-fを使用して、Wordごとに前後に移動します。
OSXでは、MetaはESCとして翻訳されますが、これはひどいものです。
ただし、代わりに、端末設定->設定->プロファイル->キーボードを開き、「メタキーとしてオプションを使用する」をチェックすることもできます。
コマンドを1回実行した後、fc
を実行します
前のコマンドで$EDITOR
を起動し、通常のエディターを使用してコマンドを変更できます。保存して終了すると、ファイルが実行されます。
..しかし、Paxが言ったように-コマンドラインは不条理な長い行を編集するのに特に適していません-なぜコマンドをスクリプトにしないのですか?
特定の数の単語を進めたい場合は、M-<n>
(M-
はMetaであり、通常はエスケープキーです)を押してから数字を押します。これにより、readlineに繰り返し引数が送信されるため、必要なコマンドを繰り返し実行できます。先に進みたい場合は、M-<n> M-f
を押すと、カーソルは<n>
個の単語だけ前方に移動します。
例えば。
$|echo "two three four five six seven"
$ M-4
(arg: 4) echo "two three four five six seven"
$ M-f
$ echo "two three four| five six seven"
したがって、ヒットする行の先頭のカーソルからの例では、M-26 M-f
であり、カーソルは--option25|
にあります-または-行の終わりからM-26 M-b
は--|option25
のカーソル
増分履歴検索
ターミナルで入力:
gedit ~/.inputrc
次に、コピーして貼り付けて保存します
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
前のコマンドを見つけるために必要なことは、最初の2文字または3文字を入力するだけです。
for f in *.mid ; do timidity "$f"; done
入力するだけです
fo
上向き矢印コマンドを押すとすぐに表示されます
1つのオプションは、emacs
でM-x Shell
を使用することです。これにより、emacs
が持つすべての編集機能とキーストロークが提供されるため、たとえばC-s
を使用してテキストoption25
を検索できます。
(しかし、誰かが私に優れた検索と編集機能を教えてくれるなら、代わりに実際の端末シェルにいることを好みます。)
Cygwinでは、ウィンドウを右クリックしてそのような機能を有効にできます。ポップアップウィンドウで、オプション...->マウス->有効化-コマンドラインカーソルのクリック->適用を選択します。
これ以降、コマンドライン内のある位置でマウスの左ボタンをクリックするだけで、カーソルがそこに配置されます。
コマンドラインを編集する最も簡単な方法は、マウスを使用することです。以前の回答のいくつかは、$ EDITORで現在の行を開くコマンドを提供します。私(grml configのzh)では、その組み合わせはAlt+e
です。エディターでマウスを有効にすると、それを利用できます。
Vimでマウスを有効にするには、これを〜/ .vimrcに追加します
set mouse=a
set ttymouse=xterm2
次に、マウスクリックをvimに渡す代わりに、ターミナルでテキスト選択を行いたい場合は、Shiftキーを押しながらクリックします。もちろんこれは端末固有です。
システム管理者はマウスを恐れてはいけません。
最初:export EDITOR = 'nano -m'
次に、CTRL + X CTRL + Eを順に押します。
現在の行は、マウスを有効にしてnanoエディターで開きます。テキストの任意の部分をクリックして編集できます
次に、CTRL + Xで終了し、yで保存を確認します。