vimtutor & git commit

Week one of my 52 weeks of Vim endeavour consisted of 3 things: vimtutor, using vim to write my commit messages and getting familiar with the vimrc file.

In a previous post, I mentioned I had worked through vimtutor. This week, I took the time to go through it a couple more times and found that it really helped me get comfortable with doing some basic vim. On my 3rd time through I got a little annoyed of scrolling the file one line at a time, so I found the ^D and ^U commands to scroll a half page up and down. I pulled out all the section summaries and added them to the bottom of this post so I can quickly reference them later.

At this point, I am not proficient enough to start using Vim at work and be productive. I realize that once I do, I'll progress much faster. In the meantime I thought that one way I can utilize Vim in my day to day would be to set it back to my default editor for git. A few years ago I had set Sublime Text as my default editor for git. Every time I did git commit, Sublime would open and I would compose my commit message in there. So I updated my .gitconfig file and set Vim as the default editor. Once I started typing my commit messages in Vim I noticed one thing I needed back was spellcheck. This reminded me of a post I had found on the ThoughtBot blog called 5 Useful Tips For A Better Commit Message which had a great tip that was specific to Vim:

Vim ships with syntax, indent, and filetype plugins for Git commits which can help here.

Add this line to your ~/.vimrc to add spell checking and automatic wrapping at the recommended 72 columns to your commit messages.

autocmd Filetype gitcommit setlocal spell textwidth=72

So with that line in my vimrc I was now able to see my typos. After a quick google search, I found out I could get Vim to give me spelling suggestions by simply moving my cursor over the word and typing z=.

In conclusion, after my first week of Vim I think the idea of the steep learning curve is true, but it's really not that hard to get in there and perform some basic tasks. After only one week I am confident I could ssh into a server and modify a file with Vim comfortably. I feel like I understand the basic idea of modes and the reasons why it's such a popular editor. The vimtutor does a great job of showing you how you can achieve so much with so few keystrokes.

Vimtutor Lesson Summaries

Lesson 1 Summary
  1. The cursor is moved using either the arrow keys or the hjkl keys.
    h (left) j (down) k (up) l (right)

  2. To start Vim from the shell prompt type: vim FILENAME

  3. To exit Vim type: :q! to trash all changes.
    OR type: :wq to save the changes.

  4. To delete the character at the cursor type: x

  5. To insert or append text type:
    i type inserted text insert before the cursor
    A type appended text append after the line

NOTE: Pressing will place you in Normal mode or will cancel an unwanted and partially completed command.

Lesson 2 Summary
  1. To delete from the cursor up to the next word type: dw
  2. To delete from the cursor to the end of a line type: d$
  3. To delete a whole line type: dd

  4. To repeat a motion prepend it with a number: 2w

  5. The format for a change command is:
    operator [number] motion
    operator - is what to do, such as d for delete
    [number] - is an optional count to repeat the motion
    motion - moves over the text to operate on, such as w (word),
    $ (to the end of line), etc.

  6. To move to the start of the line use a zero: 0

  7. To undo previous actions, type: u (lowercase u) To undo all the changes on a line, type: U (capital U) To undo the undo's, type: CTRL-R

Lesson 3 Summary
  1. To put back text that has just been deleted, type p . This puts the deleted text AFTER the cursor (if a line was deleted it will go on the line below the cursor).

  2. To replace the character under the cursor, type r and then the character you want to have there.

  3. The change operator allows you to change from the cursor to where the motion takes you. eg. Type ce to change from the cursor to the end of the word, c$ to change to the end of a line.

  4. The format for change is:

    c [number] motion

Lesson 4 Summary
  1. CTRL-G displays your location in the file and the file status. G moves to the end of the file. number G moves to that line number. gg moves to the first line.

  2. Typing / followed by a phrase searches FORWARD for the phrase. Typing ? followed by a phrase searches BACKWARD for the phrase. After a search type n to find the next occurrence in the same direction or N to search in the opposite direction. CTRL-O takes you back to older positions, CTRL-I to newer positions.

  3. Typing % while the cursor is on a (,),[,],{, or } goes to its match.

  4. To substitute new for the first old in a line type :s/old/new
    To substitute new for all 'old's on a line type :s/old/new/g
    To substitute phrases between two line #'s type :#,#s/old/new/g
    To substitute all occurrences in the file type :%s/old/new/g
    To ask for confirmation each time add 'c' :%s/old/new/gc

Lesson 5 Summary
  1. :!command executes an external command.

    Some useful examples are:
    (MS-DOS) (Unix)
    :!dir :!ls - shows a directory listing.
    :!del FILENAME :!rm FILENAME - removes file FILENAME.

  2. :w FILENAME writes the current Vim file to disk with name FILENAME.

  3. v motion :w FILENAME saves the Visually selected lines in file FILENAME.

  4. :r FILENAME retrieves disk file FILENAME and puts it below the cursor position.

  5. :r !dir reads the output of the dir command and puts it below the cursor position.

Lesson 6 Summary
  1. Type o to open a line BELOW the cursor and start Insert mode. Type O to open a line ABOVE the cursor.

  2. Type a to insert text AFTER the cursor. Type A to insert text after the end of the line.

  3. The e command moves to the end of a word.

  4. The y operator yanks (copies) text, p puts (pastes) it.

  5. Typing a capital R enters Replace mode until is pressed.

  6. Typing ":set xxx" sets the option "xxx". Some options are:
    ic ignorecase ignore upper/lower case when searching
    is incsearch show partial matches for a search phrase
    hls hlsearch highlight all matching phrases
    You can either use the long or the short option name.

  7. Prepend "no" to switch an option off: :set noic

Lesson 7 Summary
  1. Type :help or press or to open a help window.

  2. Type :help cmd to find help on cmd .

  3. Type CTRL-W CTRL-W to jump to another window

  4. Type :q to close the help window

  5. Create a vimrc startup script to keep your preferred settings.

  6. When typing a : command, press CTRL-D to see possible completions. Press to use one completion.

Other commands I learned this week

^D ^U scroll half a page up, down
z= to see spelling suggestions