2020-06-08 19:01:59 +08:00
# NERD Commenter
[![Vint ](https://github.com/preservim/nerdcommenter/workflows/Vint/badge.svg )](https://github.com/preservim/nerdcommenter/actions?workflow=Vint)
2012-03-26 23:12:53 +08:00
2016-05-25 01:14:10 +08:00
Comment functions so powerful—no comment necessary.
2016-05-24 19:58:18 +08:00
2016-05-25 01:14:10 +08:00
## Installation
### Via Plugin Manager (Recommended)
#### [Vim-Plug](https://github.com/junegunn/vim-plug)
2012-03-27 00:11:24 +08:00
2019-12-29 16:01:36 +08:00
1. Add `Plug 'preservim/nerdcommenter'` to your vimrc file.
2016-05-25 00:39:07 +08:00
2. Reload your vimrc or restart
3. Run `:PlugInstall`
2012-03-27 00:11:24 +08:00
2016-05-25 01:14:10 +08:00
#### [Vundle](https://github.com/VundleVim/Vundle.vim) or similar
2012-03-26 23:32:56 +08:00
2019-12-29 16:01:36 +08:00
1. Add `Plugin 'preservim/nerdcommenter'` to your vimrc file.
2016-05-25 00:39:07 +08:00
2. Reload your vimrc or restart
3. Run `:BundleInstall`
2012-03-26 23:32:56 +08:00
2016-05-25 01:14:10 +08:00
#### [NeoBundle](https://github.com/Shougo/neobundle.vim)
2012-03-27 00:11:24 +08:00
2019-12-29 16:01:36 +08:00
1. Add `NeoBundle 'preservim/nerdcommenter'` to your vimrc file.
2016-05-25 00:39:07 +08:00
2. Reload your vimrc or restart
2018-02-02 17:56:54 +08:00
3. Run `:NeoUpdate`
2016-05-24 19:58:18 +08:00
2016-05-25 01:14:10 +08:00
#### [Pathogen](https://github.com/tpope/vim-pathogen)
2012-03-26 23:42:40 +08:00
2016-05-25 00:39:07 +08:00
```sh
cd ~/.vim/bundle
2019-12-29 16:01:36 +08:00
git clone https://github.com/preservim/nerdcommenter.git
2016-05-25 00:39:07 +08:00
```
2012-03-26 23:32:56 +08:00
2016-05-25 01:14:10 +08:00
### Manual Installation
2016-05-24 19:58:18 +08:00
2016-05-25 01:14:10 +08:00
#### Unix
2016-05-24 19:58:18 +08:00
2016-05-25 00:39:07 +08:00
(For Neovim, change `~/.vim/` to `~/.config/nvim/` .)
2016-05-24 19:58:18 +08:00
```sh
2016-05-25 00:39:07 +08:00
curl -fLo ~/.vim/plugin/NERD_Commenter.vim --create-dirs \
2019-12-29 16:01:36 +08:00
https://raw.githubusercontent.com/preservim/nerdcommenter/master/plugin/NERD_commenter.vim
2016-05-25 00:39:07 +08:00
curl -fLo ~/.vim/doc/NERD_Commenter.txt --create-dirs \
2019-12-29 16:01:36 +08:00
https://raw.githubusercontent.com/preservim/nerdcommenter/master/doc/NERD_commenter.txt
2016-05-24 19:58:18 +08:00
```
2016-05-25 01:14:10 +08:00
#### Windows (PowerShell)
2016-05-24 19:58:18 +08:00
```powershell
md ~\vimfiles\plugin
2016-05-25 00:39:07 +08:00
md ~\vimfiles\doc
2019-12-29 16:01:36 +08:00
$pluguri = 'https://raw.githubusercontent.com/preservim/nerdcommenter/master/plugin/NERD_commenter.vim'
$docsuri = 'https://raw.githubusercontent.com/preservim/nerdcommenter/master/doc/NERD_commenter.txt'
2016-05-25 01:22:04 +08:00
(New-Object Net.WebClient).DownloadFile($pluguri, $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath("~\vimfiles\plugin\NERD_commenter.vim"))
(New-Object Net.WebClient).DownloadFile($docsuri, $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath("~\vimfiles\doc\NERD_commenter.txt"))
2016-05-24 19:58:18 +08:00
```
2016-05-25 01:14:10 +08:00
### Post Installation
2016-05-25 00:39:07 +08:00
2016-05-25 01:14:10 +08:00
Make sure that you have filetype plugins enabled, as the plugin makes use of ** |commentstring|** where possible (which is usually set in a filetype plugin). See ** |filetype-plugin-on|** for details, but the short version is make sure this line appears in your vimrc:
2016-05-24 19:58:18 +08:00
```sh
2016-05-25 00:39:07 +08:00
filetype plugin on
2016-05-24 19:58:18 +08:00
```
2016-05-25 01:14:10 +08:00
## Usage
### Documentation
Please see the vim help system for full documentation of all options: `:help nerdcommenter`
### Settings
Several settings can be added to your vimrc to change the default behavior. Some examples:
```vim
" Add spaces after comment delimiters by default
let g:NERDSpaceDelims = 1
" Use compact syntax for prettified multi-line comments
let g:NERDCompactSexyComs = 1
" Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDDefaultAlign = 'left'
2016-05-25 01:52:43 +08:00
" Set a language to use its alternate delimiters by default
let g:NERDAltDelims_java = 1
2016-05-25 01:14:10 +08:00
" Add your own custom formats or override the defaults
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }
2016-06-08 22:00:05 +08:00
" Allow commenting and inverting empty lines (useful when commenting a region)
2016-06-10 22:49:17 +08:00
let g:NERDCommentEmptyLines = 1
" Enable trimming of trailing whitespace when uncommenting
let g:NERDTrimTrailingWhitespace = 1
2018-06-21 16:06:22 +08:00
" Enable NERDCommenterToggle to check all selected lines is commented or not
let g:NERDToggleCheckAllLines = 1
2016-05-25 01:14:10 +08:00
```
### Default mappings
The following key mappings are provided by default (there is also a menu provided that contains menu items corresponding to all the below mappings):
2019-06-02 14:32:34 +08:00
Most of the following mappings are for normal/visual mode only. The ** |NERDCommenterInsert|** mapping is for insert mode only.
2016-05-25 01:14:10 +08:00
2019-06-02 14:32:34 +08:00
* `[count]<leader>cc` ** |NERDCommenterComment|**
2016-05-25 01:14:10 +08:00
Comment out the current line or text selected in visual mode.
2019-06-02 14:32:34 +08:00
* `[count]<leader>cn` ** |NERDCommenterNested|**
2016-05-25 01:14:10 +08:00
Same as < leader > cc but forces nesting.
2019-06-02 14:32:34 +08:00
* `[count]<leader>c<space>` ** |NERDCommenterToggle|**
2016-05-25 01:14:10 +08:00
Toggles the comment state of the selected line(s). If the topmost selected line is commented, all selected lines are uncommented and vice versa.
2019-06-02 14:32:34 +08:00
* `[count]<leader>cm` ** |NERDCommenterMinimal|**
2016-05-25 01:14:10 +08:00
Comments the given lines using only one set of multipart delimiters.
2019-06-02 14:32:34 +08:00
* `[count]<leader>ci` ** |NERDCommenterInvert|**
2016-05-25 01:14:10 +08:00
Toggles the comment state of the selected line(s) individually.
2019-06-02 14:32:34 +08:00
* `[count]<leader>cs` ** |NERDCommenterSexy|**
2016-05-24 19:58:18 +08:00
2016-05-25 01:14:10 +08:00
Comments out the selected lines with a pretty block formatted layout.
2012-03-26 23:12:53 +08:00
2019-06-02 14:32:34 +08:00
* `[count]<leader>cy` ** |NERDCommenterYank|**
2012-03-26 23:12:53 +08:00
2016-05-25 01:14:10 +08:00
Same as < leader > cc except that the commented line(s) are yanked first.
2012-03-26 23:12:53 +08:00
2019-06-02 14:32:34 +08:00
* `<leader>c$` ** |NERDCommenterToEOL|**
2012-03-26 23:12:53 +08:00
2016-05-25 01:14:10 +08:00
Comments the current line from the cursor to the end of line.
2012-03-26 23:12:53 +08:00
2019-06-02 14:32:34 +08:00
* `<leader>cA` ** |NERDCommenterAppend|**
2012-03-26 23:12:53 +08:00
2016-05-25 01:14:10 +08:00
Adds comment delimiters to the end of line and goes into insert mode between them.
2012-03-26 23:12:53 +08:00
2019-06-02 14:32:34 +08:00
* **|NERDCommenterInsert|**
2012-03-26 23:12:53 +08:00
2016-05-25 01:14:10 +08:00
Adds comment delimiters at the current cursor position and inserts between. Disabled by default.
2012-03-26 23:12:53 +08:00
2019-06-02 14:32:34 +08:00
* `<leader>ca` ** |NERDCommenterAltDelims|**
2012-03-26 23:12:53 +08:00
2016-05-25 01:14:10 +08:00
Switches to the alternative set of delimiters.
2012-03-26 23:12:53 +08:00
2019-06-02 14:32:34 +08:00
* `[count]<leader>cl` ** |NERDCommenterAlignLeft**
`[count]<leader>cb` ** |NERDCommenterAlignBoth**
2012-03-26 23:12:53 +08:00
2019-06-02 14:32:34 +08:00
Same as ** |NERDCommenterComment|** except that the delimiters are aligned down the left side (`< leader > cl`) or both sides (`< leader > cb`).
2012-03-26 23:12:53 +08:00
2019-06-02 14:32:34 +08:00
* `[count]<leader>cu` ** |NERDCommenterUncomment|**
2012-03-26 23:12:53 +08:00
2016-05-25 01:14:10 +08:00
Uncomments the selected line(s).