Получение ;5D при нажатии ctrl + стрелка в терминале на FreeBSD

Вопрос или проблема

На centos я могу пропустить слово, нажав ctrl + стрелка (влево или вправо) в терминале. Когда я подключаюсь по ssh к FreeBSD и пытаюсь использовать ту же комбинацию, я получаю:

$ tail -f 20120412.log;5D;5D;5D

(каждую попытку = ;5D)

Существует ли способ это исправить? Я использую Ubuntu 12.04 + Terminator.

Заранее спасибо.

Файл .inputrc в вашем домашнем каталоге приведет к тому, что ctrl+left перестанет работать на Ubuntu (например).

Чтобы все работало, добавьте следующее в ~/.inputrc:

# Включить system-wide inputrc, который игнорируется по умолчанию, когда
# у пользователя есть собственный файл .inputrc.
$include /etc/inputrc

Если вы используете ZSH, то используйте это в файле /etc/zshrc.

case "${TERM}" in
  cons25*|linux) # обычная консоль BSD/Linux
    bindkey '\e[H'    beginning-of-line   # home 
    bindkey '\e[F'    end-of-line         # end  
    bindkey '\e[5~'   delete-char         # delete
    bindkey '[D'      emacs-backward-word # esc left
    bindkey '[C'      emacs-forward-word  # esc right
    ;;
  *rxvt*) # производные от rxvt
    bindkey '\e[3~'   delete-char         # delete
    bindkey '\eOc'    forward-word        # ctrl right
    bindkey '\eOd'    backward-word       # ctrl left
    # обходное решение для screen + urxvt
    bindkey '\e[7~'   beginning-of-line   # home
    bindkey '\e[8~'   end-of-line         # end
    bindkey '^[[1~'   beginning-of-line   # home
    bindkey '^[[4~'   end-of-line         # end
    ;;
  *xterm*) # производные от xterm
    bindkey '\e[H'    beginning-of-line   # home
    bindkey '\e[F'    end-of-line         # end
    bindkey '\e[3~'   delete-char         # delete
    bindkey '\e[1;5C' forward-word        # ctrl right
    bindkey '\e[1;5D' backward-word       # ctrl left
    # обходное решение для screen + xterm
    bindkey '\e[1~'   beginning-of-line   # home
    bindkey '\e[4~'   end-of-line         # end
    ;;
  screen)
    bindkey '^[[1~'   beginning-of-line   # home
    bindkey '^[[4~'   end-of-line         # end
    bindkey '\e[3~'   delete-char         # delete
    bindkey '\eOc'    forward-word        # ctrl right
    bindkey '\eOd'    backward-word       # ctrl left
    bindkey '^[[1;5C' forward-word        # ctrl right
    bindkey '^[[1;5D' backward-word       # ctrl left
    ;;
esac

Если вы не изменяли их по умолчанию, оболочка, которую вы используете на Ubuntu, — это bash. На FreeBSD дефолтная оболочка — csh. Вы можете изменить свою оболочку с помощью следующей команды в обеих ОС:

chsh

Установите оболочку в FreeBSD на /usr/local/bin/bash. Bash не входит в состав FreeBSD, поэтому, если вы ещё этого не сделали, установите его из ports:

cd /usr/ports/shells/bash
make install
make clean

Последнее: не меняйте оболочку для root. Для этого существует учетная запись “toor”: все привилегии root, но вы можете установить оболочку на любую, какую захотите. Причина в том, что нет системных задач, которые выполняются под toor, поэтому вы не сломаете ничего и не запутаете никого, изменив оболочку этой учётной записи на ту, к которой вы привыкли (или может быть более функциональной в качестве логин-оболочки).

Возможно, у вас неправильная настройка $TERM. Введите echo $TERM, чтобы узнать, что у вас установлено. Возможно, вы захотите использовать xterm, export TERM=xterm-256color.

Для Ctrl+ и Ctrl+→⃪⃪ с sh(1) в FreeBSD 14.0-RELEASE и более поздних версиях, кажется, что обе комбинации клавиш:

  • работают удалённо (ssh)
  • пока не работают локально (на компьютере).

Два коммита для улучшения – два файла в дереве src:

  1. sh(1): interactive mode improvement · freebsd/freebsd-src@ef0d94a | https://cgit.freebsd.org/src/commit/?h=releng/14.0&id=ef0d94a3d34c880bd9f86cd842ee01b6075bc1d8
  2. skel: update .shrc as well · freebsd/freebsd-src@5fe9737 | https://cgit.freebsd.org/src/commit/?h=releng/14.0&id=5fe97373486619373e3eeecb25582b5c937a26c5

https://www.freebsd.org/releases/14.0R/relnotes/#userland-config начало:

Оболочка по умолчанию для пользователя root теперь sh(1), которая имеет много новых функций для интерактивного использования. d410b585b6f0

Оболочка, которую вы запускаете на машине FreeBSD, вероятно, не поддерживает эту последовательность команд. Однако без знания, какую оболочку вы используете на каждом из компьютеров, трудно сказать наверняка.

.

Ответ или решение

Когда сбой выполнения команды <kbd>Ctrl</kbd> + <kbd>стрелка</kbd> в терминале FreeBSD, вы сталкиваетесь с отображением последовательности ;5D, это вызвано несовпадением терминальных эмуляций или настройками оболочки, которые не поддерживают эти последовательности клавиш. В CentOS, используемом ранее вами, настройки экрана терминала, вероятно, настроены лучше, обеспечивая корректное распознавание данных команд.

Возможные решения проблемы

  1. Убедиться в корректной конфигурации оболочки.

    • Проверка оболочки FreeBSD: Как правило, по умолчанию используется csh. Однако вы можете установить bash из портов и переключиться на него:
      cd /usr/ports/shells/bash
      make install
      make clean
      chsh -s /usr/local/bin/bash
    • Использование Zsh для лучших возможностей управления клавишами:
      Добавьте конфигурацию в файл /etc/zshrc:

      case "${TERM}" in
      *xterm*)
       bindkey '\e[1;5C' forward-word  # ctrl вправо
       bindkey '\e[1;5D' backward-word # ctrl влево
       ;;
      esac
  2. Настройка файла inputrc.

    • Если вы используете bash, поместите следующую строку в ваш ~/.inputrc:
      $include /etc/inputrc

      Это поможет обеспечить поддержку системных (глобальных) настроек. Убедитесь, что системный файл /etc/inputrc также корректно настроен для обработки команд.

  3. Корректировка переменной среды TERM.

    • Проверьте значение переменной TERM, которая может влиять на поведение терминала:
      echo $TERM
    • Если значение отличается от xterm-256color, измените его командой:
      export TERM=xterm-256color
  4. Обновление оболочки для взаимодействия.

    • В последних версиях FreeBSD (например, 14.0-RELEASE) были внесены улучшения в взаимодействие с оболочкой sh. Вполне вероятно, что само локальное использование команд близко к ожидаемому, но данная настройка может зависеть от удаленного или локального использования.

Учтите, что любое изменение конфигурации системы всегда должно сопровождаться проверкой совместимости и тестированием, чтобы убедиться в достижении поставленных целей и избежать неожиданных ошибок. Производя такие настройки, вы добьетесь более грамотного и оптимального взаимодействия с терминалом в FreeBSD, ориентируясь на ваши привычки работы в Ubuntu и CentOS.

Оцените материал
Добавить комментарий

Капча загружается...