评论&取消注释使用相同的命令 - 没有插件

时间:2017-06-02 13:49:57

标签: vim

我正在使用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编写代码。

1 个答案:

答案 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