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

3700
Krishna

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

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

locate updatedb | head -1 

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

/usr/updatedb.conf 

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

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

locate updatedb | head -1 | vim 
12

3 ответа на вопрос

19
periket2000

You're nearly done:

$ locate updatedb | head -1 | xargs vim 

sometimes (under certain terminals) you need reset the terminal after editing.

$ reset 
Скорее всего, ваша версия `locate` имеет опцию` -l` / `--limit` /` -n`, поэтому вам не нужен `head -1`:` locate -n 1 updatedb | xargs vim` Dmitry Alexandrov 9 лет назад 2
Почему происходит эта терминальная коррупция? Есть ли способ избежать этого? Jacobo de Vera 9 лет назад 1
14
Ingo Karkat

As an interactive editor, Vim needs both stdin and stdout, so using it within a pipe is problematic and makes Vim warn about this. For just a single file, process substitution solves this easily:

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

You can also use backticks, and that even works inside Vim itself:

:edit `locate updatedb | head -1` 
Это также работает со строками с пробелами, что хорошо для имен файлов, таких как «версия 2 - final.csv». Alex Moore-Niemi 6 лет назад 0
0
Tebe

I know this is bad solution but I used this for creating alias in .bashrc:

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

Downsides: ugly

Advantage: No side effects with terminal

Похожие вопросы