web-dev-qa-db-ja.com

Bashのデフォルトのコピー&ペースト動作を無効にする

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

私は本当にその振る舞いを無効にする方法を知りません。

MacOSYosemiteにプリインストールされている端末を使用しています。

9
Opaldes

bash 4.4以降で、ブラケット貼り付けをサポートする端末でxtermを使用すると、次のことができます。

bind 'set enable-bracketed-paste'

(またはset enable-bracketed-paste~/.inputrcに追加します)

これにより、コピーアンドペーストバッファが入力されたかのように解釈される代わりに、プロンプトに挿入されます(そのバッファに^C^Z、ターミナルエミュレータはそれらを除外しません)。

zshは、バージョン5.1以降のデフォルトでこれを実行します。

他のシェルまたは端末については、以下も参照してください。 この種のクリップボードの乱用から身を守るにはどうすればよいですか?

16

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

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

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

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

6

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

テキストに一重引用符が含まれているが二重引用符が含まれていない場合は、二重引用符も機能します。引用符で囲まれた巨大な行を1つのコマンドとして実際に実行していないため、$または二重引用符で囲まれたその他のものが含まれていても問題ありません。


改行は1つの大きな長い行を作成する代わりに、継続プロンプト(公式用語ではない)を開始するため、実際にすべてを編集することはできません。

これらの4行が与えられた:

echo
ls
foo
bar

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

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

次に、Ctrl-Cと上矢印を押します。 (control-Cはカーソルと同じ行のすべてを破棄するため、有用なテキストがある場合は最初にReturnキーを押します。)

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

とにかく、上矢印の後

$ 'echo
ls
foo
bar

control-aを実行し、先頭の'を削除します。 control-leftとcontrol-rightを使用して、貼り付けブロックをすばやく移動します(単語単位)。または、端末の設定でcontrol-arrow-keys、alt-b、およびalt-fがサポートされていない場合。


リテラル改行は実際にはコマンドを分離し、これらの4行はコマンド履歴に個別に挿入されます。それらを;または&&に変更することをお勧めします。 (そのための秘訣はわかりません。前方または後方にキーリピートを使用するだけです。Wordを使用してすばやく到達し、手動で実行します。)

5
Peter Cordes

これは、ペーストが改行で終わり、ターミナルエミュレーターが基本的にペーストを文字ごとにbashにフィードするために発生します。このプロセスでは、bashは実際にはマシンから人間のタイピストを知りません。

私は通常、コピー貼り付けを行うときに改行が含まれていないことに特に注意を払いますが、試すことができる1つのトリックがあります。貼り付ける前に、bashでC-x C-eと入力します。空のファイルで$EDITORを起動する必要があります。そのファイルに保存して終了するものは何でも、bashが実行されます。これで、コマンドをエディターに貼り付けて、さらに操作して、すべてを一度に実行できるようになりました。

2
nperson325681