Использование клавиш VI для редактирования команд оболочки в UNIX

Раньше у меня был сотрудник, который действительно хорошо разбирался в UNIX.

Он показал мне, как использовать привязки клавиш Vi для редактирования моих команд оболочки.

Он поместил команду в файл, который запускался каждый раз, когда я вошел в систему.

С тех пор я перешел на другой проект.

К сожалению, я не помню, как это сделать.

Есть ли кто-нибудь, кто знает, как использовать привязки ключей Vi для редактирования команд в терминале?

Как я могу сделать эту настройку постоянной?

6 Solutions collect form web for “Использование клавиш VI для редактирования команд оболочки в UNIX”

Вы говорите о величайшей особенности когда-либо!

Вы можете использовать команды vi для редактирования команд оболочки (и истории команд), добавив это в ваш .bashrc файл:

set -o vi

Вы также можете запустить эту команду из командной строки, чтобы повлиять только на текущий сеанс.

Если вы не используете bash, замените соответствующий rc-файл для вашей оболочки.


Это позволяет вам использовать команды vi для редактирования любой команды …

Вы также можете использовать j и k для перемещения по вашей истории (после нажатия ESC ).

Вы также можете использовать / (после нажатия ESC ) для поиска старых команд.

Другими словами, чтобы найти команду cp вы сделали десять минут назад:

ESC / cp ENTER

Затем вы можете перебирать все соответствующие команды в своей истории с n и N.

Все это делает меня в 10 триллионов раз более продуктивным в командной строке!

Если вы используете bash, поскольку jahroy и evil otto уже ответили, вы можете использовать

 set -o vi 

чтобы заставить bash использовать команды редактирования vi-стиля.

Как только вы это сделаете, вы можете ввести Esc v, чтобы запустить редактор vi с временным файлом, содержащим копию текущей командной строки. Вы можете отредактировать команду, даже заменив ее несколькими строками; при сохранении файла ( :wq ) оболочка будет выполнять отредактированные команды.

Если вы предпочитаете

 set -o emacs 

вы можете использовать Ctl-X Ctl-E, чтобы сделать то же самое. Он будет использовать ваш предпочтительный редактор $EDITOR , не обязательно emacs.

(Лично я использую vi (фактически vim) для большей части моего редактирования, но я предпочитаю set -o emacs в оболочке, включение и выход из режима вставки отлично подходит для редактирования файлов, но неудобно для интерактивных команд. YMMV.)

Вы можете использовать set -o vi для изменения ваших команд редактирования строк, поскольку @jahroy опубликован, но вы можете подумать о команде fc (доступной в bash, и я думаю, что ksh, но, вероятно, не tcsh), которая поместит предыдущую команду в (FCEDIT или EDITOR, который вы, вероятно, установили в vi), а затем выполняет команду при выходе из редактора. Для получения подробной информации см. Справочную страницу или help fc или просто попробуйте.

Чтобы отредактировать последнюю используемую команду в vim и вызвать отредактированную версию после сохранения и выхода редактора, используйте встроенную оболочку fc . Без каких-либо аргументов он будет делать следующее:

  1. Создает временный файл в /tmp и заполняет его самой последней введенной командой
  2. После того как редактор обычно выходит (с кодом выхода 0), он выполняет команду, найденную в этом временном файле, и удаляет этот файл. Отредактированная версия сохраняется в истории как обычная команда (по крайней мере, в zsh). Он ничего не выполняет, если редактор выходит с кодом, отличным от нуля (в vim это может быть достигнуто путем либо его уничтожения, либо использования :cquit ).

Команда работает как в bash, так и в zsh.

Действительно, это на самом деле самая большая особенность. Есть еще что:

Создайте файл с именем

 .editrc 

содержащий линию

 bind -v 

Editline – это библиотека лицензированных версий BSD, которая предоставляет услуги, подобные readline. Этот .editrc установит ваши привязки клавиш в режим vi в командной строке командной строки MySQL или любое приложение, которое не использует readline.

С годами я немного забыл, поэтому мой .zshrc источает некоторые обертки для режима vi, чтобы показать мне, в каком режиме я нахожусь в командной строке. Мило.

Я знаю, в zsh вы можете ввести

 bindkey -L 

и получить список ключевых привязок. Я уверен, что у bash должно быть что-то похожее. Не все ключи vi связаны по умолчанию. Привяжите их, как вы сочтете нужным, и вы отправитесь на гонки.

в вашем терминале введите export EDITOR=vi .

Чтобы сохранить этот параметр. поместите эту строку в файл ~ / .profile

  • Визовый режим Vim - есть ли способ изменить цвет фона только в визуальном режиме?
  • Как написать работоспособный .vimrc для vim & vi в Red Hat 6?
  • Избегайте переформатирования списков пули с форматированием + = a
  • Вставить «return 0» между всеми фигурными скобками в файле?
  • Как я могу идти вперед в файле? Что такое oposite ctrl + O
  • Как повторно запустить автоиндексирование vim в файле tex?
  • Отступ середины нескольких строк
  • Как я могу вставить что-то в VIM из буфера обмена
  • Nano vs Vim или Vi
  • Маркеры и макросы Vim
  • Как отключить постоянное выделение всех фигурных скобок (а не только пар) в vim
  • Linux и Unix - лучшая ОС в мире.