Bash:使用键盘快捷键从光标删除到行尾

Ada*_*tan 109 command-line bash

考虑以下 bash 提示,其中^表示提示位置:

$ git commit -am "[bug 123456] Do this and that with the bug"
                               ^
Run Code Online (Sandbox Code Playgroud)

假设我想用不同的提交消息再次提交同一个错误。有没有办法从光标位置删除文本直到行尾?

小智 173

使用Ctrl+K删除从光标到行尾。

使用Ctrl+U删除从光标到行首的内容。

  • @hylepo Dunno 但我的助记符是“英国脱欧 - 英国离开欧洲” - U 删除到开头,K 删除到结尾。 (7认同)
  • K 和 U 是什么意思,如果我不知道它们的含义,我下周就想不起来了,如何记住它们? (2认同)

Kev*_*wen 52

这取决于您在 shell中使用的是 vi( set -o vi) 还是 emacs( set -o emacs) 编辑模式。

默认情况下,您的 shell 通常默认为 emacs 编辑模式。

  • 在 emacs 模式下,可以使用命令ctrl-来完成删除到行尾的操作k

  • 但是,如果您碰巧在命令外壳中使用 vi 编辑模式,则可以通过键入Esc(这将使您进入命令模式)后跟d- $(如果要删除整行,请输入dd)来实现相同的结果。

如果您不确定当前在 shell 中使用的编辑模式,请从命令行输入set -o命令,您将能够确定当前使用的编辑模式:

set -o
...snip...
emacs           on
...snip...
vi              off
Run Code Online (Sandbox Code Playgroud)

要切换命令行编辑模式,只需键入:

set -o vi
Run Code Online (Sandbox Code Playgroud)

或者

set -o emacs
Run Code Online (Sandbox Code Playgroud)

  • 在 vi 命令模式下,`D` 的作用与 `d$` 相同 (5认同)
  • 如果你想要一个助记符,`K` 代表 kill(从光标位置开始的行)。 (4认同)
  • +1 用于实际编写 **正确** 答案并解释 shellopts 可能会改变它。 (4认同)

Sri*_*bat 5

如果您只熟悉 Zsh 和 Bash 之一,以下是您(可能)需要的等效键绑定:

猛击

bind '"\C-k"':kill-line
Run Code Online (Sandbox Code Playgroud)

zsh

bindkey "\C-k"      vi-kill-eol
Run Code Online (Sandbox Code Playgroud)

其他相关信息

要获取键绑定列表:

# bash
bind -p

# zsh
bindkey
Run Code Online (Sandbox Code Playgroud)

  • 哦好的。我自己也不熟悉,不过查了一下,应该是`"\Ck"` (2认同)