私は次の行に沿って何かをタイプしていました:
mv foo/bar/poit/zoid/narf.txt
突然気づいた、くそー、私はそのパラメーターの大部分をもう一度タイプしなければならない
mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt
タブ補完があっても、かなり苦痛です。テキストをマウスで選択してミドルクリックすることでパラメーターをコピーして貼り付けることができることはわかっていますが、それでは十分ではありません。キーボードを使い続けたい。
それで、キーボードを使用して行の現在のパラメーターをコピーして貼り付ける方法はありますか?
事前に計画している場合は、 ブレース展開 を使用します。この場合:
mv foo/bar/poit/zoid/{narf,troz}.txt
次に、デフォルトのreadline
キーボードショートカットを使用した別のアプローチを示します。
mv foo/bar/poit/soid/narf.txt
:開始unix-Word-rubout
を削除するにはfoo/bar/poit/soid/narf.txt
yank
、スペース、yank
をもう一度取得してmv foo/bar/poit/soid/narf.txt foo/bar/poit/soid/narf.txt
backward-kill-Word
を削除するにはnarf.txt
を2回troz.txt
:異なるテールパーツを入力しますbash
シェルを使用して重要な時間を費やしている場合は、デフォルトのショートカットのリストを定期的に読み、学習してルーチンに組み込むのに役立つと思われるものをいくつか選択することをお勧めします。 bash
マニュアルの第8章 から始めるのが良いでしょう。ショートカットを知ることは、本当にあなたの効率を上げることができます。
履歴の展開は、実際には、イベント指定子!#
を使用して、現在のコマンドでも機能します。これを最後の引数-$
-のWordデジグネータと組み合わせて、入力したパラメータを取得します。そして、その上ですべての通常の修飾子を使用できるため、たとえば、遠くのディレクトリにあるファイルの名前を変更する場合は、次のように入力できます。
mv path/you/do/not/want/to/type/twice/oldname !#$:h/newname
あなたの例のように、次の構築を使用できます:
mv foo/bar/poit/zoid/{narf.txt,troz.txt}
または(推奨通り Ansgar Esztermann ):
mv foo/bar/poit/zoid/{narf,troz}.txt
代わりに、長いアドレスを2回入力/コピー貼り付けします。
遊んでみてこれを動作させました:
mv foo/bar/poit/zoid/narf.txt
ヒット Enter
最後のパラメータを保存します。
今使う ↑ 最後に入力された行に戻ります。スペースを入力して、最後に使用したパラメーターを取得します。
Alt + .
エラーが発生するのは嫌いですが、このユースケースで問題が解決されます。
変数は簡単に使用できます。
a=test.csv ; cp $a $a.bak
またはあなたの場合(タブ競争はaの部分で機能することに注意してください):
a=foo/bar/poit/zoid/ ; mv ${a}narf.txt ${a}troz.txt
私はこれを~/.inputrc
:
"\ej":"!#:$\e^"
!#
は現在の行、:$
は最後の単語であり、\e^
はhistory-expand-line
。
タイプ:echo foo/bar/poit/zoid/narf.txt
これはfoo/bar/poit/zoid/narf.txt
は Alt-. bashのショートカット。
タイプ:mv
とヒット Alt-.、 Space、 Alt-.
mv foo/bar/poit/zoid/troz.txt foo/bar/poit/zoid/troz.txt
。これで、最後のWordを簡単に変更できます。
(非常に)便利なこのツールは、コンソールで実行されるファイルマネージャです。ファイル名とディレクトリパスを対話形式でコマンドラインにコピーすることができます。そのため、Midnight Commanderは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 パスの末尾から一部を削除したい場合。
これが、マッピングできるいくつかの動作への 便利な参照 です。
同じことを{、}「デュプリケーター」で使用します。つまり:
git tag -m {v,v}1.0.1
# same as
git tag -m v1.0.1 v1.0.1