<h3>Native</h3>

With native Vim there's no pretty way to do it. You'll have to submit a couple Ex commands using the `-c` or `+` command-line flag:

    vim +123 ~/.zshrc -c 'e ~/.profile | 10'

That is, after startup the command `:e ~/.profile` will open `~/.profile` and the next command `:10` will take you to line 10.

<h3>Plugin</h3>

If you don't mind installing a plugin you can use [vim-fetch][1] which allows a command line like:

    vim ~/.zshrc:123 ~/.profile:10

It works but it's a little wonky, IMO. It seems that it loads a (non-existent) file named, for example, `~/zshrc:123` and only upon navigating to that buffer does the plugin parse out the line number and load the actual file. You may or may not notice this happening. (I noticed it because I saw the temporary `file:line` name in my tab line.)

<h3>Wrapper</h3>

Before I found that plugin I had whipped up a wrapper script that uses the same parameter format. You'd call it instead of Vim. (If you really wanted to you could name it `vim` and put it in your `PATH` ahead of Vim itself.) I'm posting it just in case anyone's interested:

```
#!/bin/bash

for arg; do
    # If an existing, regular file is followed by ':' and a number...
    if [[ $arg =~ ^[^:]*:[[:digit:]]+$ && -f ${arg%%:*} ]]; then
        cmds+=(-c "e ${arg%%:*} | ${arg##*:}")
    else
        other+=($arg)
    fi
done

/bin/vim "${other[@]}" "${cmds[@]}" -c first
```

This was just a quick thing I did for fun so I'm sure it's not 100% bulletproof...caveat emptor. :)

  [1]:https://github.com/wsdjeg/vim-fetch