どのように表現するのかわかりませんが、次のような命令を実行する自分を見つけることがよくあります。
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
またはで、パターン(ウィジェット)の最後の単語を挿入しますzsh
。Alt+Ctrl+_emacs
copy-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+_コピー/スナップと貼り付け/コピーは/のように実行する必要があります。tcsh
zsh