vim - 如何更改 Vim 中特定行号的颜色

标签 vim vim-plugin vim-syntax-highlighting

我想这样做已经有一段时间了,有时当我打开一个文件时,我希望能够以不同的颜色突出显示某些行号。例如,假设我的线路编号是蓝色,而我的当前线路编号是红色。假设我在第 25 行,我是否可以将第 28-30 行的 LineNr 颜色更改为绿色而不离开当前行?

最佳答案

作为一个快速回答,如果您不介意一次仅突出显示最多 8 个法格,您可以使用 matchaddpos({group}, {pos})函数并创建一个命令来应用 highlight分组到一系列行。

command! -range -nargs=1 -complete=highlight HiLine call matchaddpos(<f-args>, range(<line1>,<line2>))

您可以使用它,例如突出显示为 'cursorline' :

:28,30HiLine CursorLine

请注意,补全适用于突出显示组的参数。

要删除先前突出显示的行组,您可以删除包含特定行的行。我找不到比遍历所有 getmatches() 更简单的方法听写和 matchdelete({id})包含 'posX' 之一上的行的那些关键:

function! s:RemoveMatchOnLine(line) abort
  for l:match in getmatches()
    let l:matchlines = values(filter(copy(l:match), 'v:key =~# ''pos\d\+'''))
    if index(l:matchlines, [a:line]) >= 0
      call matchdelete(l:match['id'])
    endif
  endfor
endfunction
command! -nargs=? LoLine call <SID>RemoveMatchOnLine(<q-args> ? <q-args> : line('.'))

现在,您可以:LoLine撤消当前行附近行的突出显示,或者您可以给它一个参数来指定另一行,这样您就不必将光标移到那里::LoLine 28 .

最后,您可以设置映射:

nnoremap <leader>hi :HiLine CursorLine<CR>
xnoremap <leader>hi :HiLine CursorLine<CR>
nnoremap <leader>hc :<c-u>execute 'LoLine ' . v:count<CR>

打字 [count]<leader>hi在正常模式下会突出显示count从光标开始的行。和[count]<leader>hc将删除行 count 组上的突出显示.

附录

我们可以使用 matchadd({group}, {pattern}) 处理更大的范围,使用\%xl匹配线 x 。替换call matchaddpos(...通过

execute 'call matchadd(<f-args>, ''\%'.<line1>.'l\(.*\n\)\+\%'.(<line2>+1).'l'')'

以及函数的第 2 行和第 3 行

let l:a = matchlist(get(l:match,'pattern',''), '^\\%\(\d\+\)l.*\\%\(\d\+\)l$')
if !empty(l:a) && l:a[1] <= a:line && a:line <= l:a[2]

但对我来说,它会在大范围内中断,我更喜欢第一个看起来更强大的解决方案。

关于vim - 如何更改 Vim 中特定行号的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57466120/

相关文章:

c++ - 如何在 coc-settings.json 文件中添加语言服务器的包含路径?

python - 在进入普通模式或ESC map 时触发光标定位和选择

Perl 高亮引号分隔符问题 - 在哪里可以找到解决此问题的语法/perl.vim?

vim - 在 Vim 中按 Esc 后如何保留缩进

打开文件时vim自动命令不运行

macos - 使用 MacVim 更新 OSX Vim

vim - 在 Vim 中自定义语法高亮

regex - 当表达式中涉及数学除法时,如何使用 vim regex 替换文本

vim - netrw 在 netrw 缓冲区中打开文件