Преимущества использования set -o vi


55

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

Какую помощь дает переход к vi при использовании команд bash?

Ответы:


58

Установив для редактирования readline либо emacs (по умолчанию), либо vi ( set -o vi), вы по существу стандартизируете свои команды редактирования для всей оболочки и вашего редактора выбора 1 .

Таким образом, если вы хотите редактировать команду в оболочке, вы используете те же команды 2 , что и в текстовом редакторе. Это означает, что нужно помнить только один командный синтаксис и (если бы этого было недостаточно) могло бы сделать ваше редактирование в обеих средах более быстрым и менее подверженным ошибкам ...

Вы можете дополнительно использовать это отношение в режиме vi, вытащив любую команду из истории оболочки, нажав кнопку 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 на моем телефоне?
Мех

6

Это позволяет редактировать вещи в командной строке, используя режимы и операции vi.

Пример поможет сделать это намного понятнее:

Вы печатаете cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

но вы получаете ошибку - вы должны были набрать file1.txtнеfile1.xt

Если этот параметр не установлен, вы нажимаете стрелку вверх, а затем нажимаете стрелку влево и позволяете ей повторяться ... 35 раз, пока не дойдете до, .xtа затем не наберете лишнее t. Всего нажатий клавиш: 37 .

С этой установленной опцией вы можете (например) нажать стрелку вверх один раз, затем Escape для командного режима, 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, но я всегда находил, что для освоения стандартных emacs-подобных клавиш readline (которые могут быть такими же удобными, как подмножество vi) меньше работы, чем для добавления переключения строк в режиме vi на каждой новой системе, с которой я сталкиваюсь.
jw013

1
Я не работаю на сотнях серверов, но я использую sshrc, чтобы сохранить одинаковую настройку bash на разных компьютерах ssh. Конечно, это не помогает, когда я использую машину локально, на которой нет моих .bashrcвещей.
Кайл Стрэнд

4

Основным преимуществом является модальное редактирование вашей командной строки. Если вы знакомы с Vim и любите его философию, преимущества должны быть очевидны. Если у вас есть опыт, мышечная память вашего пальца заставит вас редактировать ваши команды bash с молниеносной скоростью.

NB : Если вам не нравится модальное редактирование, вы все равно должны научиться пользоваться преимуществами 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.