Я видел много разработчиков, использующих эту команду для установки опции на vi. Я никогда не понимал, реальное использование этого?
Какую помощь дает переход к vi при использовании команд bash?
Установив для редактирования readline либо emacs (по умолчанию), либо vi ( set -o vi
), вы по существу стандартизируете свои команды редактирования для всей оболочки и вашего редактора выбора 1 .
Таким образом, если вы хотите редактировать команду в оболочке, вы используете те же команды 2 , что и в текстовом редакторе. Это означает, что нужно помнить только один командный синтаксис и (если бы этого было недостаточно) могло бы сделать ваше редактирование в обеих средах более быстрым и менее подверженным ошибкам ...
Вы можете дополнительно использовать это отношение в режиме vi, вытащив любую команду из истории оболочки, нажав кнопку Escapeвхода в командный режим, а затем нажав кнопку v, после чего откроется ваш $ EDITOR с командой, загруженной для более сложного редактирования с полной мощью vim. Как только вы закончите редактирование команды к вашему удовлетворению, :wqи команда будет выполнена обратно в вашей оболочке.
1. Предполагая, конечно, что вы используете Emacs или Vi / m в качестве редактора.
2. Или, точнее, его подмножество ...
set -o vi
которых большинство людей не знают. Это особенно верно, если вы хотите выполнить одну и ту же команду несколько раз с разными аргументами (как несколько команд командной строки).set -o vi
. При настройке по умолчаниюset -o EMACS
Cx, Ce откроет окно emacs (или$EDITOR
, если установлено), в котором вы можете отредактировать команду перед ее выполнением.Режим Vi - огромное улучшение юзабилити, если вы используете мобильный SSH-клиент, такой как ConnectBot для Android.
Это связано с уменьшенной зависимостью от клавиш-модификаторов.
Vim гораздо проще использовать с виртуальной клавиатурой на смартфоне или планшете, чем ... все остальное, включая собственные методы редактирования, встроенные в пользовательский интерфейс Android. По иронии судьбы, проще редактировать источники C с помощью Vim в сеансе SSH, чем редактировать, скажем, мгновенное сообщение с собственным виджетом редактирования платформы для этой цели.
Режим Shell VI приносит аналогичное преимущество.
источник
Это позволяет редактировать вещи в командной строке, используя режимы и операции 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источник
Alt+B
s или aCtrl+Alt+]
.
в режиме Emacs, так что это не кажется мне хорошим примером.Up
,Ctrl+Alt+]
,.
,Right
,t
,Enter
= 8. Vi режим:Up
,F
,.
,a
,t
,Enter
= 7 :)Esc
там, это просто жара.Я не уверен, есть ли прямое преимущество. Я был
vi
пользователем более 20 лет. Я такжеscreen
пользователь еще дольше и других программ, которые используютvi
ключи. Для меня естественно предпочесть установить режим "vi" в bash. Но я также работаю на сотнях серверов в моей работе, большинство из которых настроены на режим по умолчанию "emacs". Поэтому мне нужно использовать оба режима. Но это действительно просто вопрос предпочтений.источник
ssh
. Конечно, это не помогает, когда я использую машину локально, на которой нет моих.bashrc
вещей.Основным преимуществом является модальное редактирование вашей командной строки. Если вы знакомы с Vim и любите его философию, преимущества должны быть очевидны. Если у вас есть опыт, мышечная память вашего пальца заставит вас редактировать ваши команды bash с молниеносной скоростью.
NB : Если вам не нравится модальное редактирование, вы все равно должны научиться пользоваться преимуществами emacs-режима (по умолчанию). Вот некоторые изящные сочетания клавиш, которые будут работать с любым процессом
readline
, напримерbash
.источник
Если вы привыкли
vi
, значит, вы установили его в режим vi в качестве редактора оболочки. Это было бы очевидной причиной. Другой случай, когдаbash
по умолчанию недоступно в некоторых ОС (в основном UNIX, таких как AIX, Solaris), поэтому функция истории оболочки недоступна, поэтому вы можете получить предыдущие команды, установив для редактора оболочки значенияvi
, и Esc, Ctrl+ Kили Ctrl+Lисточник
Он может позволить вам легко перемещаться и редактировать командную строку с помощью ярлыков vim, например, быстро перемещаться на одно слово вправо, удалять слово.
По умолчанию ярлыки, когда вам нужно перейти к концу строки, вам нужно Ctrl+ e, тогда как
set -o vi
, вы просто нажали$
, как в vim.источник
Возможно, опоздал на вечеринку, но для меня использование режима vi больше подходит для создания интерактивных сценариев .. например
очень простой пример того, что может быть довольно сложным ... использование ESCkvпомещает вас в сеанс vi, где вы можете изменить скрипт, а затем
:wq
он запускается.источник
vi
режиме, но это плохой пример кода bash. (1) Использование вывода изls
в качестве ввода для любого другого вида обработки - плохая идея. (2)$(…)
Синтаксис для подстановки команд считается более читабельным, чем`…`
синтаксис. (3) Вы должны всегда заключать в кавычки переменные оболочки, если у вас нет веских причин не делать этого, и вы уверены, что знаете, что делаете.