Как я могу вызвать VIM с C-X e для длинных, сложных, хитрых команд? - PullRequest
2 голосов
/ 24 апреля 2009

Я нашел здесь замечательный совет . Вы можете "[r] быстро вызвать редактор, чтобы написать длинную, сложную или хитрую команду". Однако, когда я нажимаю комбинацию клавиш выше, я открываю Emacs. Я хотел бы переключить его на Vim. Как я могу вызвать Vim с C-X e?

[1. Проблема, решенная Брайаном Кэмбеллом]

EDITOR экспорта = VIM

Добавьте в ваш .bashrc или соответствующий rc-файл оболочки

[2. Проблема решена благодаря Пакс]

Мне не удалось вернуть хитрую команду Башу. Ошибки были:

 > Error detected while processing BufRead Auto commands for "*":
 > E117: Unknown function: JumpToLastPosition

Цитаты в .vimrc решили вторую проблему. Я все еще не уверен насчет роли в моем .vimrc:

  "  augroup misc
  "      autocmd!
  "      autocmd BufReadPost * call JumpToLastPosition()
  "      autocmd FileChangedShell * call WarningMsg("File changed outside of vim")
  "  augroup end

[3. Проблема]

Что делает вышеуказанная часть в .vimrc?

Ответы [ 3 ]

3 голосов
/ 24 апреля 2009

В большинстве установок 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, чтобы увидеть, где эта функция вызывается и / или определяется (я подозреваю, что она вызывается, но не определена, и это может быть несоответствием между двумя файлами, или один из них был поврежден).

3 голосов
/ 24 апреля 2009
export EDITOR=vim

Добавьте в ваш .bashrc или соответствующий rc-файл оболочки

0 голосов
/ 24 апреля 2009

Ссылка, которую вы указали, содержит ответ:

В следующий раз, когда вы используете вашу оболочку, попробуйте набрать ctrl-x e (то есть, удерживая клавишу управления, нажмите x, а затем e). Оболочка возьмет то, что вы уже написали в командной строке, и вставит это в редактор, указанный в $ EDITOR.

Вам необходимо установить переменную окружения EDITOR (например, @Brian Campbell)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...