web-dev-qa-db-ja.com

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

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

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

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

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

  • Ctrl-Z 端末の現在の行の編集を元に戻すには、.

  • Ctrl-Shift-C (またはさらに良い、 Super-C)コマンドを終了します。

  • Ctrl-Shift-Z (または Super-Z)をバックグラウンドコマンドにします。

  • Ctrl-Shift-V (または Super-V)リテラル挿入コマンド(または何でも) Ctrl-z 以前に行いました)。

これらの変更を行う方法を教えてください。

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

追伸bashのmanページを読みましたが、役に立ちませんでした。アイデアは出ましたが、上記の組み合わせの具体的な例が必要です。ありがとう。

24
Paul

これらは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

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

解決策の他の部分はsttyのマニュアルページからは明らかでしたが、それは(私には)分かりませんでした。上に投稿されたものなど、さまざまな手がかりに基づいて実験を行っただけです。

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

stty intr\^ k

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

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

コマンドを配置する必要があるスクリプトに関する提案はありますか?

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

9
Paul

これらの一部は、通常の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に伝達する方法がわからないことです。

4
David Z

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

おかげで @ Paul answer コマンドの実行が見つかりました

tty intr \^k

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

少し調べてみると(グーグル????) ターミナルを開くたびにコマンドを実行する方法が見つかりました(とにかくUbuntuで)

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

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

最後に、あなたが使用してはならないことを言及する価値があります K ボタン。上記のすべてのコマンドのk文字を、選択した任意の文字キーに交換できます。

3
Wiggy Lindholm

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

GUIスタイルの機能を靴べらにしようとすると、せいぜいイライラして完全に機能しなくなります。 sttyreadlineとターミナル(おそらくTerminal.app)の関数を組み合わせてみる必要があります。 intrsusplnextなどの関数を再マップする必要があるため、それらの機能を引き続き使用できます。

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

ローマにいるとき...