使用.s文件设置文件类型和注释键映射

我正在处理.s文件。尽管此文件是asm文件,但与.asm文件不同(注释以开头--,不是#)。

因此,当我打开.s文件时,它显示为asm文件。如何更改文件类型以正确显示(--符号后为蓝色)?

还有,我已经映射F1vimrc为下面的评论:

if (@% =~ "\.s") "if file is .s

map <F1> :<ESC>0i-- <ESC>j

endif

此方法适用于其他文件,但不适用于.s文件。注释符号是#因为我的地图F1#以前。

你能帮助我吗?

非常感谢你

回答:

站在巨人的肩膀上

我会 强烈 建议像评论插件评论(我用),书呆子批评家,EnhCommentify,tComment,......,等等。使用插件没有什么可耻的。特别是由于评论切换似乎比预期的要复杂得多。

定制Commentary.vim

只需'commentstring'为文件类型设置为注释样式即可。如果Vim识别出您的文件类型,通常已经为您设置了。请参阅:h

'commentstring'

更改'commentstring'PHP的示例。将以下内容添加到~/.vim/ftplugin/asm.vim

if expand('%:t') =~# '\.s$'

set commentstring=--\ %s

endif

或者,如果您希望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()

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

以上是 使用.s文件设置文件类型和注释键映射 的全部内容, 来源链接: utcz.com/qa/418190.html

回到顶部