我想编写一个编程语言的语法着色脚本我正在编写编译器,但为了最大限度地减少所需的工作(因为我几乎不知道vimscript)我想找到一个产生颜色的着色脚本足以让我能够只编辑该脚本。
让Vim向我展示特定代码文件然后应用它知道的每个不同语法着色脚本的最佳方法是什么,以便我可以确定哪个最接近?到目前为止我一直在使用
:set syntax=<the next syntax script>
但是有什么比这更容易或更少重复了吗?
答案 0 :(得分:1)
您可以通过应用以下步骤循环浏览所有语法脚本:
1:查找所有已安装的语法脚本并将其存储在变量
中:redir @a
:echo glob($VIMRUNTIME . '/syntax/*.vim')
" Hit G
" Hit Enter
:redir END
2:在vim中打开一个新缓冲区,并通过键入命令模式从寄存器'a'粘贴脚本:
"ap
3:这将输出所有语法脚本(摘自我安装的1205的第一行)
/usr/local/Cellar/macvim/7.4-72/MacVim.app/Contents/Resources/vim/runtime/syntax/2html.vim
/usr/local/Cellar/macvim/7.4-72/MacVim.app/Contents/Resources/vim/runtime/syntax/a2ps.vim
/usr/local/Cellar/macvim/7.4-72/MacVim.app/Contents/Resources/vim/runtime/syntax/a65.vim
/usr/local/Cellar/macvim/7.4-72/MacVim.app/Contents/Resources/vim/runtime/syntax/aap.vim
/usr/local/Cellar/macvim/7.4-72/MacVim.app/Contents/Resources/vim/runtime/syntax/abap.vim
4:使用Visual Block Mode剪切它们,以便结果如下所示(再次省略~1200行):
2html.vim
a2ps.vim
a65.vim
aap.vim
abap.vim
abaqus.vim
abc.vim
abel.vim
5:现在通过应用以下正则表达式删除“.vim”结尾:
%s/.vim//g
现在他们看起来像这样:
2html
a2ps
a65
aap
abap
abaqus
abc
abel
6:将结果保存到缓冲区中。从那里你可以使用这个脚本循环遍历所有这些:
v$h"*y:set syntax=^R*^Mdd
或者,为了为所有打开的窗口着色,请使用:windo set syntax=...
代替:set syntax=...
。
说明:
v $ h
删除上次检查的语法名称
DD
如果您save this script in a macro,可以使用@@
享受(;
答案 1 :(得分:-1)
我建议使用colorschemes(使用“:h colo”了解更多关于它们的信息)。您可以使用以下命令列出所有已安装的配色方案:
:colorscheme <ctrl+d>
您可以复制到缓冲区并循环使用它们的那些。如果您想轻松实现,可以使用一个脚本来提供该功能:CycleColor,一个循环(几乎)所有可用colorschemes的脚本:https://github.com/vim-scripts/CycleColor