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