В большинстве установок Linux (все те, которые я тестировал) bash распознает ключи истории команд Emacs и Vi (или вы можете использовать "set -o vi"
для принудительной установки).
Итак, вы можете просто использовать vi-mode "<ESC>v"
для входа в визуальный режим, это начнёт редактирование в сеансе Vim.
Для запуска команды вы просто сохраняете и выходите из Vim ("ZZ"
или ":wq"
). Чтобы отменить команду, вам нужно удалить содержимое, сохранить и выйти ("1GdGZZ"
).
В дополнение к запуску через выход вы также можете сохранить его в редакторе в другом месте (":w /tmp/myscript"
).
Имейте в виду, что визуальный режим будет работать с выбранной в данный момент строкой, поэтому вам не нужно начинать с пустой команды ("<ESC>v"
). Вы можете использовать обычные инструменты vi-mode, чтобы сначала выбрать строку из истории, а , а затем войти в визуальный режим ("<ESC>kv"
для последней команды, "<ESC>/grep<ENTER>nnv"
для третьей-последней команды grep и т. Д.).
Преимущество этого метода состоит в том, что вы не меняете переменную "EDITOR"
, которая может использоваться для других целей (если только вы не хотите, чтобы Vim для все , что является очень разумной позицией для принятия IMNSHO).
Обновление:
По поводу вашей ошибки, выложил после вопроса:
JumpToLastPosition()
- это функция, вызываемая Vim для всех файлов, чтобы поместить курсор туда, где он был при последнем редактировании файла. Я предполагаю, что вы на самом деле получаете эту ошибку при запуске редактирования, а не при выходе, поскольку это автоматическая функция после чтения из буфера.
Можете ли вы запустить "обычный" сеанс vim ("vim xx.txt"
, а затем "vim xx"
) без возникновения этой ошибки? Вы можете столкнуться с той же проблемой (и, возможно, только с последней).
Если у вас возникла такая же проблема, вам нужно посмотреть файлы запуска. Возможно, autocmd для BufRead как-то сломан. Загляните в свои файлы vimrc и ваши файлы filetype.vim, чтобы увидеть, где эта функция вызывается и / или определяется (я подозреваю, что она вызывается, но не определена, и это может быть несоответствием между двумя файлами, или один из них был поврежден).