diff --git a/autoload/nerdcommenter.vim b/autoload/nerdcommenter.vim index d767c5f..02d9e90 100644 --- a/autoload/nerdcommenter.vim +++ b/autoload/nerdcommenter.vim @@ -57,6 +57,8 @@ call s:InitVariable("g:NERDRPlace", "<]") call s:InitVariable("g:NERDSpaceDelims", 0) call s:InitVariable("g:NERDDefaultAlign", "none") call s:InitVariable("g:NERDTrimTrailingWhitespace", 0) +call s:InitVariable("g:NERDToggleCheckAllLines", 0) +call s:InitVariable("g:NERDDisableTabsInBlockComm", 0) let s:NERDFileNameEscape="[]#*$%'\" ?`!&();<>\\" @@ -135,7 +137,7 @@ let s:delimiterMap = { \ 'desktop': { 'left': '#' }, \ 'dhcpd': { 'left': '#' }, \ 'diff': { 'left': '#' }, - \ 'django': { 'left': '', 'leftAlt': '{#', 'rightAlt': '#}' }, + \ 'django': { 'left': '{% comment %}', 'right': '{% endcomment %}', 'leftAlt': '{#', 'rightAlt': '#}' }, \ 'dns': { 'left': ';' }, \ 'docbk': { 'left': '' }, \ 'dockerfile': { 'left': '#' }, @@ -163,6 +165,7 @@ let s:delimiterMap = { \ 'exports': { 'left': '#' }, \ 'factor': { 'left': '! ', 'leftAlt': '!# ' }, \ 'fancy': { 'left': '#' }, + \ 'faust': { 'left': '//' }, \ 'fgl': { 'left': '#' }, \ 'focexec': { 'left': '-*' }, \ 'form': { 'left': '*' }, @@ -197,7 +200,7 @@ let s:delimiterMap = { \ 'h': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, \ 'haml': { 'left': '-#', 'leftAlt': '/' }, \ 'handlebars': { 'left': '{{!-- ', 'right': ' --}}' }, - \ 'haskell': { 'left': '{-', 'right': '-}', 'nested': 1, 'leftAlt': '--', 'nestedAlt': 1 }, + \ 'haskell': { 'left': '--', 'nested': 0, 'leftAlt': '{-', 'rightAlt': '-}', 'nestedAlt': 1 }, \ 'haxe': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, \ 'hb': { 'left': '#' }, \ 'hbs': { 'left': '{{!-- ', 'right': ' --}}' }, @@ -206,7 +209,7 @@ let s:delimiterMap = { \ 'hog': { 'left': '#' }, \ 'hostsaccess': { 'left': '#' }, \ 'htmlcheetah': { 'left': '##' }, - \ 'htmldjango': { 'left': '', 'leftAlt': '{#', 'rightAlt': '#}' }, + \ 'htmldjango': { 'left': '{% comment %}', 'right': '{% endcomment %}', 'leftAlt': '{#', 'rightAlt': '#}' }, \ 'htmlos': { 'left': '#', 'right': '/#' }, \ 'hxml': { 'left': '#' }, \ 'hyphy': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, @@ -232,6 +235,7 @@ let s:delimiterMap = { \ 'jproperties': { 'left': '#' }, \ 'jsp': { 'left': '<%--', 'right': '--%>' }, \ 'julia': { 'left': '# ', 'leftAlt': '#=', 'rightAlt': '=#' }, + \ 'kivy': { 'left': '#' }, \ 'kix': { 'left': ';' }, \ 'kscript': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, \ 'lace': { 'left': '--' }, @@ -273,7 +277,6 @@ let s:delimiterMap = { \ 'mkd': { 'left': '' }, \ 'mma': { 'left': '(*', 'right': '*)' }, \ 'model': { 'left': '$', 'right': '$' }, - \ 'moduala.': { 'left': '(*', 'right': '*)' }, \ 'modula2': { 'left': '(*', 'right': '*)' }, \ 'modula3': { 'left': '(*', 'right': '*)' }, \ 'molpro': { 'left': '!' }, @@ -355,7 +358,7 @@ let s:delimiterMap = { \ 'robot': { 'left': '#' }, \ 'robots': { 'left': '#' }, \ 'rspec': { 'left': '#' }, - \ 'ruby': { 'left': '#', 'leftAlt': '=begin', 'rightAlt': '=end' }, + \ 'ruby': { 'left': '#' }, \ 'rust': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, \ 'sa': { 'left': '--' }, \ 'samba': { 'left': ';', 'leftAlt': '#' }, @@ -367,6 +370,7 @@ let s:delimiterMap = { \ 'scons': { 'left': '#' }, \ 'scsh': { 'left': ';' }, \ 'scss': { 'left': '//', 'leftAlt': '/*', 'rightAlt': '*/' }, + \ 'sdc': { 'left': '#' }, \ 'sed': { 'left': '#' }, \ 'sgmldecl': { 'left': '--', 'right': '--' }, \ 'sgmllnx': { 'left': '' }, @@ -421,7 +425,7 @@ let s:delimiterMap = { \ 'tex': { 'left': '%' }, \ 'texinfo': { 'left': "@c " }, \ 'texmf': { 'left': '%' }, - \ 'tf': { 'left': ';' }, + \ 'tf': { 'left': '#' }, \ 'tidy': { 'left': '#' }, \ 'tli': { 'left': '#' }, \ 'tmux': { 'left': '#' }, @@ -986,7 +990,11 @@ function s:CommentLinesSexy(topline, bottomline) " the lines down when we added the left delimiter call cursor(a:bottomline+1, 1) execute 'normal! o' - let theLine = repeat(' ', leftAlignIndx) . repeat(' ', strlen(left)-strlen(sexyComMarker)) . right + if g:NERDDisableTabsInBlockComm + let theLine = repeat(' ', leftAlignIndx) . right + else + let theLine = repeat(' ', leftAlignIndx) . repeat(' ', strlen(left)-strlen(sexyComMarker)) . right + endif " Make sure tabs are respected if !&expandtab @@ -1012,7 +1020,11 @@ function s:CommentLinesSexy(topline, bottomline) endif " add the sexyComMarker - let theLine = repeat(' ', leftAlignIndx) . repeat(' ', strlen(left)-strlen(sexyComMarker)) . sexyComMarkerSpaced . strpart(theLine, leftAlignIndx) + if g:NERDDisableTabsInBlockComm + let theLine = repeat(' ', leftAlignIndx) . sexyComMarkerSpaced . strpart(theLine, leftAlignIndx) + else + let theLine = repeat(' ', leftAlignIndx) . repeat(' ', strlen(left)-strlen(sexyComMarker)) . sexyComMarkerSpaced . strpart(theLine, leftAlignIndx) + endif if lineHasTabs let theLine = s:ConvertLeadingSpacesToTabs(theLine) @@ -1249,12 +1261,29 @@ function! nerdcommenter#Comment(mode, type) range endtry elseif a:type ==? 'Toggle' - let theLine = getline(firstLine) - - if s:IsInSexyComment(firstLine) || s:IsCommentedFromStartOfLine(s:Left(), theLine) || s:IsCommentedFromStartOfLine(s:Left({'alt': 1}), theLine) - call s:UncommentLines(firstLine, lastLine) + if g:NERDToggleCheckAllLines ==# 0 + let theLine = getline(firstLine) + if s:IsInSexyComment(firstLine) || s:IsCommentedFromStartOfLine(s:Left(), theLine) || s:IsCommentedFromStartOfLine(s:Left({'alt': 1}), theLine) + call s:UncommentLines(firstLine, lastLine) + else + call s:CommentLinesToggle(forceNested, firstLine, lastLine) + endif else + let l:commentAllLines = 0 + for i in range(firstLine, lastLine) + let theLine = getline(i) + " if have one line no comment(not include blank/whitespace-only lines), then comment all lines + if theLine =~ '[^ \t]\+' && !s:IsInSexyComment(firstLine) && !s:IsCommentedFromStartOfLine(s:Left(), theLine) && !s:IsCommentedFromStartOfLine(s:Left({'alt': 1}), theLine) + let l:commentAllLines = 1 + break + else + endif + endfor + if l:commentAllLines ==# 1 call s:CommentLinesToggle(forceNested, firstLine, lastLine) + else + call s:UncommentLines(firstLine, lastLine) + endif endif elseif a:type ==? 'Minimal' diff --git a/doc/NERD_commenter.txt b/doc/NERD_commenter.txt index d37507a..5a14a4d 100644 --- a/doc/NERD_commenter.txt +++ b/doc/NERD_commenter.txt @@ -488,6 +488,9 @@ change the filetype back: > one of 'none', 'left', 'start', or 'both'. +|'NERDToggleCheckAllLines'| Enable NERDCommenterToggle to check + all selected lines is commented or not. + ------------------------------------------------------------------------------ 4.3 Options details *NERDComOptionsDetails* @@ -800,6 +803,39 @@ When this option is set to 1, comments are nested automatically. That is, if you hit ||cc on a line that is already commented it will be commented again. +------------------------------------------------------------------------------ + *'NERDToggleCheckAllLines'* +Values: 0 or 1. +Default 0. + +When this option is set to 1, NERDCommenterToggle will check all selected line, +if there have oneline not be commented, then comment all lines. + +------------------------------------------------------------------------------ + *'NERDDisableTabsInBlockComm'* +Values: 0 or 1. +Default 0. + +When this option is set to 1, NERDDisableTabsInBlockComm will not add +whitespaces align the start location of the ending comment symbol with the +end location of the starting comment symbol. For example, in Fortran, the new +style will be as the following: > + close (inpt,iostat=ierr,iomsg=error_message) + call io_error(pname,input_fname,2,__LINE__,__FILE__,ierr,error_message) +< +to > + !===BEGIN===! + ! close (inpt,iostat=ierr,iomsg=error_message) + ! call io_error(pname,input_fname,2,__LINE__,__FILE__,ierr,error_message) + !===END===! +< +for the block comment style if customized comment symbols are set up in vimrc +file by the following line > + let g:NERDCustomDelimiters = { + \ 'fortran':{'left':'!','leftAlt':'!===BEGIN===!','rightAlt':'!===END===!'} + \ } +< + ------------------------------------------------------------------------------ 3.3 Default delimiter customisation *NERDComDefaultDelims*