Zshは現在の引数リストの最後の要素を参照して拡張します。

Zshは現在の引数リストの最後の要素を参照して拡張します。

私が次のようなことをしているとしましょう。

ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/a_file_with_a_long_filename_slightly_modified.pdf

私のカーソルがzshの文字列の末尾にある場合、引用してa_file_with_a_long_filename.pdf拡張する方法はありますか?ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/

そうでない場合は、入力作業を減らす方法をどのように提案しますか?

答え1

ESC-2 ESC-^_デフォルトのEmacsバインディングでは、2つのキーコード(例:Esc 2 Esc Ctrl+_またはAlt+ 2 Ctrl+ Alt+)です_。これが順序ですcopy-prev-word数値パラメータ2を使用します(デフォルトパラメータ1がコピーされます~/path/to/a/new/hardlink/)。ファイル名に(引用符で囲まれた)スペースが含まれている場合は必須です。特にキーボードレイアウトで必要なESC-2 ESC-x copy-prev-shell-word RET場合は、このコマンドをより便利なキーにバインドできます。 viモードでもこのコマンドを使用できますが、デフォルトのCaseはキーにバインドされません。 。Shift_

数値パラメータが間違っている場合は、Ctrl+を押して元に_戻してもう一度やり直してください。

答え2

これは楽しいコードゴルフチャレンジのように聞こえます。以下は1つのオプションです。

  1. ファイル名を使用して無害なコマンドを実行します。 TABの完了を許可するのに十分なファイル名を入力してください。

    : a_file<TAB>
    
  2. !!$前のコマンドの最後の引数を参照するために使用されます。

    ln !!$ ~/path/to/a/new/hardlink/!!$
    

zshの便利な参照のおかげで、IFSを含むファイル名にも安全です。!!$コマンドの最後に不要なスペースを追加すると、最初のエントリの後にスペースを押すとすぐにzshがファイル名を拡張することがわかります。

必要な文字数は次のとおりです。

  • 3×2 = 6 2!!$
  • 2:<SPACE>

8+の場合、初期タブを完了するのに十分です。

答え3

viモードでは<esc>0wyt $p、コマンドモードに入り、行0の先頭にw次の単語に移動し(ファイル名の前に)、yt空白に引っ張ってから(ファイル名に空白がないと仮定して長いファイル名を取得するには)、次に$p引っ張ったものを行の末尾に置きます。これは、動作と説明を暗記するよりもはるかに高速ですvi

bindkey2番目のパラメータを取得するように設定することもできます。これはこのタイプのユースケースの非常に具体的なコードですが、必要なものは何でもcontrol+t構いません。

function yank-put {
  local -a words
  words=(${(z)LBUFFER})
  if (( $#words > 1 )); then
    BUFFER+=$words[2]
    CURSOR+=${#words[2]}
  fi
}
zle -N yank-put
autoload -U yank-put compinit
compinit
set -o vi
bindkey -M viins "^t" yank-put

答え4

持つcopy-earlier-word、使用する前にお気に入りのキーバインディングにバインドし、次の行を次に追加できます~/.zshrc

autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[," copy-earlier-word

したがって、次のようにコマンドラインで使用できます。

% ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/<Esc-,><Esc-,>

Esc( - ,(またはAlt+)キーを最初に押すと、,「~/path/to/new/hardlink/」が生成されます。例:copy-prev-shell-word、2番目に新しく挿入された単語を「a_file_with_a_long_filename.pdf」に置き換えます。


これはコピーですcopy-earlier-word参照用文書。

このウィジェットは次のように動作しますinsert-last-wordそしてcopy-prev-shell-word。ウィジェットを繰り返し呼び出すと、関連する履歴行から前の単語が検索されます。数値パラメータを含める窒素入れる窒素履歴行の最初の単語です。窒素行の終わりから計算すると、負の数になる可能性があります。

もしinsert-last-word以前の履歴行の最後の単語を検索するためにすでに使用されており、反復呼び出しはその単語を同じ行の前の単語に置き換えます。

それ以外の場合は、現在編集中の行の単語にウィジェットが適用されます。ウィジェットスタイルは、単語を検索するために呼び出される必要がある他のウィジェットの名前に設定できます。ウィジェットは次の3つのパラメータを受け入れる必要があります。insert-last-word

-copy-earlier-wordZLE関数、ウィジェット、zshcontrib(1)

関連情報