私はこれをどのように表現するのかわかりませんが、私はしばしば自分自身が次のようなコマンドを入力していることに気付きます:
cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak
通常、パスを2回(タブ補完で)入力するか、カーソルでパスをコピーして貼り付けます。これを入力しやすくするbashfooがありますか?
私はこれをどのように表現するのかわかりませんが、私はしばしば自分自身が次のようなコマンドを入力していることに気付きます:
cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak
通常、パスを2回(タブ補完で)入力するか、カーソルでパスをコピーして貼り付けます。これを入力しやすくするbashfooがありますか?
回答:
いくつかのトリックがあります(重複していると思います)が、このために私はする傾向があります
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
履歴の拡張は、この種のことに役立ちます(bash履歴が有効になっていると仮定)。
あなたの例では、次のことができます:
cp /etc/prog/dir1/myconfig.yml !#:1.bak
ここで、!#
は、現在の行を!#:1
指し、現在の行のパラメーター1
を!#:1.bak
指し、最後に '.bak'が付加された現在の行のパラメーター1 を指します。
履歴指定子を入力した後、たとえばファイル名を再確認または変更する場合は、Ctrl+ Alt+ Eを使用して実際の値に展開できます。
bashのmanページの「History Expansion」セクションに詳細があります。
progoの答えに似ていますが、やや単純です。C-w
カーソルの左側の単語を切り取り(「殺す」)、C-y
再び挿入(「ヤンク」)します。
$ 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█
コマンドラインから実際にカットアンドペースト(emacs / bashの用語でキルヤンク)して、編集のためにパーツを複製することもできます。
M-d
単語の境界まで前方にキルし、テキストを複数回キルすることができ、それらはすべてヤンクするために単一の「ペースト」に連結されます。便利!
これをすべてカーソルでコマンドラインに戻しますC-y
。したがって、次のような行がある場合(ブロック要素█はカーソル位置を示します):
$ cp avb.txt█ (M-b M-b)
$ cp█avb.txt (M-d) kill the word 'avb'
$ cp █.txt (C-y) yank it back
$ cp avb█.txt (C-e) to the end of line
$ cp avb.txt█ (C-y) yank it again
$ cp avb.txt avb█ finish the line
$ cp avb.txt avb.foo█
どちらの方法でも、bashが対話型の主要部門で提供しなければならないものに慣れることは有益です。http://web.mit.edu/gnu/doc/html/features_7.html
でtcsh
又はzsh
、Alt+Ctrl+_中emacs
モード(copy-prev-word
ウィジェット)ので、最後の単語を挿入します
cp very-long-path Alt+Ctrl+_.back
bash
copy-backward-word
ウィジェットがあります(デフォルトではキーにバインドされていません)が、単語をリングバッファにコピーするだけです。Ctrl-Y(emacs
モードで)を押してヤンクする必要があります。しかし、あなたはすることができます:
bind '"\e[cpw~": copy-backward-word'
bind '"\e\C-_": "\e[cpw~\C-Y"'
持っているAlt+Ctrl+_のように/ヤンクを両方のコピー/ SNARFを行い、ペーストtcsh
/ zsh
。
bash-fu
:)