![Использование клавиш VI для редактирования команд оболочки в UNIX](https://rvso.com/image/23944/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BA%D0%BB%D0%B0%D0%B2%D0%B8%D1%88%20VI%20%D0%B4%D0%BB%D1%8F%20%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%20%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8%20%D0%B2%20UNIX.png)
У меня был коллега, который очень хорошо разбирался в 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 привязаны по умолчанию. Привяжите их так, как считаете нужным, и вы готовы к гонкам.