18

I get to use the locate command extremely often.

So if I run the following command.

locate updatedb | head -1

Then it gives me the O/p

/usr/updatedb.conf

I wonder if there is any such command that can let me open that file directly?

I am hoping for something like this.

locate updatedb | head -1 | vim
romainl
  • 22,554
  • 2
  • 49
  • 59
Krishna
  • 414
  • 3
  • 7

4 Answers4

28

You're nearly done:

$ locate updatedb | head -1 | xargs vim

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

$ reset
periket2000
  • 649
  • 7
  • 8
23

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`
Ingo Karkat
  • 22,638
  • 2
  • 45
  • 58
5

In addition to the above answer, to avoid the "terminal corruption" stated by Jacobo de Vera in the comment, use the xargs option -o or --open-tty to make vim assume the input is from a terminal, not stdin.

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

See: https://unix.stackexchange.com/a/44428/307359

M Imam Pratama
  • 191
  • 1
  • 6
0

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

Tebe
  • 103
  • 4