テキストを貼り付けた後、端末が自動的にコマンドを実行するのはなぜですか?

テキストを貼り付けた後、端末が自動的にコマンドを実行するのはなぜですか?

ctrl + shift + vを使用するか、右クリックメニューから貼り付けを使用すると、この現象が発生します。

この動作を防ぐためにどのような措置を講じることができますか?

答え1

貼り付けるために複数行のテキストをコピーしないでください。私はあなたが行の最後の部分をコピーしたことをほぼ保証できます。貼り付けるコード行を三重クリックしてコピーすると、行の末尾に改行文字が表示されます。これが実際に問題であることを確認するには、行全体(最後の文字/数字を除く)をコピーして貼り付けるときに改行文字も含まれていることを確認してください。

答え2

貼り付けたテキストに改行文字が含まれています。改行文字を貼り付けると、端末で実行されているシェルはそれを押したと見なしてEnterコマンドを実行します。

貼り付けはターミナルエミュレータによって行われます。ユーザーが入力したテキストを渡すのと同じように、貼り付けたテキストを端末で実行されているアプリケーションに渡します。バラよりキーボード入力とテキスト出力はどのように機能しますか?入力の仕組みに関する追加情報アプリケーション(ここではシェル)は、キーストロークと貼り付け操作を区別できません。

現在、多くの端末エミュレータがサポートしています。かっこ内に貼り付ける。角かっこ貼り付けモードでは、アプリケーションできる貼り付け操作とキーストロークを区別します。角かっこ内に貼り付けるのは、アプリケーションが貼り付けたテキストに対して別の操作を実行する場合にのみ役に立ち、ターミナルエミュレータユーザーが設定するのではなく、サポートアプリケーションによって有効になります。

Zsh 5.1(数週間前にリリースされたため、ほとんどのディストリビューションではまだ利用できません)にブラケット貼り付けモードのサポートが追加されました。テキストを貼り付けると、コマンドラインに簡単に挿入され、[コマンドラインのEnter実行]をクリックする前に編集できます。

oh-my-zsh ユーザーは以下を使用できます。安全な貼り付けプラグインこれは以前のバージョンのzshでも同様でした。

zshでできるもう1つの作業は、選択を引用符で囲まれた文字列として挿入することです(各シェル特殊文字(スペースなど)の前のバックスラッシュ形式)。`xsel`デフォルトの選択項目を読み込むには(自動マウス選択)を入力するか、`xsel -b`クリップボードの内容を読み込み(Ctrl+コピーしたテキストを使用C)キーを押しますTab

以前のバージョンのzshがあり、クリップボードの内容を引用符なしで挿入する場合は、選択した内容を挿入する関数を定義できます。

function zle_insert_x_selection {
  LBUFFER+=$(xsel ${NUMERIC+-b} -o </dev/null)
}
zle -N zle_insert_x_selection
bindkey '\e\C-v' zle_insert_x_selection

で++を押してデフォルトの選択を挿入するか、++ +を押してクリップボードの内容を挿入.zshrcできます。カーソルの前に挿入され、末尾の改行文字がないことを除いて、変更されていません。バラよりCtrlAltVCtrlU CtrlAltVBashとX11の間でクリップボードを共有するBashで同様のもののために。

答え3

bashをシェルとして使用している場合は、を押してCtrl-X Ctrl-Eエディタ($ VISUALまたは$ EDITORとして定義されている、たとえば、viまたはnano)を呼び出すことができます。

その後、ファイルを編集するかのようにコマンドを貼り付けることができます。保存して終了すると実行されます。または保存せずに終了するとキャンセルされます。

答え4

テキストエディタウィンドウで、次のショートカットを使用して\ n(改行)なしでテキストをコピーします。

  • Shift+ HomeCtrl+ Insert- カーソルの前の行の一部をコピーします。
  • Shift+ EndCtrl+ Insert– カーソルの後ろの行の一部をコピーします。
  • HomeShift+ EndCtrl+ Insert– \nなしですべての行をコピーします。

ブラウザウィンドウやテキストを編集できないその他のコンテンツでは、次の2つの技術のいずれかを使用してください。

  • まず、テキストエディタにコピーします(コマンドを編集する機会が与えられているので好みます)。
  • その行のテキストのみを選択し(最後の文字を超えて右に選択範囲を展開せずに)、Ctrl+を押してInsert端末ウィンドウに貼り付けます。

正しい選択(\ nを除く)は次のとおりです。

ls -al

無効な選択(\ nを含む)は次のとおりです。

ls -al

関連情報