現在bashコンソールでパラメーターに入力されている繰り返し方法


23

私は次の行に沿って何かを入力していました:

mv foo/bar/poit/zoid/narf.txt

そして突然気づいた、私は再びそのパラメータの大部分を入力する必要があります

mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt

タブ補完を使用しても、非常に苦痛です。テキストをマウスで選択してミドルクリックすることでパラメーターをコピーして貼り付けることができますが、それでは十分ではありません。キーボードのままにしておきたい。

キーボードを使用して行の現在のパラメーターをコピーして貼り付ける方法はありますか?


3
私のアドバイスはあなたの質問には答えませんが、小さなヒントです。例のように、次の構成を使用できます。mv foo/bar/poit/zoid/{narf.txt,troz.txt}代わりに、長いアドレスを2回入力/コピーペーストします。
ラッシュ

2
@Rushのソリューションよりわずかに短い:mv foo/bar/poit/zoid/{narf,troz}.txt。我々のようなものがあれば、これは特にうまく機能.../zoid/this_source_file_has_to_be_patched.c{,.orig}
アンスガーEsztermann

@Rush答えとしてそれを指摘してもいいですか?それは私が直接尋ねたものではないかもしれませんが、それから、あなたの解決策は私が望むもののはるかにはるかにあります。それは受け入れの証に値します。
k0pernikus

回答:


15

事前に計画している場合は、ブレース拡張を使用します。この場合:

mv foo/bar/poit/zoid/{narf,troz}.txt

デフォルトのreadlineキーボードショートカットを使用する別のアプローチを次に示します。

  • mv foo/bar/poit/soid/narf.txt:開始
  • Ctrl- wunix-word-rubout削除するfoo/bar/poit/soid/narf.txt
  • Ctrl- 、ySpace- Ctrlyyankスペース、yank再び取得しますmv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
  • Meta- backspaceMeta- backspacebackward-kill-word最後を削除するために2回narf.txt
  • troz.txt:異なるテール部分を入力します

bashシェルを使用して些細な時間を費やす場合は、定期的にデフォルトのショートカットのリストを読み、学習してルーチンに組み込むのに役立つと思われるいくつかを選択することをお勧めします。 マニュアルの第8章bashを開始するのに適した場所です。ショートカットを知ることは本当にあなたの効率を上げることができます。


きちんとした!私の場合、Meta + Backspaceの代わりにAlt + Backspaceを押す必要がありました。
k0pernikus

3
@ k0pernikusはい、ほとんどのキーボードで、AltキーはMetaキーです。
jw013

1
.txt入力を保存するには、Ctrl + Left(またはを呼び出すその他のショートカットbackward-word)を押してから、1文字左を押し、Alt + Backspaceを押して入力しtrozます。
wjandrea

24

履歴展開は、実際にはイベント指定子を使用して現在のコマンドでも機能し!#ます。これを最後の引数の単語指定子と組み合わせて、$--入力したばかりのパラメーターを取得します。また、通常の修飾子をすべて使用できます。たとえば、遠くのディレクトリにあるファイルの名前を変更する場合は、次のように入力します。

mv path/you/do/not/want/to/type/twice/oldname !#$:h/newname

非常に便利!これmagic-spaceは、inputrcのbashのオプションで履歴展開を自動的に展開するのに特に有効です。(通常はより便利なので、^ Wをスラッシュで
区切る

@SorenBjornstadはalt+backspace通常、すでにあなたがどのように変更する必要はありませんので、スラッシュなどの単語の区切り文字で停止し^Wた単語区切りその機能を取得するには、削除非単語文字や空白の両方を持つことができます
エリックRenouf

14

例のように、次の構成を使用できます。

mv foo/bar/poit/zoid/{narf.txt,troz.txt}

または(Ansgar Esztermannが示唆するように):

mv foo/bar/poit/zoid/{narf,troz}.txt

代わりに、長いアドレスを2回入力/コピーペーストします。


2
これはブレース拡張と呼ばれます。
CodeGnome

6

遊んでこれを機能させました:

mv foo/bar/poit/zoid/narf.txt

Enter
最後のパラメーターを保存するには、ヒットします。

次に、最後に入力した行を取得するために使用します。スペースを入力して、最後に使用されたパラメーターを取得します。

Alt + .

エラーを引き起こすことは嫌いですが、このユースケースでは仕事が完了します。


クールな、もう1つの素晴らしいヒントを学びました!
ブラム

<kbd> Esc </ kbd> + <kbd>。</ kbd>は(<?)<kbd> Alt </ kbd> + <kbd>。</ kbd>と同じです。
ニコスアレクサン

2

変数を簡単に使用できます:

a=test.csv ; cp $a $a.bak

またはあなたの場合(タブ競争はaの部分のために働くことに注意してください):

a=foo/bar/poit/zoid/ ; mv ${a}narf.txt ${a}troz.txt

2

私はこれを持っています~/.inputrc

"\ej":"!#:$\e^"

!#は現在の行、:$最後の単語、および\e^ですhistory-expand-line


これは答えとしてマークされるべきです。「alt / option + j」を押すと、最後の単語がコピーされるようになりました。
mpprdev

2

のためにzsh、私は次のキーバインドが役立つと思います。

# Bind alt-m to insert previous word from the current line
bindkey '^[m' copy-prev-shell-word

# Bind alt-k to kill word before cursor in vi-style
bindkey '^[k' vi-backward-kill-word

私はヒットしてAlt- Mそして、最後の引数を繰り返すAlt- K私は、パスの末尾から部品を削除したい場合。

ここだ便利な参照あなたがマップすることができる行動のいくつかには。


2

短いインタラクティブな2ステップのソリューション

  1. タイプ: echo foo/bar/poit/zoid/narf.txt

    これにより、bash foo/bar/poit/zoid/narf.txtAlt- .ショートカットが利用可能になります。

  2. タイプ:mvヒットAlt- 、、. -SpaceAlt.

    取得しmv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txtます。これで、最後の単語を簡単に変更できます。

ミッドナイトコマンダー

(非常に)便利なこのツールは、コンソールで実行されているファイルマネージャーです。これにより、ファイル名とディレクトリパスをコマンドラインにインタラクティブにコピーできます。そのため、Midnight Commanderは2つのパネル(左右)を表示し、異なるディレクトリの内容をリストします。

短いガイド:

  • Up/ Down矢印キーは、現在のパネルのファイルを選択します。
  • Tab 左パネルと右パネルを切り替えます。
  • Ctrl- Shift- Enterコピー現在選択されているファイル(フルパスを含む)コマンドラインに
  • Alt- o他のパネルで現在選択されているディレクトリを開きます
  • Ctrl- oコンソールを全画面表示できます
  • Ctrl- xpアクティブなパネルのパスをコンソールにコピーします
  • Ctrl- xCtrl- p非アクティブなパネルのパスをコンソールにコピーします
  • Esc- Tab自動補完です

これは私がこれまで見つけた中で最も速い方法です-ショートカットに慣れた後


0

{、} "duplicator"でも同じものを使用します。すなわち:

git tag -m {v,v}1.0.1

# same as 

git tag -m v1.0.1 v1.0.1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.