站在巨人的肩膀上
我会 强烈 建议像评论插件评论(我用),书呆子批评家,EnhCommentify,tComment,......,等等。使用插件没有什么可耻的。特别是由于评论切换似乎比预期的要复杂得多。
定制Commentary.vim
只需
'commentstring'为文件类型设置为注释样式即可。如果Vim识别出您的文件类型,通常已经为您设置了。请参阅
:h'commentstring'。
更改
'commentstring'PHP的示例。将以下内容添加到
~/.vim/ftplugin/asm.vim:
if expand('%:t') =~# '.s$' set commentstring=-- %sendif或者,如果您希望
vimrc文件中的所有内容:
autocmd FileType asm if expand('%:t') =~# '.s$' | set commentstring=-- %s | endif您可以将toggle comment命令设置为
<f1>如下所示:
nmap <f1> <Plug>CommentaryLine
但是,注释离主行更近,并且不与任何本地映射冲突。
注意:我使用注释,这可能不适用于其他注释插件。与往常一样,请阅读文档。
句法
您可能需要更改语法文件以显示
--以注释开头的行。将以下内容添加到
~/.vim/after/syntax/asm.vim:
syntax match asmComment /--_s.*$/
但是我不或者不能使用插件
有时,使用插件不是一种选择,但您应该知道,(取消注释)比最初看起来要复杂得多。特别是如果您需要跨多个文件类型执行此操作。诸如commentary.vim之类的插件可让您一次注释多行或使用动作,例如
gcip。
最简单的方法。仅评论:
autocmd FileType asm nnoremap <buffer> <F1> gI-- <ESC>j
现在,对于一些使用map-expression的切换:
autocmd FileType asm nnoremap <buffer> <expr> <f1> getline('.') =~ '^s*--_s' ? "^3"_x+" : "gI-- <esc>+"我还创建了一个幼稚的commentary.vim风格的注释切换映射。将以下内容放入您的
vimrc文件中:
nnoremap gcc :<c-u>.,.+<c-r>=v:count<cr>call <SID>toggleComment()<cr>nnoremap gc :<c-u>set opfunc=<SID>commentOp<cr>g@xnoremap gc :call <SID>toggleComment()<cr>function! s:commentOp(...) '[,']call s:toggleComment()endfunctionfunction! s:toggleComment() range let comment = substitute(get(b:, 'commentstring', &commentstring), 's*(%s)s*', '%s', '') let pattern = 'V' . printf(escape(comment, ''), '(s{-})s(S.{-})s=') let replace = '12' if getline('.') !~ pattern let indent = matchstr(getline('.'), '^s*') let pattern = '^' . indent . 'zs(s*)(S.*)' let replace = printf(comment, '1 2' . (comment =~ '%s$' ? '' : ' ')) endif for lnum in range(a:firstline, a:lastline) call setline(lnum, substitute(getline(lnum), pattern, replace, '')) endforendfunction更多信息
:h 'commentstring':h :set:h filetype:h new-filetype:h ftdetect:h ftplugins:h after-directory:h :syn-match:h :autocmd:h :map-expression:h :map-local



