在 Linux 上工作和使用 C-shell 时,如何清除输入到提示中的部分内容?

Gee*_*eek 3 command-line csh line-editor

我在 Linux 和 C-shell 中工作。很多时候,我需要更改提示中已有内容的某些部分,这些内容是我通过使用CTRL+R. 我不想用Backspace来做这件事。我在 superuser.com 上看过这个问题,它专门针对 bash。这个答案说使用CTRL+Uwhich 会清除当前光标位置之前的所有内容。但这为我清除了所有内容,即使我按下了几个退格键,现在位于提示文本的中间。在 Linux 中是否有特定的 C-shell 实现方式?

Sté*_*las 6

在模式(通常是默认设置)中(tcsh如果您不是完全受虐狂,我想这就是您所说的“C-Shell” emacs),您可以使用Ctrl-W. 这是在标记(设置为但默认为行首)和光标kill-region之间删除的小部件。Ctrl-Space

在这方面,它的行为比 bash(readline)/ksh/zsh emacs 模式更接近 emacs,但与终端驱动程序嵌入的行编辑器(在规范模式下)不同,其中Ctrl-W删除了前一个单词(werase,也 in vi)。那个时候它选择emacs了通常的终端行为,但不是在Ctrl-Uemacs 中它是通用参数的情况下,而它kill是终端中的-line 字符。

如果您希望Ctrl-U删除到行首,您还可以执行以下操作:

bindkey '^U' backward-kill-line
Run Code Online (Sandbox Code Playgroud)

Envi模式,Esc进入命令模式,并d0删除到行首(或者c0如果你想改变而不是删除它)。