web-dev-qa-db-ja.com

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

私は次の行に沿って何かをタイプしていました:

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

突然気づいた、くそー、私はそのパラメーターの大部分をもう一度タイプしなければならない

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

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

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

24
k0pernikus

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

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-y、 Space、 Ctrl-yyank、スペース、yankをもう一度取得してmv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
  • Meta-backspace、 Meta-backspace:最後のbackward-kill-Wordを削除するにはnarf.txtを2回
  • troz.txt:異なるテールパーツを入力します

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

16
jw013

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

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

あなたの例のように、次の構築を使用できます:

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

または(推奨通り Ansgar Esztermann ):

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

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

14
rush

遊んでみてこれを動作させました:

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

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

今使う  最後に入力された行に戻ります。スペースを入力して、最後に使用したパラメーターを取得します。

Alt.

エラーが発生するのは嫌いですが、このユースケースで問題が解決されます。

7
k0pernikus

変数は簡単に使用できます。

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

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

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

私はこれを~/.inputrc

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

!#は現在の行、:$は最後の単語であり、\e^history-expand-line

2
nisetama

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

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

    これはfoo/bar/poit/zoid/narf.txtは Alt-. bashのショートカット。

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

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

ミッドナイトコマンダー

(非常に)便利なこのツールは、コンソールで実行されるファイルマネージャです。ファイル名とディレクトリパスを対話形式でコマンドラインにコピーすることができます。そのため、Midnight Commanderは2つのパネル(左と右)を表示し、さまざまなディレクトリの内容を一覧表示します。

短いガイド:

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

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

2
Markus Dutschke

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
bdellaterra

同じことを{、}「デュプリケーター」で使用します。つまり:

git tag -m {v,v}1.0.1

# same as 

git tag -m v1.0.1 v1.0.1
0
Pylinux