我尝试在 bash xterm 中定义一个自定义的 reverse-kill-word 函数行为。为此,我需要在验证命令行之前捕获它。例如,如果我键入时sdcds/edfdD sdf/sdf
没有键入回车键,我想使用快捷方式在临时变量中esc + backspace
捕获该行,sdcds/edfdD sdf/sdf
然后应用 sed。我已经编写了 sed 和 bind 命令,但我找不到任何地方如何捕获命令buffer
行。
来自答案的更新
好的,非常感谢,我觉得我的解释不够清楚。我想要做的是在 bash.rc 中创建一个函数和相关的绑定键来修改命令行中的文本。想象一下,我想定义一个函数来删除命令行(在输入回车键之前)直到“/”为止,例如,只删除到 / 为止,我可以在 .bash.rc 中写入:
function backward-delete-to-slash () { echo $BUFFER_COMMAND_LINE | sed 's:\(.*[/][/]*).*:\1:';}
bind -x '"\e\d": backward-delete-to-slash'
我的问题是将命令行捕获到$BUFFER_COMMAND_LINE
变量中。如果我有这个变量,我可以这样做:
$: sdffs/dsfd dsfsdf/dfdsf (without typing enter)
esc+backspace
$: sdffs/dsfd dsfsdf/
因此我希望能够更加详尽。
答案1
如果你对 vi 有一定了解,可以尝试一下:
$ set -o vi
$ bind vi-yank-to '\ey'
$ type-your-text-here - then press Home to go to begin-of-line, esc-y
该行现在位于缓冲区中。按 Ctrl-c 获取新行,然后
$ sed something-and-then esc-p
缓冲区中的文本应该会出现。