我想为cscope替换一个:tnext命令,但它不能满足我的期望。
1)下图显示了按预期工作的代码。我可以达到第二个符号实例。
function MyCounter()
if !exists("s:counter")
let s:counter = 1
echo "script executed for the first time"
else
let s:counter = s:counter + 1
echo "script executed " . s:counter . " times now"
endif
endfunction
nmap <space>w :ls<CR>
nmap <space>i :call MyCounter()
nmap <space>n :cs find s <C-R>=expand("<cword>")<CR><CR>2<CR>
2)下面的代码无效
function MyCounter()
if !exists("s:counter")
let s:counter = 1
echo "script executed for the first time"
else
let s:counter = s:counter + 1
echo "script executed " . s:counter . " times now"
endif
endfunction
nmap <space>w :ls<CR>
nmap <space>i :call MyCounter()
nmap <space>n :cs find s <C-R>=expand("<cword>")<CR><CR><C-R>=str2nr(s:counter)<CR>
1和2代码段之间的区别是= str2nr(s:counter) 即,在用户按下n时动态计算符号的n实例
在按空格键+ n之前我总是按空格+ i
请建议我为什么第二个代码段不起作用。
答案 0 :(得分:0)
你可以尝试
nmap <space>n :exec "cs find s" expand("<cword>") "\| norm" str2nr(s:counter)
您似乎在正常模式下使用<C-R>=str2nr...
,这将无效。
免责声明:我无法测试上述方法是否可行。
修改强>
您可能想要使用cscopetag
设置:
*cscopetag* *cst*
If 'cscopetag' set, the commands ":tag" and CTRL-] as well as "vim -t" will
always use |:cstag| instead of the default :tag behavior. Effectively, by
setting 'cst', you will always search your cscope databases as well as your
tag files. The default is off. Examples: >
:set cst
:set nocst
这应该为您提供一组丰富的使用标签的命令,这些命令可以为您提供所需的方法(:tjump
,:tnext
等)
答案 1 :(得分:0)
问题是由尝试排队处理字符引起的
通过表达式的评估获得。有必要做
表达式是表达式1(参见:help :map-<expr>
)或使用
feedkeys()
功能。为了便于修改映射,我愿意
建议使用第一种方法并按如下方式更改映射。
:nnoremap <expr> <space>n ':cs find s '.expand('<cword>')."\r".s:counter."\r\r"