Я видел много разработчиков, использующих эту команду для установки опции на vi. Я никогда не понимал, реальное использование этого?
Какую помощь дает переход к vi при использовании команд bash?
Я видел много разработчиков, использующих эту команду для установки опции на 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 или a Ctrl+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 больше подходит для создания интерактивных сценариев .. например
for i in `ls | grep -v gz`
do
echo $i
gzip $i
done
очень простой пример того, что может быть довольно сложным ... использование ESCkvпомещает вас в сеанс vi, где вы можете изменить скрипт, а затем :wq
он запускается.
vi
режиме, но это плохой пример кода bash. (1) Использование вывода из ls
в качестве ввода для любого другого вида обработки - плохая идея. (2) $(…)
Синтаксис для подстановки команд считается более читабельным, чем `…`
синтаксис. (3) Вы должны всегда заключать в кавычки переменные оболочки, если у вас нет веских причин не делать этого, и вы уверены, что знаете, что делаете.