diff --git a/runtime/doc/usr_29.txt b/runtime/doc/usr_29.txt
index aa05560..cefea38 100644
--- a/runtime/doc/usr_29.txt
+++ b/runtime/doc/usr_29.txt
@@ -1,4 +1,4 @@
-*usr_29.txt*	For Vim version 7.1a.  Last change: 2006 Apr 24
+*usr_29.txt*	For Vim version 7.1b.  Last change: 2006 Apr 24
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim
index 824635b..f6d7956 100644
--- a/runtime/indent/ruby.vim
+++ b/runtime/indent/ruby.vim
@@ -73,7 +73,7 @@
 let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue\>\|when\|elsif\)\>'
 
 " Regex that defines the end-match for the 'end' keyword.
-let s:end_end_regex = '\%(^\|[^.:]\)\@<=\<end\>'
+let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end\>'
 
 " Expression used for searchpair() call for finding match for 'end' keyword.
 let s:end_skip_expr = s:skip_expr .
@@ -292,7 +292,7 @@
 
   " If the previous line ended with an "end", match that "end"s beginning's
   " indent.
-  let col = s:Match(lnum, '\%(^\|[^.]\)\<end\>\s*\%(#.*\)\=$')
+  let col = s:Match(lnum, '\%(^\|[^.:@$]\)\<end\>\s*\%(#.*\)\=$')
   if col > 0
     call cursor(lnum, col)
     if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
diff --git a/src/gui_mac.c b/src/gui_mac.c
index 21e9915..8f90e43 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -1742,7 +1742,7 @@
 
     resizeLimitsPtr = GetRegionBounds(GetGrayRgn(), &resizeLimits);
 
-    /* Set the minimun size */
+    /* Set the minimum size */
     /* TODO: Should this come from Vim? */
     resizeLimits.top = 100;
     resizeLimits.left = 100;
@@ -1844,7 +1844,7 @@
 	 */
 	GetPortVisibleRegion(GetWindowPort(whichWindow), updateRgn);
 # if 0
-	/* Would be more appropriate to use the follwing but doesn't
+	/* Would be more appropriate to use the following but doesn't
 	 * seem to work under MacOS X (Dany)
 	 */
 	GetWindowRegion(whichWindow, kWindowUpdateRgn, updateRgn);
@@ -1929,7 +1929,7 @@
 	gui_focus_change(FALSE);
 /*	DON'T KNOW what the code below was doing
 	found in the deactivate clause, but the
-	clause writting TRUE into in_focus (BUG)
+	clause writing TRUE into in_focus (BUG)
  */
 
 #if 0	/* Removed by Dany as per above June 2001 */
@@ -1955,7 +1955,7 @@
      */
 
     /* May not need to change focus as the window will
-     * get an activate/desactivate event
+     * get an activate/deactivate event
      */
     if (event->message & 1)
 	/* Resume */
@@ -2748,7 +2748,7 @@
 
 /*
  * ------------------------------------------------------------
- * GUI_MCH functionnality
+ * GUI_MCH functionality
  * ------------------------------------------------------------
  */
 
@@ -3007,7 +3007,7 @@
     display_errors();
 
     /* Get background/foreground colors from system */
-    /* TODO: do the approriate call to get real defaults */
+    /* TODO: do the appropriate call to get real defaults */
     gui.norm_pixel = 0x00000000;
     gui.back_pixel = 0x00FFFFFF;
 
@@ -3036,7 +3036,7 @@
     gui.scrollbar_height = gui.scrollbar_width = 15; /* cheat 1 overlap */
     gui.border_offset = gui.border_width = 2;
 
-    /* If Quartz-style text antialiasing is available (see
+    /* If Quartz-style text anti aliasing is available (see
        gui_mch_draw_string() below), enable it for all font sizes. */
     vim_setenv((char_u *)"QDTEXT_MINSIZE", (char_u *)"1");
 
@@ -3212,7 +3212,7 @@
  * Get the screen dimensions.
  * Allow 10 pixels for horizontal borders, 40 for vertical borders.
  * Is there no way to find out how wide the borders really are?
- * TODO: Add live udate of those value on suspend/resume.
+ * TODO: Add live update of those value on suspend/resume.
  */
     void
 gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
@@ -5315,7 +5315,8 @@
     short	itemType;
     short	useIcon;
     short	width;
-    short	totalButtonWidth = 0;   /* the width of all button together incuding spacing */
+    short	totalButtonWidth = 0;   /* the width of all button together
+					   including spacing */
     short	widestButton = 0;
     short	dfltButtonEdge     = 20;  /* gut feeling */
     short	dfltElementSpacing = 13;  /* from IM:V.2-29 */
@@ -5959,7 +5960,7 @@
 	theCPB.dirInfo.ioFDirIndex = -1;
      /* theCPB.dirInfo.ioNamePtr   = directoryName; Already done above. */
 	theCPB.dirInfo.ioVRefNum   = file.vRefNum;
-     /* theCPB.dirInfo.ioDirID     = irrevelant when ioFDirIndex = -1 */
+     /* theCPB.dirInfo.ioDirID     = irrelevant when ioFDirIndex = -1 */
 	theCPB.dirInfo.ioDrDirID   = theCPB.dirInfo.ioDrParID;
 
 	/* As ioFDirIndex = -1, get the info of ioDrDirID, */
@@ -5986,7 +5987,7 @@
     theCPB.dirInfo.ioFDirIndex = -1;
  /* theCPB.dirInfo.ioNamePtr   = directoryName; Already done above. */
     theCPB.dirInfo.ioVRefNum   = file.vRefNum;
- /* theCPB.dirInfo.ioDirID     = irrevelant when ioFDirIndex = -1 */
+ /* theCPB.dirInfo.ioDirID     = irrelevant when ioFDirIndex = -1 */
     theCPB.dirInfo.ioDrDirID   = theCPB.dirInfo.ioDrParID;
 
     /* As ioFDirIndex = -1, get the info of ioDrDirID, */
@@ -5998,7 +5999,7 @@
 
     /* For MacOS Classic always add the volume name	     */
     /* For MacOS X add the volume name preceded by "Volumes" */
-    /*	when we are not refering to the boot volume	     */
+    /*	when we are not referring to the boot volume	     */
 #ifdef USE_UNIXFILENAME
     if (file.vRefNum != dfltVol_vRefNum)
 #endif
diff --git a/src/os_mac_conv.c b/src/os_mac_conv.c
index 9f19a80..56d8953 100644
--- a/src/os_mac_conv.c
+++ b/src/os_mac_conv.c
@@ -74,7 +74,7 @@
 	fprintf(stderr, "Encoding failed\n");
     /* When conversion failed, try excluding bytes from the end, helps when
      * there is an incomplete byte sequence.  Only do up to 6 bytes to avoid
-     * looping a long time when there really is something unconvertable. */
+     * looping a long time when there really is something unconvertible. */
     while (cfstr == NULL && unconvlenp != NULL && len > 1 && *unconvlenp < 6)
     {
 	--len;
diff --git a/src/workshop.c b/src/workshop.c
index 88ff5ec..38d27c4 100644
--- a/src/workshop.c
+++ b/src/workshop.c
@@ -1329,7 +1329,7 @@
 warp_to_pc(
 	int	 lnum)			/* line number to warp to */
 {
-    char	 lbuf[256];		/* build line comand here */
+    char	 lbuf[256];		/* build line command here */
 
     if (lnum > 0)
     {
