Vim 变量语法高亮
Posted
技术标签:
【中文标题】Vim 变量语法高亮【英文标题】:Vim variable syntax highlighting 【发布时间】:2014-02-18 10:47:01 【问题描述】:我想更改我的 vim 配置文件以允许仅突出显示我声明的变量,而不是关键字。这篇文章显示并解释了我的意思:Alternate syntax highlighting
我是 vim 的初学者(我从未更改过默认配置文件)。 谁能指出我正确的方向?
【问题讨论】:
看看这个wiki。 可能不是:groups.google.com/forum/#!topic/vim_dev/vULHSjFRmyc 这种类型的高亮在 vim 中不可用...但对于插件来说可能是个好主意。虽然不会很容易实现 您可以使用例如 Mark--Karkat 插件或类似插件临时着色,这将保存在视图中(可以设置为自动)。不利的一面是,您必须为每个 var 至少执行一次,但另一方面,它也可以实现自动化。好的一面是你可以快速打开/关闭这个东西。 【参考方案1】:我不喜欢在使用脚本语言时将文本字符串转换为命令的想法,理想情况下应该能够为这种构造保留一些语义和结构,所以我开始实施一个能够使用变量的突出显示过程改为以下方式:
function s:hl(group, attrs)
let l:command = "highlight" . " " . a:group
for name in keys(a:attrs)
let l:command .= " " . name . "=" . a:attrs[name]
endfor
execute l:command
endfunction
通过上面,我可以传递一个突出显示属性的字典以供组设置,其中字典的值显然可能是变量引用。
然后可以让 Vim 有效地运行相同的 highlight <group> <name>=<value> ...
命令,方法是调用上述函数,例如:
call s:hl("Keyword", "guifg": "yellow" )
由于该函数的第二个参数接受字典,因此可以相应地添加其他键值对,例如call s:hl("Normal", "guifg": "white", "guibg": "black" )
.
定义变量后,它会更像:
let s:chefchaouen_blue = "#468fea"
call s:hl("Comment", "guifg": s:chefchaouen_blue )
无论如何,这种方法可能看起来更冗长——最后 is 仍然变成了一个命令字符串,可以与execute
命令一起使用——但我发现 Vim 能够突出显示其自己的脚本文本的元素 - 例如上面在配色方案文件中的call s:hl(...)
语句——值得。此外,可以更早地检查更多的语法错误(比连接成字符串时),尽管对于大多数人来说差异可能可以忽略不计。
【讨论】:
【参考方案2】:有这样一个插件:https://github.com/jaxbot/semantic-highlight.vim
每个变量都有不同的颜色,这是 Evan ***s 的博文推广的一个想法。
【讨论】:
如果你加载了其他语法高亮 vimscript,它会高亮关键字,但不会高亮变量。在 ES6 javascript 中测试。【参考方案3】:Benjifisher 的回答概述了如何实施,但这仍然是一项重大工作,对于初学者来说可能遥不可及。但是,正如 majkinetor 在 cmets 中推荐的那样,我的 Mark plugin 将允许您通过手动(取消)标记它们来快速为“有趣的”变量名称设置不同的颜色(默认映射是 <Leader>m
,通常转换为 \ 后跟 M。我自己使用它来理解代码的复杂部分或在对日志文件进行故障排除时。
在您的~/.vimrc
中使用以下命令,您最多可以使用 77 种不同的颜色:
let g:mwDefaultHighlightingPalette = 'maximum'
【讨论】:
【参考方案4】:作为概念证明,我尝试过
let vars = ['init', 'editable', 'init_ui']
let colors = ['ff0000', '00ff00', '0000ff']
for var in vars
execute 'syn keyword var_' . var var
execute 'hi default var_' . var 'guifg=#' . remove(colors, 0)
endfor
它按预期工作。这为列表中的每个变量创建了语法项:var_init
、var_editable
和 var_init_ui
。然后它为每个语法项分配一个突出显示颜色。
为了超越概念证明,您必须获取变量名称列表。您可以通过解析标记文件(例如,由 ctags 生成)或在 vim 中编写解析器(非常便携)来完成此操作。您可以对列表进行排序并删除重复项,但我认为如果您跳过此步骤,使用:hi default
将节省您的时间。想出比我的例子更好的颜色生成方法。
当输入缓冲区或用户显式调用函数时,您可以使用自动命令完成所有这些操作。然后,您可以开始考虑在定义新变量时自动更新。
【讨论】:
以上是关于Vim 变量语法高亮的主要内容,如果未能解决你的问题,请参考以下文章