我正在尝试浏览C ++源文件中的所有函数定义,如果所有函数都按需要正确缩进,]]
应该没问题,但对于某些源文件可能不适用,例如命名空间内的函数有额外的缩进。我认为,搜索与当前级别相同级别的下一个功能块起始符号(例如第二个顶级开放式括号)将是一个很好的解决方法。是否有这样的命令或扩展呢?
答案 0 :(得分:2)
作为通用文本编辑器的Vim对各种编程语言一无所知。根据所需的准确性,正则表达式可能已经捕获了最常见的函数定义。然后,您可以使用类似我的CountJump plugin之类的东西来制作模式中的运动映射。
另一个好的来源是语法高亮,特别是折叠部分。如果您配置:setlocal foldmethod=syntax
,则可以使用内置折叠导航命令(例如zj
/ zk
)进行导航。
为了获得最佳准确性,您需要一个外部工具(如ctags
)来解析C源代码并确定函数名称。 TagBar (已在评论中提及)和 TagList 等插件可帮助您列出并导航。
答案 1 :(得分:1)
像TagList或Tagbar这样的插件(与ctags结合使用)可能有所帮助,但您可以执行以下操作:
:vim /^\s*\w\+\s\+\w\+\s*(.*)/ % | cw
使用当前文件中的每个函数定义填充quickfix窗口。
或者,默认的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>
答案 2 :(得分:0)
如果您的函数定义遵循以下模式:
<return_type>
function_name (<args>..
OR
<return_type>
function_name(<args>..
在.vimrc
中使用它:
map o :vim /^\w\\+\\_s(\\\\|^\w\\+(/ %\\|cw \<CR>
对于其他函数定义模式,请相应更新,请参考: