Как сделать так, чтобы терминал xfce4 прокручивался при нажатии shift-pgup/pgdown в vim.

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

После недавнего обновления Ubuntu поведение при использовании vim внутри xfce4-terminal изменилось. Горячие клавиши “Shift+Page Up” и “Shift+Page Down” в xfce4-terminal сопоставлены с “Прокрутка одной страницы вверх” и “Прокрутка одной страницы вниз” соответственно, т.е. они эмулируют поведение, характерное для UNIX-терминалов на протяжении десятилетий.

К сожалению, как только я запускаю vim в терминале, кажется, что эти клавиши больше не работают, так как они не прокручивают обратно терминал к содержимому, которое было до запуска vim. При использовании xterm вместо xfce4-terminal все работает как ожидается. Существует ли какой-либо настройка, которая позволит мне восстановить старое поведение UNIX и избежать различного поведения терминала в зависимости от того, что в данный момент выполняется в оболочке?

Версия xfce4-terminal — 1.1.3, версия vim — 9.1.

Терминалы имеют два экрана: обычный экран и альтернативный экран.

Обычный экран — это то место, где вы обычно взаимодействуете с оболочкой, запускаете утилиты, которые не занимают весь экран. У него есть буфер прокрутки.

Альтернативный экран — это место, на которое обычно, но не обязательно, переключаются утилиты, занимающие весь экран (например, текстовые редакторы). Альтернативный экран не имеет буфера прокрутки.

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

VTE, интерфейс эмуляции терминала, лежащий в основе Xfce Terminal, уже более десяти лет имеет одинаковое поведение, и это поведение недавно не изменялось: если находитесь на обычном экране, то указанные клавиши прокручивают буфер, если находитесь на альтернативном экране, то приложение внутри получает указанные нажатия клавиш, чтобы делать все что угодно с этим.

Возможно, хотя я нахожу это крайне маловероятным, что Xfce Terminal каким-то образом пытается перехватить это нажатие клавиш и сделать что-то “умное”, и эта логика недавно изменилась. Я нахожу гораздо более вероятным, что ваша конфигурация Vim изменилась: теперь она переключается на альтернативный экран, в то время как вы предпочли бы, чтобы этого не делалось. Проверьте, действительно ли ваш Vim переключается на альтернативный экран (предыдущее содержимое терминала восстанавливается при выходе), и отключите это в конфигурации Vim, если это именно то, что вы ищете. В сети можно найти множество результатов поиска для “Vim” “обычный экран” “альтернативный экран” или ключевые слова в этом роде, я нахожу бессмысленным повторять решение здесь.


(Как небольшое замечание, позвольте мне упомянуть, что могут быть незначительные различия между эмуляторами терминала. Например, Xfce Terminal (VTE), находясь на альтернативном экране, вообще не дает вам доступа к буферу прокрутки обычного экрана. Соответственно, полоса прокрутки занимает всю высоту своего слота, как будто вы не можете ничего прокручивать. В отличие от этого, Xterm позволяет вам прокручивать назад в буфер прокрутки обычного экрана, пока вы находитесь на альтернативном экране. Это нельзя сделать с использованием упомянутых горячих клавиш, так как они отправляются в приложение (как и в VTE), но это можно сделать, перетаскивая полосу прокрутки с помощью мыши.)

Я часто сталкиваюсь с такой ситуацией: я запускаю команду, и она выдает много “вещей”.

Вместо того чтобы редактировать в этом терминале, я просто открываю новый и редактирую в нем.

Один из способов — через меню. Я могу открыть его в различных местах/размерах. Если это находится в “странном” месте, я запускаю локальный скрипт, который называю ‘kt’, и он связан с gt и xt.


#!/usr/bin/perl
#
# SCCS ID    : @(#) Not in SCCS
# xt или kt 
#   --geometry=120x40-90+230
#     120 столбцов
#      40 строк
#      90 пикселей от правого края
#     230 пикселей от верха
#    --zoom=1   Увеличивает размер в 1,2 раза (допустимы от 1 до 7)
#    --color-text=black  Допустимые цвета Одно слово
#    --color-bg=white  Допустимые цвета Одно слово
#    --font=10   Размер шрифта в пунктах
#
$XCOLS = $ENV{'XCOLS'};

if ( $XCOLS > 0 ) {

  $XLINES = $ENV{'XLINES'};
  $arg = "--geometry=${XCOLS}x$XLINES";
}

foreach $a ( @ARGV ) {

  if ( -x $a ) {

    $ex = " --execute $a";

  } else {

    $arg = $arg . " $a";
  }
}

# Цвета и шрифт могут быть переопределены из входящего ввода.

`/usr/bin/xfce4-terminal --color-text=black --color-bg=white --font 10 --hide-menubar  $arg $ex&`;

.

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

Чтобы решить проблему с использованием "Shift+Page Up" и "Shift+Page Down" в vim внутри xfce4-terminal, необходимо понимать тонкости работы терминалов. При недавнем обновлении Ubuntu вероятно изменилась конфигурация, что повлияло на указанное поведение.

Фон проблемы

Терминалы содержат два экрана: нормальный и альтернативный.

  • Нормальный экран: работает со стандартным представлением оболочки и имеет буфер для прокрутки.
  • Альтернативный экран: используется полноэкранными приложениями, такими как vim. Он не имеет буфера прокрутки.

Когда вы запускаете vim, он, вероятно, переключается на альтернативный экран. Поэтому, когда вы используете "Shift+Page Up" или "Shift+Page Down", управление передается непосредственно приложению vim, и эти сочетания клавиш не прокручивают содержимое терминала, как это происходит в обычном режиме.

Решение проблемы

  1. Проверка и изменение конфигурации vim:

    • Убедитесь, что vim не переключается на альтернативный экран. Проверьте файл конфигурации .vimrc на наличие параметров, ответственных за смену экрана, и настройте их по мере необходимости.
  2. Изменение поведения терминала:

    • Если изменение конфигурации vim по каким-то причинам невозможно или нежелательно, рассмотрите возможность использования другого терминального эмулятора, например, xterm, который лучше управляет прокруткой даже в альтернативном экране.
  3. Использование сочетаний клавиш для vim:

    • В vim существуют встроенные сочетания клавиш для навигации, такие как "Ctrl+U" и "Ctrl+D" для прокрутки вверх и вниз соответственно. Они могут служить эффективной заменой.
  4. Скрипты для автоматизации:

    • В случае, если часто требуется открыть новую сессию для редактирования, рассмотрите автоматизацию с помощью скриптов, как это описано в примере кода на Perl. Это не решает проблему напрямую, но предлагает альтернативный подход для управления рабочими пространствами.

Заключение

Понимание различий между экранами в терминалах и корректная настройка их поведения в сочетании с возможностями vim позволяют вернуть ожидаемое поведение вам при работе с xfce4-terminal. Эти шаги помогут восстановить традиционный рабочий процесс и более эффективно управлять окнами терминалов.

Оптимизация SEO

Для более широкого охвата проблемы и возможных решений включите ключевые слова, такие как "настройка xfce4-terminal", "vim конфигурация", "альтернативный экран", и "сочетания клавиш в vim", что улучшит видимость на специализированных форумах и блогах.

На этом фоне, предложение воспользоваться альтернативным терминалом или решить ситуацию через vim остается на усмотрение пользователя, учитывая его предпочтения и особенности рабочего процесса.

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

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