Як показати поточний режим Vi при використанні зв’язків Vi в оболонці?


15

Я використовую вкладки vi в моїй оболонці tcsh.

Тепер я не знаю, у якому режимі я перебуваю ( insertрежим чи commandрежим), що призводить до багатьох розладів.

Хтось знає про спосіб відображення поточного режиму vi в оболонці? (включивши в підказку чи щось таке)

Відповіді:


4

Я не вірю, що є візуальний спосіб визначити, в якому режимі ви працюєте, але якщо ви трохи модифікуєте свою поведінку, це не має значення.

Якщо ви хочете перебувати в командному режимі, перед введенням команди натисніть ESC.

Якщо ви хочете перейти в режим вставки, натисніть клавішу ESC і i, перш ніж набрати вміст.

Ви в кінцевому підсумку сильно натиснете ESC, але все-таки кожен користувач VI, якого я коли-небудь зустрічав, робить це.


1
Проблема полягає в тому, що в оболонці додаткові ESC не ігноруються - коли я даю додатковий ESC, тоді введіть команду (скажімо, h для переміщення вліво), вона просто видає звуковий сигнал і нічого не робить.
sundar

2
Під «додатковою ESC», я маю в виду , натиснувши клавішу ESC , коли я вже в командному режимі - що я роблю багато , так як я не знаю , в якому режимі я перебуваю в.
Сундара - відновимо Моніка

Ви праві. Я користувався ним так довго, що навіть більше не помічаю такої поведінки. Знову найпростіша відповідь. Якщо ви натиснете ESC і h, і нічого не станеться, натисніть h ще раз. Я думаю, що це відкриває ще одне питання. Чому натискання клавіші ESC в режимі "командування" клавіш vi призводить до неправильного тлумачення наступного символу? vi сам цього не робить. Я можу набрати ESC 10 разів, і наступна команда все ще працює так, як передбачалося.
Боб Вебер

Ще одна порада, вимкніть дзвіночок. Це неймовірно дратує лише причина, яку ви описуєте - і тому, що звучить на завершенні вкладки. Існують різні способи зробити це залежно від вашого оточення.
Боб Вебер

1
Гаразд, я зараз спробую це рішення. Зображення Caps Lock до Escape спростило реалізацію цього, але я ще не звик до ESC-i для режиму вставки. Я сподіваюся, що скоро. > Якщо ви натиснете ESC і h, і нічого не станеться, натисніть h знову. Проблема в цьому полягає в тому, що це дуже засмучує і сильно порушує потік. Це зайва річ, яку я повинен думати, окрім команди, яку формую. Я віддаю перевагу клавіатурним зв’язкам vi з тієї причини, що вони в моїй м’язовій пам'яті і дають ще одне менше, щоб не замислюватися - такий вид перерв, що сам по собі ...
sundar - Відновіть Моніку

3

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

Я думаю, що є спосіб це зробити, але це надмірна надмірність для крихітного роздратування, і я не думаю, що це ви мали на увазі, коли ставили це питання. Якщо це правда, перестаньте читати зараз і насолоджуйтесь своїм життям.

ОТО, якщо це справді ваш вихованець, і це зводить вас з розуму, і ви насправді абсолютно відчайдушно хочете зіткнути цю проблему, ось моя ідея, як це зробити:

  1. Отримайте копію розширеного програмування в середовищі UNIX (R) від W. Richard Stevens.
  2. Прочитайте глави про потоки та введення / виведення терміналу.
  3. Завантажте вихідний код у вищезгадану книгу, яка містить приклад потоку, який може бути нанесений на термінал.
  4. Реалізуйте комбінацію клавіш Esc (або обидва режими зміни клавіш) та вкажіть це за допомогою дзвоника або фонової маніпуляції поточного рядка.

Якщо коротко, Unix реалізує термінал вводу / виводу як повнодуплексний потік вводу / виводу між драйвером пристрою та користувацьким процесом, в який можна вставити модулі. Він організований у вигляді стека, тому ви можете прошаркувати стільки потоків, скільки захочете. Сума введених потоків створює вашу термінальну поведінку вводу / виводу.

Коли символ введений, перший модуль отримує його для огляду та передачі (якщо він хоче). Коли відповідь надходить у зворотному напрямку, вона знову отримує шанс перевірити та передати її. Ось так Ctrl-C отримує обробку на більш високому рівні до звичайної символьної клавіші.

Ви можете створити двійковий модуль, що реалізує модуль потоку, який при виклику працює безшумно на передньому плані, перевіряючи та передаючи всі натискання клавіш, виконуючи бажану дію на важливих вам натисканнях клавіш. Для всіх намірів і цілей це виглядатиме так, ніби ви працюєте над оболонкою. Ооо. Ви можете викликати цей двійковий файл в останньому (або першому чи будь-якому) рядку .tcshrc, і ви навіть не знаєте, що він є.

Там хороший праймер тут , але я не міг знайти багато на цю тему, напевно , тому , що повз його прем'єр.


2

На цій сторінці є досить детальний сценарій, який встановлює те, що ви хочете (і більше) в zsh . Можливо, це можна було б пристосувати для роботи з tcsh (я не дуже страшно знайомий з цією оболонкою).


Я також не знайомий з tcsh, але я думаю, що на сторінці, яку ви показали, використовуються віджети zsh (з zle). Я не думаю, що в інших снарядів цього немає, але якщо вони будуть, це безумовно зробить трюк.
BrianH

1

Для всіх, хто має таку точну проблему (як я): я знайшов рішення в stackoverflow . Мабуть, існує підтримка цього в рядку перегляду, тому ви можете просто додати наступне до свого ~/.inputrc:

set show-mode-in-prompt on

І щоб налаштувати фактичне використання символів:

set vi-ins-mode-string "custom-ins"
set vi-cmd-mode-string "custom-cmd"

0

Редагування командного рядка за допомогою tcsh

Існує два основні режими редагування командного рядка,
засновані на двох найпоширеніших текстових редакторах, Emacs та vi.

За допомогою прив'язки vi потрібно переходити між режимами вставки та команд ;
в кожному режимі корисні різні команди.

vi режим має два підмоду, режим вставки та команди .

  • Режим за замовчуванням вставлений .
  • Ви можете перемикатися між режимами, натискаючиEsc .
  • Крім того, у командному режимі
    введення "a" (додавання) або "i" (вставка) поверне вас до режиму вставки
    .

Більше приміток на сторінці tcshналаштування, вже пов’язаної вище.


2
Ваші посилання переходять на захищені авторським правом книги O'Reilly ...
BrianH

0

У мене була така ж точна проблема і випадково знайшли рішення. Хоча цей потік старий, я не зміг знайти жодного іншого веб-сайту, який би запропонував рішення, тому я вважаю, що розміщення в цій темі нормально.

Просто скиньте налаштування своєї термінальної програми або оболонки. Зараз я використовую PuTTY, і я просто видалив збережені налаштування для збереженого з'єднання та відтворив збережений сеанс. Працював як шарм.

Сподіваюся, це допомагає!


0

Будь ласка, дивіться мою відповідь на ТАК . Bash 4.4 / Readline 7.0 додасть підтримку цієї функціональності, і тим часом я опублікував патч-версії Bash 4.3 / Readline 6.3 до github .

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