Ctrl-Cなどのbashショートカットキーを変更しますか?


21

Kubuntu 10.04を使用しています。bash(ターミナル)の標準ショートカットキーの一部を変更したいと思います。

設定したいショートカットは次のとおりです。

  • Ctrl- Cターミナルで選択したテキストをクリップボードにコピーします。

  • Ctrl- Vクリップボードからターミナルに貼り付けます。

  • Ctrl- Zターミナルの現在の行で編集を取り消す。

  • Ctrl- - ShiftCまたはより良い、 Super- C)コマンドを終了します。

  • Ctrl- - ShiftZまたはSuper- Z)バックグラウンド・コマンドであることができます。

  • Ctrl- - ShiftVまたはSuper- V)リテラルのINSERTコマンドであることを(またはものは何でもCtrl- z前にしました)。

これらの変更を行うにはどうすればよいですか?

ところで、私は端末がOS Xで動作する方法が好きです。コマンドキーを使用すると、すべてのコピー/貼り付けコマンドが非常に一貫したものになります(OS Xの他の多くのものとは異なります)。

PS私はbashのマニュアルページを読みましたが、役に立ちませんでした。それは私にアイデアを与えましたが、上記の組み合わせの特定の例が必要です。ありがとう。


これらの「ショートカット」のいくつかは、bashで「実装」することはできませんが、(、gnome-terminalは、konsoleのなどのxterm)...例えば、「選択したテキスト」、「クリップボード」自体の端末上に置くことをしている
アキラ

回答:


10

これらはbashの機能ではなく、ターミナルドライバーの機能です。そのため、それらはによって指定されstty(1)ます。

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

5
OK。手がかりをありがとう。今、私はまだ私の目標を達成したいと思います。また、inputrcがCtrl-Cを再マッピングできることも知っています。しかし、私はそれをどうするかは本当に気にしません。ターミナルでこれらのショートカットをどのように再マップするかを知りたいだけです。
ポール

15
「魚」は次のとおりです。stty intr \ ^ k(ここで、終了コマンドは、以前はCtrl-Cになりましたが、Ctrl-Kになりました。Kは任意のアルファキーになります)私は自分でそれを見つけるために一生懸命働いた。ですから、ことわざを使って説教することで、IMOのように見えます。
ポール

Ctrl + Shift + Cに再マップするにはどうすればよいですか?
crypdick

8

これはほぼ完全に解決されました。ソリューションの一部は、http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/で MTK358によって最初に注目されました。彼は、コピーアンドペーストショートカットキーはkonsoleのメニュー設定で簡単に変更できるという事実を(むしろ恥ずかしいことにかなり明白に)指摘しました。これを見てから、Ctrl-CとCtrl-Vを設定して端末でコピーして貼り付けるのに約1分かかりました。

ソリューションの他の部分はsttyのmanページから明らかだったはずですが、それは(私には)わかりませんでした。私は、上記に掲載したようなさまざまな手がかりに基づいて実験を行っただけです。

終了コマンドとしてCtrl-Cを置き換える非数値キーを決定しました。(私は「k」を使用しました)。シフト修飾子をsttyに伝える方法についての情報を見つけられなかったので、それをあきらめました。それが決まったので、コマンドラインに次のように入力するだけで済みました。

stty intr \ ^ k

すべてが期待どおりに機能することを確認しました。

ここで、起動スクリプトに上記の単一のコマンド(stty intr \ ^ k)を配置する必要がありました。どちらが「適切な」ものかわかりません。この変更をシステム全体で永続的にしたいです。

どのスクリプトにコマンドを配置するべきかについての提案はありますか?

そして最後に、説教の応答に関しては、それらは不必要で役に立たない。


使用する「正しい」起動スクリプトが何であるか、またはこれを行うためのより良い方法を決定したことがありますか?私はこれと同じ問題に苦しんでいます(元の質問)。しかし、 'stty intr \ ^ k'をctrl-kにバインドさせることはできますが、ctrl-cのバインドを解除せず、 'stty intr undef'も 'stty intr = ^-'もそれを行いません。 。そして、 'stty -a'は私が行った変更を一切表示しません。
EricS

