Friday, December 19, 2014

vi and terminal

For most parts vim is an amazing tool. It has a huge initial learning curve but the functionality it provides are simply amazing.
The only other software which I have heard a lot of good stories about is Emacs.
Vim has this amazing functionality where you can set vi on terminal
 set -o vi  

This feature helps you to use vi when trying to type out long commands on the terminal. Or better you could edit the long command on vi and come back to terminal to execute the command all in a bunch of simple commands which I plan to explain here.

  Warning

vim on terminal is similar to vim editor you can only type commands on your terminal using the INSERT MODE. Now that's awesome because you also get the command functionalities which you get in vim. "/" this means search on your existing command. So if you have a huge command which you want to search through use the "/" command modes.

  Use case

For the meat of vim usage. Say you are running a curl command and inserting a huge json file and you are doing it in command line.
If you have been in this situation before you feel my pain. With Vim mode things become a bit easier. First get inside the vi editor.
  • Open a terminal
  • Type vi in shell without going into insert mode (just type vi in shell)
  • This takes you inside a temp vi file. Now you can use normal vi commands.
  • Copy paste your long curl command in here. Make the necessary changes.
  • Now save the file ":w" and quite ":q"
  • Wala Vi runs the command in your terminal.
This is a powerful feature.

  Caveat and Fix

For some reason vi environment resets auto complete with tabspace which is quite annoying. After some searching I came across this q&a. This solution worked for me so I ended up using this as an alias in my ~/.profile. Makes my life super easy now. Just use the alias when I want to get inside vim mode.
 alias ii="set -o vi; bind '"\C-i": menu-complete'"  

No comments:

Post a Comment