Как настроить привязку клавиш в ZSH для разрешения и редактирования последней команды, зарегистрированной в истории?

Дано:

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

$ 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}"
}

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

2 основные проблемы, которые я получил:

  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'.

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

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


person protoboolean    schedule 18.04.2020    source источник


Ответы (1)


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

${EDITOR} =script

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

person SergioAraujo    schedule 19.04.2020
comment
Спасибо, я этого не знал. =script определенно лучше, чем `which script`. - person protoboolean; 19.04.2020