4

これらの一部は、通常のKDEキーボードショートカットメカニズムを使用して設定できます。Konsoleの[設定]メニューで[ショートカットの設定]をクリックすると、KDEによって処理される機能のキーバインドを変更するためのダイアログが表示されます。これにより、Ctrl + Cを再マップしてコピーし、Ctrl + Vを再マップして貼り付けることができます-ただし、それを行うと、これらのキーシーケンスは端末に渡されなくなり、使用できなくなります。たとえば、プログラムを中断するにはCtrl + C。

その他の機能はreadlineライブラリによって制御されます~/.inputrc。ライブラリは、ファイルを編集して構成できます。Ctrl + Zで現在の行で行った編集を元に戻すには、追加したい

C-z: revert-line

しかし、そのキーシーケンスはおそらく端末によって既にトラップされているため、使用sttyする前にバインドを解除する必要があります。以下のための初見^Zの出力でstty -a(イグナシオの答えに示すように)、その後、例えば、それが現れた場合でsusp = ^Z、実行、

stty susp ^-

そのキーマッピングのバインドを解除します。

sttyイグナシオが言うように、あなたが求めている他の変更は、ターミナル機能であるため、それを使用して行う必要がありますが、どのように正確かはわかりません。問題は、端末がShiftを認識するかどうか、または認識する場合、その情報をに伝える方法がわからないことsttyです。


3

Bashはコマンドラインでemacsor viモードを使用します。「選択」や「クリップボード」という概念はありません。「kill buffer」と「point」、「mark」、「word」、「line」、「kill」と「yank」などを使用します。

それにGUIスタイルの機能を追加しようとすると、せいぜいイライラし、完全に動作しません。あなたはの機能を組み合わせるしようとする必要がありますsttyreadlineそして(おそらくあなたの端末Terminal.appあなたのため)。あなたは、次のような機能を再マップする必要がありますintrsusplnextあなたはまだ彼らの機能を使用できるように、など。

このような根本的な変更には強くお勧めします。それはあなたが望むことをするように設計されていません。

ローマにいるとき...


Dave、OS Xと同じように機能するシステムの場合、OS Xを使用することをお勧めしますか?デニスがほのめかしたように、たとえそれが機能するようになっても、自分以外のマシンでログインすると、かなりの障害になります。
msw

他のコマンドを保証することはできませんが、コピーと貼り付けはコマンドウィンドウで完全に意味があり、非常に便利です。私はそれらを他のウィンドウとコンソールの間でコピー&ペーストするために絶えず使用しており、長年それを行ってきました。Shift-Ctrl-CおよびShift-Ctrl-Vは、この方法ですぐに使用できます。そして、私はこれを何年も毎日行ってきましたが、KonsoleでCtrl-cを忘れてしまいます。個人的には、「ローマにいるとき」という格言を適用するのをやめて、他のすべての既存のアプリケーションのように機能するように再マップする準備ができています。
EricS

1

Ubuntuを実行し、コピーのショートカットをデフォルトのCtrl+ Shift+ Cから、より通常のシンプルなCtrl+に変更しましたC。しかし、これにより、割り込みコマンド^ Cを送信できないという問題が発生しました。

@Paulの回答のおかげで、コマンドを実行していることがわかりました

tty intr \^k

Ctrl+ を使用して割り込みコマンドを送信できますK。しかし、このコマンドは、面倒な端末を開くたびに実行する必要がありました(彼が言ったように)。

さらに少し調査して(グーグル😂)、ターミナルを開くたびにコマンドを実行する方法を見つけました(とにかくUbuntuで)

したがって、最終的に次のコマンドを(1回)(Ubuntu 18.04以降で)実行すると、毎回予期される動作が得られます。

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

最後に、Kボタンを使用しないでください。上記のすべてのコマンドでk文字を任意の文字キーに交換できます。

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