Как открыть файл в VIM, используя трубу

Я использую locate Команда очень часто.

Так что, если я запускаю следующую команду.

locate updatedb | head -1

Тогда это дает мне O/p

/usr/updatedb.conf

Интересно, есть ли такая команда, которая может позволить мне открыть этот файл напрямую?

Я надеюсь на что-то подобное.

locate updatedb | head -1 | vim

5 ответов

Решение

Вы почти закончили

$ locate updatedb | head -1 | xargs vim

иногда (под определенными терминалами) вам необходимо сбросить терминал после редактирования.

$ reset

В качестве интерактивного редактора Vim нужен как stdin, так и stdout, поэтому использование его внутри канала проблематично и заставляет Vim предупреждать об этом. Для всего одного файла подстановка процесса решает это легко:

vim "$(locate updatedb | head -1)"

Вы также можете использовать обратные метки, и это работает даже внутри самого Vim:

:edit `locate updatedb | head -1`

В дополнение к приведенному выше ответу, чтобы избежать "повреждения терминала", указанного в комментарии Якобо де Вера, используйте параметр xargs -o или же --open-tty чтобы vim предполагал, что ввод осуществляется с терминала, а не со стандартного ввода.

$ locate updatedb | head -1 | xargs -o vim

См.: https://unix.stackexchange.com/a/44428/307359

Я знаю, что это плохое решение, но я использовал это для создания псевдонима в .bashrc:

locate updatedb  > /tmp/vimForTempDontTouch && vim /tmp/vimForTempDontTouch

Недостатки: некрасиво

Преимущество: нет побочных эффектов с терминалом

Для этого и используется старый добрый стандарт vipe .

К вашему сведению, я написал pyvipe(порт на Python) для своего исследования. Связанный код github действительно короткий, как и оригинальный vipe.

Оказывается, это связано с файловыми дескрипторами иdup()иdup2().

Другие вопросы по тегам