Vim в OSX: Как сделать page-up / page-down / перейти к EOL через файл vim, открытый в терминале?

28

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

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

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

TCSGrad
источник
Это может помочь прояснить ваш вопрос, если вы заменили или добавили «Fn + вправо / влево» на «Home / End», что и делают эти комбинации Fn.
Крис Пейдж

Ответы:

48

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

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

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

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

Дэн Рэй
источник
1
«Это не вопрос макинтоша, это действительно вопрос vi». В основном речь идет о том, как настроить таблицу ключей приложения Mac OS X Terminal, но оказывается, что вторая часть вопроса, о начале / конце строки, уже имеет отображение в Terminal, и одним из возможных решений является редактирование карты vi в понимать это. Кроме того, карта клавиатуры терминала может быть отредактирована.
Крис Пейдж
16

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

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

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

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

Аналогично, 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используются для начала / конца строки, поэтому Терминал предоставляет им Shiftмодификатор симметрии.)

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

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

Крис Пейдж
источник
@MarkHu Я рассказал об этом в последнем абзаце.
Крис Пейдж
Как частично рассматривается в последнем абзаце, значения по умолчанию могут быть другими / отсутствовать в других версиях MacOS. Для 10.13.6 мне пришлось добавить \033[5~(и ... 6.) Для PageDown / Up.
MarkHu
2

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

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

T.Woody
источник
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
user1442960
источник