*tcomment.txt*  An easily extensible & universal comment plugin
                Author: Thomas Link, micathom AT gmail com?subject=vim

tcomment provides easy to use, file-type sensible comments for Vim. It 
can handle embedded syntax.

TComment works like a toggle, i.e., it will comment out text that 
contains uncommented lines, and it will remove comment markup for 
already commented text (i.e. text that contains no uncommented lines).

If the file-type is properly defined, TComment will figure out which 
comment string to use. Otherwise you use |tcomment#DefineType()| to 
override the default choice.

TComment can properly handle an embedded syntax, e.g., ruby/python/perl 
regions in vim scripts, HTML or JavaScript in php code etc.

tcomment favours the use of line-wise comment styles. This implies that usually 
whole line will be commented out. tcomment also knows block-style and inline 
comments that can be used via special maps (see below) or the |:TCommentAs| 
command.

Demo:
http://vimsomnia.blogspot.com/2010/11/tcomment-vim-plugin.html


                                                    *tcomment-maps*
Key bindings~

Most of the time the default toggle keys will do what you want (or to be 
more precise: what I think you want it to do ;-).

                                                    *tcomment-operator*
As operator (the prefix can be customized via |g:tcommentMapLeaderOp1| 
and |g:tcommentMapLeaderOp2|):

    gc{motion}   :: Toggle comments (for small comments within one line 
                    the &filetype_inline style will be used, if 
                    defined)
    gc<Count>c{motion} :: Toggle comment text with count argument 
                    (see |tcomment#Comment()|)
    gcc          :: Toggle comment for the current line

Explicit commenting/uncommenting:

    g<{motion}   :: Uncomment region
    g<c          :: Uncomment the current line
    g<b          :: Uncomment the current region as block

    g>{motion}   :: Comment region
    g>c          :: Comment the current line
    g>b          :: Comment the current region as block

In visual mode:

    gc           :: Toggle comments
    gC           :: Comment selected text

CAVEAT: If you visually select text within a line, the visual mode map will 
comment out the selected text. If you selected text across several lines, the 
visual mode map will assume though that you wanted to comment out lines -- 
since this is how many vim maps work. In order to make tcomment use e.g. inline 
comments anyway, use the <c-_>i map -- see below.

By default the cursor stays put. If you want the cursor to the end of 
the commented text, set |g:tcommentOpModeExtra| to '>' (but this may not 
work properly with exclusive motions).

Primary key maps for normal and insert mode:

    <c-_><c-_>   :: :TComment
    <c-_><space> :: :TComment <QUERY COMMENT-BEGIN ?COMMENT-END>
    <c-_>b       :: :TCommentBlock
                    In insert mode, the cursor will be positioned inside 
                    the comment. In normal mode, the cursor will stay 
                    put.
    <c-_>a       :: :TCommentAs <QUERY COMMENT TYPE>
    <c-_>n       :: :TCommentAs &filetype <QUERY COUNT>
    <c-_>s       :: :TCommentAs &filetype_<QUERY COMMENT SUBTYPE>
    <c-_>i       :: :TCommentInline (in normal and insert mode, this map will 
                    create an empty inline comment, which isn't suitable for 
                    all filetypes though)
                    In insert mode, the cursor will be positioned inside 
                    the comment. In normal mode, the cursor will stay 
                    put.
    <c-_>r       :: :TCommentRight
    <c-_>p       :: Comment the current inner paragraph
    <c-_><Count> :: Set the count argument (a number from 1 to 9) for use with 
                    the subsequent tcomment map/command (see 
                    |tcomment#Comment()|)
                    E.g. in JavaScript, in order to get an empty /** */ 
                    comment for documentation purposes, in insert mode type 
                    <c-_>2<c-_>i
                    In order to get an empty block comment like >
                      /**
                       *
                       */
<                   type <c-_>2<c-_>b

Most of the above maps are also available in visual mode.

A secondary set of key maps is defined for normal and insert mode:

    <Leader>__       :: :TComment
    <Leader>_p       :: Comment the current inner paragraph
    <Leader>_<space> :: :TComment <QUERY COMMENT-BEGIN ?COMMENT-END>
    <Leader>_i       :: :TCommentInline
    <Leader>_r       :: :TCommentRight
    <Leader>_b       :: :TCommentBlock
    <Leader>_a       :: :TCommentAs <QUERY COMMENT TYPE>
    <Leader>_n       :: :TCommentAs &filetype <QUERY COUNT>
    <Leader>_s       :: :TCommentAs &filetype_<QUERY COMMENT SUBTYPE>

... and for select mode:

    <Leader>__       :: :TComment
    <Leader>_i       :: :TCommentInline


-----------------------------------------------------------------------
Install~

Edit the vba file and type: >

    :so %

See :help vimball for details. If you have difficulties or use vim 7.0, 
please make sure, you have the current version of vimball (vimscript 
#1502) installed or update your runtime.


========================================================================
Contents~

        g:tcommentMaps ................................ |g:tcommentMaps|
        g:tcommentMapLeader1 .......................... |g:tcommentMapLeader1|
        g:tcommentMapLeader2 .......................... |g:tcommentMapLeader2|
        g:tcommentMapLeaderOp1 ........................ |g:tcommentMapLeaderOp1|
        g:tcommentMapLeaderUncommentAnyway ............ |g:tcommentMapLeaderUncommentAnyway|
        g:tcommentMapLeaderCommentAnyway .............. |g:tcommentMapLeaderCommentAnyway|
        g:tcommentTextObjectInlineComment ............. |g:tcommentTextObjectInlineComment|
        :TComment ..................................... |:TComment|
        :TCommentAs ................................... |:TCommentAs|
        :TCommentRight ................................ |:TCommentRight|
        :TCommentBlock ................................ |:TCommentBlock|
        :TCommentInline ............................... |:TCommentInline|
        :TCommentMaybeInline .......................... |:TCommentMaybeInline|
        <Plug>TComment-<c-_><c-_> ..................... |<Plug>TComment-<c-_><c-_>|
        v_<Plug>TComment-<c-_><c-_> ................... |v_<Plug>TComment-<c-_><c-_>|
        i_<Plug>TComment-<c-_><c-_> ................... |i_<Plug>TComment-<c-_><c-_>|
        <Plug>TComment-<c-_>p ......................... |<Plug>TComment-<c-_>p|
        i_<Plug>TComment-<c-_>p ....................... |i_<Plug>TComment-<c-_>p|
        <Plug>TComment-<c-_><space> ................... |<Plug>TComment-<c-_><space>|
        i_<Plug>TComment-<c-_><space> ................. |i_<Plug>TComment-<c-_><space>|
        i_<Plug>TComment-<c-_>r ....................... |i_<Plug>TComment-<c-_>r|
        <Plug>TComment-<c-_>r ......................... |<Plug>TComment-<c-_>r|
        v_<Plug>TComment-<c-_>i ....................... |v_<Plug>TComment-<c-_>i|
        <Plug>TComment-<c-_>i ......................... |<Plug>TComment-<c-_>i|
        i_<Plug>TComment-<c-_>i ....................... |i_<Plug>TComment-<c-_>i|
        <Plug>TComment-<c-_>b ......................... |<Plug>TComment-<c-_>b|
        i_<Plug>TComment-<c-_>b ....................... |i_<Plug>TComment-<c-_>b|
        <Plug>TComment-<c-_>a ......................... |<Plug>TComment-<c-_>a|
        i_<Plug>TComment-<c-_>a ....................... |i_<Plug>TComment-<c-_>a|
        <Plug>TComment-<c-_>n ......................... |<Plug>TComment-<c-_>n|
        i_<Plug>TComment-<c-_>n ....................... |i_<Plug>TComment-<c-_>n|
        <Plug>TComment-<c-_>s ......................... |<Plug>TComment-<c-_>s|
        i_<Plug>TComment-<c-_>s ....................... |i_<Plug>TComment-<c-_>s|
        <Plug>TComment-<c-_>cc ........................ |<Plug>TComment-<c-_>cc|
        <Plug>TComment-<c-_>ca ........................ |<Plug>TComment-<c-_>ca|
        <Plug>TComment-<Leader>__ ..................... |<Plug>TComment-<Leader>__|
        x_<Plug>TComment-<Leader>__ ................... |x_<Plug>TComment-<Leader>__|
        <Plug>TComment-<Leader>_p ..................... |<Plug>TComment-<Leader>_p|
        <Plug>TComment-<Leader>_<space> ............... |<Plug>TComment-<Leader>_<space>|
        x_<Plug>TComment-<Leader>_i ................... |x_<Plug>TComment-<Leader>_i|
        <Plug>TComment-<Leader>_r ..................... |<Plug>TComment-<Leader>_r|
        <Plug>TComment-<Leader>_b ..................... |<Plug>TComment-<Leader>_b|
        <Plug>TComment-<Leader>_a ..................... |<Plug>TComment-<Leader>_a|
        <Plug>TComment-<Leader>_n ..................... |<Plug>TComment-<Leader>_n|
        <Plug>TComment-<Leader>_s ..................... |<Plug>TComment-<Leader>_s|
        n_<Plug>TComment-Uncomment .................... |n_<Plug>TComment-Uncomment|
        n_<Plug>TComment-Uncommentc ................... |n_<Plug>TComment-Uncommentc|
        n_<Plug>TComment-Uncommentb ................... |n_<Plug>TComment-Uncommentb|
        x_<Plug>TComment-Uncomment .................... |x_<Plug>TComment-Uncomment|
        n_<Plug>TComment-Comment ...................... |n_<Plug>TComment-Comment|
        n_<Plug>TComment-Commentc ..................... |n_<Plug>TComment-Commentc|
        n_<Plug>TComment-Commentb ..................... |n_<Plug>TComment-Commentb|
        x_<Plug>TComment-Comment ...................... |x_<Plug>TComment-Comment|
        v_<Plug>TComment-ic ........................... |v_<Plug>TComment-ic|
        <Plug>TComment-ic ............................. |<Plug>TComment-ic|
        n_<Plug>TComment-gcc .......................... |n_<Plug>TComment-gcc|
        n_<Plug>TComment-gcb .......................... |n_<Plug>TComment-gcb|
        x_<Plug>TComment-gc ........................... |x_<Plug>TComment-gc|
        n_<Plug>TComment-gc ........................... |n_<Plug>TComment-gc|
        g:tcomment#blank_lines ........................ |g:tcomment#blank_lines|
        g:tcomment#rstrip_on_uncomment ................ |g:tcomment#rstrip_on_uncomment|
        g:tcommentModeExtra ........................... |g:tcommentModeExtra|
        g:tcommentOpModeExtra ......................... |g:tcommentOpModeExtra|
        g:tcommentOptions ............................. |g:tcommentOptions|
        g:tcomment#options_comments ................... |g:tcomment#options_comments|
        g:tcomment#options_commentstring .............. |g:tcomment#options_commentstring|
        g:tcomment#ignore_char_type ................... |g:tcomment#ignore_char_type|
        g:tcommentGuessFileType ....................... |g:tcommentGuessFileType|
        g:tcommentGuessFileType_dsl ................... |g:tcommentGuessFileType_dsl|
        g:tcommentGuessFileType_php ................... |g:tcommentGuessFileType_php|
        g:tcommentGuessFileType_blade ................. |g:tcommentGuessFileType_blade|
        g:tcommentGuessFileType_html .................. |g:tcommentGuessFileType_html|
        g:tcommentGuessFileType_tskeleton ............. |g:tcommentGuessFileType_tskeleton|
        g:tcommentGuessFileType_vim ................... |g:tcommentGuessFileType_vim|
        g:tcommentGuessFileType_django ................ |g:tcommentGuessFileType_django|
        g:tcommentGuessFileType_eruby ................. |g:tcommentGuessFileType_eruby|
        g:tcommentGuessFileType_smarty ................ |g:tcommentGuessFileType_smarty|
        g:tcommentIgnoreTypes_php ..................... |g:tcommentIgnoreTypes_php|
        g:tcomment#syntax_substitute .................. |g:tcomment#syntax_substitute|
        g:tcommentSyntaxMap ........................... |g:tcommentSyntaxMap|
        g:tcomment#replacements_c ..................... |g:tcomment#replacements_c|
        g:tcommentInlineC ............................. |g:tcommentInlineC|
        g:tcommentBlockC2 ............................. |g:tcommentBlockC2|
        g:tcomment#replacements_xml ................... |g:tcomment#replacements_xml|
        g:tcommentBlockXML ............................ |g:tcommentBlockXML|
        g:tcommentInlineXML ........................... |g:tcommentInlineXML|
        g:tcomment#ignore_comment_def ................. |g:tcomment#ignore_comment_def|
        g:tcomment#must_escape_expression_backslash ... |g:tcomment#must_escape_expression_backslash|
        tcomment#DefineType ........................... |tcomment#DefineType()|
        tcomment#GetCommentDef ........................ |tcomment#GetCommentDef()|
        g:tcomment_types .............................. |g:tcomment_types|
        tcomment#Comment .............................. |tcomment#Comment()|
        tcomment#SetOption ............................ |tcomment#SetOption()|
        tcomment#Operator ............................. |tcomment#Operator()|
        tcomment#OperatorLine ......................... |tcomment#OperatorLine()|
        tcomment#OperatorAnyway ....................... |tcomment#OperatorAnyway()|
        tcomment#OperatorLineAnyway ................... |tcomment#OperatorLineAnyway()|
        tcomment#CommentAs ............................ |tcomment#CommentAs()|
        tcomment#GuessCommentType ..................... |tcomment#GuessCommentType()|
        tcomment#TextObjectInlineComment .............. |tcomment#TextObjectInlineComment()|


========================================================================
plugin/tcomment.vim~

                                                    *g:tcommentMaps*
g:tcommentMaps                 (default: 1)
    If true, set maps.

                                                    *g:tcommentMapLeader1*
g:tcommentMapLeader1           (default: '<c-_>')
    g:tcommentMapLeader1 should be a shortcut that can be used with 
    map, imap, vmap.

                                                    *g:tcommentMapLeader2*
g:tcommentMapLeader2           (default: '<Leader>_')
    g:tcommentMapLeader2 should be a shortcut that can be used with 
    map, xmap.

                                                    *g:tcommentMapLeaderOp1*
g:tcommentMapLeaderOp1         (default: 'gc')
    See |tcomment-operator|.

                                                    *g:tcommentMapLeaderUncommentAnyway*
g:tcommentMapLeaderUncommentAnyway (default: 'g<')
    See |tcomment-operator|.

                                                    *g:tcommentMapLeaderCommentAnyway*
g:tcommentMapLeaderCommentAnyway (default: 'g>')
    See |tcomment-operator|.

                                                    *g:tcommentTextObjectInlineComment*
g:tcommentTextObjectInlineComment (default: 'ic')

                                                    *:TComment*
:[range]TComment[!] ?ARGS...
    If there is a visual selection that begins and ends in the same line, 
    then |:TCommentInline| is used instead.
    The optional range defaults to the current line. With a bang '!', 
    always comment the line.

    ARGS... are either (see also |tcomment#Comment()|):
      1. a list of key=value pairs
      2. 1-2 values for: ?commentBegin, ?commentEnd

                                                    *:TCommentAs*
:[range]TCommentAs[!] commenttype ?ARGS...
    TCommentAs requires g:tcomment_{filetype} to be defined.
    With a bang '!', always comment the line.

    ARGS... are either (see also |tcomment#Comment()|):
      1. a list of key=value pairs
      2. 1-2 values for: ?commentBegin, ?commentEnd

                                                    *:TCommentRight*
:[range]TCommentRight[!] ?ARGS...
    Comment the text to the right of the cursor. If a visual selection was 
    made (be it block-wise or not), all lines are commented out at from 
    the current cursor position downwards.
    With a bang '!', always comment the line.

    ARGS... are either (see also |tcomment#Comment()|):
      1. a list of key=value pairs
      2. 1-2 values for: ?commentBegin, ?commentEnd

                                                    *:TCommentBlock*
:[range]TCommentBlock[!] ?ARGS...
    Comment as "block", e.g. use the {&ft}_block comment style. The 
    commented text isn't indented or reformated.
    With a bang '!', always comment the line.

    ARGS... are either (see also |tcomment#Comment()|):
      1. a list of key=value pairs
      2. 1-2 values for: ?commentBegin, ?commentEnd

                                                    *:TCommentInline*
:[range]TCommentInline[!] ?ARGS...
    Use the {&ft}_inline comment style.
    With a bang '!', always comment the line.

    ARGS... are either (see also |tcomment#Comment()|):
      1. a list of key=value pairs
      2. 1-2 values for: ?commentBegin, ?commentEnd

                                                    *:TCommentMaybeInline*
:[range]TCommentMaybeInline[!] ?ARGS...
    With a bang '!', always comment the line.

    ARGS... are either (see also |tcomment#Comment()|):
      1. a list of key=value pairs
      2. 1-2 values for: ?commentBegin, ?commentEnd

                                                    *<Plug>TComment-<c-_><c-_>*
<Plug>TComment-<c-_><c-_> ... :TComment<cr>

                                                    *v_<Plug>TComment-<c-_><c-_>*
v_<Plug>TComment-<c-_><c-_> ... :TCommentMaybeInline<cr>

                                                    *i_<Plug>TComment-<c-_><c-_>*
i_<Plug>TComment-<c-_><c-_> ... <c-o>:TComment<cr>

                                                    *<Plug>TComment-<c-_>p*
<Plug>TComment-<c-_>p ... m`vip:TComment<cr>``

                                                    *i_<Plug>TComment-<c-_>p*
i_<Plug>TComment-<c-_>p ... <c-o>:norm! m`vip<cr>:TComment<cr><c-o>``

                                                    *<Plug>TComment-<c-_><space>*
<Plug>TComment-<c-_><space> ... :TComment

                                                    *i_<Plug>TComment-<c-_><space>*
i_<Plug>TComment-<c-_><space> ... <c-o>:TComment

                                                    *i_<Plug>TComment-<c-_>r*
i_<Plug>TComment-<c-_>r ... <c-o>:TCommentRight<cr>

                                                    *<Plug>TComment-<c-_>r*
<Plug>TComment-<c-_>r ... :TCommentRight<cr>

                                                    *v_<Plug>TComment-<c-_>i*
v_<Plug>TComment-<c-_>i ... :TCommentInline<cr>

                                                    *<Plug>TComment-<c-_>i*
<Plug>TComment-<c-_>i ... v:TCommentInline mode=I#<cr>

                                                    *i_<Plug>TComment-<c-_>i*
i_<Plug>TComment-<c-_>i ... <c-\><c-o>v:TCommentInline mode=#<cr>

                                                    *<Plug>TComment-<c-_>b*
<Plug>TComment-<c-_>b ... :TCommentBlock<cr>

                                                    *i_<Plug>TComment-<c-_>b*
i_<Plug>TComment-<c-_>b ... <c-\><c-o>:TCommentBlock mode=#<cr>

                                                    *<Plug>TComment-<c-_>a*
<Plug>TComment-<c-_>a ... :TCommentAs

                                                    *i_<Plug>TComment-<c-_>a*
i_<Plug>TComment-<c-_>a ... <c-o>:TCommentAs

                                                    *<Plug>TComment-<c-_>n*
<Plug>TComment-<c-_>n ... :TCommentAs <c-r>=&ft<cr>

                                                    *i_<Plug>TComment-<c-_>n*
i_<Plug>TComment-<c-_>n ... <c-o>:TCommentAs <c-r>=&ft<cr>

                                                    *<Plug>TComment-<c-_>s*
<Plug>TComment-<c-_>s ... :TCommentAs <c-r>=&ft<cr>_

                                                    *i_<Plug>TComment-<c-_>s*
i_<Plug>TComment-<c-_>s ... <c-o>:TCommentAs <c-r>=&ft<cr>_

                                                    *<Plug>TComment-<c-_>cc*
<Plug>TComment-<c-_>cc ... :<c-u>call tcomment#SetOption("count", v:count1)<cr>

                                                    *<Plug>TComment-<c-_>ca*
<Plug>TComment-<c-_>ca ... :<c-u>call tcomment#SetOption("as", input("Comment as: ", &filetype, "customlist,tcomment#Complete"))<cr>

                                                    *<Plug>TComment-<Leader>__*
<Plug>TComment-<Leader>__ ... :TComment<cr>

                                                    *x_<Plug>TComment-<Leader>__*
x_<Plug>TComment-<Leader>__ ... :TCommentMaybeInline<cr>

                                                    *<Plug>TComment-<Leader>_p*
<Plug>TComment-<Leader>_p ... vip:TComment<cr>

                                                    *<Plug>TComment-<Leader>_<space>*
<Plug>TComment-<Leader>_<space> ... :TComment

                                                    *x_<Plug>TComment-<Leader>_i*
x_<Plug>TComment-<Leader>_i ... :TCommentInline<cr>

                                                    *<Plug>TComment-<Leader>_r*
<Plug>TComment-<Leader>_r ... :TCommentRight<cr>

                                                    *<Plug>TComment-<Leader>_b*
<Plug>TComment-<Leader>_b ... :TCommentBlock<cr>

                                                    *<Plug>TComment-<Leader>_a*
<Plug>TComment-<Leader>_a ... :TCommentAs

                                                    *<Plug>TComment-<Leader>_n*
<Plug>TComment-<Leader>_n ... :TCommentAs <c-r>=&ft<cr>

                                                    *<Plug>TComment-<Leader>_s*
<Plug>TComment-<Leader>_s ... :TCommentAs <c-r>=&ft<cr>_

                                                    *n_<Plug>TComment-Uncomment*
n_<Plug>TComment-Uncomment ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| call tcomment#SetOption("mode_extra", "U") \| let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorAnyway<cr>g@

                                                    *n_<Plug>TComment-Uncommentc*
n_<Plug>TComment-Uncommentc ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| call tcomment#SetOption("mode_extra", "U") \| let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorLineAnyway<cr>g@$

                                                    *n_<Plug>TComment-Uncommentb*
n_<Plug>TComment-Uncommentb ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| call tcomment#SetOption("mode_extra", "UB") \| let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorLine<cr>g@

                                                    *x_<Plug>TComment-Uncomment*
x_<Plug>TComment-Uncomment ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| call tcomment#SetOption("mode_extra", "U") \| '<,'>TCommentMaybeInline<cr>

                                                    *n_<Plug>TComment-Comment*
n_<Plug>TComment-Comment ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorAnyway<cr>g@

                                                    *n_<Plug>TComment-Commentc*
n_<Plug>TComment-Commentc ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorLineAnyway<cr>g@$

                                                    *n_<Plug>TComment-Commentb*
n_<Plug>TComment-Commentb ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| call tcomment#SetOption("mode_extra", "B") \| let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorLine<cr>g@

                                                    *x_<Plug>TComment-Comment*
x_<Plug>TComment-Comment ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| '<,'>TCommentMaybeInline!<cr>

                                                    *v_<Plug>TComment-ic*
v_<Plug>TComment-ic ... :<c-U>call tcomment#TextObjectInlineComment()<cr>

                                                    *<Plug>TComment-ic*
<Plug>TComment-ic ... :<c-U>call tcomment#TextObjectInlineComment()<cr>

                                                    *n_<Plug>TComment-gcc*
n_<Plug>TComment-gcc ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorLine<cr>g@$

                                                    *n_<Plug>TComment-gcb*
n_<Plug>TComment-gcb ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| let w:tcommentPos = getpos(".") \| call tcomment#SetOption("mode_extra", "B") \| set opfunc=tcomment#OperatorLine<cr>g@

                                                    *x_<Plug>TComment-gc*
x_<Plug>TComment-gc ... :TCommentMaybeInline<cr>

                                                    *n_<Plug>TComment-gc*
n_<Plug>TComment-gc ... :<c-u>if v:count > 0 \| call tcomment#SetOption("count", v:count) \| endif \| let w:tcommentPos = getpos(".") \| set opfunc=tcomment#Operator<cr>g@


========================================================================
autoload/tcomment.vim~

                                                    *g:tcomment#blank_lines*
g:tcomment#blank_lines         (default: 2)
    If 1, comment blank lines too.
    If 2, also comment blank lines within indented code blocks 
    (requires mixedindent -- see |tcomment#Comment()|).

                                                    *g:tcomment#rstrip_on_uncomment*
g:tcomment#rstrip_on_uncomment (default: 1)
    If 1, remove right-hand whitespace on uncomment from empty lines.
    If 2, remove right-hand whitespace on uncomment from all lines.

                                                    *g:tcommentModeExtra*
g:tcommentModeExtra            (default: '')
    Modifies how commenting works.
      >  ... Move the cursor to the end of the comment
      >> ... Like above but move the cursor to the next line
      #  ... Move the cursor to the position of the commented text 
             (NOTE: this only works when creating empty comments using 
             |:TCommentInline| from normal or insert mode and should 
             not be set here as a global option.)

                                                    *g:tcommentOpModeExtra*
g:tcommentOpModeExtra          (default: '')
    Modifies how the operator works.
    See |g:tcommentModeExtra| for a list of possible values.

                                                    *g:tcommentOptions*
g:tcommentOptions              (default: {})
    Other key-value options used by |tcomment#Comment()|.

    Example: If you want to put the opening comment marker always in 
    the first column regardless of the block's indentation, put this 
    into your |vimrc| file: >
      let g:tcommentOptions = {'col': 1}
<

                                                    *g:tcomment#options_comments*
g:tcomment#options_comments    (default: {'whitespace': get(g:tcommentOptions, 'whitespace', 'both')})
    Additional args for |tcomment#Comment()| when using the 'comments' 
    option.

                                                    *g:tcomment#options_commentstring*
g:tcomment#options_commentstring (default: {'whitespace': get(g:tcommentOptions, 'whitespace', 'both')})
    Additional args for |tcomment#Comment()| when using the 
    'commentstring' option.

                                                    *g:tcomment#ignore_char_type*
g:tcomment#ignore_char_type    (default: 1)
    |text-objects| for use with |tcomment#Operator| can have different 
    types: line, block, char etc. Text objects like aB, it, at etc. 
    have type char but this may not work reliably. By default, 
    tcomment handles those text objects most often as if they were of 
    type line. Set this variable to 0 in order to change this 
    behaviour. Be prepared that the result may not always match your 
    intentions.

                                                    *g:tcommentGuessFileType*
g:tcommentGuessFileType        (default: 0)
    Guess the file type based on syntax names always or for some fileformat only
    If non-zero, try to guess filetypes.
    tcomment also checks g:tcommentGuessFileType_{&filetype} for 
    filetype specific values.

    Values:
      0        ... don't guess
      1        ... guess
      FILETYPE ... assume this filetype

                                                    *g:tcommentGuessFileType_dsl*
g:tcommentGuessFileType_dsl    (default: 'xml')
    For dsl documents, assume filetype = xml.

                                                    *g:tcommentGuessFileType_php*
g:tcommentGuessFileType_php    (default: 'html')
    In php documents, the php part is usually marked as phpRegion. We 
    thus assume that the buffers default comment style isn't php but 
    html.

                                                    *g:tcommentGuessFileType_blade*
g:tcommentGuessFileType_blade  (default: 'html')
    See |g:tcommentGuessFileType_php|.

                                                    *g:tcommentGuessFileType_html*
g:tcommentGuessFileType_html   (default: 1)

                                                    *g:tcommentGuessFileType_tskeleton*
g:tcommentGuessFileType_tskeleton (default: 1)

                                                    *g:tcommentGuessFileType_vim*
g:tcommentGuessFileType_vim    (default: 1)

                                                    *g:tcommentGuessFileType_django*
g:tcommentGuessFileType_django (default: 1)

                                                    *g:tcommentGuessFileType_eruby*
g:tcommentGuessFileType_eruby  (default: 1)

                                                    *g:tcommentGuessFileType_smarty*
g:tcommentGuessFileType_smarty (default: 1)

                                                    *g:tcommentIgnoreTypes_php*
g:tcommentIgnoreTypes_php      (default: 'sql')
    In php files, some syntax regions are wrongly highlighted as sql 
    markup. We thus ignore sql syntax when guessing the filetype in 
    php files.

                                                    *g:tcomment#syntax_substitute*
g:tcomment#syntax_substitute   (default: {...})

                                                    *g:tcommentSyntaxMap*
g:tcommentSyntaxMap            (default: {...})
    tcomment guesses filetypes based on the name of the current syntax 
    region. This works well if the syntax names match 
    /filetypeSomeName/. Other syntax names have to be explicitly 
    mapped onto the corresponding filetype.

                                                    *g:tcomment#replacements_c*
g:tcomment#replacements_c      (default: {...})
    Replacements for c filetype.

                                                    *g:tcommentInlineC*
g:tcommentInlineC              (default: {...})
    Generic c-like comments.

                                                    *g:tcommentBlockC2*
g:tcommentBlockC2              (default: {...})
    Generic c-like block comments (alternative markup).

                                                    *g:tcomment#replacements_xml*
g:tcomment#replacements_xml    (default: {...})
    Replacements for xml filetype.

                                                    *g:tcommentBlockXML*
g:tcommentBlockXML             (default: {...})
    Generic xml-like block comments.

                                                    *g:tcommentInlineXML*
g:tcommentInlineXML            (default: {...})
    Generic xml-like comments.

                                                    *g:tcomment#ignore_comment_def*
g:tcomment#ignore_comment_def  (default: [])
    A list of names or filetypes, which should be ignored by 
    |tcomment#DefineType()| -- no custom comment definition will be 
    stored for these names.

    This variable should be set before loading autoload/tcomment.vim.

                                                    *g:tcomment#must_escape_expression_backslash*
g:tcomment#must_escape_expression_backslash (default: 0)
    Users of vim earlier than 7.3 might have to set this variable to 
    true. Set this variable to 0, if you see unexpected "\r" char 
    sequences in comments.

    The reommended value was `!(v:version > 702 || (v:version == 702 && has('patch407')))`.
    It is now assumed though, that no unpatched versions of vim are in 
    use.

    References:
    Patch 7.2.407  when using :s with an expression backslashes are dropped
    https://github.com/tomtom/tcomment_vim/issues/102

                                                    *tcomment#DefineType()*
tcomment#DefineType(name, commentdef, ?cdef={}, ?anyway=0)
    If you don't explicitly define a comment style, |:TComment| will use 
    'commentstring' instead. We override the default values here in order 
    to have a blank after the comment marker. Block comments work only if 
    we explicitly define the markup.

    NAME usually is a 'filetype'. You can use special suffixes to define 
    special comment types. E.g. the name "FILETYPE_block" is used for 
    block comments for 'filetype'. The name "FILETYPE_inline" is used for 
    inline comments. If no specialized comment definition exists, the 
    normal one with name "FILETYPE" is used.

    The comment definition can be either a string or a dictionary.

    If it is a string:
    The format for block comments is similar to 'commentstrings' with the 
    exception that the format strings for blocks can contain a second line 
    that defines how "middle lines" (see :h format-comments) should be 
    displayed.

    Example: If the string is "--%s--\n-- ", lines will be commented as 
    "--%s--" but the middle lines in block comments will be commented as 
    "--%s".

    If it is a dictionary:
    See the help on the args argument of |tcomment#Comment| (see item 1, 
    args is a list of key=value pairs) to find out which fields can be 
    used.

                                                    *tcomment#GetCommentDef()*
tcomment#GetCommentDef(name, ...)
    Return the comment definition for NAME.
                                                          *b:tcomment_def_{NAME}*
    Return b:tcomment_def_{NAME} if the variable exists. Otherwise return 
    the comment definition as set with |tcomment#DefineType|.

                                                    *g:tcomment_types*
g:tcomment_types               (default: {})
    A dictionary of NAME => COMMENT DEFINITION (see |tcomment#DefineType|) 
    that can be set in vimrc to override tcomment's default comment 
    styles.



                                                    *tcomment#Comment()*
tcomment#Comment(beg, end, ...)
    tcomment#Comment(line1, line2, ?comment_mode, ?comment_anyway, ?args...)
    args... are either:
      1. a list of key=value pairs where known keys are (see also 
         |g:tcommentOptions|):
            as=STRING        ... Use a specific comment definition
            count=N          ... Repeat the comment string N times
            col=N            ... Start the comment at column N (in block 
                                 mode; must be smaller than |indent()|)
            mode=STRING      ... See the notes below on the "comment_mode" argument
            mode_extra=STRING ... Add to comment_mode
            begin=STRING     ... Comment prefix
            end=STRING       ... Comment postfix
            middle=STRING    ... Middle line comments in block mode
            rxbeg=N          ... Regexp to find the substring of "begin" 
                                 that should be multiplied by "count"
            rxend=N          ... The above for "end"
            rxmid=N          ... The above for "middle"
            mixedindent=BOOL ... If true, allow use of mixed 
                                 characters for indentation
            commentstring_rx ... A regexp format string that matches 
                                 commented lines (no new groups may be 
                                 introduced, the |regexp| is |\V|; % have 
                                 to be doubled); "commentstring", "begin" 
                                 and optionally "end" must be defined or 
                                 deducible.
            whitespace       ... Define whether commented text is 
                                 surrounded with whitespace; if
                                 both ... surround with whitespace (default)
                                 left ... keep whitespace on the left
                                 right... keep whitespace on the right
                                 no   ... don't use whitespace
            strip_whitespace ... Strip trailing whitespace: if 1 
                                 (default), strip from empty lines only, 
                                 if 2, always strip whitespace; if 0, 
                                 don't strip any whitespace
      2. 1-2 values for: ?commentPrefix, ?commentPostfix
      3. a dictionary (internal use only)

    comment_mode (see also ¦g:tcommentModeExtra¦):
      G ... guess the value of comment_mode
      B ... block (use extra lines for the comment markers)
      L ... lines
      i ... maybe inline, guess
      I ... inline
      R ... right (comment the line right of the cursor)
      v ... visual
      o ... operator
      C ... force comment
      U ... force uncomment (if U and C are present, U wins)
    By default, each line in range will be commented by adding the comment 
    prefix and postfix.

                                                    *tcomment#SetOption()*
tcomment#SetOption(name, arg)

                                                    *tcomment#Operator()*
tcomment#Operator(type, ...)

                                                    *tcomment#OperatorLine()*
tcomment#OperatorLine(type)

                                                    *tcomment#OperatorAnyway()*
tcomment#OperatorAnyway(type)

                                                    *tcomment#OperatorLineAnyway()*
tcomment#OperatorLineAnyway(type)

                                                    *tcomment#CommentAs()*
tcomment#CommentAs(beg, end, comment_anyway, filetype, ?args...)
    Where args is either:
      1. A count NUMBER
      2. An args list (see the notes on the "args" argument of 
         |tcomment#Comment()|)
    comment text as if it were of a specific filetype

                                                    *tcomment#GuessCommentType()*
tcomment#GuessFileType(?options={})
    A function that makes the s:GuessFileType() function usable for other 
    library developers.

    The argument is a dictionary with the following keys:

      beg ................ (default = line("."))
      end ................ (default = line("."))
      comment_mode ........ (default = "G")
      filetype ........... (default = &filetype)
      fallbackFiletype ... (default = "")

    This function return a dictionary that contains information about how 
    to make comments. The information about the filetype of the text 
    between lines "beg" and "end" is in the "filetype" key of the return 
    value. It returns the first discernible filetype it encounters.

                                                    *tcomment#TextObjectInlineComment()*
tcomment#TextObjectInlineComment()



vim:tw=78:fo=w2croql:isk=!-~,^*,^|,^":ts=8:ft=help:norl: