我想实现这个绑定
"\C-xk": kill-region
# turn previous word into HTML/XML
# opening and closing tag pair
"\C-xh": "\e \eb\C-xk<\C-y>\e </\C-y>\C-x\C-x"
但它返回到文本第二次被拉出的位置,</
而不是标签之间的位置,例如<tag>|</|tag>
。
我在命令行上用各种文本尝试了这两个函数,似乎set-mark
值被重置了yank
。
这是一个错误还是设计使然?现在我只是\C-b\C-b
在序列的末尾添加。
答案1
这不是错误,而是明确编程的行为。
/* Yank back the last killed text. This ignores arguments. */
int
rl_yank (count, ignore)
int count, ignore;
{
if (rl_kill_ring == 0)
{
_rl_abort_internal ();
return 1;
}
_rl_set_mark_at_pos (rl_point);
rl_insert_text (rl_kill_ring[rl_kill_index]);
return 0;
}
您可以看到它显式重置了标记到目前的观点,然后插入来自 Kill Ring 的文本。
这同样适用于其他 yank* 方法。
这并没有得到很好的记录,但我认为这是为了让您在插入可能未知长度的文本后可以返回到原始点。