*comment.txt* For Vim version 9.1. Last change: 2025 Jun 22 VIM REFERENCE MANUAL Commenting and un-commenting text. ============================================================================== See |comment-install| on how to activate this package. The comment.vim package, allows to toggle comments for a single line, a range of lines or a selected text object. It defines the following mappings: *o_gc* gc{motion} to toggle comments for the selected motion *v_gc* {Visual}gc to comment/uncomment the highlighted lines. Since gc operates on a motion, it can be used with any motion, for example _ to comment the current line, or ip to comment the current paragraph. Default mappings are defined for `gc_` and `gc$`: *gcc* gcc to comment/uncomment current line (same as `gc_`) *gC* gC to comment/uncomment to end of current line (same as `gc$`) Commenting to the end of a line using `gC` works whenever the filetype plugin supports it (that is, whenever the comment marker precedes the code) and falls back to `gcc` otherwise. Note: using `gC` may not always result in valid comment markers depending on the language used. Additionally, the plugin defines a comment text-object which requires syntax highlighting to be enabled. *v_ac* *ac* ac "a comment", select current or next comment. Leading and trailing white space is included. Trailing newlines are included too. *v_ic* *ic* ic "inner comment", select current or next comment. This plugin uses the buffer-local 'commentstring' option value to add or remove comment markers to the selected lines. Whether it will comment or un-comment depends on the range of lines to act upon. When all of the lines in range have comment markers, all lines will be un-commented, if it doesn't, the lines will be commented out. Blank and empty lines are ignored. The value of 'commentstring' is the same for the entire buffer and determined by its filetype (|filetypes|). To adapt it within the buffer for embedded languages, you can use a plug-in such as https://github.com/suy/vim-context-commentstring. The comment marker will always be padded with blanks whether or not the 'commentstring' value contains whitespace around "%s". If the mapping does not seem to work (or uses wrong comment markers), it might be because of several reasons: - the filetype is not detected by Vim, see |new-filetype|, - filetype plugins are not enabled, see |:filetype-plugin-on| or - the filetype plugin does not set the (correct) 'commentstring' option. You can simply configure this using the following autocommand (e.g. for legacy Vim script): > autocmd Filetype vim :setlocal commentstring="%s This example sets the " as start of a comment for legacy Vim script. For Vim9 script, you would instead use the "#" char: > autocmd Filetype vim :setlocal commentstring=#\ %s ============================================================================== Options: *g:comment_first_col* *b:comment_first_col* By default comment chars are added in front of the line, i.e. if the line was indented, commented line would stay indented as well. However some filetypes require a comment char on the first column, use this option to change default behaviour. Use g:comment_first_col to change it globally or b:comment_first_col to target specific filetype(s). *g:comment_mappings* Set to false to disable the default keyboard mappings, e.g. in your vimrc > let g:comment_mappings = v:false < This option must be set before the package is activated using |packadd|. ============================================================================== Mappings: The following || mappings are included, which you can use to customise the keyboard mappings. *(comment-toggle)* Normal and visual modes, mapped to gc by default *(comment-toggle-line)* Normal mode only, mapped to gcc by default *(comment-toggle-end)* Normal mode only, mapped to gC by default *(comment-text-object-inner)* Operator pending and visual modes, mapped to ic by default *(comment-text-object-outer)* Operator pending and visual modes, mapped to ac by default The default keyboard mappings are shown below, you can copy these if you wish to customise them in your vimrc: > nmap gc (comment-toggle) xmap gc (comment-toggle) nmap gcc (comment-toggle-line) nmap gC (comment-toggle-end) omap ic (comment-text-object-inner) omap ac (comment-text-object-outer) xmap ic (comment-text-object-inner) xmap ac (comment-text-object-outer) < ============================================================================== vim:tw=78:ts=8:fo=tcq2:ft=help: