2

Я пытаюсь определить пользовательское поведение функции backward-kill-word в bash xterm. Для этого мне нужно перехватить командную строку перед ее проверкой. Например, если я sdcds/edfdD sdf/sdf без ввода enter, я хочу с помощью ярлыка, такого как esc + backspace перехватить строку sdcds/edfdD sdf/sdf во временной переменной, чтобы применить sed после. Я уже написал команды sed и bind, но нигде не могу найти, как перехватить командную строку buffer .

Обновление от ответа

Хорошо, большое спасибо, я думаю, что я не достаточно ясно в моем объяснении. Я хочу создать функцию и связанный ключ связывания в bash.rc, чтобы изменить текст в командной строке. Представьте себе, я хочу определить функцию, которая удаляет командную строку (до ввода enter), например, до "/" и только до /, я мог бы написать в моем .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 ответ1

0

Если вы немного знаете 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

Текст из буфера должен появиться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .