Переваги використання set -o vi


55

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

Що використовує команди bash, яку допомогу надає перемикання на vi?

Відповіді:


58

Встановивши редагування читальної лінії на emacs (за замовчуванням) або vi ( set -o vi), ви по суті стандартизуєте свої команди редагування в оболонці та редакторі за вибором 1 .

Таким чином, якщо ви хочете відредагувати команду в оболонці, ви використовуєте ті самі команди 2, що і в текстовому редакторі. Це означає, що потрібно запам’ятати один синтаксис команд і (якщо цього не було достатньо переваги), ймовірно, зробить ваше редагування в обох середовищах швидшим і менш схильним до помилок ...

Ви можете додатково використовувати цей взаємозв'язок у режимі vi-mode, витягнувши будь-яку команду з історії вашої оболонки, натиснувши Escapeна вхід в режим команд, а потім натиснувши v, що відкриє ваш $ EDITOR командою, завантаженою для більш складного редагування з повною потужністю vim. Після того, як ви закінчите редагування команди на ваше задоволення, :wqі команда виконується назад у вашій оболонці.


1. Припустимо, звичайно, що ви використовуєте Emacs або Vi / m в якості свого редактора.
2. Або, точніше, їх підмножина ...


1
Я отримав святий грааль:) ....
Сатьям

3
Трюк Esc-v - одна з найкращих особливостей, про set -o viяку більшість людей не знає. Це особливо справедливо, якщо ви хочете кілька разів видавати одну і ту ж команду з різними аргументами (як кілька команд командного рядка).
Майкл Голдштейн

2
Трюк Esc-v насправді не є перевагою, специфічною для set -o vi. У налаштуваннях за замовчуванням set -o EMACSCx, Ce відкриє вікно emacs (або те $EDITOR, якщо воно встановлено), в якому ви можете редагувати команду перед її запуском.
Джон Гоуерс

8

Режим Vi - це величезне покращення юзабіліті, якщо ви використовуєте мобільний клієнт SSH, наприклад ConnectBot для Android.

Це пов’язано зі зменшеною залежністю від клавіш-модифікаторів.

Vim набагато простіше користуватися віртуальною клавіатурою на смартфоні чи планшеті, ніж ... все інше, включаючи вбудовані способи редагування, вбудовані в інтерфейс Android. За іронією долі, простіше редагувати джерела C з Vim на сесії SSH, ніж редагувати, скажімо, миттєве повідомлення з власним віджетом для редагування платформи для цієї мети.

Режим Shell vi приносить аналогічну перевагу.


Я сподівався, що на клавіатурі мого телефону був режим vi. Ви згадуєте про це так, ніби воно вже існувало. Як отримати режим vi на телефоні?
meh

6

Це дозволяє редагувати матеріали в командному рядку, використовуючи режими vi та операції.

Приклад допоможе зробити це набагато зрозумілішим:

Ви вводите cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

але ви отримаєте помилку - ви повинні набрали file1.txtНЕfile1.xt

Без цього параметра ви натискаєте стрілку вгору, а потім натискаєте стрілку вліво і нехай вона повторюється протягом ... 35 разів, поки ви не дістанетесь до .xtі потім не наберете додатковий t. Всього натискань клавіш: 37 .

За допомогою цього набору параметрів ви можете (наприклад) один раз натиснути стрілку вгору, потім Вийти для командного режиму, 0, щоб перейти до початку рядка, а потім /xt[return]перейти до xtта, а потім ви можете iввести режим вставки та ввести відсутнє t. Це може здатися шалено складним в деяких аспектах, але якщо ви користувач vim, ці команди вже дуже добре відомі. Всього натискань клавіш: 9


1
Ви також можете використовувати декілька Alt+Bs або a Ctrl+Alt+] .в режимі Emacs, тому це не здається мені вагомим прикладом.
Мікель

2
Бачачи , як ми грати в гольф: режим Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi режим: Up, F, ., a, t, Enter= 7 :)
Мікель

@Mikel ви забули, що режим vi запускається в режимі "Вставка", щоб у вас Escтам теж було, це мертве тепло.
dragon788

5

Я не впевнений, чи є пряма перевага. Я viкористувач більше 20 років. Я також screenкористувач ще довше та інших програм, які використовують viклавіші. Мені природно, що я віддаю перевагу встановленню режиму "vi" в bash. Але я також працюю на сотнях серверів у своїй роботі, більшість налаштована на режим "emacs" за замовчуванням. Тому мені потрібно використовувати обидва режими. Але це справді лише питання переваги.


Подібна ситуація для мене - я багато використовую vim, але мені завжди здається, що я маю менше роботи, щоб стати досвідченим клавішами для зчитування, як-то за замовчуванням (що може бути так само зручно, як підмножина vi), ніж додати лінію комутації до режиму vi в кожній новій системі, з якою я стикався.
jw013

1
Я не працюю на сотнях серверів, але я використовую sshrc, щоб моє налаштування bash було подібним між різними комп’ютерами, коли sshing. Звичайно, це не допомагає, коли я локально використовую машину, на якій немає своїх .bashrcречей.
Кайл Странд

4

Основна перевага - модальне редагування вашого командного рядка. Якщо ви знайомі з Vim і вам подобається його філософія, переваги повинні бути очевидними. Якщо ви зіткнулися з цим, м’язова пам’ять вашого пальця змусить вас редагувати свої баш-команди з блискавичною швидкістю.

Примітка : Якщо ви не любите модальне редагування, вам все одно слід навчитися використовувати переваги (за замовчуванням) emacs-режиму. Ось декілька вишуканих комбінацій клавіш, які працюватимуть на будь-якому процесі readline, наприклад bash.


1

Якщо ви звикли vi, значить, ви встановите його на режим vi в якості редактора оболонок. Це була б очевидна причина. Інший - коли bashнедоступний за замовчуванням в деяких ОС (переважно UNIX, таких як AIX, Solaris), тому функція історії оболонок недоступна, тому спосіб отримання попередніх команд, встановивши редактор оболонки на vi, і Esc, Ctrl+ Kабо Ctrl+L


1

Це дозволяє вам легко переміщуватися та редагувати командний рядок за допомогою ярликів vim, наприклад, швидко перейти до одного слова праворуч, видалити слово.

За ярликами за замовчуванням, коли вам потрібно перейти до кінця рядка, ви повинні Ctrl+ e, тоді як з set -o vi, ви просто натискаєте $, як у vim.


1

Можливо, пізно на вечірку, але для мене використання режиму vi стосується більше під час створення інтерактивних скриптів .. наприклад

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

дуже простий приклад того, що може бути досить складним .. за допомогою ESCkvперетворює вас на VI сесію, де ви можете змінювати сценарій, а потім :wqі він запускається.


1
Це може бути хорошим прикладом використання bash в viрежимі, але це поганий приклад bash-коду. (1) Використання результатів з lsвхідних даних для будь-якого іншого виду обробки є поганою ідеєю. (2) $(…)Синтаксис підстановки команд вважається більш читабельним, ніж `…`синтаксис. (3) Ви завжди повинні цитувати змінні оболонки, якщо у вас немає вагомих причин цього не робити, і ви впевнені, що знаєте, що робите.
G-Man
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.