Как я могу использовать vi для редактирования строки подсказки утилиты?

Я написал утилиту в bash, которая использует read -e чтобы предоставить запрос для запросов, подобных sql. Иногда они длинные, поэтому я хочу иметь возможность открывать vi, редактировать текущую строку и после выхода заменить строку содержимым в vim. Я читал строки с read . Что-то вроде:

 query> select .... from .... very long... <ctrl-e> 

теперь в vi

  • Что быстрее - сценарии C или оболочки - и почему?
  • vi для добавления пустой строки?
  • Диапазон значений grep (/ sed / awk)
  • Bash - ненулевые аргументы для оператора (массив)
  • Когда нужно использовать полуточку между переменными окружения и командой
  • Как установить количество напоминаний истории команд
  •  select .... from .... very long... 

    редактировать

     select ... from .... very long ... 

    выход vi

     query> select ... from .... very long ... <enter> 

    выполняется запрос.

    UPDATE: использование «set -o vi» до того, как «read -e», похоже, станет для меня способом, но в настоящее время, когда я нажимаю <esc>v в открывшемся буфере не содержится то, что находится в строке, но какой-то другой запрос , из моей истории (но не той, которую я набрал раньше).

  • Bash: ожидаемое целочисленное выражение, используя read / test
  • Почему удаление файлов по названию мучительно медленное, а также исключительно быстрое?
  • Невозможно остановить bash, чтобы развернуть звезду (символ подстановки), переданный в приложение из shellscript
  • Переключить пользователя в сценарий оболочки без ввода пароля
  • login shell (bash) - как мы вызываем оболочку входа
  • chmod не работает на Mac
  • 3 Solutions collect form web for “Как я могу использовать vi для редактирования строки подсказки утилиты?”

    Сначала вам нужно использовать vi как редактор командной строки оболочки:

     set -o vi 

    Теперь вы можете ввести / скопировать команду в командную строку. Чтобы выйти из режима вставки и войти в обычный режим, используйте Esc или Shift + Tab . Теперь вы можете открыть vi , нажав v .

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

    В bash вы можете вызвать редактор для текущей командной строки, используя Ctrl + x , Ctrl + e .

    В системе, которую я должен передать, это не в документах под man readline , но находится в man bash разделе «readline», поэтому я не уверен, что это функция, специфичная для bash, или если другая readline основанные на нем программы.

    Вот документация из bash:

    edit-and-execute-command ( C-xC-e )

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

    Пока ваше приглашение представляет собой приглашение оболочки (например, вызов для read ), все остальные ответы действительны и полезны

    Если это не так (вы не совсем понятны в этом отношении), например, когда вы используете интерпретатор SQL xxxsql вы можете использовать rlwrap --multi-line -a xxxsql а затем использовать специальный (настраиваемый) ключ для вызова редактора по вашему выбору (указанный, например, export RLWRAP_EDITOR="vim '+call cursor(%L,%C)" на входе – call_cursor полезен для сохранения позиции курсора при вызове vim )

    В качестве дополнительного перка у вас будет полная история команд даже для многострочных команд (которые «сжимаются» в однострочные, прежде чем они будут помещены в список истории, но будут снова расширены при повторном использовании)

    edit: дополнительную информацию можно найти на странице rlwraps Github . Как и все команды, которые используют библиотеку readline GNU, большая часть ее поведения указана в пользователях $INPUTRC к которым rlwrap добавила несколько своих собственных опций, которые, помимо прочего, управляют вышеупомянутым специальным ключом для вызова внешнего редактора ( CTRL + ^ по умолчанию)

    Linux и Unix - лучшая ОС в мире.