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


9

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

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


質問を理解するために必要な詳細な説明
SHW

Windows上のConEmuはあなたが望むことをするかもしれません-改行を含む何かを貼り付けようとすると、続行する前に警告します。いい感じですね。たぶん、この機能を持つLinuxターミナルエミュレーターはありますか?
ブランディン

4
テキストをコピーするときに、末尾の「\ n」(改行文字、テキストには表示されませんが、改行がある場合は存在します)をコピーします。これにより、Enterキーの押下をエミュレートして、コマンド。
ハーバート2015

これの重複の可能性-unix.stackexchange.com/questions/202732/…その質問で言及されている「ブラケットペースト」については知りませんでした。私は通常、ターミナルと組み合わせてテキストエディターを使用し、必要なパーツをターミナルに慎重にコピー/貼り付けます。
ブランディン2015

回答:


6

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


これは、複数行のコードをコピーしたときにのみ発生しました。今、私はその理由を理解しています。
LostSoul 2015

7

貼り付けているテキストには、末尾の改行が含まれています。改行を貼り付けると、ターミナルで実行中のシェルはそれを押した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+ U Ctrl+ Alt+ Vクリップボードの内容を挿入します。それらはカーソルの前に挿入され、末尾の改行がない場合を除いて変更されません。bashで同様のものについては、bashとX11の間でクリップボード共有するを参照してください。


7

シェルとしてbashを使用している場合は、を押しCtrl-X Ctrl-Eてエディターを起動できます($ VISUALまたは$ EDITORなどで定義されていviますnano)。

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


この方法ではうまくいきません。
LostSoul

3

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

$ echo 'paste
...
... '

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

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


1

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

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

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

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

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

ls -al

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

ls -al
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.