コマンドラインで単語を逆方向に削除するにはどうすればよいですか(bashとzsh)?


118

コマンドラインで単語を逆方向に削除するにはどうすればよいですか?Ctrl+ を使用して最後の「単語」を削除するエディターには本当に慣れているBackspaceので、コマンドラインでもその機能が必要です。

現時点ではBashを使用しており、単語を後方にジャンプしてから前方に削除することはできますが、これをクイックキーまたはイベントとしてCtrl+ として使用したいのBackspaceです。

どうすればこれを達成できますか?

回答:


169

ctrlw標準の「kill word」(別名werase)です。 ctrlu行全体を削除します(kill)。

で変更できますstty

-bash-4.2$ stty -a
speed 38400 baud; 24 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
        -extproc -xcase
iflags: -istrip icrnl -inlcr -igncr -iuclc ixon -ixoff ixany imaxbel
        -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -ocrnl -onocr -onlret -olcuc oxtabs -onoeot
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
        eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = <undef>;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;
-bash-4.2$ stty werase ^p
-bash-4.2$ stty kill ^a
-bash-4.2$

行に実際の制御文字を配置する必要はなく、sttyはパッティング^を理解してから、制御でヒットする文字を理解することに注意してください。

これを行った後、ヒットctrlpすると行から単語が消去されます。私がヒットした場合とctrla、それは、行全体を消去します。


sttyコマンドを使用して、「kill word」を割り当てるために、Ctrl-v Ctrl-BackspaceをCtrl+BckSpc押して入力しstty weraseました。これにより、リテラルのCtrl-Backspace文字がの引数として挿入されstty weraseます。残念ながらCtrl-Backspace、単語を削除するために入力する必要はありませんが、Backspaceキーだけで機能します。だから私はこれを行う方法を学ぶために@terdonのリクエストを2番目にしたいと思います。をweraseデフォルトにリセットするには、を使用しますstty werase Ctrl-v Ctrl-w
ティモシーマーティン

@TimothyMartinどうやったらいいのかわからないctrl-backspace。一般にBackspaceはctrl-hor として送信されるctrl-?ため、ctrl-backspace何らかの形で送信されますctrl-ctrl-backspace。別の何かが送信されたかどうかを把握しようとしましたが、少なくとも、パテは、入力するときにバックスペースを送信するだけですctrl-backspace
kurtm

3
ctrl + wは単語を効果的に削除しますが、クリップボードにコピーし、保存したものをすべて消去します(または押し下げますか?)。
イライジャ・リン

1
esc-削除したばかりの作業
ルネウーラー

1
それは...人生を変えることです。我が神よ。
-wired00

27

また、これを行うこともできCtrlWます。

別のオプションは、独自のショートカットを設定することですが、これは使用しているターミナルエミュレータによって異なります。以下のためにxtermrxvt他の人と、おそらく、この行を追加するには、~/.inputrc(それが存在しない場合は、ファイルを作成します):

## rxvt, xterm
"\b":backward-kill-word

gnome-terminalそして、そのilkはAltBackspaceデフォルトで持っているようですが、どうやらreadline()取得するためにパッチを適用する必要がありますCtrlBackspace

以下も参照してください。


24

Alt+ Backspacebashとzshで動作します。


2
itermで動作しません:(
Akarsh Satija

5
たとえば、URLをCtrl+W削除して使用すると、URL 全体Alt+Backspaceが削除されますが、単語は削除され、特殊文字が見つかると削除が停止します。
メタファニエル

そしていつものようにctrl-y、ヤンク/アンドゥ/ペーストする必要があります。
パブロA

これはitermで解決します:github.com/fish-shell/fish-shell/issues/2124
Pascalius

0

Macでは、次を使用できます。

Fn+Delete


2
これにより、カーソルの前の1文字が削除され、後ろの1単語は削除されません
ダニード

これが関連するかどうかはわかりませんが、Macでは<Alt> + <Backspace>になります。
ハッサン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.