我正在阅读 bash 手册页并记住键盘快捷键。C-x rubout
绑定到backward kill line
,并且C-u
绑定到unix line discard
,但这些命令的描述看起来相同。 这些命令之间有什么区别?
答案1
在他们的当前实施,这两个函数看起来或多或少做了相同的事情,除了backward-kill-line
可以接受负前缀参数,而unix-line-discard
忽略前缀参数。
/* Here is C-u doing what Unix does. You don't *have* to use these
key-bindings. We have a choice of killing the entire line, or
killing from where we are to the start of the line. We choose the
latter, because if you are a Unix weenie, then you haven't backspaced
into the line at all, and if you aren't, then you know what you are
doing. */
int
rl_unix_line_discard (int count, int key)
{
if (rl_point == 0)
rl_ding ();
else
{
rl_kill_text (rl_point, 0);
rl_point = 0;
if (rl_editing_mode == emacs_mode)
rl_mark = rl_point;
}
return 0;
}
/* Kill backwards to the start of the line. If DIRECTION is negative, kill
forwards to the line end instead. */
int
rl_backward_kill_line (int direction, int key)
{
int orig_point;
if (direction < 0)
return (rl_kill_line (1, key));
else
{
if (rl_point == 0)
rl_ding ();
else
{
orig_point = rl_point;
rl_beg_of_line (1, key);
if (rl_point != orig_point)
rl_kill_text (orig_point, rl_point);
if (rl_editing_mode == emacs_mode)
rl_mark = rl_point;
}
}
return 0;
}
答案2
以下是我发现的内容:
backward-kill-line (C-x Rubout)
Kill backward to the beginning of the line.
unix-line-discard (C-u)
Kill backward from the cursor to the beginning of the current line.
https://ftp.gnu.org/old-gnu/Manuals/bash-2.05a/html_node/bashref_97.html
backward-kill-line (C-x Rubout)
Kill backward to the beginning of the line.
unix-line-discard (C-u)
Kill backward from point to the beginning of the line. The
killed text is saved on the kill-ring.
https://man7.org/linux/man-pages/man3/readline.3.html#EDITING_COMMANDS
似乎可以unix-line-discard
将其保存在钥匙圈上,但backward-kill-line
不能 - 但是我不知道如何验证这一点,以及Emacs 维基说backward-kill-line
也附加到 jeyring
这些术语的其他用法:https://github.com/junegunn/fzf/pull/489/files#diff-1fabf11f4aca2d62eb64290f66d25217R180