Execute command line commands from inside vim

iggredible

Igor Irianto

Posted on December 7, 2019

Execute command line commands from inside vim

Follow @learnvim for more Vim tips and tricks!

One vim command I have been experimenting with recently is bang (!) command to execute external commands from within vim (:h :!).

Why is this so awesome? Let me show you some examples so you can do even more awesome things!

Curl from inside vim

Yes, you read that right. If you have curl installed, you can curl from inside vim.

:r !curl -s 'https://jsonplaceholder.typicode.com/todos/1'
Enter fullscreen mode Exit fullscreen mode

The r is r[ead]. It is used to display the result. This command is so useful I mapped it as a shortcut (<Leader>cg): nnoremap <Leader>cg :r !curl -s<Space>

Of course, this works with curl POST/PUT/DELETE.

Paste file content

I find this is useful when dealing with fake data and json files. You can do this with :r !cat path/to/your.file

Get list of files

Let's say you need to quickly get a list of all javascript files in a project, you can do something like: :r !ls **.*.js

Get word count

If you want to check how many words in your current file, you can do :!wc %. You can also do the same with g C-g

Send command to other tmux session/window/pane

This is my personal favorite right after curl. This one is for tmux users. If you are working with multiple panes, you can send command to another pane.

:!tmux send-keys -t mySession:myWindow.2 "echo 'HELLO TMUX MAGIC'" Enter
Enter fullscreen mode Exit fullscreen mode

Let me break it down:

  • tmux send-keys sends tmux instructions
  • -t to target
  • mySession:myWindow.2 is tmux's convention to target a specific pane. The syntax is: session_name:window_name.window_number.
  • "echo 'HELLO TMUX MAGIC'" Enter is the instruction

With this, I can send any instruction to any session, any window, any pane. I can tell my "Rails" session to execute rspec on "Test" window's pane #2 while I am sitting inside a different session. How cool is that?

Repeat the previous bang command

After running fairly lengthy command, you can quickly recall previous command with double bang: :!!

Conclusion

I have only scratched the surface of ! potential; being able to execute external command unlocks many possibilities.

What command do you personally find it helpful to execute from inside vim?

💖 💪 🙅 🚩
iggredible
Igor Irianto

Posted on December 7, 2019

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related