Ответ 1
Vim ожидает подключения к реальному терминалу и отправляет коды, соответствующие этому.
Reset терминал с
reset
Самый простой способ:
locate 50local.policy | xargs gvim
Обоснование gui vim не требует терминала
В противном случае:
vim $(locate 50local.policy)
Обоснование vim запускается непосредственно с терминалом (а не как дочерний процесс под
xargs
, который, в свою очередь, работает в подоболочке с stdin/stdout, подключенным к трубам, а не терминалом). Это как сказатьvim /usr/some/dir/50local.policy /usr/local/some/dir/50local.policy
В качестве альтернативы
Вы можете уклониться от проблемы, не запустив vim с аргументами, но добавив аргументы из vim! Vim на самом деле намного лучше работает с ракетами, чем оболочки при запуске vim.
Пока в vim:
:args `locate 50local.policy`
:rewind
Это устанавливает список аргументов в файлы, возвращенные командой оболочки между тиками;: перемотка назад затем переходит к первому файлу из этого списка. Если вы редактировали несколько совпадений, попробуйте следующее:
:w|next
Эта последовательность команд (разделенная символом |) записывает текущий буфер в файл, затем переходит к следующему файлу в списке args.