我正在使用.s文件.尽管此文件是asm文件,但它与.asm文件不同(注释以-开头,而不是#).
因此,当我打开.s文件时,它显示为asm文件.如何更改文件类型以正确显示(-号后为蓝色)?
而且,我已经将vimrc中的F1映射为如下注释:
if (@% =~ "\.s") "if file is .s
map <F1> :<ESC>0i-- <ESC>j
endif
此方法适用于其他文件,但不适用于.s文件.注释符号为#,因为我将F1映射为#.
你能帮助我吗?
非常感谢你
解决方法:
站在巨人的肩膀上
我强烈建议您对插件进行评论,例如commentary(我使用的是),Nerd Commenter、EnhCommentify、tComment,…,etc.使用该插件不会感到羞耻.特别是由于评论切换似乎比预期的要复杂得多.
定制Commentary.vim
只需将“ commentstring”设置为文件类型的注释样式即可.如果Vim识别出您的文件类型,通常已经为您设置了.参见:h’注释字符串’.
为php更改’commentstring’的示例.将以下内容添加到〜/ .vim / ftplugin / asm.vim中:
if expand('%:t') =~# '\.s$'
set commentstring=--\ %s
endif
或者,如果您更喜欢vimrc文件中的所有内容:
autocmd FileType asm if expand('%:t') =~# '\.s$' | set commentstring=--\ %s | endif
您可以将切换注释命令设置为< 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>+"
我还创建了naive commentary.vim-style评论切换映射.将以下内容放入您的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()
endfunction
function! 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 = '\1\2'
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, ''))
endfor
endfunction
更多信息
: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