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

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

У меня был коллега, который очень хорошо разбирался в UNIX.

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

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

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

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

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

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

решение1

Вы говорите о величайшей функции из когда-либо существовавших!

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

set -o vi

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

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


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

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

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

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

ESC/срENTER

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

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

решение2

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

set -o vi

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

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

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

set -o emacs

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

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

решение3

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

решение4

На самом деле, это на самом деле самая лучшая функция из всех. Но есть и еще кое-что:

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

.editrc

содержащий строку

bind -v

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

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

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

bindkey -L

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

Связанный контент