我正在使用https://stackoverflow.com/a/1676672/618584
的修改版本autocmd FileType php,styl,javascript let b:comment_leader = '// '
noremap <C-\> :<C-B>silent <C-E>s/^/<C-R>=escape(b:comment_leader,'\/')<CR>/<CR>:nohlsearch<CR>
"noremap <C-\> :<C-B>silent <C-E>s/^\V<C-R>=escape(b:comment_leader,'\/')<CR>//e<CR>:nohlsearch<CR>
我想使用相同的命令删除注释(请参阅上面的注释掉的行)。我需要做的是检查行是否以'//'开头,如果是,则映射以删除注释。
知道怎么做吗?
我之前使用的是tpope的评论插件,为了达到我想要的目的,我会这样做:
" comments toggle
autocmd FileType php setlocal commentstring=\/\/\ %s
nmap <C-\> gcc
xmap <C-\> gcugin I'd do:
但同样,我不想使用插件,因为我只使用JS和PHP编写代码。
答案 0 :(得分:0)
首先,我将通过自定义函数构建抽象。添加自定义命令也是有意义的:
function! CommentToggle() range
silent execute a:firstline . ',' . a:lastline . 's/^/' . escape(b:comment_leader, '\/') . '/e'
"silent execute a:firstline . ',' . a:lastline . 's/^\V' . escape(b:comment_leader, '\/') . '//e'
endfunction
command! -range CT <line1>,<line2>call CommentToggle()|nohlsearch
noremap <C-\> :CT<CR>
有了这个,切换只是意味着检查(假设第一行确定所有行的开/关,即你只对所有注释进行操作或没有注释)该行:
function! CommentToggle() range
if getline(a:firstline) =~ '^\V' . escape(b:comment_leader, '\')
silent execute a:firstline . ',' . a:lastline . 's/^\V' . escape(b:comment_leader, '\/') . '//e'
else
silent execute a:firstline . ',' . a:lastline . 's/^/' . escape(b:comment_leader, '\/') . '/e'
endif
endfunction