Isso funciona:
command_not_found_handler () {
if [[ $# -eq 1 && -f $1 ]]; then
vim "$1"
else
exit 127
fi
}
Acho bastante perigoso, é provável que você execute algo por engano. Por exemplo, se você tentar editar um arquivo no diretório atual que tenha o mesmo nome de um comando no caminho, o comando no caminho será executado. Isso não é um problema com command_not_found_handler
, é um problema com sua exigência. Outro problema é se você digitar algo como foo/bar
, isso significa editar o arquivo se o arquivo não for executável e executá-lo se for executável.
Se você quiser que os arquivos no diretório atual tenham precedência sobre os comandos do PATH, use o DEBUG
trap ou sobrecarregue o comando accept-line
editing . Isso não resolveria o segundo problema.
Eu recomendo uma interface de usuário diferente. Não mexa com a execução de comandos. Em vez de pressionar Retornar para editar, pressione uma tecla diferente e configure essa chave para inserir vim
na frente da linha. Isso tem alguns bons bônus, incluindo a retenção da chamada para vim
no histórico do shell.
zle -N edit-file
edit-file () {
BUFFER="vim $BUFFER"
zle accept-line "$@"
}