Как настроить связывание клавиш в ZSH для разрешения и редактирования последней команды, зарегистрированной в истории? - PullRequest
0 голосов
/ 18 апреля 2020

Дано:

Я только что запустил скрипт

$ my-script.sh

, который находится в ~/bin и является символической ссылкой на настоящий файл

$ ls -l ~/bin
[...] /Users/myself/bin/my-script.sh -> /Users/myself/.config/scripts/real-name.sh

Тогда:

Я бы хотел отредактировать файл, на который указывает только что вызванный мной скрипт.

Что-то вроде:

${EDITOR} "$(readlink $(which my-script.sh))"

Я попытался загрузить следующую функцию, которая

function edit-last() {
    LAST_COMMAND="$(history -1 | sed -Ee 's/^[[:space:]]*[[:digit:]]+[[:space:]]*//')"
    REAL_PATH="$(readlink $(which "${LAST_COMMAND}"))"
    $EDITOR  "${REAL_PATH}"
}

Я загрузил функцию и вызвал ее явно после запуска моего скрипта, и она почти сработала.

У меня есть две основные проблемы:

  1. Я установил EDITOR="emacsclient -n -a '' -c", но его вызов через $EDITOR не работает при расширении. Я получаю command not found: emacsclient -c -a '' -t. Если я изменю последнюю строку на emacsclient -c -a '' -t "${REAL_PATH}". Это работает.

  2. Я пробовал bindkey "^e" edit-last, но когда я набираю "CTRL-e", я получаю No such widget 'edit-last'.

I Я использую ZSH с oh-my-zsh.

Как я могу это исправить? Есть ли лучший способ реализовать эту функцию?

1 Ответ

1 голос
/ 19 апреля 2020

Я не знаю, помогает ли это, но на zsh мы можем сделать:

${EDITOR} =script

со знаком равенства (в моем случае даже TAB работает) zsh откроет файл, связанный с название "скрипт".

...