ZSHに貼り付けたテキストから末尾の改行を切り捨てる

ZSHに貼り付けたテキストから末尾の改行を切り捨てる

私はレコードに改行を追加するのが好きではないので、入力する前にバックスペースキーを押す必要があることがよくあります。これを自動的に行う方法があるかどうか疑問に思います(末尾の改行を削除)。

また、時には貼り付けたコマンドを送信する前に編集する必要があるため、角かっこ貼り付けを無効にしたくありません。

コピー:

下のコードブロックを3回クリックすると、末尾の改行を含む行全体が選択されます。

cd /tmp

これをコピーしてZSHに貼り付けます。角カッコの貼り付けを無効にしないと実行されません。今履歴ファイルを見る

cat $HISTFILE | tail -3

次の内容が表示されます。

: 1646582294:0;cd /tmp\

: 1646582296:0;cat $HISTFILE | tail -3

UPキーを押すと、改行が維持されていることがわかります。

私のzshrcファイルを見つけることができますここ。私が逃したことがあれば申し訳ありません。

答え1

bracketed-paste貼り付けたテキスト(存在する場合)から末尾の改行を削除するように、いつでもzleウィジェットをオーバーライドできます。

bracketed-paste() {
  zle .$WIDGET && LBUFFER=${LBUFFER%$'\n'}
}
zle -N bracketed-paste

答え2

私はzshユーザーではありませんが、これを.zshrcに入れてみてください。

zshaddhistory() {
   setopt LOCAL_OPTIONS
   setopt EXTENDED_GLOB
   print -sr -- "${1%%$'\n'##}"
   fc -p "$HISTFILE"
   return 1
}

これにより、末尾の改行がすべて削除されます。必要なものを達成するために必要な場合は修正してください。秘訣はzshaddhistoryフック。

関連情報