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

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

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

теперь в vi

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

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

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

выход vi

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

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

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

  • Можно ли нажать Shift-k и открыть руководство для команды в Bash?
  • vim избегать выбора подчеркивания
  • Запустить vi на последней строке
  • Как поместить текущую строку вверху / центру / внизу экрана в vim?
  • vi - как добавить определенные символы в конце строки
  • backspace в режиме вставки, не стирая символы
  • При запуске выделите теги и теги отображения в окне предварительного просмотра
  • vi: переместить строку на 4 байта
  • 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 - лучшая ОС в мире.