25

В putty, как я в основном использовал VIM, я мог бы сделать следующее:

  • Страница вверх / вниз: с помощью родной страницы вверх / вниз. В Mac альтернативой является Fn + Up / Down, которая не работает в терминале (не прокручивает файл vim, но прокручивает буфер терминала)
  • Аналогично, клавиши Fn + вправо / влево не выводят меня на начало / конец строки

Как мне эмулировать эту функциональность в Mac OS X?

4 ответа4

43

Это не вопрос макинтоша, это вопрос vi.

В режиме навигации ctrl-f прокручивает страницу вниз, а ctrl-b прокручивает страницу вверх (например, "F" или "B"). Ctrl-d прокручивает до половины страницы, а ctrl-u прокручивает до половины страницы.

^ переводит вас в начало строки, а $ в конец. Я знаю, я знаю, но для этого есть исторические причины.

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

14

Карта настроек терминала по умолчанию Shift - Page Up и Shift - Page Down для последовательностей символов, которые говорят программам, таким как Vim и Emacs, прокручивать (ESC [ 5 ~ и ESC [ 6 ~)).

Если вы хотите, чтобы эти клавиши отправляли последовательности символов на терминал без модификатора Shift , вы можете настроить карту клавиатуры:

Терминал> Настройки> Настройки> [профиль]> Клавиатура

Если вы сделаете это, я рекомендую инвертировать значение модификатора Shift для этих клавиш, поменяв местами отображения для сдвинутых и несмещенных клавиш, чтобы альтернативные варианты поведения все еще были доступны. Также см. Меню « Вид» , в котором содержатся команды прокрутки, использующие модификатор « Команды» , поэтому они доступны независимо от карты клавиатуры терминала.

Аналогично, Shift - Home и Shift - End отображаются для перемещения в начало / конец текущей строки (ESC [ H и ESC [ F). Эти последовательности понятны для Bash, но вам, возможно, придется настроить Vim для их понимания или отредактировать сопоставления специально для Vim. Vim, Emacs и некоторые другие программы отправляют управляющую последовательность, чтобы перевести терминал в «Режим курсора приложения», где клавиши Home / End отправляют ESC O H и ESC O F , но Terminal (по состоянию на 10.9) не реализует это поведение. Поэтому вы можете изменить карту клавиатуры, чтобы вместо этого отправлять эти другие коды (Bash также понимает их). (В других ОС Home и End используются для начала / конца строки, поэтому Terminal предоставляет им модификатор Shift для симметрии.)

Control - Стрелка влево и Control - Стрелка вправо также отображаются по умолчанию для последовательностей «переход к началу / концу строки», хотя они отличаются от тех, которые отображаются на Shift - Home и Shift - End. Вместо этого они сопоставляются с Emacs- и Bash-совместимыми последовательностями ESC [ 5 D и ESC [ 5 C Предполагая, что они не используются Vim, самый простой подход - настроить Vim для их принятия, используя ~ / .vimrc.

Обратите внимание, что в более поздних версиях macOS Terminal больше не имеет явных сопоставлений для Home и End в настройках по умолчанию. Вместо этого он имеет динамическое поведение, когда ключи автоматически отображаются на начало / конец строки, когда активен альтернативный экран - например, при использовании полноэкранного приложения, такого как emacs, vim, screen или tmux. При использовании линейно-ориентированной программы, такой как оболочка, на главном экране, они продолжают прокручивать вид терминала по умолчанию. Модификатор Shift инвертирует поведение.

2

Самое простое и лучшее решение - это n+ , где n - это количество строк, на которые вы хотите перейти, а - клавиша «вниз».

Я регулярно просто делаю 12+ и 22+ .

1

Я привык к Home/End, приводя меня к началу и концу строк в режиме вставки (от использования в Windows и, я думаю, в Linux), который Mac не поддерживает. Это особенно раздражает, потому что когда я использую vim в удаленной системе, я также не могу легко это сделать. После некоторых мучительных проб и ошибок я придумал несколько строк .vimrc которые делают то же самое, и в конце концов нашел кого-то еще, кто придумал подобное решение здесь:

https://coderwall.com/p/fd_bea

Наслаждаться.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .