Bashでデフォルトのコピーと貼り付け動作を無効にする

Bashでデフォルトのコピーと貼り付け動作を無効にする

ターミナルセッションに貼り付けると、Enterキーを押さなくてもシェルはすぐにコマンドを実行します。

この動作を無効にする方法がわかりません。

MacOS Yosemiteにプレインストールされた端末を使用しています。

答え1

バージョン4.4以降とbash角かっこ貼り付けlaをサポートする端末では、xterm次のことができます。

bind 'set enable-bracketed-paste'

(またはset enable-bracketed-pasteあなたのものに追加~/.inputrc

これにより、文字を入力したかのように解釈せずにプロンプ​​トからコピー&ペーストバッファが挿入されます(バッファに似た文字が含まれていて、端末エミュレータがそれをフィルタリングしない場合でも、^C^Zの問題が発生する可能性があります)。問題)。

zshこれはバージョン5.1からデフォルトで行われます。

他のシェルや端末の場合は、以下も参照してください。クリップボードの乱用から自分をどのように保護できますか?

答え2

これは、「改行」文字を貼り付けるときに発生します。たとえば、複数行を貼り付けるか、誤って行の末尾にキャリッジリターン文字をコピーした場合です。私が知っている限り、この動作を実際に無効にする方法はありませんが、これを軽減する方法はあります。

最も簡単な方法は、一度に1行ずつコピーし、最後の文字を見逃してから手動で追加することです。

あるいは、the_velour_fogが以下で指摘したように、印刷されない文字を表示するエディタに貼り付けてから、改行なしで再選択することもできます。

GNU / Linuxディストリビューションには1つまたは2つの回避策がありますが、この概念がMacOSに移植可能かどうかはわかりません。関係なく、まず見てみましょう。ここMacに変更できる同様のファイルがあることを確認してください。残念ながら私はそれを疑う。

答え3

貼り付ける前に一重引用符を入力してください。を押して貼り付けます。 control-cと上矢印を押すと、1つの大きな行に編集されます。

テキストに一重引用符が含まれているが二重引用符がない場合でも、二重引用符を使用できます。二重引用符の中に他のものを含めるか拡張する場合は、$実際には引用符で囲まれた巨大な行をコマンドとして実行するのではありません。


改行文字は単一の長い行を作成するのではなく、連続プロンプト(公式用語ではない)を開始するため、実際に内容全体を編集することはできません。

次の4行を考えると:

echo
ls
foo
bar

私が提案したように貼り付けると、画面に次のような結果が表示されます。

$ 'echo 
> ls
> foo
> bar        <or cursor here if you didn't include a trailing newline
> [cursor here]

その後、Control-Cと上矢印を押すことができます。 (Control-Cはカーソルと同じ行にあるすべてを削除するので、そこに便利なテキストがある場合は最初にEnterキーを押します。)

もう1つの方法は、見積もりを閉じてEnterキーを押してから上矢印キーを押すことです。

それでも、上矢印の後

$ 'echo
ls
foo
bar

'貼り付けたブロック内で(テキストを介して)すばやく移動するには、左側のコントロールと右側のコントロールを使用します。または、端末設定が制御矢印キー、alt-b、alt-f をサポートしていない場合。


改行文字は実際にコマンドを区別します。この4行はコマンド履歴にそれぞれ入力されます。;またはに変更することもできます&&。 (私はこれに対する秘訣を知りません。キーを使って単語を前後に繰り返すことで、すばやく移動して手動で実行します。)

答え4

はいいいえ会社に関する限り、私は非常に満足している顧客です。次のターミナルプログラムを試してください。http://www.emtec.com/zoc/index.html。 Mac版も利用可能です。

この回答にSEルールに違反した場合は、お知らせください。回答を削除します。

編集する:

他の答えを正しく理解したところ、この問題はターミナルプログラムによって引き起こされる可能性があります。 ZOCターミナルプログラムは、仕事用に完全に設計されたプロのソフトウェアです。他の文字なしで選択したテキストを貼り付けます。セッションを別のテキストファイルに書き込むことができます。もっと

修正する:

ターミナルプログラムにはオプションがありますPaste without final 'newline'。おそらくこれが役に立ちます。

関連情報