カーソルの前にコピーして後に貼り付けるBashコマンドですか?

カーソルの前にコピーして後に貼り付けるBashコマンドですか?

どのように表現するのかわかりませんが、次のような命令を実行する自分を見つけることがよくあります。

cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak

私は通常、パスを2回入力するか(タブ補完機能を使用)、カーソルを使用してパスをコピーして貼り付けます。タイピングをより簡単にするbashfooはありますか?

答え1

多くのトリックがありますが(重複も見つけることができるようです)、このために私はこれを行う傾向があります。

cp /etc/prog/dir1/myconfig.yml{,.bak}

あなたのコマンドに従って拡張されます。

これは…支柱の拡張。ここで使用される形式では、式{}はコンマで区切られた複数の文字列を指定します。これは、式全体/etc/prog/dir1/myconfig.yml{,.bak}を「拡張」し、{}部分を各文字列で順番に置き換えます。空の文字列は与えられ/etc/prog/dir1/myconfig.yml、次は.bak与えられます/etc/prog/dir1/myconfig.yml.bak。明らかにする

cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak

次の式は入れ子にすることができます。

echo a{b,c,d{e,f,g}}

生産する

ab ac ade adf adg

数値を使用してシーケンスを生成するバリアントがあります。

echo {1..10}

生産する

1 2 3 4 5 6 7 8 9 10

ステップを指定することもできます。

echo {0..10..5}

生産する

0 5 10

答え2

履歴拡張はこの種の操作に役立ちます(bash履歴が有効になっていると仮定)。

あなたの例では、次のことができます。

cp /etc/prog/dir1/myconfig.yml !#:1.bak

ここでは!#、現在行を参照し、!#:1現在行のパラメータ1を参照し、現在行のパラメータ1を参照
し、最後に「.bak」を追加します。!#:1.bak

履歴指定子の入力時にファイル名を再確認または変更したい場合は、Ctrl++を使用して実際の値に拡張できます。AltE

詳細については、bashのマニュアルページの「History Extensions」セクションで確認できます。

答え3

progoの答えに似ていますが、少し簡単です。C-wカーソルの左側にある単語を切り取り(「kill」)、C-yもう一度挿入(「yank」)します。

$ cp /etc/dir1/myconfig.yml█                              (C-w)
$ cp █                                                    (C-y)
$ cp /etc/dir1/myconfig.yml█                              (space, C-y)
$ cp /etc/dir1/myconfig.yml /etc/dir1/myconfig.yml█       (finish text)
$ cp /etc/dir1/myconfig.yml /etc/dir1/myconfig.yml.bak█

答え4

tcshまたはで、パターン(ウィジェット)の最後の単語を挿入しますzshAlt+Ctrl+_emacscopy-prev-word

cp非常に長いAlt+Ctrl+_パス。

bashウィジェット(デフォルトではどのキーにもバインドされていません)がありますが、単語はリングバッファにのみコピーされるため、ウィジェットを取り出すには(モードで)キーを押す必要がありますcopy-backward-word。しかし、次のようにすることができます。Ctrl-Yemacs

bind '"\e[cpw~": copy-backward-word'
bind '"\e\C-_": "\e[cpw~\C-Y"'

Alt+Ctrl+_コピー/スナップと貼り付け/コピーは/のように実行する必要があります。tcshzsh

関連情報