Сделайте собственные сочетания клавиш для редактирования текущей строки - PullRequest
0 голосов
/ 08 мая 2020

bindkey встроенный из zsh кажется хорошим началом. Но я не знаю, как написать функцию, которая привязывается к клавише, скажем Ctr+/, для поиска шаблона и удаления текущей строки до конца. Шаблон может быть шаблоном по умолчанию или строкой, предоставленной во время вызова функции пользователем.

Пример использования:

Когда я набираю эту команду и добавляю ее с комментарием:

echo Hello World # Try echo

После этого я прокручиваю историю назад и хочу повторно использовать команду, я хочу быстро удалить от # до конца и начать набирать новую команду оттуда.

Другое использование:

Когда я прокручиваю строку вверх, я хочу вызвать функцию, назовите ее deleteFrom, она запросит ввод, по умолчанию #. Я могу набрать World. Затем он удаляет строку от "World" до конца, помещая туда курсор, чтобы я мог начать печатать.

1 Ответ

1 голос
/ 08 мая 2020

Для этого вам нужно расширить Zle (Z-shell Line Editor), добавив свой собственный виджет для просмотра истории, а затем отредактировать выбранную строку (если я правильно понял вопрос).

Вот супер простой виджет, привязанный к 'C', который удалит любые символы после # в текущей командной строке (это также будет работать для строк, извлеченных из истории):

my-zle-widget () {
  BUFFER="${BUFFER%%#*}"
  zle .end-of-line
}

zle -N my-zle-widget

bindkey C my-zle-widget

Вы не необходимо реализовать все с нуля и может вызывать существующие виджеты zle для выполнения уже выполненной работы (см. zle .end-of-line в моем примере). Вы можете использовать их код из zsh repo в качестве ссылки (обратите внимание, что они загружаются автоматически и не нуждаются в заключении в функцию - это всего лишь тела функций).

...