web-dev-qa-db-ja.com

ターミナルがテキストを貼り付けた後にコマンドを自動的に入力するのはなぜですか?

これは、Ctrl + Shift + Vを使用しても、右クリックメニューから貼り付けても発生します。

この動作を停止させるにはどうすればよいですか?

9
LostSoul

貼り付けるために、複数行のテキストをコピーしないでください。行の最後の部分を単純にコピーすることはほぼ保証できます。貼り付けているコード行を3回クリックしてコピーすると、行末に改行が表示されます。確かにそれが本当に問題である場合は、最後の文字/数字を除いて行全体をコピーし、貼り付けに改行が含まれているかどうかを確認します。

6
WormFood

貼り付けているテキストには、末尾の改行が含まれています。改行を貼り付けると、ターミナルで実行されているシェルはそれを押していると認識します Enter、コマンドを実行します。

貼り付け操作は、端末エミュレータによって実行されます。ユーザーが入力したテキストを渡すのと同じ方法で、貼り付けたテキストをターミナルで実行されているアプリケーションに渡します。入力のしくみの詳細については、「 キーボード入力とテキスト出力のしくみ 」を参照してください。アプリケーション(ここでは、シェル)には、キーストロークと貼り付け操作を区別する方法がありません。

最近の多くのターミナルエミュレータは、 ブラケットペースト をサポートしています。括弧付き貼り付けモードでは、アプリケーションは貼り付け操作とキーストロークを区別できます。角括弧で囲まれた貼り付けは、貼り付けられたテキストに対してアプリケーションが何か異なる場合にのみ役立つため、サポートするアプリケーションによって有効にされ、ターミナルエミュレーターのユーザーが構成するものではありません。

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

Oh-my-zshのユーザーは、以前のバージョンのzshでも safe-pasteプラグイン を使用できます。

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、押すことができます Ctrl+Alt+V 一次選択を挿入する、または Ctrl+UCtrl+Alt+V クリップボードのコンテンツを挿入します。それらはカーソルの前に挿入され、末尾の改行がない場合を除いて変更されません。 bashで類似したものについては、bashとX11 の間でクリップボードを共有するを参照してください。

コマンドプロンプトに複数行の貼り付けを行うには、貼り付ける前に一重引用符または二重引用符を開きます。

$ echo 'paste
...
... '

次に、リターンを押してエコーします。上矢印キーを押すと、貼り付けたすべての行が編集可能な1行になります。

貼り付けたテキストに一重引用符がない限り、これは機能します。

3
Peter Cordes

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

  • Shift+Home、 Ctrl+Insert –カーソルの前の行の一部をコピーします。
  • Shift+End、 Ctrl+Insert –カーソルの後の行の一部をコピーします。
  • Home、 Shift+End、 Ctrl+Insert –\nなしですべての行をコピーします。

ブラウザウィンドウなど、テキストを編集できない場合は、次の2つの方法のいずれかを使用します。

  • 最初にテキストエディターにコピーします(コマンドを編集する機会を与えるため)。
  • 行のテキストのみを選択します(最後の文字を超えて選択ゾーンを右に拡張せずに)。 Ctrl+Insert ターミナルウィンドウに貼り付けます。

正しい選択(\ nなし)の外観:

ls -al

間違った選択(\ n付き)の外観:

ls -al
1
Incnis Mrsi