我是 VIM 的重度用户,但我错过了一件事…
在
comment
中的(大)当前打开文件的不同部分上设置修复跳转标记
我期望的是
// vim: marker(x)
'x
使用'x
跳至功能p_structDEF_MqC
的示例(使用tcl代码)
proc p_func_arg_name_DEF_MqC {key value} {
set cmd "N"
regexp {^(\w)#(.*)} $value dummy cmd value
set ::ARG_DEFAULT(k,$key) $cmd
set ::ARG_DEFAULT(v,$key) $value
}
proc p_arg_name_DEF_MqC {key value} {
func_arg_name_DEF_${::LANG}_MqC $key $value
}
## vim: marker(x)
proc p_structDEF_MqC {name} {
global xCLASS xPREFIX
set prefix [string range $name 0 end-1]
if {$prefix ne "Mq"} {
lappend xPREFIX "$prefix"
}
lappend xCLASS "${prefix}C"
}
proc p_enumDEF_MqC {name argv} {
}
proc p_typeDEF_MqC {VAR VALUE} {
}
proc p_fupuDEF_MqC {name ret argv} {
}
答案 0 :(得分:2)
您可以创建一个自动命令来扫描文件中的那些标记,
并使用setpos()
创建它们。您可以像
您想要在脚本中进行分析,即分析下一行
并确定标记应在的位置。这是一个简单的
单个命令中的实现,该命令在
下一行的第一个字符:
au BufRead * g/vim: marker([a-z])/call setpos(
\ "'".matchstr(getline('.'), '(\zs\w'),
\ [0, getpos('.')[1]+1, 1, 0] )
此答案主要基于:autocmd
和:g
。你应该
检查(:h :au
和:h :g
的帮助文件。一个
当某个事件发生时,autocommand运行指定的命令
匹配特定模式的文件会发生这种情况。因此,更多帮助
供您阅读的主题:
autocmd-events
autocmd-patterns
您可以使用该模式将其限制为某些文件。
然后,我们有:g
命令来搜索匹配的行
模式并执行命令。搜索是您修改的地方
您在寻找哪些标志。根据您的评论,假设
例如,您要使:
之后的空格为可选。然后
将您的正则表达式更新为:
vim: *marker([a-z])
根据需要进行修改。
该命令位于setpos()
的中央(再次搜索帮助
为此...无论如何,我的意思是在帮助中)。它需要
两个参数,一个是设置的,另一个是设置的
至。我们想设置一个标记,所以我们需要给它一个表达式
例如"'a"
来设置标记a
。找出哪个字母是
应该应用的标记,我们使用:
matchstr(getline('.', '(\zs\w')
在这里我们搜索第一个括号之后的第一个字母
(带有(\zs\w
)在当前行的文本中,通过
getline()
。搜索所有这些功能的帮助。这是
如果用引号连接起来,则用"'" . {expr}
构成"'x"
这封信是x
。
然后输入第二个参数,如果必须是类似于以下内容的数组
getpos()
返回。再次搜索帮助。但是我们是
对其进行修改,以在下一个开始处设置标记
线。因此,我们仅使用getpos()
返回的订单项,
这是第二项,并添加1。
[{buffer}, {line}, {col}, {virtual-offset}]
[0, getpos('.')[1]+1, 1, 0]
答案 1 :(得分:0)
基于先前答案的工作解决方案:
au BufRead *.c silent! g/vim: \*Marker(\[a-z])/call setpos(
\ "'".matchstr(getline('.'), '(\zs\w'),
\ [0, getpos('.')[1]+1, 1, 0] )
→感谢@sidyll的帮助。