コマンドを実行し、find
結果出力の1行を引数として使用しようとしていることを想像してください。
$ find ..
fileA
fileB
$ vi <CURSOR> # now do what to achive:
$ vi fileB
現在の解決策: ダブルクリック文書B(選択項目の自動展開)を選択し、マウスの中央ボタンを押します(Xに貼り付け)。動作しますが、マウスを使用する必要があります。
考えられる解決策:
- タブ補完 - ほとんどのシェルで動作しますが、ファイルにのみ適用されます。
- シェルに掛ける - はいscm_breeze;これは私が探しているものとほぼ同じですが、gitに制限されています。
- 使用
screen
- 非常に近いですが、まだ多くのキーストロークがあります。そしてそれはscreen
… - bash変数(GMaster)に出力を保存する - findコマンドが1行を出力する場合にのみ機能します。例のように、2番目の行にどのようにアクセスできますか?
- エディタにコマンドを送信する(jasonwryan) - 動作しますが、コマンドを2回実行します。これは時間がかかったり、不可能かもしれません。
- emacs Dynamic Abbrev Expansionの使用(Arkadiusz Drabczyk、Michael Vehrs) - これは私が探しているものですが、emacsで始めたくありません。
私のための解決策: 「動的略語の拡張」。今私が探しているこの関数の名前がわかりました。他のソフトウェアから「dabbrev-expand」を取得する方法についての新しい質問を始めましょう。
https://unix.stackexchange.com/questions/281298/list-of-sofwares-inspired-by-emacs-dabbrev-expand。
私に最適なソリューションのビジョン: プロンプトモードなど蛇または移動が容易Vimは現在の端末の出力からテキストを抽出します。
答え1
を使用してemacs
無効なシェルを起動し、コマンドを実行します。出力はシェルバッファで使用でき、通常のコマンドを使用して選択できます。または、
select file in $(find <whatever>); do vi $file; break; done
emacs
この方法は、編集者を既に知っている場合はより実用的です。Emacs
任意の「劣ったプロセス」を実行できます。入力と出力が emacs バッファに接続された対話型コマンドです。したがって、M-x shell-mode
誤ったシェルを起動した場合は、コマンドを入力し、find
そのコマンドの出力をバッファーで使用することができます。
$ find .. -name "*.sh"
../self.sh
../scheme/random.sh
../scheme/sample.sh
次に、目的のファイルにカーソルを移動して入力して、M-x find-file-at-point
別のバッファ内のファイルを編集します。
答え2
出力が必要なコマンドを再実行しても問題ない場合は、次のファイルを追加してください.zshrc
。
# Load completion menu feature.
zmodload zsh/complist
# `fc -e :` re-runs the last history entry.
# ${(f)…} splits the string on newlines.
copy-output() compadd ${(f)"$( fc -e : 2> /dev/null )"}
# Create a completion menu widget & bind it.
zle -C copy-output menu-select copy-output
bindkey '^[!' copy-output
を押して前のAlt!コマンドを再実行し、新しいコマンドラインに挿入する内容を選択できるメニューを表示できます。
したがって、あなたの例は次のとおりです。
% find ..
fileA
fileB
% vi <ALT-!>
fileA fileB
出力はコマンドラインの下に表示されるか、Tab矢印キーを使用して目的の出力を選択できます。複数を選択するにはAltA
答え3
あなたの要求を具体的に行うためにZshプラグインを作成しました。https://github.com/psprint/ztrace