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

15

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

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

locate updatedb | head -1

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

/usr/updatedb.conf

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

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

locate updatedb | head -1 | vim
Кришна
источник

Ответы:

22

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

$ locate updatedb | head -1 | xargs vim

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

$ reset
periket2000
источник
2
Скорее всего , ваша версия locateесть -l/ --limit/ -nвариант , так что вам не нужно head -1:locate -n 1 updatedb | xargs vim
Дмитрий Александров
1
Почему происходит эта терминальная коррупция? Есть ли способ избежать этого?
Якобо де Вера
16

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

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

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

:edit `locate updatedb | head -1`
Инго Каркат
источник
Это также работает со строками с пробелами, что хорошо для имен файлов, таких как «версия 2 - final.csv».
Алекс Мур-Ниеми
0

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

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

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

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

Теб
источник