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


28

У шпаклівці, якою я в основному користувався VIM, я міг зробити наступне:

  • Сторінка вгору / вниз: Використання нативної клавіші вгору / вниз сторінки. У Mac альтернативою є Fn + Вгору / Вниз, яка не працює в терміналі (не прокручується всередині файлу vim, але прокручує термінальний буфер)
  • Точно так само клавіші Fn + вправо / вліво не приймають мене до початку / кінця рядка

Як я імітую цю функціональність у Mac OS X?


Це може допомогти з'ясувати ваше запитання, якщо ви замінили або доповнили "Fn + право / ліво" на "Головна / Кінець", що і роблять ці комбінації Fn.
Кріс Пейдж

Відповіді:


48

Це конкретно не питання Mac, це справді питання vi.

У режимі навігації ctrl-f прокручує сторінку вниз, а ctrl-b прокручує сторінку вгору (подумайте «F» вперед і «B» ack). Ctrl-d прокручує половину сторінки, а ctrl-u прокручує половину сторінки.

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

Ось справді хороший чіт-лист про управління vi. vi - трохи таємничий, але як тільки ви його інтерналізуєте, це найшвидший і найкрутіший текстовий редактор у світі.


1
"Це конкретно не питання Mac, це справді питання vi." Йдеться головним чином про те, як налаштувати ключову карту програми Mac OS X 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 та деякі інші програми надсилають послідовність виходу, щоб перевести термінал у "Режим курсору додатків", куди надсилаються ESC O Hі клавіші Home / End ESC O F, але Термінал (станом на 10.9) не реалізує цю поведінку. Тому ви можете змінити карту клавіатури, щоб надіслати ці інші коди (Bash також їх розуміє). (На інших ОС Homeі Endвикористовуються для початку / кінця рядка, тому Terminal надає їм 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+ .


1

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

https://coderwall.com/p/fd_bea

Насолоджуйтесь.

:inoremap <C-e> <C-o>$
:inoremap <C-a> <C-o>0
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.