なぜ Bash (Linux シェル) で Ctrl + V でペーストしないのですか?
クリップボードに何かをコピーして Ctrl + V を押しても何も起こりません。Linuxでこの動作の背後には何か合理的な問題があるのでしょうか(きっとあると思います)?
クリップボードに何かをコピーして Ctrl + V を押しても何も起こりません。Linuxでこの動作の背後には何か合理的な問題があるのでしょうか(きっとあると思います)?
物理的な 端末 の時代には、セッション全体のクリップボードは存在せず、内部のコピー/ペーストをサポートしているプログラムはごくわずかで、しばしば「バッファ」や「キルリング」という名前で、さまざまなキーストロークを使用していました。例えば、bashシェルでは、CtrlKやCtrlUを使って「殺す」(カット)、CtrlYを使って「引っ張る」(ペースト)をしています。CtrlVキーは、しばしば「冗長挿入」、つまり、関連する動作を行わずに文字通り次の文字を挿入することを意味していました。例えば、通常のEscはviエディタのコマンドモードに切り替わりますが、CtrlV, EscはESC
の文字を文書に挿入します。
セッション全体のクリップボードからCtrlCでコピー、CtrlVでペーストする方法は、1983年にMac OSで、1990年にMicrosoft Windows 3.xで導入されました。(それ以前のWindowsのバージョン(1.xと2.x)とIBM OS/2では、IBM CUAキーのCtrlInsをコピーに、ShiftInsをペーストにしかサポートしていませんでしたが、これらのショートカットはすべてのWindowsのバージョンでサポートされています。さらに、Xのグラフィカル・インターフェースは、やや 異なるメカニズム を持っていました。"selections" と “cut buffer” です。
要するに、Xterm と GNOME Terminal が書かれた頃には (あなたは後者を使っていると思いますが)、 CtrlV は既に何年も前から全く異なる意味を持っていて、変更することはできませんでした。さらに、テキストをコピーする別の方法である「選択」は X11 ではすでに存在していたので、明示的なコピー/貼り付け動作は Windows ではそれほど重要ではないと考えられていたのかもしれません。これは、異なるキーボードショートカットを選択する必要があったことを意味します - 例えば、GNOME Terminal のような最新のターミナルプログラムのほとんどは CtrlShiftC と CtrlShiftV を使用しています。(Xterm を使用している場合は、XTerm*vt100*translations Xresource を使用して、同じショートカットを手動で追加することができます。Rxvt にはそのようなオプションはありません。)
(ほとんどの X11 ツールキットは、ターミナルプログラムと競合しない CUA の「コピー」と「ペースト」キーもサポートしています。残念ながら、実装はむしろ矛盾しています - CtrlIns はほとんどのプログラム (GTK, Qt4, しかし Xaw では無視されます) で “クリップボード” にコピーしますが、ShiftIns はほとんどの GTK と Qt4 プログラムでは “プライマリ選択” から貼り付けますが、Firefox では “クリップボード” から、そして今では陳腐化している Xaw では今では陳腐化しているカットバッファから貼り付けます。 )
これらのキーをサポートしている端末やコンソール(特に Windows 10 コンソール)もあります。Windows コンソールには常に別個の「マーク/選択」モードがあったので、CtrlC もまた、コンテキストに基づいて 2 つの意味を持つようになりました - 通常モードでは割り込みを送信し、選択モードではクリップボードにコピーします (Enter が使用されたように)。しかし、Unix ライクな端末で同じことをするのはもっと問題があるでしょう。
ここでは、一般的なターミナルでの汎用的なコピー・ペースト設定を紹介します:
gnome-terminal (Linux で最も普及している)
Copy . CtrlShiftC
Paste . CtrlShiftV
注 . 選択からコピー、貼り付けへのミドルクリックも動作しますが、代替のクリップボードを使用しています。(マウスで選択、キーボード操作なし)
貼り付け . 右クリック(またはより確実に: shiftRight-click)
Note . マウス入力を取るアプリ(vim
や links
のような)は右クリックを盗むことができます – shiftRight-click はどのアプリでも常に動作します。AppleC
貼り付け . AppleV
注意:マウスコントロールを取るアプリ(vim
や links
のような)は、テキストを選択する意味を上書きしてしまうことがあります。そのような場合は、Controlキーを押しながらマウスをドラッグして選択してください。アプリとのマウスのやりとりは、ターミナルの設定ではデフォルトで無効になっているので、ほとんどの人はこのことに気づかないでしょう。
文字と一緒にCtrlキーを押すと、大文字の文字のASCII値から64を引いて見つけたASCII制御文字が生成されるというのは根強い伝統です。この計算は、Ctrl-Aを1にマッピングしている。例えば、Ctrl-IはTab、Ctrl-Jはlinefeedです。
Ctrl-Shiftにも同様の伝統はありません。
ターミナルエミュレータは伝統をサポートしなければなりません。ターミナルベースのプログラムはコントロールキーをコマンドにマッピングします。例えば、Bash は Ctrl-V を「次の文字を文字通りに取る」という意味のコマンドとして使用します。これにより、コマンドラインに制御文字を埋め込むことができます。端末が自分用にコントロールキーを盗むと、そのようなコマンドは利用できなくなります。したがって、メタ機能のために Ctrl-V を傍受するのは問題外です (少なくともデフォルトの設定では)。
しかし、ターミナルエミュレータは、文字を生成することを期待されていない Ctrl-Shift-V を傍受することは自由です。Ctrl-Shift-V は標準ではなく Gnome Terminal のものです (他の端末にもあるかもしれません)。テキストを選択するだけです。真ん中のボタンはそのテキストを他の場所に貼り付けます。
Ctrl-V は Microsoft Windows の慣例で、Macintosh の Apple-V を模倣したものです。
私には、シェルに貼り付ける最も簡単な方法は次のとおりです:
必要なコードを選択し、マウスのミドルキーをクリックして貼り付けます。
怠惰な気分で、テキスト文書、スクリプト、ウェブ、フォーラムのいずれかからコマンドを選択する場合は、マウスの真ん中のボタンを使用することもできます。私はパピーリナックスを使っているので、この方法を使っています。パピーリナックスは右クリック&ペーストの通常の動作をサポートしていないようです。)