在Vim中获取语法突出显示的关键字

在Vim中获取语法突出显示的关键字,vim,Vim,我正试图写一个简单的vim脚本来学习。我想做的是在下面这样的文本中将所有syntaxt关键字大写 select column_name(s) FROM table1 inner join table2 on table1.column_name=table2.column_name; 到 当然,我可以通过正则表达式搜索和替换来完成,但我希望它是基于vim中当前使用的syntaxt文件自动完成的。我不想再次硬编码所有关键字 我还没有尝试过vimscript,但以下是我从几篇文章中总结的内容: f

我正试图写一个简单的vim脚本来学习。我想做的是在下面这样的文本中将所有syntaxt关键字大写

select column_name(s)
FROM table1
inner join table2
on table1.column_name=table2.column_name;


当然,我可以通过正则表达式搜索和替换来完成,但我希望它是基于vim中当前使用的syntaxt文件自动完成的。我不想再次硬编码所有关键字

我还没有尝试过vimscript,但以下是我从几篇文章中总结的内容:

function! CapKeywords()
    redir => lst
    syntax list sqlKeyword sqlStatement
    redir END
    for i in split(lst)
        :exe '%s/\<' . i . '\>/' . toupper(i) . '/gce'
    endfor
endfunction

nnoremap <leader>h :call CapKeywords()<CR>
函数!CapKeywords()
redir=>lst
语法列表sqlKeyword sqlStatement
重拨端
对于拆分中的i(lst)
:exe“%s/\/”。图珀(我)。'/gce'
外循环
端功能
nnoremap h:调用CapKeywords()

使用示例中的
选择
打开
。我不知道
internal
join
在哪里,所以我把它留给你。希望能有所帮助。

我试过你的脚本,效果不错。我不喜欢的是,它将syntax组显示为输出,并要求我输入每个关键字是否替换它。我正在尝试解决这些问题。要禁用确认每个替换,需要从“/gce”中删除标志
c
。作为语法组-我不知道如何修复它。要禁用输出,我已将命令更改为“静默语法列表sqlStatement”
function! CapKeywords()
    redir => lst
    syntax list sqlKeyword sqlStatement
    redir END
    for i in split(lst)
        :exe '%s/\<' . i . '\>/' . toupper(i) . '/gce'
    endfor
endfunction

nnoremap <leader>h :call CapKeywords()<CR>