contrib/vim/hgcommand.txt
changeset 2603 f80057407c07
parent 2601 00fc88b0b256
child 2604 d93c23b31797
equal deleted inserted replaced
2601:00fc88b0b256 2603:f80057407c07
     1 *hgcommand.txt*	HGCommand
       
     2 
       
     3 For instructions on installing this file, type
       
     4 	:help add-local-help
       
     5 inside Vim.
       
     6 
       
     7 Author:  Mathieu Clabaut <mathieu.clabaut@gmail.com>
       
     8 Credits:  Bob Hiestand <bob.hiestand@gmail.com>
       
     9 
       
    10 ==============================================================================
       
    11 1. Contents						*hgcommand-contents*
       
    12 
       
    13 	Installation		: |hgcommand-install|
       
    14         HGCommand Intro	        : |hgcommand|
       
    15 	HGCommand Manual	: |hgcommand-manual|
       
    16 	Customization		: |hgcommand-customize|
       
    17 	SSH "integration"	: |hgcommand-ssh|
       
    18 	Bugs			: |hgcommand-bugs|
       
    19 
       
    20 ==============================================================================
       
    21 
       
    22 2. HGCommand Installation				*hgcommand-install*
       
    23 
       
    24 The HGCommand plugin comprises two files, hgcommand.vim and hgcommand.txt
       
    25 (this file).  In order to install the plugin, place the hgcommand.vim file
       
    26 into a plugin' directory in your runtime path (please see |add-global-plugin|
       
    27 and |'runtimepath'|.
       
    28 
       
    29 HGCommand may be customized by setting variables, creating maps, and
       
    30 specifying event handlers.  Please see |hgcommand-customize| for more
       
    31 details.
       
    32 
       
    33 This help file can be included in the VIM help system by copying it into a
       
    34 'doc' directory in your runtime path and then executing the |:helptags|
       
    35 command, specifying the full path of the 'doc' directory.  Please see
       
    36 |add-local-help| for more details.
       
    37 
       
    38 ==============================================================================
       
    39 
       
    40 3. HGCommand Intro					*hgcommand*
       
    41 							*hgcommand-intro*
       
    42 
       
    43 The HGCommand plugin provides global ex commands for manipulating
       
    44 HG-controlled source files.  In general, each command operates on the current
       
    45 buffer and accomplishes a separate hg function, such as update, commit, log,
       
    46 and others (please see |hgcommand-commands| for a list of all available
       
    47 commands).  The results of each operation are displayed in a scratch buffer.
       
    48 Several buffer variables are defined for those scratch buffers (please see
       
    49 |hgcommand-buffer-variables|).
       
    50 
       
    51 The notion of "current file" means either the current buffer, or, in the case
       
    52 of a directory buffer, the file on the current line within the buffer.
       
    53 
       
    54 For convenience, any HGCommand invoked on a HGCommand scratch buffer acts as
       
    55 though it was invoked on the original file and splits the screen so that the
       
    56 output appears in a new window.
       
    57 
       
    58 Many of the commands accept revisions as arguments.  By default, most operate
       
    59 on the most recent revision on the current branch if no revision is specified
       
    60 (though see |HGCommandInteractive| to prompt instead).
       
    61 
       
    62 Each HGCommand is mapped to a key sequence starting with the <Leader>
       
    63 keystroke.  The default mappings may be overridden by supplying different
       
    64 mappings before the plugin is loaded, such as in the vimrc, in the standard
       
    65 fashion for plugin mappings.  For examples, please see
       
    66 |hgcommand-mappings-override|.
       
    67 
       
    68 The HGCommand plugin may be configured in several ways.  For more details,
       
    69 please see |hgcommand-customize|.
       
    70 
       
    71 ==============================================================================
       
    72 
       
    73 4. HGCommand Manual					*hgcommand-manual*
       
    74 
       
    75 4.1 HGCommand commands					*hgcommand-commands*
       
    76 
       
    77 HGCommand defines the following commands:
       
    78 
       
    79 |:HGAdd|
       
    80 |:HGAnnotate|
       
    81 |:HGCommit|
       
    82 |:HGDiff|
       
    83 |:HGGotoOriginal|
       
    84 |:HGLog|
       
    85 |:HGRevert|
       
    86 |:HGReview|
       
    87 |:HGStatus|
       
    88 |:HGUnedit|
       
    89 |:HGUpdate|
       
    90 |:HGVimDiff|
       
    91 
       
    92 :HGAdd							*:HGAdd*
       
    93 
       
    94 This command performs "hg add" on the current file.  Please note, this does
       
    95 not commit the newly-added file.
       
    96 
       
    97 :HGAnnotate						*:HGAnnotate*
       
    98 
       
    99 This command performs "hg annotate" on the current file.  If an argument is
       
   100 given, the argument is used as a revision number to display.  If not given an
       
   101 argument, it uses the most recent version of the file on the current branch.
       
   102 Additionally, if the current buffer is a HGAnnotate buffer already, the
       
   103 version number on the current line is used.
       
   104 
       
   105 If the |HGCommandAnnotateParent| variable is set to a non-zero value, the
       
   106 version previous to the one on the current line is used instead.  This allows
       
   107 one to navigate back to examine the previous version of a line.
       
   108 
       
   109 The filetype of the HGCommand scratch buffer is set to 'HGAnnotate', to take
       
   110 advantage of the bundled syntax file.
       
   111 
       
   112 
       
   113 :HGCommit[!]						*:HGCommit*
       
   114 
       
   115 If called with arguments, this performs "hg commit" using the arguments as
       
   116 the log message.
       
   117 
       
   118 If '!' is used with no arguments, an empty log message is committed.
       
   119 
       
   120 If called with no arguments, this is a two-step command.  The first step opens
       
   121 a buffer to accept a log message.  When that buffer is written, it is
       
   122 automatically closed and the file is committed using the information from that
       
   123 log message.  The commit can be abandoned if the log message buffer is deleted
       
   124 or wiped before being written.
       
   125 
       
   126 Alternatively, the mapping that is used to invoke :HGCommit (by default
       
   127 <Leader>hgc) can be used in the log message buffer to immediately commit.  
       
   128 This
       
   129 is useful if the |HGCommandCommitOnWrite| variable is set to 0 to disable the
       
   130 normal commit-on-write behavior.
       
   131 
       
   132 :HGDiff						*:HGDiff*
       
   133 
       
   134 With no arguments, this performs "hg diff" on the current file against the
       
   135 current repository version.
       
   136 
       
   137 With one argument, "hg diff" is performed on the current file against the
       
   138 specified revision.
       
   139 
       
   140 With two arguments, hg diff is performed between the specified
       
   141 revisions of the current file.
       
   142 
       
   143 This command uses the 'HGCommandDiffOpt' variable to specify diff options.
       
   144 If that variable does not exist, then 'wbBc' is assumed.  If you wish to have
       
   145 no options, then set it to the empty string.
       
   146 
       
   147 
       
   148 This command performs "hg edit" on the current file.
       
   149 
       
   150 :HGGotoOriginal					*:HGGotoOriginal*
       
   151 
       
   152 This command returns the current window to the source buffer, if the current
       
   153 buffer is a HG command output buffer.
       
   154 
       
   155 :HGGotoOriginal!
       
   156 
       
   157 Like ":HGGotoOriginal" but also executes :bufwipeout on all HG command
       
   158 output buffers for the source buffer.
       
   159 
       
   160 :HGLog							*:HGLog*
       
   161 
       
   162 Performs "hg log" on the current file.
       
   163 
       
   164 If an argument is given, it is passed as an argument to the "-r" option of
       
   165 "hg log".
       
   166 
       
   167 :HGRevert						*:HGRevert*
       
   168 
       
   169 Replaces the current file with the most recent version from the repository in
       
   170 order to wipe out any undesired changes.
       
   171 
       
   172 :HGReview						*:HGReview*
       
   173 
       
   174 Retrieves a particular version of the current file.  If no argument is given,
       
   175 the most recent version of the file on the current branch is retrieved.
       
   176 Otherwise, the specified version is retrieved.
       
   177 
       
   178 :HGStatus						*:HGStatus*
       
   179 
       
   180 Performs "hg status" on the current file.
       
   181 
       
   182 :HGUnedit						*:HGUnedit*
       
   183 
       
   184 Performs "hg unedit" on the current file.  Again, yes, the output buffer here
       
   185 is basically useless.
       
   186 
       
   187 :HGUpdate						*:HGUpdate*
       
   188 
       
   189 Performs "hg update" on the current file.  This intentionally does not
       
   190 automatically reload the current buffer, though vim should prompt the user to
       
   191 do so if the underlying file is altered by this command.
       
   192 
       
   193 :HGVimDiff						*:HGVimDiff*
       
   194 
       
   195 With no arguments, this prompts the user for a revision and then uses vimdiff
       
   196 to display the differences between the current file and the specified
       
   197 revision.  If no revision is specified, the most recent version of the file on
       
   198 the current branch is used.
       
   199 
       
   200 With one argument, that argument is used as the revision as above.  With two
       
   201 arguments, the differences between the two revisions is displayed using
       
   202 vimdiff.
       
   203 
       
   204 With either zero or one argument, the original buffer is used to perform the
       
   205 vimdiff.  When the other buffer is closed, the original buffer will be
       
   206 returned to normal mode.
       
   207 
       
   208 Once vimdiff mode is started using the above methods, additional vimdiff
       
   209 buffers may be added by passing a single version argument to the command.
       
   210 There may be up to 4 vimdiff buffers total.
       
   211 
       
   212 Using the 2-argument form of the command resets the vimdiff to only those 2
       
   213 versions.  Additionally, invoking the command on a different file will close
       
   214 the previous vimdiff buffers.
       
   215 
       
   216 
       
   217 4.2 Mappings						*hgcommand-mappings*
       
   218 
       
   219 By default, a mapping is defined for each command.  These mappings execute the
       
   220 default (no-argument) form of each command.
       
   221 
       
   222 <Leader>hga HGAdd
       
   223 <Leader>hgn HGAnnotate
       
   224 <Leader>hgc HGCommit
       
   225 <Leader>hgd HGDiff
       
   226 <Leader>hgg HGGotoOriginal
       
   227 <Leader>hgG HGGotoOriginal!
       
   228 <Leader>hgl HGLog
       
   229 <Leader>hgr HGReview
       
   230 <Leader>hgs HGStatus
       
   231 <Leader>hgt HGUnedit
       
   232 <Leader>hgu HGUpdate
       
   233 <Leader>hgv HGVimDiff
       
   234 
       
   235 						*hgcommand-mappings-override*
       
   236 
       
   237 The default mappings can be overriden by user-provided instead by mapping to
       
   238 <Plug>CommandName.  This is especially useful when these mappings collide with
       
   239 other existing mappings (vim will warn of this during plugin initialization,
       
   240 but will not clobber the existing mappings).
       
   241 
       
   242 For instance, to override the default mapping for :HGAdd to set it to '\add',
       
   243 add the following to the vimrc:
       
   244 
       
   245 nmap \add <Plug>HGAdd
       
   246 
       
   247 4.3 Automatic buffer variables			*hgcommand-buffer-variables*
       
   248 
       
   249 Several buffer variables are defined in each HGCommand result buffer.	These
       
   250 may be useful for additional customization in callbacks defined in the event
       
   251 handlers (please see |hgcommand-events|).
       
   252 
       
   253 The following variables are automatically defined:
       
   254 
       
   255 b:hgOrigBuffNR						*b:hgOrigBuffNR*
       
   256 
       
   257 This variable is set to the buffer number of the source file.
       
   258 
       
   259 b:hgcmd						*b:hgcmd*
       
   260 
       
   261 This variable is set to the name of the hg command that created the result
       
   262 buffer.
       
   263 ==============================================================================
       
   264 
       
   265 5. Configuration and customization			*hgcommand-customize*
       
   266 							*hgcommand-config*
       
   267 
       
   268 The HGCommand plugin can be configured in two ways:  by setting configuration
       
   269 variables (see |hgcommand-options|) or by defining HGCommand event handlers
       
   270 (see |hgcommand-events|).  Additionally, the HGCommand plugin provides
       
   271 several option for naming the HG result buffers (see |hgcommand-naming|) and
       
   272 supported a customized status line (see |hgcommand-statusline| and
       
   273 |hgcommand-buffer-management|).
       
   274 
       
   275 5.1 HGCommand configuration variables			*hgcommand-options*
       
   276 
       
   277 Several variables affect the plugin's behavior.  These variables are checked
       
   278 at time of execution, and may be defined at the window, buffer, or global
       
   279 level and are checked in that order of precedence.
       
   280 
       
   281 
       
   282 The following variables are available:
       
   283 
       
   284 |HGCommandAnnotateParent|
       
   285 |HGCommandCommitOnWrite|
       
   286 |HGCommandHGExec|
       
   287 |HGCommandDeleteOnHide|
       
   288 |HGCommandDiffOpt|
       
   289 |HGCommandDiffSplit|
       
   290 |HGCommandEdit|
       
   291 |HGCommandEnableBufferSetup|
       
   292 |HGCommandInteractive|
       
   293 |HGCommandNameMarker|
       
   294 |HGCommandNameResultBuffers|
       
   295 |HGCommandSplit|
       
   296 
       
   297 HGCommandAnnotateParent			*HGCommandAnnotateParent*
       
   298 
       
   299 This variable, if set to a non-zero value, causes the zero-argument form of
       
   300 HGAnnotate when invoked on a HGAnnotate buffer to go to the version previous
       
   301 to that displayed on the current line.  If not set, it defaults to 0.
       
   302 
       
   303 HGCommandCommitOnWrite				*HGCommandCommitOnWrite*
       
   304 
       
   305 This variable, if set to a non-zero value, causes the pending hg commit
       
   306 to take place immediately as soon as the log message buffer is written.
       
   307 If set to zero, only the HGCommit mapping will cause the pending commit to
       
   308 occur.	If not set, it defaults to 1.
       
   309 
       
   310 HGCommandHGExec				*HGCommandHGExec*
       
   311 
       
   312 This variable controls the executable used for all HG commands  If not set,
       
   313 it defaults to "hg".
       
   314 
       
   315 HGCommandDeleteOnHide				*HGCommandDeleteOnHide*
       
   316 
       
   317 This variable, if set to a non-zero value, causes the temporary HG result
       
   318 buffers to automatically delete themselves when hidden.
       
   319 
       
   320 HGCommandDiffOpt				*HGCommandDiffOpt*
       
   321 
       
   322 This variable, if set, determines the options passed to the diff command of
       
   323 HG.  If not set, it defaults to 'wbBc'.
       
   324 
       
   325 HGCommandDiffSplit				*HGCommandDiffSplit*
       
   326 
       
   327 This variable overrides the |HGCommandSplit| variable, but only for buffers
       
   328 created with |:HGVimDiff|.
       
   329 
       
   330 HGCommandEdit					*HGCommandEdit*
       
   331 
       
   332 This variable controls whether the original buffer is replaced ('edit') or
       
   333 split ('split').  If not set, it defaults to 'edit'.
       
   334 
       
   335 HGCommandEnableBufferSetup			*HGCommandEnableBufferSetup*
       
   336 
       
   337 This variable, if set to a non-zero value, activates HG buffer management
       
   338 mode see (|hgcommand-buffer-management|).  This mode means that two buffer
       
   339 variables, 'HGRevision' and 'HGBranch', are set if the file is
       
   340 HG-controlled.  This is useful for displaying version information in the
       
   341 status bar.
       
   342 
       
   343 HGCommandInteractive				*HGCommandInteractive*
       
   344 
       
   345 This variable, if set to a non-zero value, causes appropriate commands (for
       
   346 the moment, only |:HGReview|) to query the user for a revision to use instead
       
   347 of the current revision if none is specified.
       
   348 
       
   349 HGCommandNameMarker				*HGCommandNameMarker*
       
   350 
       
   351 This variable, if set, configures the special attention-getting characters
       
   352 that appear on either side of the hg buffer type in the buffer name.  This
       
   353 has no effect unless |HGCommandNameResultBuffers| is set to a true value.  If
       
   354 not set, it defaults to '_'.  
       
   355 
       
   356 HGCommandNameResultBuffers			*HGCommandNameResultBuffers*
       
   357 
       
   358 This variable, if set to a true value, causes the hg result buffers to be
       
   359 named in the old way ('<source file name> _<hg command>_').  If not set
       
   360 or set to a false value, the result buffer is nameless.
       
   361 
       
   362 HGCommandSplit					*HGCommandSplit*
       
   363 
       
   364 This variable controls the orientation of the various window splits that
       
   365 may occur (such as with HGVimDiff, when using a HG command on a HG
       
   366 command buffer, or when the |HGCommandEdit| variable is set to 'split'.
       
   367 If set to 'horizontal', the resulting windows will be on stacked on top of
       
   368 one another.  If set to 'vertical', the resulting windows will be
       
   369 side-by-side.  If not set, it defaults to 'horizontal' for all but
       
   370 HGVimDiff windows.
       
   371 
       
   372 5.2 HGCommand events				*hgcommand-events*
       
   373 
       
   374 For additional customization, HGCommand can trigger user-defined events.
       
   375 Event handlers are provided by defining User event autocommands (see
       
   376 |autocommand|, |User|) in the HGCommand group with patterns matching the
       
   377 event name.
       
   378 
       
   379 For instance, the following could be added to the vimrc to provide a 'q'
       
   380 mapping to quit a HGCommand scratch buffer:
       
   381 
       
   382 augroup HGCommand
       
   383   au HGCommand User HGBufferCreated silent! nmap <unique> <buffer> q: bwipeout<cr>
       
   384 augroup END
       
   385 
       
   386 The following hooks are available:
       
   387 
       
   388 HGBufferCreated		This event is fired just after a hg command
       
   389 				result buffer is created and filled with the
       
   390 				result of a hg command.  It is executed within
       
   391 				the context of the HG command buffer.  The
       
   392 				HGCommand buffer variables may be useful for
       
   393 				handlers of this event (please see
       
   394 				|hgcommand-buffer-variables|).
       
   395 
       
   396 HGBufferSetup			This event is fired just after HG buffer setup
       
   397 				occurs, if enabled.
       
   398 
       
   399 HGPluginInit			This event is fired when the HGCommand plugin
       
   400 				first loads.
       
   401 
       
   402 HGPluginFinish			This event is fired just after the HGCommand
       
   403 				plugin loads.
       
   404 
       
   405 HGVimDiffFinish		This event is fired just after the HGVimDiff
       
   406 				command executes to allow customization of,
       
   407 				for instance, window placement and focus.
       
   408 
       
   409 5.3 HGCommand buffer naming				*hgcommand-naming*
       
   410 
       
   411 By default, the buffers containing the result of HG commands are nameless
       
   412 scratch buffers.  It is intended that buffer variables of those buffers be
       
   413 used to customize the statusline option so that the user may fully control the
       
   414 display of result buffers.
       
   415 
       
   416 If the old-style naming is desired, please enable the
       
   417 |HGCommandNameResultBuffers| variable.  Then, each result buffer will receive
       
   418 a unique name that includes the source file name, the HG command, and any
       
   419 extra data (such as revision numbers) that were part of the command.
       
   420 
       
   421 5.4 HGCommand status line support			*hgcommand-statusline*
       
   422 
       
   423 It is intended that the user will customize the |'statusline'| option to
       
   424 include HG result buffer attributes.  A sample function that may be used in
       
   425 the |'statusline'| option is provided by the plugin, HGGetStatusLine().  In
       
   426 order to use that function in the status line, do something like the
       
   427 following:
       
   428 
       
   429 set statusline=%<%f\ %{HGGetStatusLine()}\ %h%m%r%=%l,%c%V\ %P
       
   430 
       
   431 of which %{HGGetStatusLine()} is the relevant portion.
       
   432 
       
   433 The sample HGGetStatusLine() function handles both HG result buffers and
       
   434 HG-managed files if HGCommand buffer management is enabled (please see
       
   435 |hgcommand-buffer-management|).
       
   436 
       
   437 5.5 HGCommand buffer management		*hgcommand-buffer-management*
       
   438 
       
   439 The HGCommand plugin can operate in buffer management mode, which means that
       
   440 it attempts to set two buffer variables ('HGRevision' and 'HGBranch') upon
       
   441 entry into a buffer.  This is rather slow because it means that 'hg status'
       
   442 will be invoked at each entry into a buffer (during the |BufEnter|
       
   443 autocommand).
       
   444 
       
   445 This mode is disabled by default.  In order to enable it, set the
       
   446 |HGCommandEnableBufferSetup| variable to a true (non-zero) value.  Enabling
       
   447 this mode simply provides the buffer variables mentioned above.  The user must
       
   448 explicitly include those in the |'statusline'| option if they are to appear in
       
   449 the status line (but see |hgcommand-statusline| for a simple way to do that).
       
   450 
       
   451 ==============================================================================
       
   452 
       
   453 6. SSH "integration"					*hgcommand-ssh*
       
   454 
       
   455 The following instructions are intended for use in integrating the
       
   456 hgcommand.vim plugin with an SSH-based HG environment.
       
   457 
       
   458 Familiarity with SSH and HG are assumed.
       
   459 
       
   460 These instructions assume that the intent is to have a message box pop up in
       
   461 order to allow the user to enter a passphrase.  If, instead, the user is
       
   462 comfortable using certificate-based authentication, then only instructions
       
   463 6.1.1 and 6.1.2 (and optionally 6.1.4) need to be followed; ssh should then
       
   464 work transparently.
       
   465 
       
   466 6.1 Environment settings				*hgcommand-ssh-env*
       
   467 
       
   468 6.1.1 HGROOT should be set to something like:
       
   469 
       
   470 	:ext:user@host:/path_to_repository
       
   471 
       
   472 6.1.2 HG_RSH should be set to:
       
   473 
       
   474 	ssh
       
   475 
       
   476 	Together, those settings tell HG to use ssh as the transport when
       
   477 	performing HG calls.
       
   478 
       
   479 6.1.3 SSH_ASKPASS should be set to the password-dialog program.  In my case,
       
   480 	running gnome, it's set to:
       
   481 
       
   482 	/usr/libexec/openssh/gnome-ssh-askpass
       
   483 
       
   484 	This tells SSH how to get passwords if no input is available.
       
   485 
       
   486 6.1.4 OPTIONAL.  You may need to set SSH_SERVER to the location of the hg
       
   487 	executable on the remote (server) machine.
       
   488 
       
   489 6.2 HG wrapper program				*hgcommand-ssh-wrapper*
       
   490 
       
   491 Now you need to convince SSH to use the password-dialog program.  This means
       
   492 you need to execute SSH (and therefore HG) without standard input.  The
       
   493 following script is a simple perl wrapper that dissasociates the HG command
       
   494 from the current terminal.  Specific steps to do this may vary from system to
       
   495 system; the following example works for me on linux.
       
   496 
       
   497 #!/usr/bin/perl -w
       
   498 use strict;
       
   499 use POSIX qw(setsid);
       
   500 open STDIN, '/dev/null';
       
   501 fork and do {wait; exit;};
       
   502 setsid;
       
   503 exec('hg', @ARGV);
       
   504 
       
   505 6.3 Configuring hgcommand.vim			*hgcommand-ssh-config*
       
   506 
       
   507 At this point, you should be able to use your wrapper script to invoke HG with
       
   508 various commands, and get the password dialog.  All that's left is to make HG
       
   509 use your newly-created wrapper script.
       
   510 
       
   511 6.3.1 Tell hgcommand.vim what HG executable to use.  The easiest way to do this
       
   512 	is globally, by putting the following in your .vimrc:
       
   513 
       
   514 	let HGCommandHGExec=/path/to/hg/wrapper/script
       
   515 
       
   516 6.4 Where to go from here			*hgcommand-ssh-other*
       
   517 
       
   518 The script given above works even when non-SSH HG connections are used,
       
   519 except possibly when interactively entering the message for HG commit log
       
   520 (depending on the editor you use... VIM works fine).  Since the hgcommand.vim
       
   521 plugin handles that message without a terminal, the wrapper script can be used
       
   522 all the time.
       
   523 
       
   524 This allows mixed-mode operation, where some work is done with SSH-based HG
       
   525 repositories, and others with pserver or local access.
       
   526 
       
   527 It is possible, though beyond the scope of the plugin, to dynamically set the
       
   528 HG executable based on the HGROOT for the file being edited.  The user
       
   529 events provided (such as HGBufferCreated and HGBufferSetup) can be used to
       
   530 set a buffer-local value (b:HGCommandHGExec) to override the HG executable
       
   531 on a file-by-file basis.  Alternatively, much the same can be done (less
       
   532 automatically) by the various project-oriented plugins out there.
       
   533 
       
   534 It is highly recommended for ease-of-use that certificates with no passphrase
       
   535 or ssh-agent are employed so that the user is not given the password prompt
       
   536 too often.
       
   537 
       
   538 ==============================================================================
       
   539 9. Tips							*hgcommand-tips*
       
   540 
       
   541 9.1 Split window annotation, by Michael Anderson
       
   542 
       
   543 :nmap <Leader>hgN :vs<CR><C-w>h<Leader>hgn:vertical res 40<CR>
       
   544                  \ggdddd:set scb<CR>:set nowrap<CR><C-w>lgg:set scb<CR>
       
   545                  \:set nowrap<CR>
       
   546 
       
   547 This splits the buffer vertically, puts an annotation on the left (minus the
       
   548 header) with the width set to 40. An editable/normal copy is placed on the
       
   549 right.  The two versions are scroll locked so they  move as one. and wrapping
       
   550 is turned off so that the lines line up correctly. The advantages are...
       
   551 
       
   552 1) You get a versioning on the right.
       
   553 2) You can still edit your own code.
       
   554 3) Your own code still has syntax highlighting.
       
   555 
       
   556 ==============================================================================
       
   557 
       
   558 8. Known bugs						*hgcommand-bugs*
       
   559 
       
   560 Please let me know if you run across any.
       
   561 
       
   562 HGVimDiff, when using the original (real) source buffer as one of the diff
       
   563 buffers, uses some hacks to try to restore the state of the original buffer
       
   564 when the scratch buffer containing the other version is destroyed.  There may
       
   565 still be bugs in here, depending on many configuration details.
       
   566 
       
   567 vim:tw=78:ts=8:ft=help