我正在尝试导航 C++ 源文件中的所有函数定义,]]
如果所有函数都按要求正确缩进,应该没问题,但对于某些源文件可能不是这样,例如命名空间内的函数有额外的缩进。我认为,搜索与当前功能块相同级别的下一个功能块开始符号(例如第二个顶级左括号)将是一个很好的解决方法。是否有这样的命令或扩展可以做到这一点?
问问题
667 次
3 回答
3
Vim 作为通用文本编辑器,对各种编程语言没有深入的了解。根据所需的准确性,正则表达式可能已经捕获了最常见的函数定义。然后,您可以使用我的CountJump 插件之类的东西从模式中制作运动映射。
另一个很好的来源是语法突出显示,特别是折叠部分。如果配置:setlocal foldmethod=syntax
,则可以使用内置的折叠导航命令(例如zj
/ zk
)进行导航。
为了获得最佳准确性,您需要一个外部工具,例如ctags
解析 C 源代码并确定函数名称。TagBar(已经在评论中提到)和TagList等插件可以帮助您列出和导航。
于 2013-11-14T15:27:37.943 回答
1
TagList或Tagbar 之类的插件(与 ctags 结合使用)可能会有所帮助,但您可以执行以下操作:
:vim /^\s*\w\+\s\+\w\+\s*(.*)/ % | cw
用当前文件中的每个函数定义填充快速修复窗口。
或者,默认的 python ftplugin 带有一个很好的通用函数和很好的映射,我们可以重新利用它们。将以下行放入~/.vim/after/ftplugin/cpp.vim
:
function! Custom_jump(motion) range
let cnt = v:count1
let save = @/
mark '
while cnt > 0
silent! execute a:motion
let cnt = cnt - 1
endwhile
call histdel('/', -1)
let @/ = save
endfunction
nnoremap <silent> <buffer> ]] :call Custom_jump('/^\s*\w\+\s\+\w\+\s*(.*)')<cr>
nnoremap <silent> <buffer> [[ :call Custom_jump('?^\s*\w\+\s\+\w\+\s*(.*)')<cr>
于 2013-11-14T16:30:41.037 回答
0
如果您的函数定义遵循以下模式:
<return_type>
function_name (<args>..
或者
<return_type>
function_name(<args>..
使用这个.vimrc
:
map o :vim /^\w\\+\\_s(\\\\|^\w\\+(/ %\\|cw \<CR>
对于其他函数定义模式,请相应更新,参考:
于 2020-07-19T08:06:09.890 回答