Спасибо bengineerd за хорошее объяснение и фрагмент :)
Я использую zsh вместе с grml config - функция chpwd полностью справилась, но некоторые вещи были сломаны.
Вот модифицированный фрагмент, чтобы вернуть автозаполнение этой клавиши со стрелкой:
if [ -n "$INSIDE_EMACS" ]; then
# keep the old chpwd command and apply it later
which zsh_chpwd >&/dev/null || \
eval "$(echo "zsh_chpwd() {"; declare -f chpwd | tail -n +2)"
chpwd() {
print -P "\033AnSiTc %d"
zsh_chpwd
}
print -P "\033AnSiTu %n"
print -P "\033AnSiTc %d"
fi
и добавьте это внизу вашего .zshrc
Обновить
Чтобы исправить прыжки и удаление в терминалах, я нашел несколько источников, которые помогли улучшить общее впечатление:
и объединил их в https://github.com/0x17de/emacs-config/blob/master/multi-term-settings.el
Вот некоторая выдержка из критической части, которая включила мета + клавиши со стрелками (переход по словам) и удаление слов в обратном направлении:
(add-hook 'term-mode-hook
(lambda ()
(define-key term-raw-map (kbd "M-d") 'term-send-raw-meta)
(define-key term-raw-map (kbd "M-<left>") 'term-send-backward-word)
(define-key term-raw-map (kbd "M-<right>") 'term-send-forward-word)
(define-key term-raw-map (kbd "M-<backspace>") 'term-send-backward-kill-word))
(add-to-list 'term-bind-key-alist '("C-z e" . term-send-esc))))
(defun term-send-esc ()
"Send ESC in term mode."
(interactive)
(term-send-raw-string "\e"))
Посмотрите term-send-esc из репозитория git, если вы используете ssh в удаленном режиме, войдите в режим вставки на некотором vim и застряли, потому что пока нет сопоставления для ESC.
также немного связано - с grml zshrc, если вы хотите, чтобы завершение клавиши со стрелкой происходило, и если у вас меньше пяти опций, найдите
zstyle ':completion:*' menu select=5
и измените это "5" (значение по умолчанию) на "1"